2011-06-01 22 views
1

下午好,Biztalk的映射内嵌脚本全球没有更新

问题:

我试图在BizTalk映射来计算输出节点。 我不想使用记录计数functoid或xslt转换,因为有很多条件决定节点是否生成。

我试过

我创建了一个脚本functoid的,并宣布一个全局变量(在C#)。

// global to save count 
public int E1_Record_Count = 0; 

我创建了一个脚本functoid的输出全局变量,并将其绑到我的输出节点:

public string E1_Records() 
{ 
    return E1_Record_Count.ToString(); 
} 

我创建了一个脚本functoid的,并连接到如果一个节点控制逻辑的functoid被生产。该脚本创建计算节点的数量:

public void IncrementE1Count(string isOutput) 
{ 
    try 
    { 
    if (System.Convert.ToBoolean(isOutput) ) 
     ++E1_Record_Count; 
    } 
    catch 
    { 
    } 
} 

什么不起作用:

我总是零结果。我更改了全局声明和输出更改,以便全局似乎被声明,初始化并正确输出。为全局创建第二个声明会引发错误,因此只有一个变量的全局实例。

我注释掉了一切,但脚本中的增量线改变了全局。这使我认为它从未被执行。这个脚本functoid绑定到相同的逻辑functoid控制输出节点(我得到)。

任何想法发生了什么问题?

我使用的BizTalk Server 2010

回答

0

我发现创建编排并使用两个连续变换来计算节点是最简单的。

0

由于脚本functoid的没有产出在2010年的BizTalk使用的新的XSLT 2评估优化掉它的任何电话。

如果我添加一个输出值并将包含递增函数的脚本函数functoid连接到输出节点,那么它将被调用并且它可以工作。

此函数的任何输出都没有值,因为在调用节点时,节点的计数将不完整。所以我需要输出一些东西,但我没有任何价值。我改变了函数返回一个常量字符串,我用它来设置一个需要一个常量值的节点。

这不是一个很好的黑客,但我没有看到任何其他简单的方法来诱使xslt进行评估。

0

我相信我已经通过在映射之前设置一个值并且/或者在映射之外进行计数来解决了与这些年前类似的问题。取决于用于保持状态(计数等)的XSLT(映射器),我只是试图避免。可能不是您寻找的答案,但我使用.NET帮助程序类的方式不仅仅是试图诡计XSLT和映射程序。

+0

不是一个坏主意。我会调查它。谢谢 – Jay 2011-06-03 11:43:25