Отображение Biztalk, создание строки [] из строки - PullRequest
0 голосов
/ 25 октября 2011

На карте biztalk исходная схема содержит строку, а схема назначения ожидает массив строк.

Мне просто нужно создать массив строк с одной строкой, но я не могу это сделать.

Я пробовал с скриптообразным функтоидом и некоторым встроенным C #:

public Array ArrayBuilder(string param1)
{
    ArrayList result = new ArrayList();
    result.Add(param1);
    return result.ToArray(typeof( string ));
}

Но вместо массива функтоид выводит:

...
<recipients>System.String[]</recipients>
...

Любая помощь?

спасибо

EDIT

СХЕМЫ ИСТОЧНИКА

В основном список SMS (идентификатор, сообщение и номер телефона). С помощью цикла в организации я перебираю все 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" /> 

СХЕМА НАЗНАЧЕНИЯ

Для вашего удобства я не буду помещать всю схему, она автоматически генерируется из службы WCF

Recipients - массив строк, который я хочу создать из строки номера телефона, поскольку у меня только один получатель на сообщение

...
<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>
...

РЕШИТЬ:

Я использовал и скриптовый функтоид с Inline XSLT Template

<xsl:template name="recipients">
<xsl:param name="phone" />

<recipients>
    <recipient><xsl:value-of select="$phone" /></recipient>
</recipients>

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

Я бы посоветовал вам использовать шаблон XSLT для отдельных строковых значений, извлеченных вашим методом.

Итак, вы создаете свой массив и для каждой строки уходите и генерируете целевой XML.

Взгляните на Эта ссылка , в которой говорится об использовании шаблонов XSLT на вашей карте.

Без схемы назначения это все, что я могу предложить на данный момент. НТН

0 голосов
/ 25 октября 2011

Ну, в зависимости от того, что вы на самом деле должны отправлять на карту назначения, я, вероятно, сделал бы что-то вроде этого:

Предполагая, что вы получили строку flibberdyjibit и хотите сделать ее единственнойэлемент в string[] Я бы сделал:

public string[] ReturnStringArray(string input)
{
    string[] output = new string[] { input };
    return output;
}

Если вы получаете какую-то строку с разделителями, которую вам нужно превратить в массив (я собираюсь предположить Pipes), вы бысделать что-то вроде:

public string[] ReturnStringArray(string input)
{
    return input.split('|');
}

ПРИМЕЧАНИЕ. Я не скомпилировал ни один из них, и могут быть синтаксические ошибки, но intellisense должен помочь вам, если они есть.

...