首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“没有开始换乘。”序列化EdiMessage时出错

“没有开始换乘。”序列化EdiMessage时出错
EN

Stack Overflow用户
提问于 2017-09-05 19:14:30
回答 1查看 97关注 0票数 0

使用的代码如下:

代码语言:javascript
复制
...
EdiMessage ediMessage = (EdiMessage)instance;
using (FileStream ediStream = File.OpenWrite(file))
{
    using (EdifactWriter writer = new EdifactWriter(ediStream))
    {
       writer.Write(ediMessage);
    }
}

我收到一条错误消息:“没有启动交换。”

writer.Write调用(Edifabric的最后一个公共版本)下面的堆栈跟踪:

代码语言:javascript
复制
at EdiFabric.Framework.Writers.EdiWriter`2.Write(EdiMessage message)

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

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

如果没有显式指定,写入器将按照以下标准使用默认分隔符:

我忘了做什么了?

EN

回答 1

Stack Overflow用户

发布于 2017-09-05 20:04:25

这似乎是一个文档错误;默认情况不会发生。将代码更改为:

代码语言:javascript
复制
using (EdifactWriter writer = new EdifactWriter(ediStream))
{
  var unb = new UNB(); // Begin interchange.
  writer.Write(unb, Separators.Edifact);

  writer.Write(ediMessage);
}

unb在文档中插入一个标头,在此之后添加一条消息。该代码现在引发一个“对象引用未设置为对象的实例”。带调用堆栈

代码语言:javascript
复制
at EdiFabric.Core.Model.Edi.EdiMessage.GetControlNumber(String tag, Int32 position)

它通过添加以下内容加以修正:

代码语言:javascript
复制
ediMessage.ControlNumber = ...;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46061870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档