販促物持出プロセス 20221124
販促物の持ち出し数・在庫数を管理するワークフローです。持ち出し申請時、在庫数を確認できます。持ち出し完了時、販促物の在庫数が自動で更新されます。
仕事の流れ (ワークフロー図の複雑度: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_out
0
*
- 申請者q_requester
1
- 持ち出し申請者が格納されます。
- ${processInstance.initQuserId}
- 販促物名q_promotional_items
2
*
- 在庫数q_stock_count
3
*
- 持ち出し数q_taking_out_count
5
*
- 持ち出し理由q_taking_out_reason
4
- 持ち出し後 残数q_remainding_count
20
*
- 持ち出し完了日時q_taking_out_complete
7
- ◆Script:在庫数自動セット
6
- ◆在庫数マスタ更新フロー用
21
- 更新対象:販促物名q_target_promotional_items
10
*
- 更新対象:在庫数q_target_stock_count
11
*
- 更新用:在庫数q_update_stock_count
12
*
- 更新きっかけ:プロセスIDq_trigger_pid
18
- 在庫数マスタが更新するきっかけとなったプロセスIDが格納されます。
- #{processInstanceId}
- 更新前:在庫数マスタ(TSV)q_stock_master_tsv
8
- 更新用:在庫数マスタ(TSV)q_update_stock_master_tsv
9
- 更新に必要な在庫数マスタがTSV形式で格納されます。
- 更新用:在庫数マスタ IDsq_update_stock_master_ids
14
- 更新用:在庫数マスタ Labelsq_update_stock_master_labels
15
- 更新に必要な在庫数マスタ ラベル群が格納されます。
- 更新用:在庫数マスタq_update_stock_count_option
16
- 在庫数マスタファイル(手動更新用)q_stock_master_file_for_manual_update
13
- 更新後の在庫数マスタファイルが格納されます。(トラブル時、手動更新用)
- 更新前:在庫数マスタファイル(バックアップ)q_stock_master_backup_file
19
- コメント欄 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
Related