Questetra BPMS: 案件, 指定データTSV抽出
Questetra BPMS: 案件, 指定データTSV抽出 (Questetra BPMS: Process, Extract as TSV)
案件データを一行のTSV文字列として抽出します。抽出項目は “0,2,3” のようなCSV書式で指定します。Tabコードと改行コードは、自動的に削除されます。”ファイル型” はファイル名が、”選択型” は選択された選択肢の表示テキストが抽出されます。掲示板型・テーブル型・ガイドパネル型は抽出できません(Warningがログ出力されます)
Configs
  • U: HTTP認証設定を選択してください *
  • B: ワークフロー基盤URLをセットしてください(${var[applicationRoot]} or https://../) *#{EL}
  • C: 案件のプロセスIDをセットしてください ( 例 “123” ) *#{EL}
  • D: 抽出するデータ項目のIDをセットしてください ( 例 “0,2,3” ) *#{EL}
  • E: 抽出されたTSV文字列が格納される文字列型データを選択してください (更新)
  • F: 抽出されたTSV文字列が格納される文字列型データを選択してください (追記)
Script (click to open)
// GraalJS Script (engine type: 2)
// about Questetra Workflow API
// See https://online-demo-ja.questetra.net/s/swagger/index.html?urls.primaryName=Workflow%20API
// or "https://{YOUR}.questetra.net/s/swagger/index.html"

// about Questetra OAuth2 (for System Admin)
// Get ID&Secret: System Settings > API Clients > OAuth2 Clients > Add OAuthw Client
// (config "Redirect URL" = "https://s.questetra.net/oauth2callback" )
// (Scope: "read" or "any" )
// Set ID&Secret: Workflow App > Detail > OAuth2 Setting > (Get Refresh Token)

// Notes:
// Tab code and line feed code in Workflow data will be deleted.
// Workflowデータ内のタブコードと改行コードは抽出時に削除されます
// Specify "Title" to extract Title and "Id" to extract ID. ( e.g. "Title,Id,0,2,3" )
// 案件タイトルの抽出には "Title" を、IDの抽出には "Id" を指定します ( 例 "Title,Id,0,2,3" )
// If an undefined dataitem ID or Guide Panel ID is specified, "#N/A" is output.
// 未定義のデータ項目IDやガイドパネルのIDが指定された場合は、"#N/A" が出力されます
// If an unsupported type is specified, "#TYPE!" is output.
// サポート外のデータ型が指定された場合は、"#TYPE!" が出力されます
// The file names are extracted for the File type. (Multiple: Space-separated)
// ファイル型を指定した場合、ファイル名が抽出されます(複数:スペース区切り)
// The display strings of the selected options are extracted for the Select type. (Multiple: Space-separated)
// 選択型を指定した場合、表示テキストが抽出されます(複数:スペース区切り)
// It supports loop processing.
// ループ処理に対応しています(抽出結果の追記)


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

//// == Config Retrieving / 工程コンフィグの参照 ==
const strAuthzSetting     = configs.get      ( "AuthzConfU" );      // required
  engine.log( " AutomatedTask Config: Authz Setting: " + strAuthzSetting );
const applicationRoot = configs.get( "conf_ApplicationRoot" ) + ""; // required
const processId       = configs.get( "conf_ProcessId" ) + "";       // required
const dataitemIds     = configs.get( "conf_DataitemIds" ) + "";     // required
const dataIdE         = configs.get( "conf_DataIdE" )   + "";       // not required
const dataIdF         = configs.get( "conf_DataIdF" )   + "";       // not required
// 'java.lang.String' (String Obj) to javascript primitive 'string'

engine.log( " AutomatedTask Config: Application Root: " + applicationRoot );
engine.log( " AutomatedTask Config: Process ID: " + processId );
engine.log( " AutomatedTask Config: Dataitem IDs: " + dataitemIds );


//// == Data Retrieving / ワークフローデータの参照 ==
let strBeforeAppend = engine.findDataByNumber( dataIdF );


//// == Calculating / 演算 ==
// get ProcessInstance via Questetra Workflow API
// com.questetra.bpms.core.event.scripttask.HttpClientWrapper
let apiRequest = httpClient.begin(); // HttpRequestWrapper
    apiRequest = apiRequest.authSetting( strAuthzSetting ); // with "Authorization: Bearer XX"
    // https://questetra.zendesk.com/hc/en-us/articles/360024574471-R2300#HttpRequestWrapper
    apiRequest = apiRequest.queryParam( "processInstanceId", processId );
const apiUri = applicationRoot + "API/OR/ProcessInstance/view";

// request to API
engine.log( " AutomatedTask Trying: GET " + apiUri );
const response = apiRequest.get( apiUri );
const responseCode = response.getStatusCode() + "";
engine.log( " AutomatedTask ApiResponse: Status " + responseCode );
if( responseCode !== "200"){
  throw new Error( "\n AutomatedTask UnexpectedResponseError: " +
         responseCode + "\n" + response.getResponseAsString() + "\n" );
}
const responseStr = response.getResponseAsString() + "";
const responseObj = JSON.parse( responseStr );
//engine.log( responseStr ); //test

// retrieve JSON
let strNewline = "";
let arrDataitemIds = dataitemIds.split(","); // e.g. "Title,Id,0,2,3"
for( let i = 0; i < arrDataitemIds.length; i++ ){
  if( arrDataitemIds[i] === "Id" ){
    strNewline += responseObj.processInstance.processInstanceId;
  }else if( arrDataitemIds[i] === "Title" ){
    if( responseObj.processInstance.processInstanceTitle !== null ){
      strNewline += responseObj.processInstance.processInstanceTitle;
    }
  }else{
    if( responseObj.processInstance.data[ arrDataitemIds[i] ] == undefined ){
      strNewline += "#N/A";
    }else if( responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "STRING" || 
              responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "DECIMAL" || 
              responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "DATE" || 
              responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "DATETIME" || 
              responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "QUSER" || 
              responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "QGROUP" ){
      if( responseObj.processInstance.data[ arrDataitemIds[i] ].value !== null ){
        strNewline += responseObj.processInstance.data[ arrDataitemIds[i] ].value
                      .replace( /\n/g, '' ).replace( /\t/g, '' );
      }
    }else if( responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "SELECT" ){
      if( responseObj.processInstance.data[ arrDataitemIds[i] ].value !== null ){
        for( let j = 0; j < responseObj.processInstance.data[ arrDataitemIds[i] ].value.length; j++ ){
          strNewline += responseObj.processInstance.data[ arrDataitemIds[i] ].value[j].display
                        .replace( /\n/g, '' ).replace( /\t/g, '' );
          if( j !== responseObj.processInstance.data[ arrDataitemIds[i] ].value.length - 1 ){
            strNewline += " "; // (Multiple: Space-separated)
          }
        }
      }
    }else if( responseObj.processInstance.data[ arrDataitemIds[i] ].dataType === "FILE2" ){
      if( responseObj.processInstance.data[ arrDataitemIds[i] ].value !== null ){
        for( let j = 0; j < responseObj.processInstance.data[ arrDataitemIds[i] ].value.length; j++ ){
          strNewline += responseObj.processInstance.data[ arrDataitemIds[i] ].value[j].name
                        .replace( /\n/g, '' ).replace( /\t/g, '' );
          if( j !== responseObj.processInstance.data[ arrDataitemIds[i] ].value.length - 1 ){
            strNewline += " "; // (Multiple: Space-separated)
          }
        }
      }
    }else{
      strNewline += "#TYPE!";
    }
  }
  if( i !== arrDataitemIds.length - 1 ){
    strNewline += "\t";
  }
}


//// == Data Updating / ワークフローデータへの代入 ==
if( strNewline === "" ){
  engine.log( " AutomatedTask DataUpdating: Extracted Text empty" );
}
if( dataIdE !== "" ){ 
  engine.setDataByNumber( dataIdE, strNewline );
}
if( dataIdF !== "" ){ 
  if( strBeforeAppend !== null ){
    engine.setDataByNumber( dataIdF, strBeforeAppend + "\n" + strNewline );
  }else{
    engine.setDataByNumber( dataIdF, strNewline );
  }
}


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

Download

2021-07-01 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/questetra-bpms-process-extract-as-tsv-2021/
Addonファイルのインポートは Professional でのみご利用いただけます

Notes

  1. Workflowデータ内のタブコードと改行コードは抽出時に削除されます
  2. 案件タイトルの抽出には “Title” を、IDの抽出には “Id” を指定します ( 例 “Title,Id,0,2,3” )
  3. 未定義のデータ項目IDやガイドパネルのIDが指定された場合は、”#N/A” が出力されます
  4. サポート外のデータ型が指定された場合は、”#TYPE!” が出力されます
  5. ファイル型を指定した場合、ファイル名が抽出されます(複数:スペース区切り)
  6. 選択型を指定した場合、表示テキストが抽出されます(複数:スペース区切り)
  7. ループ処理に対応しています(抽出結果の追記)

Capture

See also

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