0

使用如下代码:

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

它涉及一个带有 BGM、一些 FTX 和一个 UNH 的 D96A INVOIC 对象。对象类是 。EdiWriter 在调用时引发了异常writer.Write

内容ediMessage似乎有效。根据 Edifabric文档,它应该自动添加默认的 EDIFACT 分隔符:

如果没有明确指定,作者将使用每个标准的默认分隔符:

我忘了设置什么?

4

1 回答 1

0

这似乎是一个文档错误;违约不会发生。将代码更改为:

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 = ...;
于 2017-09-05T20:04:25.737 回答