如何在BizTalk编排xpath中将int转换为decimal

本文关键字:int 转换 decimal 中将 xpath BizTalk 编排 | 更新日期: 2023-09-27 18:22:27

如何在编排中使用xpath将int转换为decimal?当我的QuantityReturned字段调用它转换为十进制并调用webservice时,它在我的模式中是integer类型。下面是QuantityReturned的xpath查询。

QuantityReturned=xpath(OrderReturnMessage, 
                       "number(/*[local-name()='QuantityReturned' and namespace-uri()=''])");
wSReturnSuccess = WebServiceHelper.CreateReturnAAAWS
                       (System.Convert.ToDecimal(QuantityReturned));

当在xpath查询中尝试使用数字函数时,会抛出输入字符串格式不正确的错误。

如何在BizTalk编排xpath中将int转换为decimal

很可能您的xpath不正确,并且返回了一个无法转换为十进制的值。

您能根据消息xml评估您的xpath并查看实际返回的内容吗?当前表达式解析为名为QuantityReturned的非限定根级别元素的值。

除非您的消息xml与此匹配,否则您的xpath可能会返回空字符串。

除了Tom Redfern的答案(这可能是根本原因)之外,我建议将其重构为外部程序集中的调用,例如:

public static decimal StringToDecimal(string s)
{
    if (string.IsNullOrWhiteSpace(s))
    {
        // log error, throw exception, or just return a default value if acceptable
    }
    decimal d;
    if (decimal.TryParse(s, out d))
    {
        return d;
    }
    else 
    {
        // appropriately log errors and/or throw a more meaningful exception
    }
}

您还可以查看TryParse的其他重载提供的一些NumberStyles选项。

您可以在编排中执行此操作,但如果此方法变得更加复杂,它在表达式编辑器中会开始看起来非常难看,即使它在表达式编辑中也会看起来有点难看。