Отображение Biztalk Дата в строку - PullRequest
4 голосов
/ 27 июля 2010

Я работаю над проектом biztalk и использую карту для создания нового сообщения.

Теперь я хочу отобразить поле даты в строку.

Я думал, что смогу сделать это таким образом с помощью скрипта функции со встроенным C #

публичной строкой convertDateTime (DateTime param) {return System.Xml.XmlConvert.ToString (param, ÿyyyMMdd ");}

Но это не работает, и я получаю сообщение об ошибке. Как я могу выполнить преобразование на карте?

Это проект Biztalk 2006.

Ответы [ 5 ]

2 голосов
/ 01 августа 2010

Без подробной информации об ошибке, которую вы видите, трудно быть уверенным, но я вполне уверен, что ваша карта не работает, потому что все параметры в модуле BizTalk XSLT передаются в виде строк 1 .

Когда я пытаюсь запустить что-то вроде функции, которую вы предоставили как встроенный C #, я получаю следующую ошибку:

Объект типа «System.String» не может быть преобразован в тип «System.DateTime»

Замените свой встроенный C # на что-то вроде следующего:

public string ConvertDateTime(string param1)
{
    DateTime inputDate = DateTime.Parse(param1);
    return inputDate.ToString("yyyyMMdd");
}

Обратите внимание, что тип параметра теперь является строкой, и вы можете затем преобразовать его в DateTime и выполнить формат строки.

Как предлагали другие ответы, может быть, лучше поместить этот вспомогательный метод во внешний класс - таким образом, вы можете протестировать свой код для обработки крайних случаев, а также получить некоторое повторное использование.


1 Тот факт, что все параметры в BizTalk XSLT являются строками, может быть источником многих ошибок - еще один распространенный - математические вычисления. Если вы вернете числовые значения из своих скриптовых функций, BizTalk будет полезно конвертировать их в строки для сопоставления их с исходящей схемой, но не будет так услужливо выполнять какое-то очень случайное округление результирующих значений. Преобразование возвращаемых значений в строки самостоятельно в C # устранит этот риск и даст ожидаемые результаты.

1 голос
/ 28 июля 2010

Если вы используете маппер, вам просто нужен Scripting Functiod (да, с помощью встроенного C #), и вы должны быть в состоянии сделать:

public string convertDateTime(DateTime param)
{
    return(param.ToString("YYYYMMdd");
}

Насколько я знаю, вам в любом случае не нужно вызывать пространство имен System.Xml.

0 голосов
/ 03 июля 2014

Этот блог решит вашу проблему.

http://biztalkorchestration.blogspot.in/2014/07/convert-datetime-format-to-string-in.html?view=sidebar

С уважением, AboorvaRaja Бангалор + 918123339872

0 голосов
/ 29 июля 2010

Я бы предложил

public static string DateToString(DateTime dateValue)
{
    return String.Format("{0:yyyyMMdd}", dateValue);
}

Вы также можете создать внешний Lib, который обеспечит большую гибкость и возможность повторного использования:

public static string DateToString(DateTime dateValue, string formatPicture)
{
    string format = formatPicture;

    if (IsNullOrEmptyString(formatPicture)
    {
        format = "{0:yyyyMMdd}";
    }

    return String.Format(format, dateValue);
}

public static string DateToString(DateTime dateValue)
{
    return DateToString(dateValue, null);
}

Я склонен перемещать каждую функцию, которую я использую дважды, внутривстроенный скрипт во внешнюю библиотеку.Iit предоставит вам хорошо протестированный код для всех крайних случаев, которые могут предоставить ваши данные, потому что есть возможность создавать тесты для этих внешних функций lib, в то время как сложно проводить хорошее тестирование встроенных скриптов в картах.

0 голосов
/ 28 июля 2010

Учитывая, что карты в BizTalk реализованы как таблицы стилей XSL, при передаче данных в функцию сценариев msxsl обратите внимание, что данные будут одного из типов в Equivalent .NET Framework Class (Types) из этой таблицы здесь . Вы заметите, что System.DateTime нет в списке.

Для анализа xs:dateTime с я обычно получаю узел /text(), а затем анализирую параметр из System.String:

<CreateDate>
    <xsl:value-of select="userCSharp:GetDateyyyyMMdd(string(s0:StatusIdChangeDate/text()))" />
</CreateDate>

А потом скрипт C #

<msxsl:script language="C#" implements-prefix="userCSharp">
<![CDATA[
public System.String GetDateyyyyMMdd(System.String p_DateTime)
{
    return System.DateTime.Parse(p_DateTime).ToString("yyyyMMdd");
}
]]>
...