SAP加密和安装自己的源代码


SE37:新建函数:ZINSTALL

包含文件:ZINSTALL

 1 IF report IS INITIAL.
 2   CALL FUNCTION 'RSS_PROGRAM_CREATE'
 3     IMPORTING
 4       e_program_name = report.
 5 ENDIF.
 6 INSERT REPORT report FROM code.
 7 IF sy-subrc = 0.
 8   COMMIT WORK.
 9   str = '程序:' && report && '安装成功!'.
10 ELSE.
11   ROLLBACK WORK.
12   str = '程序:' && report && '安装失败!'.
13 ENDIF.
14 REFRESH:code.

包含文件:ZENCRYCODE

 1 TRY.
 2     CONDENSE:report.
 3     DATA:lv_str    TYPE string,
 4          ls_data   TYPE REF TO data,
 5          lt_data   TYPE TABLE OF reposrc,
 6          lo_sql    TYPE REF TO cl_sql_statement,
 7          lx_sql    TYPE REF TO cx_sql_exception,
 8          lo_result TYPE REF TO cl_sql_result_set,
 9          lv_uflag  TYPE i VALUE 1,
10          lv_dbname TYPE dbcon_name,
11          lv_dbuser TYPE dbcon_uid,
12          lv_dbtab  TYPE tabname.
13     DATA:e        TYPE REF TO cx_root,
14          err_text TYPE string.
15     DATA:lv_code TYPE reposrc-data.
16 *    SELECT SINGLE * INTO @DATA(ls_prog) FROM reposrc WHERE progname = @report.
17 *    lv_code = ls_prog-data.
18     lv_dbname = 'DEFAULT'.
19     SELECT SINGLE schemaname INTO lv_dbuser FROM db6navsyst WHERE sysid = sy-sysid.
20     lv_dbtab = 'REPOSRC'.
21     CREATE OBJECT lo_sql EXPORTING con_ref = cl_sql_connection=>get_connection( lv_dbname ).
22     lv_dbtab = lv_dbuser && `.` && lv_dbtab.
23 
24     lv_str = `SELECT * FROM ` && lv_dbtab && ` WHERE PROGNAME = '` && report && `'`.
25     lo_result = lo_sql->execute_query( lv_str ).
26     GET REFERENCE OF lt_data INTO ls_data.
27     lo_result->set_param_table( ls_data ).
28     lo_result->next_package( ).
29     lo_result->close( ).
30     IF lines( lt_data ) > 0.
31       READ TABLE lt_data INTO DATA(ls_dataline) INDEX 1.
32       lv_code = ls_dataline-data.
33     ENDIF.
34     lv_str = `UPDATE ` && lv_dbtab && ` SET DATA = '` && lv_code && `' WHERE PROGNAME = '` && report && `'`.
35     lv_uflag = lo_sql->execute_update( lv_str ).
36     IF lv_uflag = 1.
37       str = str &&'程序:' && report && '加密成功!'.
38     ELSE.
39       str = str && '程序:' && report && '加密失败!'.
40     ENDIF.
41 *    CALL FUNCTION 'LIST_FREE_MEMORY'.
42   CATCH cx_root INTO e.
43     err_text = e->get_text( ).
44     WRITE:icon_red_light,err_text.
45 ENDTRY.