【问题标题】:Biztalk mapping inline script global not updatedBiztalk 映射内联脚本全局未更新
【发布时间】:2011-06-01 21:46:23
【问题描述】:

下午好,

问题:

我正在尝试计算 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。

【问题讨论】:

    标签: xslt biztalk


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我相信我已经通过在映射之前设置一个值和/或在映射之外进行计数来解决与几年前类似的问题。依靠 XSLT(映射器)来保持状态(计数等)是我试图避免的事情。可能不是您要寻找的答案,但我使用 .NET 辅助类的方式比试图欺骗 XSLT 和映射器的方式更多。

      【讨论】:

        【解决方案3】:

        我发现创建一个编排并使用两个顺序转换来计算节点数是最简单的。

        【讨论】:

          猜你喜欢
          • 2017-08-12
          • 2017-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多