点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我是SAP和ABAP的新手。 我需要在表中插入多个记录。 我已经确定了对应CDS的循环,并手动插入了记录。 但是,也会执行确定的默认插入操作,即在表中插入不需要的记录。 如何停止通过默认执行路径插入记录?
我已经设置了et_failed_key,它将停止插入,但是在前端产生了一个错误。 那么,有没有更好的方法呢?
以下是代码
class/atu/cl_sf_d_ws_save_and_valid定义 上市 从/bobf/cl_lib_d_supercl_simple继承 最后 创造公众。 公共部分。 方法/bobf/if_frw_determination〜execute 重新定义。 受保护的部分。 私人部分。 结束类。 /atu/cl_sf_d_ws_save_and_valid实现类。 方法/bobf/if_frw_determination〜execute。 清除:et_failed_key,eo_message。 "使用给定的密钥读取数据 数据:lt_data类型/atu/t_sfi_work_station, ls_key类型/bobf/s_frw_key, lo_cm类型引用到/bobf/cm_frw, lv_msg类型字符串, lv_stationno类型int8, lv_stationcount类型为int8, lv_counter类型为int8。 io_read->检索( 出口 iv_node = is_ctx-node_key"节点名称的uuid it_key = it_key"确定键 输入 et_data = lt_data"带有节点数据的itab eo_message = eo_message et_failed_key = et_failed_key )。 在lt_data参考处循环到data(lo_inp)中。 *如果有多个工作站添加循环并检查迷离 如果lo_inp-> workstationno <0。 *获取车站数 lv_stationcount = abs(lo_inp-> workstationno)。 *设置站号 lv_stationno = 0。 lv_counter = 1。 数据:iztab类型/atu/sf_wkstn。 同时(lv_counter工作中心 和工厂= @ lo_inp-> factory 和工作站编号= @lv_stationno 到@data(lv_ws_items)中。 *如果不存在,添加工作站 如果lv_ws_items = 0。 *设置站号 lo_inp-> workstationno = lv_stationno。 清除iztab。 iztab-factory = lo_inp-> factory。 iztab-workcenter = lo_inp-> workcenter。 iztab-workstationno = lv_stationno。 iztab-active ='X'。 将iztab值插入/atu/sf_wkstn。 *增加计数器以添加下一个电台 将1加到lv_counter。 万一。 最后。 如果sy-subrc = 0。 提交工作。 万一。 *设置ET Failed key stop BOPF插入记录 et_failed_key = it_key。 其他。 *在CDS中搜索匹配数据 从/atu/sf_i_work_station选择单个(工作站编号) 工作中心= @ lo_inp->工作中心 和工厂= @ lo_inp-> factory 和工作站编号= @ lo_inp-> workstationno 且有效='X' 到@data(lv_codes)。 如果lv_codes不是初始的。 et_failed_key = it_key。 如果eo_message没有绑定。 eo_message =/bobf/cl_frw_factory => get_message()。 万一。 消息i001(/atu/sf_validat_msg)转换为lv_msg。 创建对象lo_cm类型/bobf/cm_frw_symsg 出口 严重性='E' 症状='000' message_text = lv_msg。 eo_message-> add_cm( 出口 io_message = lo_cm)。 返回。 万一。 万一。 结束循环。 方法。 结束类。
Thanushka Gunasekara ,
一些建议:
将"提交工作"从"循环"中删除。 那会改变一些事情。
不是将每个记录插入数据库表中。 我会将所有更新收集到一个内部表中,然后从中写入INSERT 。
清理内部表,例如没有键,重复项等的条目。
请勿在LOOP中进行数据声明。 我会避免在WHILE LOOP内选择那些单打。
您能发表您的代码吗?
嘿 Thanushka Gunasekara
因此,您说的是3条记录中如果2条正确,则执行插入,而当1条记录不正确时,您将引发错误,并且希望这2条正确的插入记录会回滚 ? 令人困惑,您能提供更多解释吗?
谢谢
Mahesh
嗨,Thanushka,
您能够解决此问题吗? 我遇到同样的问题
一周热门 更多>