云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

网站建设_vps拨号服务器_是什么

小七 141 0

你好!欢迎来到我的第一篇SAP社区博客。

在我从事ABAP开发的所有岁月中,以一种简单易懂、优雅的方式修改idoc一直是一项艰巨的任务。首先是对段进行更改的问题,其次是IDoc段的正确顺序问题。

在这篇博文中,哪个云服务器好,我将展示如何轻松地对IDoc段执行创建、读取、更新和删除(CRUD)操作,由于使用了ABAP面向对象编程,什么叫云,

这篇博文最早出现在Int4博客上,

中间文档(IDoc)格式在整个SAP系统中被广泛使用,有成千上万的消息类型和无数的段类型。尽管如此,处理CRUD操作的标准方法仍然依赖于直接对包含所有消息段的内部表执行修改。这意味着您,即开发人员,好评返现模板,不仅要负责修改段中的值,大数据+,还要负责维护IDoc(段序列)的正确结构。当处理不同的IDoc类型/扩展时,这可能会很麻烦,并且会增加不必要的工作。

下面的示例显示了负责创建发票IDoc的标准逻辑,如函数ISU\IDoc\u invoice\u CREATE:

为了简化负责IDoc CRUD操作的代码,可以实现Facade模式。建议的facade由一组三个自定义类组成,它们之间的关系如下图所示:

facade对象关系UML图

简而言之,每个类负责:

ZCL\u IDOC\u EDIDD–IDOC和通用IDOC操作的根段,ZCL\U IDOC\U EDIDD\U段–IDOC和通用段操作的任何其他段,大数据收集,ZCX\u IDOC\u EXCEPTIONS–在不正确的操作(例如添加不正确类型的段)时引发的异常。

在对IDOC段进行任何修改之前,您需要创建一个表示消息的对象。您可以使用ZCL\u IDOC\u EDIDD类的CREATE\u WITH\u DATA方法来实现这一点。

正如您在上面的示例中所看到的,前两个参数定义了消息类型和扩展名。通过这种方式,lou IDOC对象能够检索有关消息结构的所有信息,这些信息是保持正确的段序列所必需的。

IT\u EDIDD参数是可选的。您应该用要修改的IDoc的EDIDD内部表填充它。

创建IDoc对象后,您就可以修改它的内容了。您可以使用ADD\u SEGMENT方法向IDoc添加新的段。记住捕获操作期间可能引发的异常,例如,如果段不是消息类型的一部分,

如您所见,无需担心添加段的位置。lou IDOC对象将自己处理它,在IDOC的根段下或最后一个父段(如果需要非根父段)下的正确位置添加段

如果找不到父段,将引发异常

您也可以直接在特定父段下添加子段

这样,您完全可以控制新段在IDoc中出现的父段。但是如何找到你感兴趣的部分呢?为此,需要使用GET\u SEGMENTS方法,该方法返回段的集合。请看下面的示例:

修改任何段都很简单,只需找到它,检索它的SDATA结构,修改它并将它放回段中。

最后但并非最不重要的是删除操作。

如果要从IDoc中删除任何段,只需使用remove\u segment方法。即使该段没有直接放置在指定的父段下,也将被删除。这意味着,如果您使用lou IDOC对象进行方法调用,则无论段在IDOC中的位置如何,都将删除该段。

值得一提的是,当您从IDOC中删除段时,其所有子段也将被删除。因此,同样地,不必费心维护消息的正确结构。

完成修改后,剩下要做的就是检索包含IDoc段的结果内部表。您可以通过调用GET\u EDIDD方法来实现这一点。

只需使用三个简单的ABAP类,就可以简化IDoc CRUD操作的实现,将段序列正确性的处理留给系统。

您可以从GitHub下载解决方案。请在评论中告诉我你的想法。