クエリ文字列 から Value 抽出 (Extract Value from Query String)
シリアライズされたクエリ文字列(例 “a=123&b=456″)から、指定パラメータの値(value)を抽出し、ワークフローデータとして格納します。
Configs
  • A: クエリ文字列(Serialized Data)が格納されている文字列型データを選択してください *
  • B: パラメータ名をセットしてください (例 ‘a’ “a=123&b=456”) *#{EL}
  • C: 抽出値(Value)が格納される文字列型or数値型データを選択してください (更新) *
Script (click to open)
// GraalJS Script (engine type: 2)
// (c) 2021, Questetra, Inc. (the MIT License)

// About "serialize" or "Query String"
// - see https://api.jquery.com/serialize/


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

//// == Config Retrieving / 工程コンフィグの参照 ==
const dataIdA = configs.get( "conf_DataIdA" ) + "";
const dataIdC = configs.get( "conf_DataIdC" ) + "";
const paramName = configs.get( "conf_ParamName" ) + "";
// 'java.lang.String' (String Obj) to javascript primitive 'string'

//// == Data Retrieving / ワークフローデータの参照 ==
const queryString = engine.findDataByNumber( dataIdA ) + "";

//// == Calculating / 演算 ==
let paramValue = getParam(paramName, queryString);

//// == Data Updating / ワークフローデータへの代入 ==
if(paramValue === null){
  throw new Error( 'PARAMETER "' + paramName + '" is not found.' );
}
if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "DECIMAL" ) ){
  var returnValue =  parseFloat( paramValue );
  engine.setDataByNumber( dataIdC, new java.math.BigDecimal(returnValue) );
}else{
  engine.setDataByNumber( dataIdC, paramValue );
}

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


function getParam(name, querystr) {
  name = name.replace(/[\[\]]/g, "\\$&");
  var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)");
  var results = regex.exec(querystr);
  if (!results) return null;
  if (!results[2]) return '';
  return decodeURIComponent(results[2].replace(/\+/g, " "));
}

Download

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

Notes

  • Webhook 機能で受信した x-www-form-urlencoded から必要なデータを抽出する際などに活用できます
  • Query文字列にパラメータ名が存在しない場合は、自動処理がエラーとなります
  • 数値型データとして格納する場合、 parseFloat() の仕様に準じます
  • 数値型データとして格納する場合、「314e-2」や「0.0314E+2」は『3.14』(小数点以下0桁フォーマットの場合は『3』)となります
  • 数値型データとして格納する場合、NaN や Infinite は、自動処理がエラーとなります

Capture

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