点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好。
我有以下情况:下达订单后,我需要从订单维护中更改日期字段。
发生发布时,我需要从交易IW32获得的红色日期如下所示的字段日期,以获取发布日期。
在Tcode SWETYPV中,对于BOR BUS2007,我创建了一个在发布维护订单时调用ZFM的规则。
ZFM代码:
FUNCTION ZPM_DATA_BASE。 *" ------------------------------------------------ ---------------------- *" *"本地接口: *"正在导入 *" VALUE(OBJTYPE)类型SWETYPECOU-OBJTYPE *" VALUE(OBJKEY)类型SWEINSTCOU-OBJKEY *" VALUE(事件)类型SWETYPECOU-EVENT *" VALUE(RECTYPE)TYPE SWETYPECOU-RECTYPE *"表格 *" EVENT_CONTAINER结构SWCONT可选 *" ------------------------------------------------ ---------------------- 数据:BAPI_ALM_ORDER_METHOD的T_METHODS类型标准表, BAPI_ALM_ORDER_HEADERS_I的T_HEADER类型标准表, T_HEADER_UP BAPI_ALM_ORDER_HEADERS_UP的标准表, T_return TYPE BAPIRET标准表2。 数据:类似于T_METHODS的W_METHOD行, W_HEADER之类的T_HEADER行, W_HEADER_UP像LINE OF T_HEADER_UP, w_return像LINE OF T_RETURN, V_DATA TYPE JCDS-UDATE, V_OBJNR类型AUFK-OBJNR, V_AUART TYPE AUFK-AUART, V_objkey TYPE aufk-AUFNR。 将'00'OBJKEY连接到V_OBJKEY。 W_METHOD-REFNUMBER ='000001'。 W_METHOD-OBJECTTYPE ='HEADER'。 W_METHOD-METHOD ='CHANGE'。 W_METHOD-OBJECTKEY = v_OBJKEY。 将W_METHOD附加到T_METHODS。 清除W_METHOD。 W_METHOD-METHOD ='保存' 将W_METHOD附加到T_METHODS。 将'OR00'对象键连接到V_OBJNR中。 选择日期 从JCDS 进入V_DATA 其中OBJNR = V_OBJNR并且STAT ='I0002'。 ENDSELECT。 检查SY-SUBRC = 0。 W_HEADER-ORDERID = V_OBJKEY。 W_HEADER-START_DATE = V_DATA。 将W_HEADER附加到T_HEADER。 W_HEADER_UP-START_DATE ='X'。 APPEND W_HEADER_UP到T_HEADER_UP。 选择AUART 从AUFK 进入V_AUART AUFNR = OBJKEY。 ENDSELECT。 通话功能'BAPI_ALM_ORDER_MAINTAIN' *出口 * IV_MMSRV_EXTERNAL_MAINTENACE = 桌子 IT_METHODS = T_METHODS IT_HEADER = T_HEADER IT_HEADER_UP = T_HEADER_UP * IT_HEADER_SRV = * IT_HEADER_SRV_UP = * IT_USERSTATUS = * IT_PARTNER = * IT_PARTNER_UP = * IT_OPERATION = * IT_OPERATION_UP = * IT_RELATION = * IT_RELATION_UP = * IT_COMPONENT = * IT_COMPONENT_UP = * IT_OBJECTLIST = * IT_OBJECTLIST_UP = * IT_OLIST_RELATION = * IT_TEXT = * IT_TEXT_LINES = * IT_SRULE = * IT_SRULE_UP = * IT_TASKLISTS = * EXTENSION_IN = 返回= T_RETURN * ET_NUMBERS = * IT_REFORDER_ITEM = * IT_REFORDER_ITEM_UP = * IT_REFORDER_SERNO_OLIST_INS = * IT_REFORDER_SERNO_OLIST_DEL = * IT_PRT = * IT_PRT_UP = * IT_REFORDER_OPERATION = * IT_SERVICEOUTLINE = * IT_SERVICEOUTLINE_UP = * IT_SERVICELINES = * IT_SERVICELINES_UP = * IT_SERVICELIMIT = * IT_SERVICELIMIT_UP = * IT_SERVICECONTRACTLIMITS = * IT_SERVICECONTRACTLIMITS_UP = * ET_NOTIFICATION_NUMBERS = * IT_PERMIT = * IT_PERMIT_UP = * IT_PERMIT_ISSUE = * IT_ESTIMATED_COSTS = 。 使用键类型='E'将表T_RETURN读入W_RETURN。 如果sy-SUBRC <> 0。 调用功能" BAPI_TRANSACTION_COMMIT"。 万一。 ENDFUNCTION。
当我在SE37中测试FM时,它工作正常。 但是当我下达订单时,一切都会发生。
我们可以在SWEL中看到事件正在调用FM。
我也不知道为什么两次调用FM。 :(
我们在下面的图像中可以看到,该事件已正确调用,但是对象键(在这种情况下为订单号)没有传递给ZFM。
我不知道这是否是唯一的问题。 这是我的第一次。
请帮助我。
问候。
(49.8 kB)
错误在以上几行中。 objkey的左侧带有" 00"。 因此,第一行是不必要的。 我不再使用V_OBJKEY,仅使用OBJKEY。
在第二行中,我将" OR00"更改为" OR"。
FM正常运行。 但是,当订单被释放并保存时,IW32仍会阻止该订单,因此当我调用BAPI时,会返回错误。 我更正了此问题,将代码"等待最多X秒"放在了BAPI代码上方。
这不是一种优雅的方法,但是它可以工作。
关于。
感谢您的反馈。 您不应该实施工作流来更改已发布的对象。 我很惊讶在下达订单时没有用户退出来修改相关日期(AUFK-SDATE?)。
我想FM BAPI_ALM_ORDER_MAINTAIN也会触发您的事件 。 这就是为什么它触发两次。 如果您可以避免它,这将起作用。
您可以检查标准工作流程 WS20000014 一个>,发布了它如何工作的过程。 您可以配置该工作流程,然后针对已发布的版本进行尝试。
一周热门 更多>