テーブル, 複製
テーブル, 複製 (Table, Duplicate)

テーブル型データを複製します。テーブル型データ項目Aに格納されている全てのセル値がテーブル型データ項目Bに上書きコピーされます。テーブルのカラム設計に不整合がある場合、エラーとなる場合があります。

2020-02-25 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/table-duplicate/

Configs
  • A: テーブル型データを選択してください *
  • B: テーブル型データを選択してください(更新)
  • B2: テーブル型データを選択してください(追記)
Script
// Notes:
// Copies text information of all cell values.
// Copies in the display order of the column. (Does not refer to column ID)
// 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): "Service Task (Data Assignment)"
// - 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'

let numColsA  = 0;
numColsA  = engine.findDataDefinitionByNumber( dataIdA )
                  .getSubDataDefinitions().size() - 0;
// com.questetra.bpms.core.event.scripttask.ProcessDataDefinitionView
engine.log( " AutomatedTask TableConfig:" +
            " #of {A}-Columns Definition: " + numColsA );
let numColsB  = 0;
if( dataIdB !== "" ){
  numColsB  = engine.findDataDefinitionByNumber( dataIdB )
                    .getSubDataDefinitions().size() - 0;
  engine.log( " AutomatedTask TableConfig:" +
              " #of {B}-Columns Definition: " + numColsB );
}
let numColsB2  = 0;
if( dataIdB2 !== "" ){
  numColsB2 = engine.findDataDefinitionByNumber( dataIdB2 )
                    .getSubDataDefinitions().size() - 0;
  engine.log( " AutomatedTask TableConfig:" +
              " #of {B2}-Columns Definition: " + numColsB2 );
}


//// == Data Retrieving / ワークフローデータの参照 ==
const inputTable = engine.findDataByNumber( dataIdA ); 
// com.questetra.bpms.core.model.formdata.ListArray (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 / 演算 ==
let outputTable1 = new com.questetra.bpms.core.model.formdata.ListArray();
if( dataIdB !== "" ){
  for( let i = 0; i < inputTable.size() - 0; i++ ){
    let tmpRow = new com.questetra.bpms.core.model.formdata.ListArray.ListRow();
    if( numColsA < numColsB ){
      for( let j = 0; j < numColsA; j++ ){
        tmpRow.addCol( inputTable.getRow(i).getCol(j) );
      }
      for( let j = 0; j < numColsB - numColsA; j++ ){
        tmpRow.addCol( "" ); // Fill with empty characters
      }
    }
    if( numColsA >= numColsB ){
      for( let j = 0; j < numColsB; j++ ){
        tmpRow.addCol( inputTable.getRow(i).getCol(j) );
      }
    }
    outputTable1.addRow( tmpRow );
    engine.log( " AutomatedTask:" +
                " Add B[" + i + "]" );
  }
}

let outputTable2 = new com.questetra.bpms.core.model.formdata.ListArray();
let numOriginLines = 0;
if( dataIdB2 !== "" ){
  if( engine.findDataByNumber( dataIdB2 ) !== null ){
    outputTable2 = engine.findDataByNumber( dataIdB2 ); 
    numOriginLines = engine.findDataByNumber( dataIdB2 ).size() - 0;
  }
  engine.log( " AutomatedTask:" +
              " #of {B2}-Rows: " + numOriginLines );

  for( let i = 0; i < inputTable.size() - 0; i++ ){
    let tmpRow = new com.questetra.bpms.core.model.formdata.ListArray.ListRow();
    if( numColsA < numColsB2 ){
      for( let j = 0; j < numColsA; j++ ){
        tmpRow.addCol( inputTable.getRow(i).getCol(j) );
      }
      for( let j = 0; j < numColsB2 - numColsA; j++ ){
        tmpRow.addCol( "" ); // Fill with empty characters
      }
    }
    if( numColsA >= numColsB2 ){
      for( let j = 0; j < numColsB2; j++ ){
        tmpRow.addCol( inputTable.getRow(i).getCol(j) );
      }
    }
    outputTable2.addRow( tmpRow );
    engine.log( " AutomatedTask:" +
                " Add B2[" + (numOriginLines + i) + "]" );
  }
}


//// == Data Updating / ワークフローデータへの代入 ==
if( dataIdB !== "" ){
  engine.setDataByNumber( dataIdB, outputTable1 );
}
if( dataIdB2 !== "" ){
  engine.setDataByNumber( dataIdB2, outputTable2 );
}


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

Download

Capture

テーブル型データを複製します。テーブル型データ項目Aに格納されている全てセル値がテーブル型データ項目Bに上書きコピーされます。テーブルのカラム設計に不整合がある場合、エラーとなる場合があります。

Notes

  1. 全てのセル値の文字情報をコピーします。
  2. カラムの表示順にコピーします。(カラムIDに関わらない)
  3. カラム列数が少なくなる場合は、右列部がカットされます。
  4. カラム列数が増える場合は、空白文字列で補完されます。
  5. 列の入れ換えは、Table→TSV文字列→TSV加工→Table等を検討してください。
  6. 自動計算カラムは、再評価されます。(必ずしも同じ値になりません)
  7. 文字列型・数値型・日付型などのデータ複製には、標準機能をご活用ください。
    1. 自動処理工程(BPMNアイコン): [サービスタスク(データ設定)]
    2. M227: 業務データの結合や四則演算が自動実行されるように設定する
  8. 既に格納されているセルデータを消さずに追記したい場合は、B2をご利用ください。

See also

コメントを残す

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

%d