欢乐处理多个细分

时间:2012-03-30 11:51:07

标签: mirth

我正在为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

3 个答案:

答案 0 :(得分:3)

我看到了几个问题。

  1. 您在第一个变压器步骤中对$('Nok')的分配是为了 仅限第一个HL7段;它不影响任何后续步骤。
  2. 您的Javascript函数正在混合/匹配两种不同的方法 循环 - 一方面试图为每一个和另一个做一个 使用i作为分配的循环控制变量和 增加但从未真正使用过。
  3. 如果你只修复#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)

我没有关注你的所有代码,但这是一个开始。

  1. 要遍历所有细分,请尝试使用tis格式:

    for each (seg in msg.children()) {
        if (seg.name().toString() == "NK1") {
            foo = bar;
        }
    }
    
  2. 循环遍历段的循环从0开始。但是,多个段从1开始编号。

  3. 如果您查看输入消息,它将是这样的:

    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());
}

长度需要()才能正常工作。