Xslt Biztalk映射内联脚本全局未更新
下午好 问题: 我正在尝试计算biztalk映射中的输出节点数。 我不想使用“记录计数”functoid或xslt转换,因为有很多条件决定是否生成节点 我所尝试的: 我创建了一个脚本functoid并声明了一个全局变量(在C#中) 我创建了一个脚本functoid来输出全局变量,并将其绑定到我的输出节点:Xslt Biztalk映射内联脚本全局未更新,xslt,biztalk,Xslt,Biztalk,下午好 问题: 我正在尝试计算biztalk映射中的输出节点数。 我不想使用“记录计数”functoid或xslt转换,因为有很多条件决定是否生成节点 我所尝试的: 我创建了一个脚本functoid并声明了一个全局变量(在C#中) 我创建了一个脚本functoid来输出全局变量,并将其绑定到我的输出节点: public string E1_Records() { return E1_Record_Count.ToString(); } 我创建了一个脚本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。由于脚本functoid没有输出,Biztalk 2010中使用的新xslt 2计算器优化了对它的所有调用 如果我添加一个输出值并将包含递增函数的脚本functoid连接到一个输出节点,那么它将被调用并工作 此函数的任何输出都没有值,因为调用它时节点的计数将不完整。所以我需要输出一些东西,但我没有任何价值。我更改了函数以返回一个常量字符串,用于设置需要常量值的节点
这不是一个好方法,但我看不到任何其他简单的方法可以欺骗xslt对其进行评估。我相信我已经解决了类似于几年前的问题,方法是在映射之前设置一个值和/或在映射之外进行计数。依靠XSLT(映射器)保持状态(计数等)是我试图避免的事情。可能不是您要寻找的答案,但我使用.NET helper类的方式比尝试欺骗XSLT和映射器要多。我发现创建编排并使用两个顺序转换来计算节点数是最简单的
public void IncrementE1Count( string isOutput )
{
try
{
if ( System.Convert.ToBoolean( isOutput ) )
++E1_Record_Count;
}
catch
{
}
}