在IBM BPM

时间:2018-10-24 08:52:19

标签: javascript json object dynamic bpm

我正在使用 IBM BPM 8.6

我有一个输入字符串,如下所示: "\"RECORD_CONTACT\":\"Maram\" , \"DRUG\":\"Panadol\"

在服务器端的脚本中,我想动态创建一个业务对象,如下所示:

tw.local.recordContact = Maram;
tw.local.drug = Panadol;

如何动态创建业务对象?

2 个答案:

答案 0 :(得分:0)

您的请求存在一些问题。第一个是您不是在创建业务对象,而是在创建变量。在IBM BPM中,必须在设计时声明变量,否则您将得到一个错误,因此调用尝试调用-

tw.local.myVariable = 'Bob';

如果未声明tw.local.myVariable将抛出异常。根据您在此处(link)提出的另一个问题,我假设您实际上有一个声明为“ return”的ANY变量,因此

tw.local.return.myVariable = 'Bob'

将起作用。鉴于我基于Sven的回答,我认为类似以下的方法会起作用(您需要进行验证)

var str = "\"RECORD_CONTACT\":\"Maram\" , \"DRUG\":\"Panadol\"";
var jsonStr = "{" + str.replace(/\\\"/g,'\"') + "}";
var tempValue = JSON.parse(jsonStr);
var keyArray = Object.keys(tempValue);
var valueArray = Object.values(tempValue);
for(var keyCount=0; keyCount<keyArray.length; keyCount++{
  var evalString = "tw.local.return."+keyArray[keyCount]+"="+valueArray[keyCount];
  eval(evalString);
}

我会注意到,这样做是一个非常糟糕的主意,因为这将是非常脆弱的代码,并且以这种方式使用eval()可以使您获得各种可能的利用。如果其中一个键的值不是简单类型,也会严重失败。

-安德鲁·派尔(Andrew Paier)

答案 1 :(得分:0)

人们应该知道如何使用动态创建的业务对象(BO)来更好地回答您。就像一种非常通用的方法一样-创建JSON对象而不是BO。

但是,如果您要坚持使用BO,那么只有在设计时就知道所有BO结构(架构)的情况下才有可能。

var str = "\"RECORD_CONTACT\":\"Maram\" , \"DRUG\":\"Panadol\"";
vat objArray = str.split("reg ex to split each object string")
foreach (obj in objArray ){
if(obj.indexOf( "RECORD_CONTACT")!=-1)
    tw.local.recordContact = new tw.object.RECORD_CONTACT();
    //below goes code get value of each attribute of BPM from string
}
else if(obj.indexOf( "DRUG")!=-1){
//similar code to create BO DRUG
}

在使用它们之前不要忘记创建BO:)