Динамически создать объект TW в IBM BPM

Я использую IBM BPM 8.6

У меня есть входная строка следующим образом:"\"RECORD_CONTACT\":\"Maram\" , \"DRUG\":\"Panadol\"

В сценарии на стороне сервера я хочу динамически создать бизнес-объект, подобный этому:

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

Как я могу динамически создать бизнес-объект?

1 ответ

Есть несколько проблем с вашим запросом. Во-первых, вы не создаете бизнес-объект, вы создаете переменные. В IBM BPM переменные должны быть объявлены во время разработки, иначе вы получите ошибку, поэтому вы пытаетесь вызвать что-то вроде -

tw.local.myVariable = 'Bob';

Вызовет исключение, если tw.local.myVariable не был объявлен. Основываясь на вашем другом вопросе, который вы задали здесь ( ссылка), я собираюсь предположить, что у вас действительно есть ЛЮБАЯ переменная, объявленная как "return", так что

tw.local.return.myVariable = 'Bob'

буду работать. Учитывая, что я основываюсь на ответе Свена, я думаю, что что-то вроде следующего будет работать (вам нужно будет проверить)

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() таким образом открывает вам все виды возможных эксплойтов. Он также будет плохо работать, если значение одного из ключей не является простым типом.

Эндрю Пайер

Чтобы лучше ответить, нужно знать, что вы собираетесь делать с динамически создаваемыми бизнес-объектами (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
}

Не забудьте создать БО перед их использованием:)

Другие вопросы по тегам