我正在为Next of Kin $('Nok')
(see mapping table)做一些映射。
然后处理这个我有下面的Javascript。我尝试这个的原因是,有时我们会得到多个近亲属段。如果是这种情况,那么就会抛出错误,因为'DETAILS:TypeError:不支持分配给包含多个项目的列表'
var i = 0;
msg['NK1'][i]['NK1.3']['NK1.3.1'] = $('NoK')
for each ( nk1 in msg.NK1) {
nk1 = $('NoK').toString();
i++;
}
但不幸的是我的脚本不起作用。 基本上,它不会抛出任何错误,但它不会做它应该为多段做的事情。它适用于单个细分
这是我的出站信息:
NK1 | 1 | BENNY ^ BEN ^^^ MR ^^大号|< 12K1.3.1> 22℃; 12K1.3.1> 627 ^^ RELTN | PRETTY GREEN ^ LONDON ^“”^“”^ GH15 3KW ^^^ Q36 ||| ^^ RELT | 20030321 ||||||| 9 NK1 | 2 | ^^^^^^ L | SP ^^ RELTN | 41 PIPERS GREEN ^ LONDON ^“”^“”^ NW9 8UH ^^^ Q36 ||| ^^ RELT | 20010923 ||||||| 9
答案 0 :(得分:3)
我看到了几个问题。
$('Nok')
的分配是为了
仅限第一个HL7段;它不影响任何后续步骤。i
作为分配的循环控制变量和
增加但从未真正使用过。如果你只修复#2,我希望你最后重复第一段重复n次。
我建议将所有这些工作转移到单个Javascript转换器步骤中。
您可以首先查看由RegEx Mapping步骤生成的javascript,并将其转换为JS转换器中的函数 - 将i
作为变量。然后你可以修改你的循环,使其成为一个简单的for循环来调用你的函数。有点像:
for(var i = 0; i< msg['NK1'].length; i++) {
msg['NK1'][i]['NK1.3']['NK1.3.1']
= YourTransformerFunction(msg['NK1'][i]['NK1.3']['NK1.3.1'].toString());
}
您可以通过将转换器导出为XML并打开该文件来查看映射器函数生成的JavaScript。您需要替换HTML编码值,但核心将在那里。
答案 1 :(得分:3)
我没有关注你的所有代码,但这是一个开始。
要遍历所有细分,请尝试使用tis格式:
for each (seg in msg.children()) {
if (seg.name().toString() == "NK1") {
foo = bar;
}
}
循环遍历段的循环从0开始。但是,多个段从1开始编号。
如果您查看输入消息,它将是这样的:
NK1|1| ...
NK1|2| ...
NK1|3| ...
即使javascript数组从零开始。是的,这令人困惑。
我不承认:
$('NoK')
...所以我不确定你在做什么。但我可能只是在一个缓慢的早晨。
答案 2 :(得分:3)
for(var i = 0; i< msg['NK1'].length(); i++) {
msg['NK1'][i]['NK1.3']['NK1.3.1'] = YourTransformerFunction(msg['NK1'][i]['NK1.3']['NK1.3.1'].toString());
}
长度需要()
才能正常工作。