差分確認 (Table and Table) (Diff (Table and Table))
2つのテーブル型データ項目を行単位で差分確認します
Configs
  • A: オリジナル情報が格納されているテーブル型データを選択してください *
  • B: 更新後情報が格納されているテーブル型データを選択してください *
  • C: 差分に関する情報が格納される文字列型データを選択してください(更新) *
Script (click to open)

// GraalJS Script (engine type: 2)
// Confirm the difference between A-table and B-table
// (c) 2021, Questetra, Inc. (the MIT License)

//////// START "main()" ////////
main();
function main(){ 

//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + "";
const dataIdB = configs.get( "conf_DataIdB" ) + "";
const dataIdC = configs.get( "conf_DataIdC" ) + "";

//// == Data Retrieving / ワークフローデータの参照 ==
const myAtable = engine.findDataByNumber( dataIdA );
const myBtable = engine.findDataByNumber( dataIdB );
// com.questetra.bpms.core.event.scripttask.ScriptListArray (BPMS Table)
if( myAtable === null){
  throw new Error( "Source Table data A is NULL" );
}
if( myBtable === null){
  throw new Error( "Source Table data B is NULL" );
}
const myAtableSize = myAtable.size() - 0;
const myBtableSize = myBtable.size() - 0;
engine.log( "Original A: " + myAtableSize );
engine.log( "New Data B: " + myBtableSize );


//// == Calculating / 演算 ==
let myAarr = [];
for ( let i = 0; i < myAtableSize; i++ ) {
  let tmpRowObject = myAtable.getRow(i); // com.questetra.bpms.core.event.scripttask.ScriptListArray.ScriptListRow
  let tmpRowStr = "";
  for ( let j = 0; j < tmpRowObject.size(); j++ ) {
    tmpRowStr += tmpRowObject.getCol(j);
    if( j !== tmpRowObject.size() - 1 ) {
      tmpRowStr += "\t";
    }
  }
  myAarr.push( tmpRowStr );
}

let myBarr = [];
for ( let i = 0; i < myBtableSize; i++ ) {
  let tmpRowObject = myBtable.getRow(i); // com.questetra.bpms.core.event.scripttask.ScriptListArray.ScriptListRow
  let tmpRowStr = "";
  for ( let j = 0; j < tmpRowObject.size(); j++ ) {
    tmpRowStr += tmpRowObject.getCol(j);
    if( j !== tmpRowObject.size() - 1 ){
      tmpRowStr += "\t";
    }
  }
  myBarr.push( tmpRowStr );
}

let tmpAdd = "";
for ( let i = 0; i < myBarr.length; i++ ) {
  let existFlag = false;
  for ( let j = 0; j < myAarr.length; j++ ){
    if( myBarr[i] === myAarr[j] ){
      existFlag = true;
      break;
    }
  }
  if( existFlag === false ){
    tmpAdd += "+" + i + " " + myBarr[i] + "\n";
  }
}

let tmpDel = "";
for ( let i = 0; i < myAarr.length; i++ ) {
  let existFlag = false;
  for ( let j = 0; j < myBarr.length; j++ ) {
    if( myAarr[i] === myBarr[j] ){
      existFlag = true;
      break;
    }
  }
  if( existFlag === false ){
    tmpDel += "-" + i + " " + myAarr[i] + "\n";
  }
}


//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdC, tmpAdd + tmpDel );

} //////// END "main()" ////////

Download

2021-08-06 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/tables-diff/
Addonファイルのインポートは Professional でのみご利用いただけます

Notes

  • 10行目に1行追加されている場合の出力例:「+10 questetra クエステトラ」

Capture

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