AsprovaのプラグインDLLと拡張インターフェイスDLLの違い

本記事のポイント

プラグインDLLは機能(関数)の追加、拡張インターフェイスDLLは既存ロジックに対する変更のために開発します。

AsDefaultクラスのAutoRegistrationメソッドの中にプラグインキー(KeyHookGeneric)を定義するか、インターフェイス(IEIIFilterCalcReplenishOrderLotSizing)を定義するかの違いです。

プラグインキーとインターフェイスの違い

プラグインのAsDefaultクラスのAutoRegistrationメソッドの中のエントリ関数呼び出し部分にプラグインキー(KeyHookGeneric)を定義しておけば、Asprovaで該当するイベントが発生(追加したコマンドが起動)したときにエントリ関数が呼び出され実行される。

同じようにEII(Extension Interface Implementation)のAsDefaultクラスのAutoRegistrationメソッドの中のエントリ関数呼び出し部分にインターフェイス(IEIIFilterCalcReplenishOrderLotSizing)を定義しておけば、Asprovaで該当するイベントが発生(自動補充発生)したときにエントリ関数が呼び出され実行される。

ただしプラグインキーよりもインターフェイスは呼び出しにかかるオーバーヘッドが小さくなるようカスタマイズされており、オーダ展開、自動補充、ロットまとめなどのような頻繁に呼び出しがかかるロジックの変更に適しています。

プラグインDLLは機能(関数)の追加、拡張インターフェイスDLLは既存ロジックに対する変更のために開発します。

拡張インターフェイスを使うとプラグインキーを使うよりも呼び出しにかかるオーバヘッドが小さいので、リスケジュールの中で頻繁に発生するイベントから呼び出したいエントリ関数を追加する場合に使用します。

補充オーダのロットサイズを変更する拡張インターフェイス(DLL)

補充オーダのロットサイズは「製造ロットサイズMAX」「製造ロットサイズMIN」「製造ロットサイズUNIT」によって決まりますが、FilterCalcReplenishOrderLotSizingは「オーダ展開」コマンドの中での紐付け時に呼び出され、以下の3つのオブジェクトを取得して補充オーダのロットサイズを変更(上書き)し、結果をArgListに渡します。

  1. 補充品目の配列 ArgAsObject(kArgItem)
  2. 親オーダの初工程の作業入力指図のリスト ArgAsObject(kArgObjectList)
  3. ロットサイズのリスト ArgAsSafeArray(kSafeArrayArgDouble)

ロットサイズ

  1. ロットサイズは自動補充「はい」
  2. ロットサイズは補充オーダ生成時に決定される
  3. 作業入力指図のリスト(2次元配列)と作業出力指図のリスト(品目)

オーダ展開のプロセス

  1. 親オーダの作業(作業入力指図と作業出力指図)を生成
    初期状態での親オーダとは受注オーダ、または登録オーダの製造オーダ
    製造BOMより作業入力指図、作業出力指図を生成
  2. 自動補充
    親オーダの作業の作業入力指図が紐付け対象かどうか確認
    親オーダが在庫(絶対量)よりも過去の日時の場合、作業入力指図は紐付け対象外不足分の作業入力指図の製造オーダを自動生成する。
    親オーダの作業入力指図(入力品目)の不足分の製造オーダを子オーダとして生成
    子オーダの作業入力指図の不足分の製造オーダを孫オーダとして生成
  3. オーダ間の紐付け1回目
    自動補充設定のある受注オーダ、製造オーダ、購買オーダ、在庫オーダの紐付け
    自動補充設定のない製造オーダ同士(製造BOMで繋がりのある品目同士)

製造オーダ完成7回分で前工程をまとめる例

  1. 1回目の自動補充でitemにB1が、instにBのリストが入る
    作業M4の入力指図B1の不足数量(在庫がないのでRemainingQtyはBそのもの)を7回足しこむ
  2. 2回目の自動補充でitemにCが、instにAのリストが入る
    作業M2の入力指図Cの不足数量を7回足しこむ。
  3. inst.Operation.OperationMainRes.Code=’M4’が条件なので(2)は実行されない。