式で NOT_SET を使う


NOT_SET とは何か?

NOT_SET は、式内でスカラー値に適用される値です。値が定義されていないことを示すために使用します。  Architect では、スカラー値は非コレクション値です。  例えば、次の文字列では NOT_SET 文字列が返されます。

ToString(NOT_SET)

未定義の文字列値はブランクの文字列とは異なります。以下の式をランタイムに評価すると、式は false を返します。

ToString(NOT_SET) == ""

NOT_SET 値は多くのオーバーロードおよび関数のパラメーター値としては使用できません。  [式のヘルプ] ダイアログ ボックスで、関数オーバーロード パラメーターは NOT_SET 値を使用できるかどうかを示します。 各パラメーターに、それが指定されたタイプの NOT_SET パラメーターを受け入れるかどうかを示す「NOT_SET Allowed:」エントリが含まれます。 Architect は、ランタイムに無効な NOT_SET 値を持つパラメーターを評価するとエラー ハンドラーを呼び出します。

渡された値が NOT_SET かどうかわからない場合

ランタイム エラーを避けるために、式内に NOT_SET があるかチェックします。次の例は、ランタイムに失敗する式のシナリオを示します。

Flow.MyInteger は、NOT_SET の値を持つ整数変数です。  この例では、フロー作成者は、この式を別の整数変数に代入する [データを更新] アクションを使用します。

5+Flow.MyInteger

Flow.MyInteger には入力時に値が割り当てられていないので、コールフロー ランタイムに 5 に未定義を加算するように求めます。この式には答えがないため、エラーとなります。フロー作成者が Flow.MyInteger に値(NOT_SET 以外の値)を持たせると、5+Flow.MyInteger は正常に実行されます。一方、Flow.MyInteger が NOT_SET の値を持つ場合、フロー作成者は式内でこれを明示的にチェックして、適切な処置を取る必要があります。


The next example demonstrates how to use NOT_SET in an expression:

この例では、加算の論理は NOT_SET 条件下での Flow.MyInteger のインスタンスをあたかもそれが 0 かのように取り扱います。

5+If(IsSet(Flow.MyInteger),Flow.MyInteger,0)

この式は基本的には「Flow.MyInteger に値が存在するかをチェックし、存在すれば、それを使用して、そうではなく、Flow.MyInteger に値が存在しなければ、値として 0 を使用する」というものです。この例では、フロー作成者は値が NOT_SET の場合の Architect の動作について意識的な決定を行い、実行を継続します。

IsNotSetOrEmpty

IsNotSetOrEmpty も便利なランタイム関数で、IsSet に類似しています。この関数は コレクションなど、NOT_SET または空白値を使用する場合に便利です。この関数の詳細は、「式のヘルプ」を参照してください。

NOT_SET とコレクション

コレクション全体は NOT_SET にできません。ただし、コレクションに NOT_SET アイテムを含めることはできます。