在biztalk地图中,源架构有一个字符串,目标架构正在等待字符串数组。
我只需要创建一个只有一个字符串的字符串数组,但我无法创建它。
我尝试使用脚本functoid和一些内联C#:
public Array ArrayBuilder(string param1)
{
ArrayList result = new ArrayList();
result.Add(param1);
return result.ToArray(typeof( string ));
}
但是,而不是数组,functoid输出:
...
<recipients>System.String[]</recipients>
...
任何帮助?
感谢
修改
SOURCE SCHEMAS
基本上是短信列表(身份证,短信和电话号码)。通过orchrestation中的循环,我遍历所有SMS并准备SMSSend消息。这个映射将发生在列表中的每个SMS上(这就是为什么我有一个计数器)
电话号码是我遇到问题的字符串
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/ADOSybaseWCFServices" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/ADOSybaseWCFServices" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SMSBatch">
<xs:sequence>
<xs:element name="IDBatch" type="xs:int" />
<xs:element name="SMSList" nillable="true" type="tns:ArrayOfSMS" />
</xs:sequence>
</xs:complexType>
<xs:element name="SMSBatch" nillable="true" type="tns:SMSBatch" />
<xs:complexType name="ArrayOfSMS">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="SMS" nillable="true" type="tns:SMS" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfSMS" nillable="true" type="tns:ArrayOfSMS" />
<xs:complexType name="SMS">
<xs:sequence>
<xs:element name="ID" type="xs:int" />
<xs:element name="Message" nillable="true" type="xs:string" />
<xs:element name="PhoneNumber" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="SMS" nillable="true" type="tns:SMS" />
计数器:
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://SendSMS.counterSchema" targetNamespace="http://SendSMS.counterSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element default="0" name="counter" type="xs:int" />
DESTINATION SCHEMA
为了您的理智,我不会放置整个架构,它是从WCF服务自动生成的
收件人是我想从phonenumber字符串创建的字符串数组,因为我每封邮件只有一个收件人
...
<xml>
<complexType name="ArrayOf_soapenc_string">
<complexContent mixed="false">
<restriction xmlns:q1="http://schemas.xmlsoap.org/soap/encoding/" base="q1:Array">
<attribute xmlns:d5p1="http://schemas.xmlsoap.org/wsdl/" d5p1:arrayType="q1:string[]" ref="q1:arrayType" />
</restriction>
</complexContent>
</complexType>
<complexType name="Submission" abstract="true">
<sequence>
<element xmlns:q2="http://mobicomp.com/smsexpress/webservice/server/message" name="contactLists" nillable="true" type="q2:ArrayOf_soapenc_string" />
<element name="deliveryDate" nillable="true" type="dateTime" />
<element name="notification" type="boolean" />
<element xmlns:q3="http://schemas.xmlsoap.org/soap/encoding/" name="notificationRecipient" nillable="true" type="q3:string" />
<element xmlns:q4="http://schemas.xmlsoap.org/soap/encoding/" name="notificationType" nillable="true" type="q4:string" />
<element xmlns:q5="http://mobicomp.com/smsexpress/webservice/server/message" name="recipients" nillable="true" type="q5:ArrayOf_soapenc_string" />
<element xmlns:q6="http://schemas.xmlsoap.org/soap/encoding/" name="sender" nillable="true" type="q6:string" />
<element name="validity" type="int" />
</sequence>
</complexType>
</xml>
...
解决:
我在内联XSLT模板中使用了Scripting functoid
<xsl:template name="recipients">
<xsl:param name="phone" />
<recipients>
<recipient><xsl:value-of select="$phone" /></recipient>
</recipients>
答案 0 :(得分:0)
那么,根据您实际应该发送到目标地图的内容,我可能会这样做:
假设您收到一个字符串flibberdyjibit
,并希望将其作为我string[]
中唯一的项目:
public string[] ReturnStringArray(string input)
{
string[] output = new string[] { input };
return output;
}
如果你收到某种分隔的字符串,你需要变成一个数组(我将假设Pipes)你会做类似的事情:
public string[] ReturnStringArray(string input)
{
return input.split('|');
}
注意:我没有编译其中任何一个,并且可能存在语法错误,但如果存在,intellisense应该可以帮助你。
答案 1 :(得分:0)
我建议您考虑使用XSLT模板来处理由您的方法提取的各个字符串值。
因此,您创建了数组,并为每个字符串生成目标Xml。
查看This Link,其中讨论了如何在地图中使用XSLT模板。
如果没有目标架构,那么我现在就可以建议。 HTH