// GraalJS Script (engine type: 2)
//
// Notes:
// Copies text information of all cell values.
// Copies in the display order of the column. (Does not refer to column ID/field name)
// If the number of columns decreases, the right columns will not be copied.
// If the number of columns increases, blank strings will be completed.
// To re-order columns, consider Table-TsvString-TsvEdit-Table.
// Auto-calculated columns are reevaluated. (Not always the same value)
// Use the standard function for duplication of string, numeric, date, etc.
// - Automated Step (BPMN Icons): "Update Data"
// - M227: Auto Executing Data Binding, Arithmetic Operations
// To add data without erasing already stored cell data, use B2.
//
// Notes (ja):
// 全てのセル値の文字情報をコピーします。
// カラムの表示順にコピーします。(カラムID/フィールド名に関わらない)
// カラム列数が少なくなる場合は、右列部がカットされます。
// カラム列数が増える場合は、空白文字列で補完されます。
// 列の入れ換えは、Table→TSV文字列→TSV加工→Table等を検討してください。
// 自動計算カラムは、再評価されます。(必ずしも同じ値になりません)
// 文字列型・数値型・日付型などのデータ複製には、標準機能をご活用ください。
// - 自動処理工程(BPMNアイコン): [データ更新]
// - M227: 業務データの結合や四則演算が自動実行されるように設定する
// 既に格納されているセルデータを消さずに追記したい場合は、B2をご利用ください。
//////// START "main()" ////////////////////////////////////////////////////////////////
main();
function main(){
//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + ""; // required
const dataIdB = configs.get( "conf_DataIdB" ) + ""; // not required
const dataIdB2 = configs.get( "conf_DataIdB2" ) + ""; // not required
// 'java.lang.String' to javascript primitive 'string'
const numColsA = engine.findDataDefinitionByNumber( dataIdA ).getSubDataDefinitions().size() - 0; // java.util.List<com.questetra.bpms.core.event.scripttask.SubDataDefinitionView>#size()
engine.log( " AutomatedTask TableConfig:" +
" #of {A}-Columns Definition: " + numColsA );
let outputTable1ProcessDataDefinitionView = null;
let outputTable1DataDefinition = null;
let outputTable1 = null;
let numColsB = 0;
if( dataIdB !== "" ){
outputTable1ProcessDataDefinitionView = engine.findDataDefinitionByNumber( dataIdB ); // com.questetra.bpms.core.event.scripttask.ProcessDataDefinitionView
outputTable1DataDefinition = outputTable1ProcessDataDefinitionView.getSubDataDefinitions(); // java.util.List<com.questetra.bpms.core.event.scripttask.SubDataDefinitionView>
outputTable1 = outputTable1ProcessDataDefinitionView.createListArray(); // com.questetra.bpms.core.event.scripttask.ScriptListArray
numColsB = outputTable1DataDefinition.size() - 0;
engine.log( " AutomatedTask TableConfig:" +
" #of {B}-Columns Definition: " + numColsB );
}
let outputTable2ProcessDataDefinitionView = null;
let outputTable2DataDefinition = null;
let outputTable2 = null;
let numColsB2 = 0;
if( dataIdB2 !== "" ){
outputTable2ProcessDataDefinitionView = engine.findDataDefinitionByNumber( dataIdB2 ); // com.questetra.bpms.core.event.scripttask.ProcessDataDefinitionView
outputTable2DataDefinition = outputTable2ProcessDataDefinitionView.getSubDataDefinitions(); // java.util.List<com.questetra.bpms.core.event.scripttask.SubDataDefinitionView>
outputTable2 = engine.findDataByNumber( dataIdB2 ); // com.questetra.bpms.core.event.scripttask.ScriptListArray
if( outputTable2 === null ){
// Table with zero rows.
outputTable2 = outputTable2ProcessDataDefinitionView.createListArray(); // com.questetra.bpms.core.event.scripttask.ScriptListArray
}
numColsB2 = outputTable2DataDefinition.size() - 0;
engine.log( " AutomatedTask TableConfig:" +
" #of {B2}-Columns Definition: " + numColsB2 );
}
//// == Data Retrieving / ワークフローデータの参照 ==
const inputTable = engine.findDataByNumber( dataIdA );
// com.questetra.bpms.core.event.scripttask.ScriptListArray (BPMS Table)
// https://questetra.zendesk.com/hc/en-us/articles/360024574471-R2300
if( inputTable === null ){
throw new Error( "\n AutomatedTask UnexpectedTableError:" +
" Table {A} is empty \n" );
}
//// == Calculating / 演算 ==
if( dataIdB !== "" ){
for( let i = 0; i < inputTable.size() - 0; i++ ){
let tmpRow = outputTable1.addRow(); // com.questetra.bpms.core.event.scripttask.ScriptListArray.ScriptListRow
if( numColsA < numColsB ){
for( let j = 0; j < numColsA; j++ ){
tmpRow.setCol( j, inputTable.getRow(i).getCol(j) );
}
for( let k = numColsA; k < numColsB; k++ ){
tmpRow.setCol( k, "" ); // Fill with empty characters
}
}
if( numColsA >= numColsB ){
for( let j = 0; j < numColsB; j++ ){
tmpRow.setCol( j, inputTable.getRow(i).getCol(j) );
}
}
engine.log( " AutomatedTask:" +
" Add B[" + i + "]" );
}
}
if( dataIdB2 !== "" ){
let numOriginLines = outputTable2.size() - 0;
engine.log( " AutomatedTask:" +
" #of {B2}-Rows: " + numOriginLines );
for( let i = 0; i < inputTable.size() - 0; i++ ){
let tmpRow = outputTable2.addRow(); // com.questetra.bpms.core.event.scripttask.ScriptListArray.ScriptListRow
if( numColsA < numColsB2 ){
for( let j = 0; j < numColsA; j++ ){
tmpRow.setCol( j, inputTable.getRow(i).getCol(j) );
}
for( let k = numColsA; k < numColsB2; k++ ){
tmpRow.setCol( k, "" ); // Fill with empty characters
}
}
if( numColsA >= numColsB2 ){
for( let j = 0; j < numColsB2; j++ ){
tmpRow.setCol( j, inputTable.getRow(i).getCol(j) );
}
}
engine.log( " AutomatedTask:" +
" Add B2[" + (numOriginLines + i) + "]" );
}
}
//// == Data Updating / ワークフローデータへの代入 ==
if( dataIdB !== "" ){
engine.setDataByNumber( dataIdB, outputTable1 );
}
if( dataIdB2 !== "" ){
engine.setDataByNumber( dataIdB2, outputTable2 );
}
} //////// END "main()" ////////////////////////////////////////////////////////////////
Pingback: Table, Duplicate – Questetra Support