麻烦复杂的路由规则

时间:2016-01-14 22:39:59

标签: intersystems-ensemble

我有一个名为BlockCustomer的查找表。我还有一个FTP适配器,可以从多个客户那里获取文件。我需要能够从文件源确定客户并在表上进行查找。如果BlockCustomer.Customer1 = 0,那么它会将它发送给它的目标,否则它什么都不做。

如果我可以使用javascript,我会做这样的事情:

WHEN Lookup(BlockCustomer,HL7.Source.split("/incoming/")[1].split("/")[0]),1) = 0

但显然我不能。我找到了$ZSTRIP,但我不确定它是否或如何运作。这是可能的还是我将不得不创建一个自定义类?

1 个答案:

答案 0 :(得分:2)

在Cache中,如果需要通过分隔符获取字符串的某些部分,我们使用函数$piece。对于规则,您可以使用名为Piece的相同函数,使用相同的参数。所以你的条件应该是这样的:

    CREATE OR REPLACE TRIGGER tri_order
       BEFORE INSERT
       ON orders
       FOR EACH ROW
    BEGIN
       SELECT ID
       INTO   :NEW.o_id
       FROM   customer;
    END;

顺便说一句,如果你认为你需要一些特定的功能,你可以通过开发来实现。只需扩展类Lookup(BlockCustomer,Piece(HL7.Source,"/incoming/",2),1)=0 并添加方法即可。并且功能将以相同的名称出现。作为示例,您可以在Ens.Rule.FunctionSet类中看到,它包含几乎所有可用的函数。