販促物持出プロセス 20221124
販促物の持ち出し数・在庫数を管理するワークフローです。持ち出し申請時、在庫数を確認できます。持ち出し完了時、販促物の在庫数が自動で更新されます。
作業担当者 (スイムレーンの数:3)
  • 申請者
  • 販促物管理者
  • 販促物管理者
仕事の流れ (ワークフロー図の複雑度:22)
  • 121.在庫数 補正
    • 販促物管理者は、販促物の在庫数を補正します。
  • 11.持ち出し申請
    • 申請者は、販促物・持ち出し数を指定の上、申請します。
  • 31x.[再]持ち出し申請
    • 申請者は、販促物・持ち出し数を指定の上、再申請します。
  • 22.持ち出し確認
    • 販促物管理者は、持ち出しが完了したことを確認・記録します。
  • 5x1.件名セット
    • ワークフロー基盤は、件名を格納します。
  • 22x1.在庫数マスタファイル バックアップ
    • ワークフロー基盤は、在庫マスタファイルをバックアップします。
  • 6x2.件名セット
    • ワークフロー基盤は、件名を格納します。
  • 10x2.在庫数マスタ取得(TSV)
    • ワークフロー基盤は、現在の在庫数マスタデータを取得します。
  • 8x3.件名セット
    • ワークフロー基盤は、件名を格納します。
  • 17x3.更新元レコードを除去
    • ワークフロー基盤は、在庫数マスタ(TSV)の更新対象レコードを削除します。
  • 16x4.更新レコードを追記
    • ワークフロー基盤は、在庫数マスタ(TSV)に更新対象レコードを追記します。
  • 24x5.ID列ソート
    • ワークフロー基盤は、在庫数マスタ(TSV)を ID列をキーにソートします。
  • 20x6.更新用データ生成
    • ワークフロー基盤は、在庫数マスタ(TSV)から ID 列・ラベル列を抽出します。
  • 21x7.在庫数マスタ更新
    • ワークフロー基盤は、在庫数マスタファイル(アドオン)を更新します。
受け渡しされるビジネスプロセス変数 (データ項目の数:22)
  • 持ち出し予定日時q_taking_out0*
    • 持ち出し予定日時が格納されます。
  • 申請者q_requester1
    • 持ち出し申請者が格納されます。
    • ${processInstance.initQuserId}
  • 販促物名q_promotional_items2*
    • 持ち出す販促物名が格納されます。
  • 在庫数q_stock_count3*
    • 持ち出出される前の販促物の在庫数が格納されます。
  • 持ち出し数q_taking_out_count5*
    • 持ち出す販促物の数量が格納されます。
  • 持ち出し理由q_taking_out_reason4
    • 持ち出し理由が格納されます。
  • 持ち出し後 残数q_remainding_count20*
    • 持ち出した後の在庫数量が格納されます。
  • 持ち出し完了日時q_taking_out_complete7
    • 持ち出し完了日時が格納されます。
  • ◆Script:在庫数自動セット 6
  • ◆在庫数マスタ更新フロー用 21
  • 更新対象:販促物名q_target_promotional_items10*
    • 在庫数量、更新対象の販促物名が格納されます。
  • 更新対象:在庫数q_target_stock_count11*
    • 在庫数量、更新対象の在庫数量が格納されます。
  • 更新用:在庫数q_update_stock_count12*
    • 更新後の在庫数量が格納されます。
  • 更新きっかけ:プロセスIDq_trigger_pid18
    • 在庫数マスタが更新するきっかけとなったプロセスIDが格納されます。
    • #{processInstanceId}
  • 更新前:在庫数マスタ(TSV)q_stock_master_tsv8
    • 更新前の在庫数マスタがTSV形式で格納されます。
  • 更新用:在庫数マスタ(TSV)q_update_stock_master_tsv9
    • 更新に必要な在庫数マスタがTSV形式で格納されます。
  • 更新用:在庫数マスタ IDsq_update_stock_master_ids14
    • 更新に必要な在庫数マスタ ID群が格納されます。
  • 更新用:在庫数マスタ Labelsq_update_stock_master_labels15
    • 更新に必要な在庫数マスタ ラベル群が格納されます。
  • 更新用:在庫数マスタq_update_stock_count_option16
    • 更新に必要な在庫数マスタが格納されます。
  • 在庫数マスタファイル(手動更新用)q_stock_master_file_for_manual_update13
    • 更新後の在庫数マスタファイルが格納されます。(トラブル時、手動更新用)
  • 更新前:在庫数マスタファイル(バックアップ)q_stock_master_backup_file19
    • 更新前の在庫数マスタファイルが格納されます。
  • コメント欄 q_comment 17

フィールド名, Num, 初期値

Download

This archive contains the BPMN icon, which is only available in the Professional edition.

Notes

  • インポート時に組織構造に合わせて、処理担当者設定の関連付けを行います
  • 短時間(約1分以内)の連続持ち出し完了
    • 連続処理の内、最後の在庫マスタ更新のみが有効となる場合があります。
    • 回避運用:”2.持ち出し確認”工程、処理完了間隔を1分以上開ける。(自動処理で実現したい場合、ご相談ください)

Arrangement Tips

  • 販促物種類の追加
    • “アプリ詳細 > ▼アプリ > アドオンの管理 > 選択型データ項目で使用する選択肢マスタ” から販促物名マスタ(promotional-item-names.xml)、在庫マスタ(promotional-item-stock.xml)を変更

Capture

Appendix

  • 販促物名マスタ(選択肢アドオン)
<items>
  <item value="00001" display="チラシ 会社紹介" />
  <item value="00002" display="製品カタログ C001" />
  <item value="00003" display="製品カタログ C002" />
  <item value="00004" display="製品カタログ C003" />
  <item value="00005" display="製品カタログ C004" />
  <item value="00006" display="パンフレット キャンペーン2022秋" />
  <item value="00007" display="パンフレット キャンペーン2022冬" />
  <item value="00008" display="パンフレット キャンペーン2023春" />
  <item value="00009" display="2023年カレンダー" />
</items>
  • 販促物在庫マスタ(選択肢アドオン)
<items>
  <item value="00001" display="100" />
  <item value="00002" display="110" />
  <item value="00003" display="120" />
  <item value="00004" display="130" />
  <item value="00005" display="140" />
  <item value="00006" display="150" />
  <item value="00007" display="160" />
  <item value="00008" display="170" />
  <item value="00009" display="180" />
</items>
  • ”1.持ち出し申請”工程、「持出数」入力チェック(JavaScript)
1.持ち出し申請 工程、「持出数」入力チェック(JavaScript)
<script>
let selects;
let stockCount;
let takingOutCount;
let remaindingCount;

function user_setStockCount(e) {
  let stockCount_ele = document.getElementsByName("data[3].selects");
  stockCount_ele[0].disabled = false;
  selects = qbpms.form.get("q_promotional_items");
  if (selects.length !== 0){
    qbpms.form.set("q_stock_count", selects[0].value);
  }
  stockCount_ele[0].disabled = true;
}
function user_checkTakingOutCount(e) {
  let button_ele = document.getElementById("submitButton");
  let remaindingCount_ele = document.getElementsByName("data[20].input");
  remaindingCount_ele[0].disabled = false;
  remaindingCount = getRemaindingCount();
  qbpms.form.set("q_remainding_count" , remaindingCount);
  remaindingCount_ele[0].disabled = true;
  if (remaindingCount < 0){
      alert("持ち出し数を再入力ください。\n持ち出し数 > 在庫数");
      button_ele.disabled = true;
  }else{
      button_ele.disabled = false;
  }
}
function user_checkTakingOutCountForSubmit(e) {
  let button_ele = document.getElementById("submitButton");
  let remaindingCount_ele = document.getElementsByName("data[20].input");
  let stockCount_ele = document.getElementsByName("data[3].selects");
  remaindingCount_ele[0].disabled = false;
  remaindingCount = getRemaindingCount();
  qbpms.form.set("q_remainding_count" , remaindingCount);
  if (remaindingCount < 0){
      alert("持ち出し数を再入力ください。\n持ち出し数 > 在庫数");
      button_ele.disabled = true;
  }else{
      button_ele.disabled = false;
      stockCount_ele[0].disabled = false;
  }
}

function user_readyHandler(e) {
  let button_ele = document.getElementById("submitButton");
  let remaindingCount_ele = document.getElementsByName("data[20].input");
  let stockCount_ele = document.getElementsByName("data[3].selects");
  selects = qbpms.form.get("q_promotional_items");
  if (selects.length !== 0){
  qbpms.form.set("q_stock_count", selects[0].value);
  }
  stockCount_ele[0].disabled = true;
  remaindingCount_ele[0].disabled = true;
  button_ele.addEventListener('click', user_checkTakingOutCountForSubmit);
}

function getRemaindingCount(){
  selects = qbpms.form.get("q_stock_count");
  if (selects.length === 0){
  stockCount = 0;
  }else{
  stockCount = Number(selects[0].display);
  }
  takingOutCount = Number(qbpms.form.get("q_taking_out_count"));
  return stockCount - takingOutCount;
}

qbpms.form.on('ready', user_readyHandler);
qbpms.form.on('change', 'q_promotional_items', user_setStockCount);
qbpms.form.on('change', 'q_taking_out_count', user_checkTakingOutCount);
</script>

See also

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

%d人のブロガーが「いいね」をつけました。