"Обмен не начался". ошибка при сериализации EdiMessage

Используя код как:

...
EdiMessage ediMessage = (EdiMessage)instance;
using (FileStream ediStream = File.OpenWrite(file))
{
    using (EdifactWriter writer = new EdifactWriter(ediStream))
    {
       writer.Write(ediMessage);
    }
}

Я получаю сообщение об ошибке "Обмен не начался".

След стека под вызовом writer.Write (последняя общедоступная версия Edifabric):

at EdiFabric.Framework.Writers.EdiWriter`2.Write(EdiMessage message)

Это касается объекта INVOIC D96A с фоновой музыкой, немного FTX и UNH. Класс объекта есть. И исключение поднят EdiWriter по вызову writer.Write,

ediMessage содержание кажется действительным. В соответствии с документацией Edifabric следует автоматически добавить разделители EDIFACT по умолчанию:

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

Что я забыл настроить?

1 ответ

Кажется, ошибка документации; дефолт не происходит. При изменении кода на:

using (EdifactWriter writer = new EdifactWriter(ediStream))
{
  var unb = new UNB(); // Begin interchange.
  writer.Write(unb, Separators.Edifact);

  writer.Write(ediMessage);
}

unb вставляет заголовок в документ, после чего в этом случае добавляется одно сообщение. Код теперь вызывает "Ссылка на объект, не установленная для экземпляра объекта". со стеком вызовов

at EdiFabric.Core.Model.Edi.EdiMessage.GetControlNumber(String tag, Int32 position)

который был исправлен путем добавления:

ediMessage.ControlNumber = ...;
Другие вопросы по тегам