判断用户在选择屏幕上输入的schema 是否符合要求,实现逻辑为:
(1)判断当前的client,是否为标准的client 000
(2)如果是标准的client 000,那么就应该 在表T52CD查询该schema对应的记录;如果不是标准的client 000,那么就应该在表 T52CC 中查询该schema对应的记录A。
查询不到记录A的话,说明该schema不存在,给出错误提示,结束处理。否则,进入第(3)步。
T52CD -- Schema Directory
T52CC -- Directory of Customer Schemas
(3)判断记录A中 execu 字段是否为空,如果为空,说明该schema为不可执行的schema,给出错误提示,结束处理。否则进入第(4)步
(4)查询表 T52BA/T52B5 ,判断该 schema是否允许该国家做使用。如果不允许该国家组使用,给出错误提示,结束处理。否则进入第(5)步
T52BA -- Assignment of Values to Customer Objects
(5)同样查询表T52BA/T52B5,判断该schema是否可用于Payroll(即它的program class 是否为 C )。如果不可以,给出错误提示。否则说明该schema是合法的。
实现代码如下所示:
FORM check_schema_allowed USING schema LIKE t52cc-sname.
DATA: standard_client LIKE sy-mandt VALUE '000'.
IF sy-mandt NE standard_client.
* customer schema
SELECT SINGLE * FROM t52cc WHERE sname EQ schema.
IF sy-subrc IS INITIAL.
IF t52cc-execu EQ space.
* message schema not executable
MESSAGE e165(pn)WITH schema.
ENDIF.
SELECT SINGLE * FROM t52ba WHERE potyp = 'SCHE' AND
ponam = schema AND
pattr = 'CNT' AND
( pwert EQ gc_molga OR
pwert EQ '*').
IF sy-subrc IS INITIAL.
SELECT SINGLE * FROM t52ba WHERE potyp = 'SCHE' AND
ponam = schema AND
pattr = 'PCL' AND
pwert = 'C'.
IF sy-subrc NE 0.
* message wrong procl
MESSAGE e166(pn)WITH schema.
ENDIF.
ELSE.
* message wrong molga
MESSAGE e167(pn)WITH schema.
ENDIF.
EXIT.
ENDIF.
ENDIF.
* SAP schema
SELECT SINGLE * FROM t52cd WHERE sname EQ schema.
IF sy-subrc IS INITIAL.
IF t52cd-execu EQ space.
* message schema not executable
MESSAGE e165(pn)WITH schema.
ENDIF.
SELECT SINGLE * FROM t52b5 WHERE potyp = 'SCHE' AND
ponam = schema AND
pattr = 'CNT' AND
( pwert EQ gc_molga OR
pwert EQ '*').
IF sy-subrc IS INITIAL.
SELECT SINGLE * FROM t52b5 WHERE potyp = 'SCHE' AND
ponam = schema AND
pattr = 'PCL' AND
pwert = 'C'.
IF sy-subrc NE 0.
* message wrong procl
MESSAGE e166(pn)WITH schema.
ENDIF.
ELSE.
* message wrong molga
MESSAGE e167(pn)WITH schema.
ENDIF.
ELSE.
* message schema does not exist
MESSAGE e168(pn)WITH schema.
ENDIF.
ENDFORM.