Questetra-Model-XML Extract Definition
Extracts the definition summary of Business Process. Process-data-definitions (“number”, “data-type”, “name”) and Node (“number”, “name”, “nodeType”) are extracted from Model-XML file in QAR archive. TSV and/or HTML for WordPress are generated.
https://support.questetra.com/addons/questetra-model-xml-extract-definition/
2019-01-18 (C) Questetra, Inc. (MIT License)
Configs
  • A: Select FILES DATA for Model-XML (Multiple not supported) *
  • a1: Select STRING DATA for QAR-Title
  • a2: Select STRING DATA for QAR-Description
  • a3: Set URL for Qar File (e.g. https://example.com/foo/ ) #{EL}
  • a4: Set LICENSE for Qar File (e.g. “(C) Questetra, Inc.”) #{EL}
  • B: Select STRING DATA for TSV of Nodes-Definition (update)
  • C: Select STRING DATA for TSV of Data-Definition (update)
  • D: Select STRING DATA for Digest HTML (update)
Script
// Rhino engine (engine type: 0) to use E4X

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


//// == Config Retrieving / 工程コンフィグの参照 ==
var dataIdA = configs.get( "conf_DataIdA" ) + "";
var dataIdA1 = configs.get( "conf_DataIdA1" ) + "";
var dataIdA2 = configs.get( "conf_DataIdA2" ) + "";
var qarUrl   = configs.get( "conf_QarUrl" ) + "";
var qarLicense = configs.get( "conf_QarLicense" ) + "";
var dataIdB = configs.get( "conf_DataIdB" ) + "";
var dataIdC = configs.get( "conf_DataIdC" ) + "";
var dataIdD = configs.get( "conf_DataIdD" ) + "";
// 'java.lang.String' (String Obj) to javascript primitive 'string'

if(dataIdB === "" && dataIdC === "" && dataIdD === "" ){
  throw new Error( '\n B/C/D is required at least one. \n' );
}


//// == Data Retrieving / ワークフローデータの参照 ==
var qarTitle = "";
if( dataIdA1 !== ""){
  qarTitle = engine.findDataByNumber( dataIdA1 ) + "";
}
var qarDescr = "";
if( dataIdA2 !== ""){
  qarDescr = engine.findDataByNumber( dataIdA2 ) + "";
}

var myFiles = engine.findDataByNumber( dataIdA ); 
// java.util.ArrayList
if (myFiles === null || myFiles.size() != 1) {
  throw new Error( '\n One-file attachment is only valid. \n' );
}
var myFileText = '';
var myLineCounter = 0;
fileRepository.readFile(myFiles.get(0), "UTF-8", function(line) {
    myFileText += line + '\n';
    myLineCounter++;
});
engine.log( "#Line of Text-File: " + myLineCounter );
// engine.log( myFileText ); // debug


//// == Calculating / 演算 ==
/// parse XML (ECMAScript for XML (E4X))
myFileText = myFileText
//  .replace(/<\?xml\s.*?\?>/, "") // E4X bug 336551
  .replace(/<\?xml[^>]*\?>/, "") // E4X bug 336551
  .trim(); // Removes space, tab, no-break space, etc. and LF, CR
//engine.log( myFileText ); //debug
var xmlObj = new XML( myFileText );
engine.log( "Parcing XML is completed." );

var numData = xmlObj["process-data-definitions"]["process-data-definition"].length() - 0;
engine.log( " #Data: " + numData );
var numNode = xmlObj.nodes.node.length() - 0;
engine.log( " #Node: " + numNode );

/// Extracts Node Def
var i;
var nodeObjects = new Array(numNode);
for(i = 0; i < numNode ; i++){
  nodeObjects[i] = {};
  nodeObjects[i].name   = xmlObj.nodes.node[i].name + "";
  nodeObjects[i].type   = xmlObj.nodes.node[i].nodeType + "";
  nodeObjects[i].number = xmlObj.nodes.node[i].attribute("number") + "";
}
nodeObjects.sort(function(a, b){ // name sort
	if (a.name > b.name) return 1;
	if (a.name < b.name) return -1;
	return 0;
});
var nodeDefTsv  = '';
for(i = 0; i < numNode ; i++){
  nodeDefTsv  += nodeObjects[i].name + "\t";
  nodeDefTsv  += nodeObjects[i].type + "\t";
  nodeDefTsv  += nodeObjects[i].number;
  if( i !== numData ){
    nodeDefTsv  += "\n";
  }
}
engine.log( nodeDefTsv );

/// Extracts Data Def
var dataObjects = new Array(numData);
for(i = 0; i < numData ; i++){
  var order = xmlObj["process-data-definitions"]["process-data-definition"][i]["view-order"] - 1; // "order" start 1
  dataObjects[order] = {};
  dataObjects[order].type   = xmlObj["process-data-definitions"]["process-data-definition"][i]["data-type"] + "";
  dataObjects[order].form   = "";
  if( dataObjects[order].type === "0" || dataObjects[order].type === "11" || dataObjects[order].type === "8" ){
    dataObjects[order].form = xmlObj["process-data-definitions"]["process-data-definition"][i]["form-type"] + "";
  } // STRING or SELECT or USER type
  if( dataObjects[order].type === "5" ){
    dataObjects[order].form = xmlObj["process-data-definitions"]["process-data-definition"][i]["sub-type"] + "";
  } // DATE type
  dataObjects[order].name   = xmlObj["process-data-definitions"]["process-data-definition"][i].name + "";
  dataObjects[order].number = xmlObj["process-data-definitions"]["process-data-definition"][i].attribute("number") + "";
}
var dataDefTsv  = '';
for(i = 0; i < numData ; i++){
  dataDefTsv  += dataObjects[i].type + "\t";
  dataDefTsv  += dataObjects[i].form + "\t";
  dataDefTsv  += dataObjects[i].name + "\t";
  dataDefTsv  += dataObjects[i].number;
  if( i !== numData ){
    dataDefTsv  += "\n";
  }
}
engine.log( dataDefTsv );

/// Generates HTML (Qar Title Descr Url License)
var myHtml = '';
myHtml += '<!-- wp:html -->\n';
myHtml += '
' + qarTitle; myHtml += '
‘; myHtml += qarDescr + ‘<br><a href=”‘ + qarUrl + ‘”>’; myHtml += qarUrl + ‘</a><br><span style=”float: right;”>’; myHtml += qarLicense + ‘</span>
\n'; myHtml += '<!-- /wp:html -->\n'; myHtml += '\n'; /// Generates HTML (Qar Node) myHtml += '<!-- wp:html -->\n'; myHtml += '
Nodes
'; myHtml += '<div style="line-height:2.5em;font-size:0.8em;">\n'; for(i = 0; i < numNode; i++ ){ if(nodeObjects[i].type === "0"){ myHtml += '<span style="padding:0.2em 0.5em;margin:1em 0.2em;'; myHtml += 'border:solid 1px #053769;border-radius:8px;'; myHtml += 'background-color:#8AF2FF;" '; myHtml += 'title="NodeNumber: '; myHtml += nodeObjects[i].number; myHtml += '">'; myHtml += nodeObjects[i].name; myHtml += '</span>\n'; }else if(nodeObjects[i].type === "3"){ myHtml += '<span style="padding:0.2em 0.5em;margin:1em 0.2em;'; myHtml += 'border:solid 1px #686868;border-radius:8px;'; myHtml += 'background-color:#EEEEEE;" '; myHtml += 'title="NodeNumber: '; myHtml += nodeObjects[i].number; myHtml += '">'; myHtml += nodeObjects[i].name; myHtml += '</span>\n'; } } myHtml += '</div>[/su_spoiler]\n'; myHtml += '<!-- /wp:html -->\n'; myHtml += '\n'; /// Generates HTML (Qar DataItems) myHtml += '<!-- wp:html -->\n'; myHtml += '
Data
'; myHtml += '<div style="font-size:0.9em;">\n'; myHtml += '<table style="width:100%;">\n'; for(i = 0; i < numData; i++ ){ /// 0-f0 String (Text Box single line) 文字(単一行) /// 0-f1 String (Text Box multiple lines) 文字(複数行)- /// 12 Numeric 数値- /// 11-f2 Select (Radio Button) 選択(ラジオボタン) /// 11-f4 Select (Select Box) 選択(セレクトボックス) /// 11-f3 Select (Check Box) 選択(チェックボックス) /// 11-f5 Select (Search Select Box) 選択(検索セレクトボックス)- /// 5-s0 Date (Y/M/D) 日付(年月日) /// 5-s1 Date (Y/M) 日付(年月) /// 5-s2 Date (M/D) 日付(月日) /// 5-s3 Date (Y) 日付(年) /// 10 Datetime 日時- /// 14 File ファイル- /// 8-f4 User (Select Box) ユーザ(セレクトボックス) /// 8-f5 User (Search Select Box) ユーザ(検索セレクトボックス)- /// 16 Organization 組織- /// 9 Discussion 掲示板- /// 13 Table テーブル- /// 15 Guide Panel ガイドパネル- myHtml += '<tr>\n'; if( dataObjects[i].type === "0" && dataObjects[i].form === "0" ){ myHtml += '<td style="padding:1px 5px;" title="String (Text Box single line)">'; myHtml += '<span style="color:#B40404"><i class="fal fa-font"></i> single</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "0" && dataObjects[i].form === "1" ){ myHtml += '<td style="padding:1px 5px;" title="String (Text Box multiple lines)">'; myHtml += '<span style="color:#B40404"><i class="fal fa-font"></i> multiple</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "12"){ myHtml += '<td style="padding:1px 5px;" title="Numeric">'; myHtml += '<span style="color:#B45F04"><i class="fal fa-percent"></i> number</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "11" && dataObjects[i].form === "2" ){ myHtml += '<td style="padding:1px 5px;" title="Select (Radio Button)">'; myHtml += '<span style="color:#AEB404"><i class="fal fa-list-alt"></i> radio</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "11" && dataObjects[i].form === "4" ){ myHtml += '<td style="padding:1px 5px;" title="Select (Select Box)">'; myHtml += '<span style="color:#AEB404"><i class="fal fa-list-alt"></i> select</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "11" && dataObjects[i].form === "3" ){ myHtml += '<td style="padding:1px 5px;" title="Select (Check Box)">'; myHtml += '<span style="color:#AEB404"><i class="fal fa-list-alt"></i> check</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "11" && dataObjects[i].form === "5" ){ myHtml += '<td style="padding:1px 5px;" title="Select (Search Select Box)">'; myHtml += '<span style="color:#AEB404"><i class="fal fa-list-alt"></i> search</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "5" && dataObjects[i].form === "0" ){ myHtml += '<td style="padding:1px 5px;" title="Date (Y/M/D)">'; myHtml += '<span style="color:#5FB404"><i class="fal fa-calendar-alt"></i> yyyy-mm-dd</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "5" && dataObjects[i].form === "1" ){ myHtml += '<td style="padding:1px 5px;" title="Date (Y/M)">'; myHtml += '<span style="color:#5FB404"><i class="fal fa-calendar-alt"></i> yyyy-mm</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "5" && dataObjects[i].form === "2" ){ myHtml += '<td title="Date (M/D)">'; myHtml += '<span style="padding:1px 5px;" style="color:#5FB404"><i class="fal fa-calendar-alt"></i> mm-dd</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "5" && dataObjects[i].form === "3" ){ myHtml += '<td style="padding:1px 5px;" title="Date (Y)">'; myHtml += '<span style="color:#5FB404"><i class="fal fa-calendar-alt"></i> yyyy</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "10" ){ myHtml += '<td style="padding:1px 5px;" title="Datetime">'; myHtml += '<span style="color:#5FB404"><i class="fal fa-clock"></i> datetime</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "14" ){ myHtml += '<td style="padding:1px 5px;" title="File">'; myHtml += '<span style="color:#04B404"><i class="fal fa-copy"></i> files</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "8" && dataObjects[i].form === "4" ){ myHtml += '<td style="padding:1px 5px;" title="User (Select Box)">'; myHtml += '<span style="color:#04B45F"><i class="fal fa-user"></i> select</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "8" && dataObjects[i].form === "5" ){ myHtml += '<td style="padding:1px 5px;" title="User (Search Select Box)">'; myHtml += '<span style="color:#04B45F"><i class="fal fa-user"></i> search</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "16" ){ myHtml += '<td style="padding:1px 5px;" title="Organization">'; myHtml += '<span style="color:#04B4AE"><i class="fal fa-sitemap"></i> org</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "9" ){ myHtml += '<td style="padding:1px 5px;" title="Discussion">'; myHtml += '<span style="color:#045FB4"><i class="fal fa-comments"></i> discuss</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "13" ){ myHtml += '<td style="padding:1px 5px;" title="Table">'; myHtml += '<span style="color:#0404B4"><i class="fal fa-table"></i> table</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else if( dataObjects[i].type === "15" ){ myHtml += '<td style="padding:1px 5px;" title="Guide Panel">'; myHtml += '<span style="color:#5F04B4"><i class="fal fa-info"></i> guide</span></td>\n'; myHtml += '<td style="padding:1px 10px;" title="DataNumber: '; myHtml += dataObjects[i].number; myHtml += '">'; myHtml += dataObjects[i].name; myHtml += '</td>\n'; }else{ engine.log( "unknown data type" ); } myHtml += '</tr>\n'; } myHtml += '</table>\n'; myHtml += '</div>[/su_spoiler]\n'; myHtml += '<!-- /wp:html -->\n'; myHtml += '\n'; //// == Data Updating / ワークフローデータへの代入 == if( dataIdB !== "" ){ engine.setDataByNumber( dataIdB, nodeDefTsv ); } if( dataIdC !== "" ){ engine.setDataByNumber( dataIdC, dataDefTsv ); } if( dataIdD !== "" ){ engine.setDataByNumber( dataIdD, myHtml ); } } //////// END "main()" //////// // Methods of the XML object (E4X) // - https://wso2.com/project/mashup/0.2/docs/e4xquickstart.html // - Objects marked with a * are also available on XML List objects. // appendChild(child), attribute(attributeName) *, attributes() *, // child(propertyName) *, childIndex(), children() *, // comments() *, contains(value) *, copy() *, descendants([name]) *, // elements([name]) *, hasComplexContent() *, hasSimpleContent() *, // inScopeNamespaces(), insertChildAfter(child1, child2), // insertChildBefore(child1, child2), length() *, localName(), name(), // namespace([prefix]), namespaceDeclarations(), nodeKind(), // normalize() *, parent() *, processingInstructions([name]) *, // prependChild(value), removeNamespace(namespace), // replace(propertyName, value), setChildren(value), // setLocalName(name), setName(name), setNamespace(ns) // text() *, toString() *, toXMLString() *, valueOf() *

Download

Questetra-Model-Xml-Extract-Definition.xml

Capture

See also

2 thoughts on “Questetra-Model-XML Extract Definition”

  1. Pingback: Questetra-Addon-XML Generate Digest-HTML – Questetra Support

  2. Pingback: Questetra-Addon-XML Extract Configs – Questetra Support

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: