| # 実装時の設定 概要 ここで説明する実装は、次の前提にもとづいています。 交換スキームでは、ASCII ファイル名がテーブルコードと等しくなり、ASCII フィールド名が列名と等しくなります。 XML ファイルの作成タイプの処理が定義されます。この処理には、変換スクリプトが定義されています。その変換スクリプトでは、次の内容がプログラミングされています。 イベントタイプが変更されます。標準イベントは、特定イベントに置き換えられます。 クラスが変更されます。テーブルコードは、論理名に置き換えられます。 出力には必要ないが、条件のみチェックする必要がある属性が削除されます。 出力に必要な属性の名前が変更されます。 これらの前提は、必須ではない点に注意してください。たとえば、ユーザはもっとわかりやすい他の ASCII ファイル名およびフィールド名を使用して、トリガーでの変換を減らすことができます。ただし、その場合は、交換モジュールの制限を考慮に入れる必要があります。つまり、ASCII ファイル名およびフィールド名の長さが 8 文字を超えることはできず、ASCII ファイル名は常に小文字になります。 さらに、変換スクリプトについては、次の 2 つのアプローチのいずれかに従うことができます。 標準イベント構造に従います。この場合、前述のように、受け取ったイベントが更新されます。 独自の構造を使用します。この場合、属性値は受け取ったイベントから取得され、新しい XML が作成されます。このとき、XML を作成し、XML ファイルを受け取るワークフローエンジンのニーズに完全に合わせることができます。 監査の設定 監査は、関係するテーブル whwmd215 および tdsls400 に対して有効にできます。監査管理の詳細は、Web Help と Infor Enterprise Server 8.6 Technical Manual (U8172 US) を参照してください。 重要 デフォルトでは、更新処理の場合に未変更の列は監査されません。この結果、たとえば whwmd215 で stoc (手持在庫) が変更された場合、主キーフィールド (cwar および item) と変更済フィールド (stoc) の値は含められますが、未変更フィールドは含められません。使用できない属性はチェックできないため、これは条件によるフィルタに影響を与える点に注意してください。 この制限を回避するには、テーブル別監査フィールド (ttaud3125m000) セッションを使用して、未変更フィールドを監査する必要があると指定します (監査タイプを ｢常時｣ に設定)。詳細は、第 2 章 ｢トリガーを設定するには｣ の ｢未変更テーブルフィールド｣ を参照してください。 交換スキームの設定 概要 関連する変更を取り出すため、1 つの変換スキームが作成されます。この結果、これらの各状況のジョブは同じ頻度で実行され、オーバーヘッドが減少します。異なる頻度でテーブルの変更をチェックする必要がある場合、複数のバッチまたは交換スキームを作成できます。 バッチには、次のテーブルフィールドを対象とする 2 つのバッチ行が含まれています。
テーブル | tdsls400 | whwmd215
フィールド | orno ofbp sotp corg | item stoc allo
交換スキームのプロパティ
交換スキーム | workflow
説明 | トリガー用のワークフロースキーム
交換オブジェクトのパス | /home/exchange/workflow
条件エラーのパス | /home/exchange/workflow
順序ファイルの パス | /home/exchange/workflow
定義ファイルのパス | /home/exchange/workflow
監査にもとづく | はい
指標にもとづく | はい
デフォルト日付フォーマット | YYYYDDMM
制御文字 y/n | いいえ
区切り文字 | |
囲み文字 |
親交換スキーム |
ファイルは作成されないため、制御文字、区切り文字、および囲み文字は関係ありません。 パッチのプロパティ
交換スキーム | workflow (トリガー用のワークフロースキーム)
バッチ | バッチ
Sequence No. | 10
説明 | ワークフローエクスポートバッチ
会社 | 996
監査を使用した交換 | はい
ASCII ファイル形式 交換スキーム: workflow (トリガー用のワークフロースキーム) ASCII ファイル: 倉庫別品目在庫 (whwmd215)
フィールド番号 | 10 | 20 | 240 | 260
フィールド名 | Cwar | item | stoc | allo
説明 | 倉庫 | item | 手持在庫 | 引当済在庫
フィールドタイプ | 英数字 | 英数字 | 数字 | 数字
開始位置 | 1 | 4 | 246 | 286
長さ | 3 | 16 | 20 | 20
日付フォーマット |  |  |  |
浮動小数点 | いいえ | いいえ | いいえ | いいえ
小数点以下の桁数 | 0 | 0 | 0 | 0
交換スキーム: workflow (トリガー用のワークフロースキーム) ASCII ファイル: 販売オーダー 9 (tdsls400)
フィールド番号 | 10 | 20 | 50 | 70
フィールド名 | orno | ofbp | corg | sotp
説明 | 販売オーダ | 顧客 | 起源 | オーダタイプ
フィールドタイプ | 数字 | 英数字 | 数字 | 英数字
開始位置 | 1 | 7 | 22 | 28
長さ | 6 | 6 | 3 | 3
日付フォーマット |  |  |  |
浮動小数点 | いいえ | いいえ | いいえ | いいえ
小数点以下の桁数 | 0 | 0 | 0 | 0
ASCII ファイルは作成されないため、フィールドタイプ、開始位置、長さなどは関係ありません。 テーブル関係とフィールド関係 (エクスポート) 交換スキーム: workflow (トリガー用のワークフロースキーム) バッチ: BATCH (ワークフローエクスポートバッチ)
バッチ行 | 10 | 20
ASCII ファイル | whwmd215 | tdsls400
説明 | 倉庫別品目在庫 | 販売オーダ
テーブル | whwmd215 | tdsls400
ASCII ファイル名 | whwmd215.S | tdsls400.S
Active | はい | はい
bdbpre | いいえ | いいえ
範囲 | いいえ | いいえ
インデックス | 1 | 1
条件 |  |
交換スキーム: workflow (トリガー用のワークフロースキーム) バッチ: BATCH (ワークフローエクスポートバッチ) バッチ行: 10 (whwmd215)
シリアル番号 | 10 | 20 | 240 | 260
フィールド名 | Cwar | item | stoc | allo
テーブルフィールド | Cwar | item | stoc | allo
配列要素 | 0 | 0 | 0 | 0
条件 |  |  |  |
固定値 |  |  |  |
交換スキーム: workflow (トリガー用のワークフロースキーム) バッチ: BATCH (ワークフローエクスポートバッチ) バッチ行: 20 (tdsls400)
シリアル番号 | 10 | 20 | 50 | 70
フィールド名 | orno | ofbp | corg | sotp
テーブルフィールド | orno | ofbp | corg | sotp
配列要素 | 0 | 0 | 0 | 0
条件 |  |  |  |
固定値 |  |  |  |
エクスポートトリガー 交換スキーム: workflow (トリガー用のワークフロースキーム) バッチ: BATCH (ワークフローエクスポートバッチ)
バッチ行 | 10 | 20
各行のトリガー | wf_inventory | wf_salesorder
ASCII ファイルの作成 | いいえ | いいえ
バッチ行の終わりのトリガー |  |
改善 必要に応じて、改善を実装するため、トリガーから交換スキームに条件を移動できます。たとえば、バッチ行 20 (tdsls400) で、corg (発生元) 列の範囲指定を作成し、EDI により作成された販売オーダのみを含めることができます。これにより、交換モジュールが作成する XML イベントの数が減少します。ただし、交換エクスポートが処理タイプをフィルタできない点に注意してください。この例では、挿入を含む場合のみで、更新および削除をスキップします。 アプリケーションのカスタマイズ 実装を実行するには、販売オーダ関連のプログラムスクリプトで使用される取引先の与信限度額をチェックする関数をカスタマイズする必要があります。カスタマイズにより、与信限度額の 80 パーセントを超えたかどうかを確認するチェックが追加されます。その場合、関数によりイベントが作成され、トリガーが呼び出されます。 注意 ｢現在の貸し方｣ の以前の値が 80 パーセントのしきい値を超えていなかったことをチェックする必要があります。チェックしないと、同じ顧客に対してプロセスが複数回トリガーされます。 呼び出すトリガーが他のイベントに使用されていない場合、条件を定義する必要はありません。実行する必要がある処理は、XML イベントが含まれるファイルを作成することです。 実装 注意 この文書の情報は、教育上の目的で例を示すためのものです。実際の Infor ERP LN 6.1 環境で機能する完全なテスト済ソリューションについて説明するためのものではありません。 与信限度額をチェックする関数が含まれるライブラリが存在するとします。さらに、その関数で次の変数を使用できるとします。 invoice.to.bp: 請求書を送信する必要がある取引先 (顧客) order.number: 処理される販売オーダ credit.limit: 取引先の与信限度額 old.credit.in.use: 販売オーダの処理前にすでに使用済の与信額 new.credit.in.use: old.credit.in.use に新しい販売オーダのオーダ金額を加えた額 ライブラリ関数のオリジナルバージョンには、次のコードが含まれています。
    if new.credit.in.use > credit.limit then
    return(true) | credit limit exceeded
    else
    return(false) | credit limit not exceeded
    endif
ライブラリのカスタマイズバージョンでは、通常の与信限度額チェックに合格した場合、80 パーセントチェックが実行されます。
    if new.credit.in.use > credit.limit then
    return(true) | credit limit exceeded
    else
    if new.credit.in.use > 0.8 * credit.limit and
    old.credit.in.use <= 0.8 * credit.limit
    then
    generate.credit.trigger(invoice.to.bp,
    order.number,
    credit.limit,
    old.credit.in.use,
    new.credit.in.use)
    endif
    return(false) | credit limit not exceeded
    endif
DLL の末尾に、次の関数が追加されます。
    function generate.credit.trigger(
    domain tccom.bpid i.invoice.to.bp,
    domain tcorno i.order.number,
    domain tcamnt i.credit.limit,
    domain tcamnt i.old.credit.in.use,
    domain tcamnt i.new.credit.in.use)
    {
    #pragma used dll odatrgapi
    #pragma used dll odatrgevent

    #define MY_TRIGGER "credit"
    #define ERR_IF_NONZERO(value)
    ^ if value <> 0 then
    ^ | here some error logging can be implemented,
    ^ | for example
    ^ return
    ^ endif

    long event |tree containing trigger event
    long retl |return value to be checked
    string error.mess(256) |error message from trigger
    string error.details(256) |error details from trigger

    |add event to trigger
    retl = datrgevent.simpleevent.create("Customer",
    "creditLimitIsNear", event)
    ERR_IF_NONZERO(retl)
    retl = datrgevent.simpleevent.set.value(event,
    "customerID", i.invoice.to.bp)
    ERR_IF_NONZERO(retl)
    retl = datrgevent.simpleevent.set.value(event,
    "orderNumber", str$(i.order.number))
    ERR_IF_NONZERO(retl)
    retl = datrgevent.simpleevent.set.value(event,
    "creditLimit", str$(i.credit.limit))
    ERR_IF_NONZERO(retl)
    retl = datrgevent.simpleevent.set.value(event,
    "creditInIse", str$(i.new.credit.in.use))
    ERR_IF_NONZERO(retl)
    retl = datrgevent.simpleevent.set.old.value(event,
    "creditInUse", str$(i.old.credit.in.use))
    ERR_IF_NONZERO(retl)

    |invoke trigger
    retl = datrgapi.trigger.do(MY_TRIGGER, event,
    error.mess, error.details)
    ERR_IF_NONZERO(retl)
    }
トリガーの設定 トリガー 次の 3 つのトリガーが定義されているとします。 wf_inventory (whwmd215 用) wf_salesorder (for tdsls400 用) wf_creditlimit (アプリケーショントリガー用) トリガー条件 トリガー条件では、クラスやテーブルコードをチェックする必要はありません。1 つのトリガーが複数のクラスに使用されていた場合、クラス条件を含めて、各クラスに同じ処理が実行されるようにする必要があります。 次の条件が定義されます。 トリガー wf_salesorder:
順序番号 | 10 | 20
And / Or |  | And
条件タイプ | イベントタイプ | 属性
属性 |  | corg
演算子 | = | =
値 | Create | 3
成立 |  | いいえ
トリガー wf_inventory:
順序番号 | 10
And / Or |
条件タイプ | 属性
属性 | stoc
演算子 | <
値 | 20
成立 | はい
条件はアプリケーションでチェックされるため、トリガー wf_creditlimit には条件が指定されません。 トリガー処理 各トリガーには、XML ファイルの作成処理が指定されます。ローカルパス、ファイル転送プログラム、および対象パスが定義されます。 さらに、必要な場合は、汎用イベントをワークフローエンジンが理解できるイベントに変換する変換スクリプトが定義されます。 最低限必要なのは、多くの場合イベントタイプの名前を特定イベントに変更し、発生したイベントが検出されるようにワークフローを有効にすることだけです。クラスおよび標準イベントタイプでは不十分な点に注意してください。イベントタイプは、常に ｢Create｣、｢Change｣、または ｢Delete｣ になります。同じテーブル/クラスでの 2 つの変更の結果、2 つの異なるワークフロープロセスが生成されることがあるため、クラスは一意ではありません。イベントの名前を変更しない場合、ワークフローエンジンはトリガーに定義されたとおりに条件を複製する必要があります。 さらに、属性の名前をワークフローエンジンが認識する UDA に変更する必要があります。以前の値を移動して、一意の名前を付けることができます。詳細は、この章で後述する ｢実行時に使用される XML｣ にある例を参照してください。 最終的には、標準イベント構造を使用するのではなく、変換スクリプトが新しいイベント構造を構築できます。 |