在me21n中创建po之前,必须先在dyna中使附件成为必需

2020-08-21 22:04发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Good Day Team,

我有一项要求,在ME21N中创建PO时,至少应将一个文档附加到该PO。 如果没有附加文档,在检查和保存时,我需要显示一条错误消息。

我找到了一个如下所示的网址,但idid在这里没有任何解决方法,

https: //answers.sap.com/questions/9991690/how-to-make-document-attachment-mandatory-for-po-c.html

我实现了如下代码,但是ididnt在保存并检查之前会得到任何附件。

* DATA:gs_lporb类型sibflporb,
* lt_links类型obl_t_link。
* gs_lporb-instid = lw_header_data-ebeln。
* gs_lporb-typeid ='BUS2012'。
* gs_lporb-cat 'BO'。
*
*调用方法cl_binary_relation => read_links_of_binrel
*导出
* is_object = gs_lporb
* ip_relation ='ATTA'
* ip_role ='GOSAPPLOBJ'
*正在导入
* et_links = lt_links。

您能帮我们实现这个方法吗?我需要在哪里实现逻辑?

快速解决问题,高度赞赏。

感谢与认可

卡尔帕纳(Kalpana)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Good Day Team,

我有一项要求,在ME21N中创建PO时,至少应将一个文档附加到该PO。 如果没有附加文档,在检查和保存时,我需要显示一条错误消息。

我找到了一个如下所示的网址,但idid在这里没有任何解决方法,

https: //answers.sap.com/questions/9991690/how-to-make-document-attachment-mandatory-for-po-c.html

我实现了如下代码,但是ididnt在保存并检查之前会得到任何附件。

* DATA:gs_lporb类型sibflporb,
* lt_links类型obl_t_link。
* gs_lporb-instid = lw_header_data-ebeln。
* gs_lporb-typeid ='BUS2012'。
* gs_lporb-cat 'BO'。
*
*调用方法cl_binary_relation => read_links_of_binrel
*导出
* is_object = gs_lporb
* ip_relation ='ATTA'
* ip_role ='GOSAPPLOBJ'
*正在导入
* et_links = lt_links。

您能帮我们实现这个方法吗?我需要在哪里实现逻辑?

快速解决问题,高度赞赏。

感谢与认可

卡尔帕纳(Kalpana)

付费偷看设置
发送
3条回答
骆驼绵羊
1楼-- · 2020-08-21 22:43

如果通过ME21N开始创建采购订单,附加文件并保存(创建)采购订单,会发生以下情况:

  1. 当您通过GOS服务"创建附件"附加文件时,附件将被保存并提交到数据库,但是由于采购订单尚无编号(仅在保存时分配),因此未创建链接。 附件的链接保存在CL_GOS_SRV_ATTACHMENT_CREATE的私有实例属性GT_ATTACHMENTS中的内存中。
  2. 保存采购订单时:
  3. A/进行检查(检查BAdI的方法) B/自动编号分配给采购订单,GOS服务被告知该编号,因此,GOS在采购订单和附件之间创建链接。

如果按照提供的链接中的说明在CHECK方法中获取GOS管理器实例,则还应该找到一种查询属性GT_ATTACHMENTS的方法,这并不容易,因为您不知道该实例。 CL_GOS_SRV_ATTACHMENT_CREATE,并且该属性是私有的。

仅当您可以读取GOS管理器的属性GO_MODEL时,才可以获取后一个类的实例,但这是受保护的属性。

所以,我只看到一种解决方案:

  1. 使用新的ZZ方法增强CL_GOS_MANAGER和CL_GOS_SRV_ATTACHMENT_CREATE以分别返回GO_MODEL和GT_ATTACHMENTS的内容。 然后,很容易调用ZZ方法来了解是否存在附件。

CHECK中的代码示例(我让您创建了两个ZZ方法):

 如果IM_HEADER是CL_PO_HEADER_HANDLE_MM的实例。
   data(header2)=强制转换CL_PO_HEADER_HANDLE_MM(im_header)。
   data(gos)= header2-> get_gos_manager()。
   data(gos_model)= gos-> zz_get_model()。
   数据(gos_pcatta_crea)= gos_model-> get_service_by_name('PCATTA_CREA')。
   数据(附件)= gos_pcatta_crea-> zz_get_attachments()。
   "检查附件
 万一。
 

祝你好运!

NB:也许还有其他方法可以做到,也许更简单,但这是我想到的第一个方法。

2楼-- · 2020-08-21 23:05

我读了几次您的问题,但是我不明白您的问题?

您还没有订单号吗? 保存时退出)

我们正在使用GOS Manager对象-调用方法start_service_direct以获取附件列表。 如果没有附件,则sy-subrc不会为零。

请注意-这里您需要传递文档编号(在exit.place时可能不会生成)。

数据:OBJTYPE类型BORIDENT-OBJTYPE值'ABCD'。  "您的对象NAME
 数据:经理类型参考cl_gos_manager,
 对象类型的BORIDENT。

 OBJ-OBJTYPE = OBJTYPE。
 OBJ-OBJKEY = <文档编号>。
 创建对象管理器
   出口
     ip_no_commit ='R'
   例外情况
     其他= 1。
 呼叫方法管理器-> start_service_direct
   出口
     ip_service ='VIEW_ATTA'
     is_object = obj
   例外情况
     no_object = 1
     object_invalid = 2
     execution_failed = 3
     其他= 4。
 IF sy-subrc NE 0。
   消息"未找到对象" TYPE" S"。
 ENDIF。
CPLASF-自律
3楼-- · 2020-08-21 22:42

是。简单而精确。

一周热门 更多>