Установка разделителей EDIFACT в соглашении сторон

В настоящее время я внедряю решение EDI в BizTalk Server 2010. Вот сценарий:

BizTalk отвечает за правильную маршрутизацию сообщений между почтовым ящиком X.400 и программным обеспечением ERP клиента. Он также используется для размещения информации об обмене сообщениями на сайте SharePoint с помощью веб-сервисов SharePoint.
Я использую ролевые ссылки и управление участниками BizTalk для применения правильных настроек (порты отправки, пароль в сегменте UNB6 и т. д.). ).

Теперь у меня есть следующий вопрос:
когда я пытаюсь получить исходящее сообщение INVOIC из системы ERP клиента, извлечь соответствующую информацию в оркестровке и записать ее на сайт SharePoint, порт получения, использующий конвейер получения EDI, получает приостановлено со следующим сообщением об ошибке:

An output message of the component "EDI disassembler" in receive pipeline 
"**********.Pipelines.FileNamePromotionEDIReceivePipeline, **********.Pipelines, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=****************" is suspended 
due to the following error: 
     Error: 1 (Miscellaneous error)
     33: Invalid occurence outside message, package or group.
The sequence number of the suspended message is 1. 

Это происходит потому, что сообщение использует CR и LF в качестве суффиксов после каждого разделителя сегментов. Теперь я мог бы добавить ASCII-hex-коды для CR и LF в настройку "EfactDelimiters" пайплайна, но проблема в том, что есть другие сообщения без CR и LF, которые потом нельзя было бы получить с помощью того же пайплайна. Между прочим, когда я получаю одно из этих сообщений без CR и LF, используя конвейер, также без CR и LF, установленных в качестве разделителей, принимающий порт также приостанавливается, на этот раз с сообщением об ошибке в результате использования точек вместо запятых в качестве десятичного разделителя (хотя я включил параметр «UseDotAsDecimalSeparator» в конвейере). Опять же, помогает только изменение EfactDelimiters.

Я думал, что страница «Набор символов и разделители» в соглашении сторон должна была сделать именно это возможным: установить разделители индивидуально для каждой деловой стороны. Но изменения, которые я делаю в этих настройках, похоже, не имеют никакого эффекта. Я установил «UNA6 Suffix» на «CR LF» и «Decimal Notation (UNA3)» на «.(Decimal)», перезапустил экземпляр хоста... та же проблема.

Кто-нибудь может помочь?


person Prometheus    schedule 14.02.2013    source источник


Ответы (1)


Я никогда не использовал biztalk, но я знаю свой EDIFACT, и, насколько мне известно, сообщения, содержащие CR/LF, синтаксически неверны. Суффикс UNA6, по-видимому, является добавлением Microsoft, поскольку я не могу найти его следов в официальных документах по ЭДИФАКТ по ​​адресу ЕЭК ООН< /а>.

Обычно символы, которые вы хотите использовать в качестве специальных символов в сообщении EDIFACT, задаются специальным (необязательным) сегментом UNA, который всегда идет первым. Когда вы пишете, вы устанавливаете разделители/разделители, я действительно не знаю, что вы имеете в виду, так как это может относиться либо к настройке параметров для созданного сообщения (какие разделители используются в сообщении), установка разделителей используется для синтаксического анализа принимающей программой или может относиться к символам, напечатанным в сегменте UNA.

Знайте, в сегменте UNA нет известного мне способа указать на использование какого-либо суффикса UNA6 (как совершенно ясно указано в документах, сегмент UNA должен иметь длину ровно 9 символов, см. 8.3 Правила форматирования обмена). Это приводит меня к выводу, что вы устанавливаете параметры для создаваемых сообщений. Я бы не советовал использовать суффикс UNA6, если этого можно избежать. Людям может быть приятно прочитать сообщение, но оно не относится к этому и бесполезно для чтения машиной.

Если принимающая программа не имеет возможности разрешить необязательное появление CR / LF, и вы не можете избежать смешивания этих сообщений с типом, я не вижу для вас другого пути, кроме как каким-то образом вставить небольшую программу, которая избавляется от CR /ЛФ.

Самый важный принцип, конечно, состоит в том, чтобы программа-отправитель и программа-получатель использовали один и тот же синтаксис, иначе она не сможет работать. То же самое касается проблемы с десятичным разделителем. По состоянию на Синтаксические правила, 10.1, разрешена либо запятая, либо точка, что является довольно расплывчатым определением. Если вы хотите сэкономить, отправьте сегмент UNA, указав, какой из них вы используете, а затем используйте только его.

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

person kratenko    schedule 16.07.2013