ユーザー定義関数を作成する場合、 (必要な場合) どの入力パラメーターが取られるか、および、出力が返されるかを指定する必要があります。入力パラメーターが必要とされない場合がありますが、出力パラメーターはすべての場合に必要とされます (すなわち、関数は常に何かを返す必要があります)。例えば、 下の関数には入力は存在しませんが、呼出元にテキスト 「hello」 を返す1つの出力が存在します:
関数パラメーターは、単純型 (文字列、または整数などの) または複合型の構成です。 例えば、 下に表示されるユーザー定義関数 "FindArticle" では、2つの入力と1つの出力パラメーターが存在します。
•POArtNr は単純型 "string" の入力パラメーターです。
•Amount は単純型 "integer" の入力パラメーターです。
•CompletePO は複合型 XML の出力パラメーターです。
LookupArticle.mfd
この上のマッピングはデモとして次のパスで見つけることができます: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\LookupArticle.mfd。
パラメーターの追加
入力または出力パラメーターを追加する方法:
1.ユーザー定義関数 マッピングを作成、または既存のものを開きます ( ユーザー定義関数の作成を参照してください。) または、 ( ユーザー定義関数の編集を参照してください)。
2.次のいずれかを実行してください:
▪メニューコマンド 「関数 | 入力の挿入」 または 「関数 | 出力の挿入」を実行します。
▪入力の挿入 または 出力の挿入
ツールバーボタンをクリックします。
3.上のダイアログボックスで、入力または出力パラメーター が(文字列、または整数などの) 単純型 ( XML 構成などの) 複合型の構成であるかを選択してください。複合型の XML 型であるパラメーターを作成するためには、「構造」の横の「選択」 をクリックし、必要とされた構成を説明する XML スキーマを参照してください。
関数の マッピングは XML スキーマを既に含む場合、構成として選択のために使用することができます。それ以外の場合、パラメーターの構成を適用する新規のスキーマを選択することができます。 MapForce のエディションによりサポートされる場合、データベース、または他の複合型の構成も同様に扱われます。
XML 構成を使用すると、 XML スキーマが許可する場合、構成のためにルート要素を選択することができます。ルート要素を指定するためには、 「Root」 の横のを「選択」し、開かれるダイアログボックスからルート要素を選択します。
選択された場合、 チェックボックス 「MFD ファイルから相対的に構成ファイルパスを保存」 はファイルを保存する際、構成ファイルの絶対パスを現在のマッピングに対して相対的なパスに変更します。 詳細に関しては、 コンポーネント上で相対パスを使用するを参照してください。
「入力は必須」 と 「入力はシーケンス」 チェックボックスは次のセクションで説明されています。
必須のパラメーター
ユーザー定義関数内でパラメーターを必須にするには、「入力は必須」 チェックボックスを選択します。パラメーターが必須の場合、入力が接続されていない場合検証エラーが発生します。
パラメーター を任意にするには、「入力は必須」 チェックボックスのチェックを解除します。 メインマッピングでは、 任意のパラメーターには若干異なる外観(入力コネクタ (小さな三角形) の点線の境界線で表示)が存在します。
パラメーターの 「default」 入力に接続することにより、デフォルトのパラメーターの値を指定する必要があります。 例:
デフォルトの値はその他の値が存在しない場合のみ適用されます。関数が呼び出される際に、任意のパラメーターが価を受け取ると、この値はデフォルトの値に対し優先されます。
シーケンスパラメーター
関数のパラメーターが単一の値 (デフォルトの振る舞い)、またはシーケンスとして扱われるように任意で指定することができます。パラメータを単一の値と異なり、シーケンスとして扱うには、「入力はシーケンス」 チェックボックスを選択します。このチェックボックスは役に立ち、ユーザー定義関数が型 「正規」に設定されている場合のみ有効化されます。 インラインと正規ユーザー定義関数を参照してください。 それ以外の場合、チェックボックスは無効化されます。
シーケンスはゼロ、またはゼロ以上の値の範囲です。 ユーザー定義関数が入力データをシーケンスとして期待する場合、そのシーケンス内で値の集計を行うには、パラメーターをシーケンスとして扱う必要がある場合があります (例えば、avg, min, max などの関数を呼び出す場合などが挙げられます )。 例えば、デモマッピングを開いてください: <マイ ドキュメント>\Altova\MapForce2020\MapForceExamples\InputIsSequence.mfd。このマッピングでは、「data」 フィルターはユーザー定義関数 「Calculate」 に接続されています。フィルターの出力は、アイテムのシーケンスで、関数の入力パラメーターはシーケンスに設定されています。
InputIsSequence.mfd
内部では、「Calculate」 関数はすべてのシーケンス値が集計されます (下で示されるように min、 max と avg を実行し入力シーケンス上の関数を集計します)。
一般的には、シーケンス、または非シーケンスに関わらず、入力データはどのように関数が呼び出されるかを決定します。
•sequence パラメーターに入力データが接続されている場合、ユーザー定義関数1度のみ呼び出され、完全なシーケンスがユーザー定義関数内にパスされます。
•non-sequence パラメーターに入力データが接続されている場合、ユーザー定義関数はシーケンス内の各単数のアイテムのためにそれぞれ呼び出されます。
空のシーケンスを非シーケンスパラメーターに接続すると、パラメーターは関数が呼び出されないままの結果を取得します。 |
これは、ソース構成が任意のアイテムを持つ場合、またはフィルターの条件が一致するアイテムを返さない場合に発生します。これを回避するには、シーケンスが空にならないことを保証するために、関数を入力する前に substitute-missing 関数を使用し、パラメーターをシーケンスに設定し、関数内の空のシーケンスのために処理を追加します。
「出力はシーケンス」 チェックボックスは、出力パラメータのために必要とされています。 関数が複数の値のシーケンスを出力コンポーネントにパスし、出力コンポーネントがシーケンスに設定されていない場合、 関数は、シーケンス内の最初のアイテムのみを返します。
パラメーターの順序
ユーザー定義関数が複数の入力または出力パラメーターを持つ場合、 この関数の呼出元に表示されるパラメーターの順序を変更することができます。例えば、下の関数には3つのパラメーター( input1、input2、および input3 )が存在します。
関数のマッピング内の(上から開始する)パラメーターの順序は、この関数の送信元が表示される順序を指定します:
以下の点に注意してください:
•入力と出力パラメーターは上から下に位置が並べ替えられます。このため、パラメーター input3 を関数の マッピングに移動すると、この関数のパラメーターは最初になります。
•2つのパラメーターが同じ垂直の位置にある場合、左側のパラメーターが優先されます。
•2つのパラメーターが同じ位置にある場合、 内部コンポーネント ID が自動的に使用されます。