// GraalJS Script (engine type: 2)
// Configuration Format
// Format: {index}:{Questetra Data Items Field Name};
// eg. {index$1}:{Questetra Data Items Field Name$1};{index$2}:{Questetra Data Items Field Name$2};...
// eg. Corporate Name:q_corp_name;Person Name:q_person_name;
// index: String (the beginning of a sentence is {index}.
// Questetra Data Items Field Name: String eg. q_corp_name
// config delimiter: ":" for {index} and {Questetra Data Items Field Name}
// configs delimiter: ";" for configs
// Target Row Example : Corporate Name:Example Inc
//////// START "main()" /////////////////////////////////////////////////////////////////
main();
function main(){
//// == 工程コンフィグの参照 / Config Retrieving ==
const confObjA = configs.getObject( "conf_DataIdA" ); //required
const strConfigs = configs.get( "conf_DataIdB" ); //required
//// == ワークフローデータの参照 / Data Retrieving ==
const mailbody = engine.findData(confObjA);
engine.log("mailbody:" + mailbody);
engine.log("strConfigs:" + strConfigs);
//// == 演算 / Calculating ==
const configsSep = ";";
const configSep = ":";
const sep = ":";
const textEndSepForMultipleRow = "---------------";
const arrConfigs = strConfigs.split(configsSep);
let line = new Array();
let pos = "";
let dat = "";
let isParsingMultipeRow = false;
let multipleRowText = "";
let fieldNameForMultipleRowText = "";
line = mailbody.split("\n");
for(var i=0; i < line.length; i=i+1){
pos = line[i].indexOf(sep);
dat = line[i].slice(pos+sep.length);
for (var j=0; j < arrConfigs.length; j++){
let arrConfig = arrConfigs[j].split(configSep);
if (line[i].slice(0,pos) === arrConfig[0]){
let results = checkObjectDataType(arrConfig[1]);
if (results[0]){ // Valid DataType
if (results[1] === "STRING_TEXTAREA"){
engine.log("this row is STRING_TEXTAREA: " + dat);
isParsingMultipeRow = true;
fieldNameForMultipleRowText = arrConfig[1];
}else{
setDataToItem(dat.replace(/^ /,"") , arrConfig[1] , results[1]);
}
}else{ // Invalid DataType
engine.log("FileName: " + arrConfig[1] + "is not target DataType.");
}
}
}
if (isParsingMultipeRow){ // Multiple Text parsing
if (line[i] === textEndSepForMultipleRow){
engine.setDataByVarName(fieldNameForMultipleRowText , multipleRowText);
isParsingMultipeRow = false;
multipleRowText = "";
fieldNameForMultipleRowText = "";
}else{
multipleRowText += dat.replace(/^ /,"") + "\n";
}
}
}
} //----- End Of main()
/* checkObjectDataType(fieldName)
Check item's field name for valid data types. Get check result and data type name.
param: "fieldName"
return: Array [0]: check result(boolean) [1]: item's DataType(String)
*/
function checkObjectDataType(fieldName){
const defTypes = ["STRING_TEXTFIELD","STRING_TEXTAREA","DECIMAL","DATE_Y","DATE_YM","DATE_MD","DATE_YMD","DATETIME","SELECT_SINGLE","SELECT_CHECKBOX","QUSER"];
let def = engine.findDataDefinitionByVarName( fieldName );
let results = [false , ""];
for (let i=0; i < defTypes.length; i++){
if (def.matchDataType(defTypes[i])){
results[0] = true;
results[1] = defTypes[i];
}
}
return results;
} //----- End Of convertObjectForTargetDataType()
/*
setDataToItem(value,fieldName,dataType)
Set value to data item of "fieldName".
param1: value
param2: fieldName: data item's field name
param3: dataType : data item's data type name
*/
function setDataToItem(value,fieldName,dataType){
if (value === null){ return; }
const DATE_TYPES = ["DATE_Y","DATE_YM","DATE_MD","DATE_YMD"];
engine.log("datatye: " + dataType);
if (dataType === "SELECT_SINGLE"){
engine.setDataByVarName( fieldName,[value]);
return;
}
if (dataType === "SELECT_CHECKBOX"){
const arry = value.split(",");
engine.setDataByVarName( fieldName,arry);
return;
}
if (dataType === "QUSER"){
const quser = quserDao.findByEmail( value );
if (quser === null){
engine.log( fieldName + " Not Set. email" + value + " is not exist.");
}else{
engine.setDataByVarName( fieldName,quser);
}
return;
}
if (DATE_TYPES.indexOf(dataType) !== -1){
const date = new Date(value);
engine.setDataByVarName( fieldName , new java.sql.Date(date.getTime()));
return;
}
if (dataType === "DATETIME"){
const date = new Date(value);
engine.setDataByVarName( fieldName , new java.sql.Timestamp(date.getTime()));
return;
}
if (dataType === "DECIMAL"){
if (value === null){ return; }
engine.setDataByVarName( fieldName , new java.math.BigDecimal(value));
return;
}
engine.setDataByVarName( fieldName,value);
} //----- End Of setDataToItem()