ABAP测试驾驶舱(ATC)可以很容易地配置为检查发布的每个传输请求。
但是如果您使用传输副本导入质量/测试系统(例如,如果您使用SAP ChaRM进行传输管理),标准中不可能在从开发系统传输到质量/测试系统时自动执行ATC检查。
另一方面,在不同的地方,例如Randolf Eilenberger的SAP代码检查器手册等,企业管理软件开发,它描述了如何为每个传输任务发布触发代码检查器测试。
我还没有找到描述如何在传输任务发布时自动调用ATC。
如果这是您在开发系统中想要的,在BAdI CTS\u REQUEST\u CHECK的一个实现中,您只需要实现一个方法:
method if\u ex\u CTS\u REQUEST\u CHECK ~ CHECK\u before\u release.
DATA is \u ok TYPE abap\u bool VALUE abap\u true.
选择SINGLE trfunction,strkorr FROM e070,其中trkorr=@REQUEST
INTO(@DATA(trfunction),@数据(strkorr)).
ASSERT sy–subrc=0.
"仅处理运输任务的发布,
"不处理运输请求,
"仅处理客户代码(不包括维修,未自定义)。
检查strkorr不是初始值,trfunction='S'。
尝试
数据(或工厂)=新的cl\u satc\u api\u工厂()。
数据(it对象)=cl\u satc\u object\u set\u工厂=>为传输创建\u(请求
)->如果
satc\u object\u set ~获取\u object\u keys()。
数据(或对象)=cl\u satc\u object\u set\u工厂=>为\u object\u keys(it对象)创建\u).
数据(或_变量)=新的cl_satc_ci_check_变量()。
或_变量->设置_名称('Z_标准')。"替换为检查变量
数据(或_run_config)=或_工厂->使用_chk_变量创建_run_配置(导出i_object_set=或_objects
i_check_variant=或_变量
i_描述=|传输释放{请求}|).
数据(或\u运行\u控制器)=或\u工厂->创建\u运行\u控制器(或\u运行\u配置)。
或\u运行\u控制器->运行(导入e \u结果\u访问=数据(或\u结果\u访问))。
或\u结果\u访问->获取\u结果(导入e \u结果=数据(it \u f))。
在指定字段符号()时循环,其中(kind='e'或kind='W')"错误/警告
和"P"除外伪注释和pragmas
is\u ok=abap\u false.
EXIT.
ENDLOOP.
CATCH cx\u satc\u failure cx\u satc\u not\u found INTO DATA(cx).
DATA(exc\u text)=cx->get\u text().
MESSAGE exc\u text TYPE'E'。
is\u ok=abap\u false.
CATCH cx\u satc\u empty\u object\u set cx\u satc\u invalid\u argument INTO cx."确定,如果传输为空或只包含不可检查的对象
ENDTRY.
if is \u ok=abap \u true.
MESSAGE s007(zs \u dev \u tools \u local)。"成功消息–创建您自己的消息
ELSE.
MESSAGE s008(zs \u dev \u tools \u local)。"失败消息–创建您自己的消息
"我们只获取具有此"脏"的执行ID"cast:
数据(或结果访问量)=cast cl\u satc\u result\u access(或结果访问量)。
调用函数'satc\u AC\u displat\u result\u BY \u EXEC'
导出执行量\u id=或结果访问量\u int->if \u satc\u result\u access ~ result\u id
异常
xpt\u no\u results=1
xpt\u not\u authorized=2
xpt\u display\u used=3
其他=4.
ASSERT sy–subrc=0.
RAISE cancel.
ENDIF.
ENDMETHOD.
(此编码使用了一些新的7.40 SP08语言特性,移动物联网卡,因此您可能需要对其进行调整。)
基本上就是这样。
我注意到,包含程序的ATC方法在单独传输时不会进行测试,因为我只调用测试帧程序(type)的ATC方法1报告、类、功能组)。我没有找到一个简单的方法来克服这个问题,云服务器和服务器,使用标准的ATC框架函数,所以我在一个本地类中用以下方法编程:
类方法:
丰富主程序
如果|satc\u object\u set=>ty\u object\u keys,则更改c\u it \u keys类型,
is\u include\u program
IMPORTING i\u object TYPE if\u satc\u object\u set=>ty\u object\u key
RETURNING VALUE(r\u is\u include\u program)TYPE abap\u bool,如何做淘客,
get\u main\u programs\u for\u include
IMPORTING i\u object TYPE if\u satc\u object\u set=>ty\u object\u key
RETURNING VALUE(r\u it)TYPE if\u satc\u object\u set=>ty\u object\u key,
是否包含主程序
导入
返回值(r)类型abap\u bool,
方法丰富主程序。
在c\U it\u键处循环分配字段符号()。
如果是包含主程序()。
数据(it\u main\u程序)=获取包含主程序()。
如果it\u main\u程序不是初始的
并且不包含主程序(导出i\u it\u mainprogs=it\u main\u程序
i\u it\u current\u keys=c\u it\u键)。
插入it_main_programs[1]进入表c_it_key.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD是_include_program.
r_是_include_program=abap#false.
CHECK i_object–obj_type='PROG'。
从reposrc中选择单个subc,其中progname=@i_object–obj_name和subc='i'
进入@DATA(subc)###warn#ok#####需要。
IF sy–subrc=0.
r_is_include_program=abap_true.
ENDIF.
ENDMETHOD.
METHOD get_main_programs_for_include.
DATA it_mainprogs LIKE i_object的标准表–obj_name.
DATA wa LIKE r_it的行。
CLEAR_it如果没有主程序,return initial
CALL FUNCTION'RS\u GET\u MAINPROGRAMS'
EXPORTING
name=i\u object–obj\u name
TABLES
MAINPROGRAMS=it\u mainprogs
EXCEPTIONS
cancelled=1
OTHERS=2.
ASSERT sy–subrc=0.
wa–obj\u type='PROG.
循环在it\u mainprogs分配字段符号().
wa–obj\u name=
将wa插入表r\u it.
ENDLOOP.
ENDMETHOD.
包含方法主程序
r=abap\u false.
在i\u it\u mainprogs处循环分配字段符号()。
读取表i\u it\u当前键,键obj\u type=-obj\u type obj\u name=-obj\u name
不传输字段
如果sy–subrc=0.
r=abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
现在,需要调用enrich_main_programs()在创建它的语句之后更改它的对象。
Edit 25.04.2016:添加了cx_satc_invalid_参数的异常处理。
您好,感谢您的文档。此BADI实施将有助于处理任务级ATC检查。请您帮助我了解以下情况。
如果同一程序存在于两个不同的任务中,在第一个任务发布期间,一些错误得到QA审查员的批准。
因此,这些错误是否会在第二个任务发布期间重复??
任务和各自的运输编号发布后。再次修改了相同的程序。在此任务发布时间内,是否会再次考虑以前批准的错误?
您好,Rayudu,
这是标准的ATC功能:已授予豁免("批准")的调查结果将不会在将来出现。
,淘客帝国