Я использую IBM BPM 8.6
У меня есть следующая строка ввода:
"\"RECORD_CONTACT\":\"Maram\" , \"DRUG\":\"Panadol\"
В сценарии на стороне сервера я хочу динамически создать такой бизнес-объект:
tw.local.recordContact = Maram;
tw.local.drug = Panadol;
Как я могу динамически создавать бизнес-объект?
Есть несколько проблем с вашим запросом. Во-первых, вы не создаете бизнес-объект, вы создаете переменные. В 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
}
Не забудьте создать БО перед тем, как использовать их :)