【问题标题】:How to remove <string> in SMS如何删除短信中的 <string>
【发布时间】:2016-05-04 05:48:23
【问题描述】:

我有一个 BizTalk 解决方案,一旦他们的电话在我们的系统中注册,它就会向我们的客户发送 SMS。不幸的是,SMS 中会包含这样的 XML 标签。

您的 PIN 码是 1234。

如何删除短信中的 标签?我已确保我的业务流程中的消息类型是正确的,并且我的 Construct Message 形状中有以下代码。

strCellNos = classHelper.getElement(SendSMStoCustomerRequest, "cell_number");
strSMS = classHelper.getElement(SendSMStoCustomerRequest, "message");
msg_SendSMStoCustomer.parameter = strSMS;
msg_SendSMStoCustomer(SMTP.Subject) = "Test Message for " + strCellNos ;
msg_SendSMStoCustomer(SMTP.From) = "noreply@none.com";
msg_SendSMStoCustomer(SMTP.SMTPHost) = "SMTPHOST";
msg_SendSMStoCustomer(SMTP.EmailBodyText) = strSMS ;
msg_SendSMStoCustomer(SMTP.EmailBodyTextCharset)="UTF-8";
msg_SendSMStoCustomer(SMTP.SMTPAuthenticate) = 0;

【问题讨论】:

  • 应该使用元素的文本属性而不是元素本身吗?
  • Brody,我不确定您的确切意思,因为我是 BizTalk 的新手。你问的如何使用 text 属性?
  • 当您使用 getElement 时,它可能会返回整个元素,当您用作字符串时,它会返回包装元素标签。您需要使用 getElement(...).Text 或类似的东西(可能是 innerText)来获取元素文本,这将只返回元素的内部文本值。
  • 我已经在使用 innerText,我的代码如下所示: public string getElement(System.Xml.XmlDocument xmlMessage, string node) { string xmlVal = string.Empty; XmlNodeList nodeList = xmlMessage.GetElementTag(node); foreach (XmlNode xmlElement in nodeList) { xmlVal = xmlElement.InnerText; } 返回 xmlVal; } 我的代码有什么问题吗?

标签: sms biztalk


【解决方案1】:

我将在此处重复 MSDN 的回答。

只需使用平面文件架构和管道中的平面文件汇编器将传出消息视为平面文件。

相信我,这非常非常容易。您尝试的所有这些事情都是为了解决您一开始就不应该遇到的问题。

请退后一步,在开始时将 msg_SendSMStoCustomer 创建为平面文件类型。然后,它会起作用的,我向你保证。

【讨论】:

  • 请理解,这没什么特别的。这只是一个 1 字段 Flat Field 消息。你想太多了。有很多关于创建平面文件的文章和文章。
  • 这些是我为了创建和映射平面文件架构而执行的步骤。 1. 创建了一个平面文件模式。 2. 创建了一个 Biztalk 映射,它将消息来自的 XML 模式映射到平面文件模式。 3. 在我的发送管道中的文档架构字段下的平面文件汇编器中映射平面文件架构。 4. 在我的编排中的多部分消息中映射平面文件模式。 5. 在 Construct Message 形状中,我在下一个评论部分添加了这段代码。
  • PhoneNum = classHelper.getElementByTag(msg_SendSMStoCustomer, "phone"); Message = classHelper.getElementByTag(msg_SendSMStoCustomer, "message"); msg_SendSMStoCustomer.parameter = strMessage; msg_SendSMStoCustomer(SMTP.Subject) = "测试消息" + PhoneNum; msg_SendSMStoCustomer(SMTP.From) = "noreply@none.com"; msg_SendSMStoCustomer(SMTP.SMTPHost) = "SMTPHOST"; msg_SendSMStoCustomer(SMTP.SMTPAuthenticate) = 0; ***classHelper.getElementByTag 是一个类,它将提取来自请求模式的电话号码和消息字符串。
  • 不幸的是,我在测试解决方案时遇到了这个错误。执行发送管道失败:“SendSMS.Pipelines” 来源:“平面文件汇编器” 发送端口:“SendSMS.SendPort” URI:“mailto:99999999@noreply.com” 原因:文档类型“字符串”没有匹配任何给定的模式。有什么我错过的吗?
  • 抱歉,如果您不听从我们的建议,就很难提供帮助。这在另一个线程中专门解决了。您不能在发送端口上使用字符串类型。这是一条普通的平面文件消息,没有什么特别之处。
【解决方案2】:

您可以在这里查看类似的问题:Send message of System.String is wrapping xml

基本上,如果您将其分配给消息,BizTalk 将在 System.String 变量周围包裹一个 string 节点。

链接问题中的建议答案提供了一个帮助方法来规避这个问题。

【讨论】:

  • 所以我在助手中添加了代码,并在编排消息分配形状中添加了以下代码: Message = new System.Xml.XmlDocument(); Helper.H13_SendSMStoCustomer.LoadXLANGMsgFromString("test", Message);但我一直遇到错误“参数'2':无法从'System.Xml.XmlDocument'转换为'Microsoft.XLANGs.BaseTypes.XLANGMessage'”,现在我再次陷入困境。请帮忙,因为我已经在这个问题上坐了 3 天了。
  • 你不能那样做。如果您只是在开始时正确创建了传出消息,那么这些都不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多