【質問】
変数、データセットの要素などが既にその名前で存在するかどうか(=定義されているかどうか)を判定したい。
背景として、ダイアログで「OK」を押したときには該当の要素を指定して値を判別できるが、
「キャンセル」で抜けた際には該当のステップで「変数が存在しない」エラーとなってしまうため
対象の変数(構造体の要素)が存在するかどうかを確かめたい。
具体的には、連番で生成される構造体「DataStore_%var_NUM%.Text」という要素の存在確認を行いたい。
【回答】
エクスプレッションビルダー→「Extended functions」配下
「IsDefined」関数を使用することにより存在確認を行う事が可能です。
(戻り値は「True」または「False」です)
ただし、注意点としてこの関数はあくまでも「変数名」で存在確認を行う関数のため
引数には文字列を指定する必要があります。
正しい使用方法:%IsDefined("DataStore_" & var_NUM & ".Text")%
正しくない使用方法:%IsDefined(DataStore_1.Text)%
(DataStore_1.Textが存在しない場合、変数/関数が存在しないエラーとなる)
以下、サンプルです。
<AMVARIABLE NAME="var_count" VALUE="0" />
<AMSHOWDIALOG ACTIVITY="custom" RESULTSTRUCTURE="varFormdata%var_count%" RESULTMETADATA="varFormMetadata%var_count%"><AutoMateDialogDesigner>
<Property name="ErrorCaption">Form Designer</Property>
<Property name="AutoAlignAid">SnapToGrid</Property>
<Property name="DesignerContextMenu">False</Property>
<Property name="AutoScroll">False</Property>
<Property name="AutoScrollMargin">0, 0</Property>
<Property name="AutoScrollMinSize">0, 0</Property>
<Property name="AccessibleDescription" />
<Property name="AccessibleName" />
<Property name="AccessibleRole">Default</Property>
<Property name="AllowDrop">False</Property>
<Property name="AutoScrollOffset">0, 0</Property>
<Property name="BackColor">Window</Property>
<Property name="BackgroundImageLayout">Tile</Property>
<Property name="CausesValidation">True</Property>
<Property name="ContextMenu" />
<Property name="ContextMenuStrip" />
<Property name="Cursor">Default</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="Font">Segoe UI, 9pt</Property>
<Property name="ForeColor">ControlText</Property>
<Property name="Location">0, 0</Property>
<Property name="Margin">3, 3, 3, 3</Property>
<Property name="MaximumSize">0, 0</Property>
<Property name="MinimumSize">0, 0</Property>
<Property name="RightToLeft">No</Property>
<Property name="Size">484, 327</Property>
<Property name="Tag" />
<Property name="Text">
</Property>
<Property name="UseWaitCursor">False</Property>
<Property name="Padding">0, 0, 0, 0</Property>
<Property name="ImeMode">NoControl</Property>
<CustomProperties>
<Property name="HostFormLocation">0, 0</Property>
<Property name="HostFormSize">500, 400</Property>
</CustomProperties>
</AutoMateDialogDesigner></AMSHOWDIALOG>
<!--変数があるかどうかの判定:IsDefinedを使用する。あくまでも変数「名」で判断しに行くので、中身は文字列として認識されなくてはならない-->
<!--キャンセルを押すと構造体は作成されない-->
<AMIF EXPRESSION="%IsDefined("varFormMetadata" & var_count & ".Text")% = False" />
<AMSHOWDIALOG MESSAGE="その変数は存在しません" />
<AMIF ACTIVITY="end" />