メニュー

変数が存在するかどうかを判定したい

【質問】
変数、データセットの要素などが既にその名前で存在するかどうか(=定義されているかどうか)を判定したい。
背景として、ダイアログで「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%">&lt;AutoMateDialogDesigner&gt;
&lt;Property name="ErrorCaption"&gt;Form Designer&lt;/Property&gt;
&lt;Property name="AutoAlignAid"&gt;SnapToGrid&lt;/Property&gt;
&lt;Property name="DesignerContextMenu"&gt;False&lt;/Property&gt;
&lt;Property name="AutoScroll"&gt;False&lt;/Property&gt;
&lt;Property name="AutoScrollMargin"&gt;0, 0&lt;/Property&gt;
&lt;Property name="AutoScrollMinSize"&gt;0, 0&lt;/Property&gt;
&lt;Property name="AccessibleDescription" /&gt;
&lt;Property name="AccessibleName" /&gt;
&lt;Property name="AccessibleRole"&gt;Default&lt;/Property&gt;
&lt;Property name="AllowDrop"&gt;False&lt;/Property&gt;
&lt;Property name="AutoScrollOffset"&gt;0, 0&lt;/Property&gt;
&lt;Property name="BackColor"&gt;Window&lt;/Property&gt;
&lt;Property name="BackgroundImageLayout"&gt;Tile&lt;/Property&gt;
&lt;Property name="CausesValidation"&gt;True&lt;/Property&gt;
&lt;Property name="ContextMenu" /&gt;
&lt;Property name="ContextMenuStrip" /&gt;
&lt;Property name="Cursor"&gt;Default&lt;/Property&gt;
&lt;Property name="DataBindings"&gt;
&lt;Property name="DefaultDataSourceUpdateMode"&gt;OnValidation&lt;/Property&gt;
&lt;/Property&gt;
&lt;Property name="Font"&gt;Segoe UI, 9pt&lt;/Property&gt;
&lt;Property name="ForeColor"&gt;ControlText&lt;/Property&gt;
&lt;Property name="Location"&gt;0, 0&lt;/Property&gt;
&lt;Property name="Margin"&gt;3, 3, 3, 3&lt;/Property&gt;
&lt;Property name="MaximumSize"&gt;0, 0&lt;/Property&gt;
&lt;Property name="MinimumSize"&gt;0, 0&lt;/Property&gt;
&lt;Property name="RightToLeft"&gt;No&lt;/Property&gt;
&lt;Property name="Size"&gt;484, 327&lt;/Property&gt;
&lt;Property name="Tag" /&gt;
&lt;Property name="Text"&gt;
&lt;/Property&gt;
&lt;Property name="UseWaitCursor"&gt;False&lt;/Property&gt;
&lt;Property name="Padding"&gt;0, 0, 0, 0&lt;/Property&gt;
&lt;Property name="ImeMode"&gt;NoControl&lt;/Property&gt;
&lt;CustomProperties&gt;
&lt;Property name="HostFormLocation"&gt;0, 0&lt;/Property&gt;
&lt;Property name="HostFormSize"&gt;500, 400&lt;/Property&gt;
&lt;/CustomProperties&gt;
&lt;/AutoMateDialogDesigner&gt;</AMSHOWDIALOG>
<!--変数があるかどうかの判定:IsDefinedを使用する。あくまでも変数「名」で判断しに行くので、中身は文字列として認識されなくてはならない-->
<!--キャンセルを押すと構造体は作成されない-->
<AMIF EXPRESSION="%IsDefined(&quot;varFormMetadata&quot; &amp; var_count &amp; &quot;.Text&quot;)% = False" />
<AMSHOWDIALOG MESSAGE="その変数は存在しません" />
<AMIF ACTIVITY="end" />

Knowledge記事検索

Knowledge

News・Information