如何在BizTalk orchestration xpath中将int转换为十进制?

时间:2015-11-19 07:43:37

标签: c# xpath biztalk

如何使用xpath在Orchestration中将int转换为十进制?我的QuantityReturned字段在我的模式中是类型整数,当它调用它转换为十进制的web服务并调用webservice时。下面是QuantityReturned的xpath查询。

QuantityReturned=xpath(OrderReturnMessage, 
                       "number(/*[local-name()='QuantityReturned' and namespace-uri()=''])");

wSReturnSuccess = WebServiceHelper.CreateReturnAAAWS
                       (System.Convert.ToDecimal(QuantityReturned));

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

除了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选项。

可以在业务流程中执行此操作,但如果此方法变得更复杂,它将在表达式编辑器中开始显得非常难看 - 即使它看起来像是在表达式编辑器中有点难看。