Biztalk映射内联脚本全局未更新

时间:2011-06-01 21:46:23

标签: xslt 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。

3 个答案:

答案 0 :(得分:0)

由于脚本functoid没有输出,因此biztalk 2010中使用的新xslt 2评估器优化了对它的任何调用。

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

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

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

答案 1 :(得分:0)

我相信通过在映射之前设置值和/或在映射之外进行计数,我已经解决了与今年类似的问题。取决于保持状态(计数等)的XSLT(映射器)是我试图避免的。可能不是你想要的答案,但我使用.NET辅助类比试图欺骗XSLT和映射器更多。

答案 2 :(得分:0)

我发现创建业务流程并使用两个顺序转换来计算节点是最简单的。