Diff (Table and Table)
Checks the difference between information in two Table-type Data Items line by line.
Configs
- A: Select TABLE DATA for Original *
- B: Select TABLE DATA for New *
- C: Select STRING DATA for Difference (update) *
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/addons/tables-diff/
The Add-on import feature is available with Professional edition.
Notes
- Example of output when one line has been added in line 10: “+10 Questetra”
Capture
Like this:
Like Loading...
Related
Pingback: Diff (Table and Table) – Questetra Support