Technical Articles
SAP AppGyverの基本 変数の操作
皆様、SAPが発表したNC/LCプログラミングツール「SAP AppGyver」、使ってみましたでしょうか?私も使っておりまして、最近はちょっとしたものであればこのツールで作成しております。
私自身は旧来のコードをガリガリ書くプログラミングのほうが好きなのですが、時代の流れですね。このようなツールにも慣れなければなりません。
今後こちらでブログ記事として私がSAP Appgyverを使っていて少々ハマった部分、そして社内から問い合わせを受けた部分などを紹介していきたいと思います。
今回はSAP Appgyverにおける変数の代入などの部分についてです。ある意味プログラミングができる方がハマる・戸惑う箇所かもしれません。
まずは基本の動きを確認
手始めにButtonのクリックで動作するこんな感じの単純なロジックを組んでみます。

これはまずAlertダイアログでアプリケーション変数variable1の内容を表示し、その後variable1にSet app variableで1を設定し、再度Alertダイアログでvariable1の内容を表示するというロジックです。
では実行してみましょう。
1回目のダイアログでは

2回めのダイアログでは

が表示されます。これは想定内の動きですね。
リスト型変数(配列)の場合
では次にこのようにList型の変数を定義してみます。

コードで書くとこのような形の定義ですね。
ListVariable=[1,2,3]
ここで、2番目の2を4に書き換えるということを考えてみたいと思います。コードで書くと
ListVariable[1]=4
です。これをSAP Appgyverで行う場合、ロジックのSet xxx variableで行うことになるのですが、 この画面で

まず、Variable nameの欄は選択式でですのでListVariable[1]のような指定ができないことに気づくかと思います。ここでAssigned Valueをクリックして

この画面で2番めの2を4に書き換えれば良いということなのですが、これ違和感ありませんか?
ListVariable[1]=4
ではなく、
ListVariable=[1,4,3]
という方法でListVariableを設定している形です。
このようにSAP Appgyverでのリストやオブジェクト型の変数の場合は変数の一部分のみの代入は出来ず、全体を代入するという形をとらなければならないことになっています。内部的にどうなっているのか不明ですが、再定義に近い形かもしれません。
リスト型変数の実際の操作方法
なお、実際に使用する上ではリストの他の順番・番号の要素の値も変わっているという場合が多いと思いますので、このように静的な値を設定することは出来ず、下記のようにここはFormulaを指定し、SET_ITEM_AT関数を使用してListVariable[1]=4という指定と似たような感じで指定(代入)することがなるでしょう。


(余談ですが、この画面のExample Resultsって間違ってますよね?報告しとこうかと思います。)
実行して確認してみましょう。最初のダイアログでは

2回めのダイアログでは

と表示されましたのでやりたいことが出来ました。
この方法で使用しているSET_ITEM_AT関数の返り値はリスト型です。つまりListVariable[1]=4ではなく、ListVariable=[1,4,3]のように変数全体を代入(再定義?)しているということになります。
オブジェクト型の場合
なお、オブジェクト型の場合はVariable nameの欄でプロパティまで指定できるので、通常の変数と同じ方法で行うことが出来ます。(もしそのオブジェクト型内のプロパティがリスト型の場合は上記と同じ方法で対応できます。)
リスト型+オブジェクト型の場合
オブジェクト型を含んだリスト型(下記のようなパターンです)


の場合は上記リスト型と同じ方法が使えるのですが、値設定の際は下記のようにそのオブジェクト全体を定義しないといけません。

これはSET_ITEM_AT関数はあくまでリスト型の?番目の要素の指定を行う関数であり、その中のプロパティまでは指定できないためです。
より実践的にすると以下のような形になることも考えられます。

これはアプリケーション変数nで指定した順番の要素のProperty1のみ値を変更したいという例です。
n番目の要素ということであればそのnを変数として定義しておけばこのように指定することで変更したいプロパティの値のみを変えることが出来ます。
このオブジェクト型を含んだリスト型変数の操作でもう一つの方法としては、オブジェクト型内にid的な値が一意となるプロパティが存在する場合のみに使用可能な方法としてSET_ITEM関数を使うことも出来ます。

これはリスト内のオブジェクトのプロパティが指定した値のものを検索し、合致したものが返されます。これを利用しても同様のことを行うことが出来ます。
やってみましょう!
いかがでしたでしょうか?単純な部分ですが意外と癖があるんですよね。
コードを書ける人からすると書いたほうが楽と感じる部分があるかもしれませんね(笑)。
NC/LCツールSAP Appgyverを楽しんでみてください。