SM30增强功能的实现

上一篇文章连煽情加引诱,嚯,果不其然,小伙伴们吃这一套,都纷纷表示已经搬好马扎,准备好了啤酒饮料花生米,坐等如何把这一坨程序融入到SM30了。

虽然我这几天忙的有点头大,但是俺们向来一言九鼎,决不食言,还是言简意赅的来一个无废话版的使用方法,下面用一个实例来说明:

假设有这么一个配置表:

8b2cb44eaf741865a9d16cb7b46be2e3.png

需求是:工厂、库存地、物料、数量都是用户输入,基本单位自动带过来物料的基本单位。在SM30维护的时候需要带出来库存地名称,物料描述,但是不需要保存(插一句,但凡在自定义表里面保存诸如物料描述等主数据描述的,都是雏儿,描述一变更就傻眼)。

1、首先给表定义好外键:
外键的用途一个是SM30维护的时候能自动带出来Search Help,再就是可以做值的有效性检查,还有就是自动带出描述也需要有外键。

9967e59e3fee69f8c38d7a0a6bf99bc3.png

2.、创建一个维护视图ZSM30T3V:
非常不建议直接对表做表维护生成器,原因挺多,比如我们这次要做的,如果直接对表ZSM30T3做表维护生成器,如果想带出来库存地的描述和物料描述就得费很大劲,还要写SM30的Event,所以大家都养成创建一个维护视图再创建维护生成器的习惯。
有三个字段设置为R(只读),是因为两个描述需要自动带出来,不样修改,另一个是单位,也是自动带出来的,也不让修改。

bfca19708fae39ab5900c73b0945a865.png

cddb8a326ea1557e5fcecadc03b13e0d.png

9c229941db4cf0ba46cac8c7d87abf8f.png

3、现在,一个表格维护器就做好了,可以使用SM30来维护:
输入该输入的,能带出来该带出来的,很好。

70cf57c3f0d1b2b0213cfae37ecda94a.png

0f1dce1a9f61b0e2c89f7cce11038e41.png

好了,进入今天的正题了,先新建一个I类型程序,
程序名:ZSM30ADDONI01,把昨天的那一坨代码贴进去,保存,激活之。
这个步骤只需要做这一次,以后就不需要做了。

9dedd0a9f06b84b315cb789972fbb12f.png

接着就要开始打补丁了,相当的简单,掏出来程序:ZSM30ADDON,填上刚维护视图的名称,点一下执行,Duang~走你~

fdc046e9a6881795e940355e736097a0.png

b80907186407576dbd386d282b0dcc21.png

96b695c3a69dd0d71f199ee2d3f76364.png

欧了,现在再去SM30看看:

005f7061ed190dba59d1b5488805b682.png


就这么简单?对,就是这么简单。
因为复制的ZSM30ADDON的GUI状态,按钮都已经加好了,所以没有添加按钮的过程。

对函数组的修改主要有下面这些:

d9e21eb6b8fe7792d4c388ebf004e1e2.png

9130f12b213c4946b9a4560bc32a9e32.png


下面是自动Duang程序ZSM30ADDON的代码:

b392076dfdcd8491914caf79ea2b2033.png

*&---------------------------------------------------------------------*
*& SM30扩展功能
*& Baitianzhen 2019-7-24
*&---------------------------------------------------------------------*
REPORT  zsm30status NO STANDARD PAGE HEADING .


TABLES: tvdir,tvimf.
DATA: h TYPE d020s.
DATA: f TYPE TABLE OF d021s WITH HEADER LINE.
DATA: e TYPE TABLE OF d022s WITH HEADER LINE.
DATA: m TYPE TABLE OF d023s WITH HEADER LINE.
DATA: dy_id  TYPE dynpro_id,
      dy_msg TYPE char256,
      dy_lnr TYPE sy-tabix,
      dy_wrd TYPE d021s-fnam.
DATA: lines TYPE i.
DATA: trkorr TYPE e070-trkorr.
DATA: funcpool TYPE trdir-name. "维护程序生成的函数组主程序名
DATA: inc_name TYPE program VALUE 'ZSM30ADDONI01'.
DATA: it_pcode TYPE STANDARD TABLE OF char256.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE btxt1.
PARAMETERS p_mview TYPE viewname16 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE btxt2.
PARAMETERS: p_copy AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b2.


AT SELECTION-SCREEN OUTPUT.
  btxt1 = '维护视图'.
  btxt2 = '选项'.
  %_p_mview_%_app_%-text = '维护视图名称'.
  %_p_copy_%_app_%-text  = 'COPY工具栏'.


START-OF-SELECTION.
  SELECT SINGLE * FROM tvdir WHERE tabname = p_mview.
  IF sy-subrc <> 0 OR tvdir-area = ''.
    MESSAGE s000(oo) WITH '还没有维护视图'.
  ELSEIF tvdir-bastab = 'X'.
    MESSAGE s000(oo) WITH '不是针对视图创建的Table maintenance'.
  ELSE.
    CONCATENATE 'SAPL' tvdir-area INTO funcpool.
    IF p_copy = 'X'.
      CALL FUNCTION 'RS_CUA_COPY'
        EXPORTING
          cobjectname     = funcpool
          objectname      = 'ZSM30ADDON'
          suppress_checks = 'X'
        EXCEPTIONS
          OTHERS          = 9.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


      CALL FUNCTION 'RS_TOOL_ACCESS'
        EXPORTING
          operation        = 'ACTIVATE'
          object_name      = funcpool
          enclosing_object = funcpool
          object_type      = 'CUAD'
        EXCEPTIONS
          OTHERS           = 9.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


      tvimf-tabname  = p_mview.
      tvimf-event    = 'ST'.
      tvimf-formname = funcpool.
      MODIFY tvimf FROM tvimf.


      UPDATE eudb SET langu = sy-langu
        WHERE relid = 'CU' AND
              name  = funcpool.
    ENDIF.


    IF tvdir-devclass <> '$TMP'.
      PERFORM tvimf_request USING p_mview.
    ENDIF.


***屏幕流添加MODULE
    dy_id-prog = funcpool.
    dy_id-dnum = tvdir-liste.
    IMPORT DYNPRO h f e m ID dy_id.


    FIND 'HIDE_POSITION_BUTTON' IN TABLE e IGNORING CASE.
    IF sy-subrc <> 0.
      FIND 'LISTE_INITIALISIEREN' IN TABLE e IGNORING CASE MATCH LINE lines.
      IF sy-subrc = 0.
        lines = lines + 1.
        INSERT ' MODULE HIDE_POSITION_BUTTON.' INTO e INDEX lines.
      ENDIF.
    ENDIF.


    FIND 'ZSM30ADDON_COMMAND' IN TABLE e IGNORING CASE.
    IF sy-subrc <> 0.
      APPEND ' MODULE ZSM30ADDON_COMMAND.' TO e.
    ENDIF.


    CALL FUNCTION 'RS_CORR_INSERT'
      EXPORTING
        global_lock     = ' '       " 'LIMU DYNP'
        object          = dy_id
        object_class    = 'SCRP'
        master_language = sy-langu
        korrnum         = trkorr
      IMPORTING
        korrnum         = trkorr
      EXCEPTIONS
        OTHERS          = 04.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.


    EXPORT DYNPRO h f e m ID dy_id.
    GENERATE DYNPRO h f e m ID dy_id MESSAGE dy_msg LINE dy_lnr WORD dy_wrd.


***在函数组添加INCLUDE语句
    READ REPORT funcpool INTO it_pcode.
    FIND 'ZSM30ADDONI01' IN TABLE it_pcode IGNORING CASE.
    IF sy-subrc <> 0.
      APPEND `  INCLUDE ZSM30ADDONI01.` TO it_pcode.
      INSERT REPORT funcpool FROM it_pcode .
    ENDIF.


    CALL FUNCTION 'REPS_OBJECT_GENERATE'
      EXPORTING
        i_program        = funcpool
        i_with_dialog    = 'X'
      EXCEPTIONS
        syntax_error     = 1
        generation_error = 2
        OTHERS           = 3.
    MESSAGE s000(oo) WITH '完成'.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  tvimf_request
*&---------------------------------------------------------------------*
FORM tvimf_request USING viewname.
  DATA: trkorr TYPE e070-trkorr,
        task   TYPE e070-trkorr,
        e071k  TYPE e071k OCCURS 0 WITH HEADER LINE,
        e071   TYPE e071 OCCURS 0 WITH HEADER LINE.
  DATA: vim_name TYPE vim_name.


  vim_name = viewname.


  e071-objfunc  = 'K'.
  e071-pgmid    = 'R3TR'.
  e071-object   = 'TABU'.
  e071-obj_name = 'TVIMF'.
  APPEND e071.


  e071k-pgmid      = 'R3TR'.
  e071k-mastertype = 'TABU'.
  e071k-object     = 'TABU'.
  e071k-mastername = 'TVIMF'.
  e071k-objname    = 'TVIMF'.
  CONCATENATE vim_name 'ST' INTO e071k-tabkey RESPECTING BLANKS.
  APPEND e071k.


  CALL FUNCTION 'TR_ORDER_CHOICE_CORRECTION'
    EXPORTING
      iv_category = 'SYST'
    IMPORTING
      ev_order    = trkorr
      ev_task     = task
    EXCEPTIONS
      OTHERS      = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  CALL FUNCTION 'TR_APPEND_TO_COMM_OBJS_KEYS'
    EXPORTING
      wi_simulation         = ' '
      wi_suppress_key_check = ' '
      wi_trkorr             = task
    TABLES
      wt_e071               = e071
      wt_e071k              = e071k
    EXCEPTIONS
      OTHERS                = 68.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    "tvimf_request

考虑到让兄弟不再经历挨个添加按钮的艰辛,我把程序ZSM30ADDON使用SAPLINK打了一个包放到QQ群:15881589的群文件里面了,因为GUI状态的特殊性,不保证工具栏能够好用。

bb390c60f00cff703b72d84b8363e124.png

最保险最简单的方式是参考这个:通过请求跨系统COPY程序、配置等 ,通过请求的方式把程序传到系统。请求文件也在群文件里面。

9c3d5558c3f0a267a62621ada24fc892.png

 如果想完全自己添加按钮,打造一个完全符合自己审美的工具栏,做法请移步:SM30添加排序功能

650083299c41af68f794d9f9be364d65.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 国密算法SM2是我国自主设计的一种非对称加密算法,主要用于数字签名和密钥交换。随着信息安全需求的增强,SM2算法在我国的应用越来越广泛。 SM2算法的C语言实现可以通过调用相关库函数来完成。通常使用的是开源的RSA和EC库来实现SM2算法。以下是可能的实现步骤: 1. 引入相关库:在C语言代码中引入SM2算法所需要的RSA和EC库函数。 2. 生成密钥对:使用EC库函数生成SM2算法所需的密钥对。密钥对包括公钥和私钥,用于加密和解密数据。 3. 数据加密:使用RSA库函数对需要加密的数据进行加密处理。加密过程中使用公钥对数据进行加密,得到密文。 4. 数据解密:使用RSA库函数对密文进行解密处理。解密过程中使用私钥对密文进行解密,得到明文数据。 5. 数字签名:使用EC库函数对数据进行数字签名。数字签名过程中使用私钥对数据进行签名,得到签名结果。 6. 验证签名:使用EC库函数对签名结果进行验证。验证过程中使用公钥对签名结果进行验证,确定签名的有效性。 以上只是实现SM2算法的大致步骤,具体实现还需要根据具体需求进行调整和补充。此外,为了保证算法的安全性,还需要对密钥进行安全的管理与存储。 总之,通过调用相关库函数,可以实现SM2算法的C语言实现,为信息安全提供了有效的保障。 ### 回答2: 国密算法SM2是我国自主研发的一种基于椭圆曲线密码学的公钥加密算法,用于实现数字签名、密钥交换和加密等功能。 要实现SM2算法的C语言代码,可以按照以下步骤进行: 1. 导入相关的库文件:在C语言中,需要导入相关的库文件来支持椭圆曲线运算和密码学算法实现。例如,在OpenSSL库中,可以使用`#include <openssl/sm2.h>`来导入SM2算法相关的头文件。 2. 生成密钥对:在SM2算法中,需要首先生成一对公私钥对。可以使用库中的API函数,如`EVP_PKEY *gen_keypair();`来生成一个SM2密钥对。 3. 进行数字签名:假设要对某个消息进行数字签名,可以使用API函数`int sm2_sign(const EVP_MD *md, const unsigned char *msg, size_t msglen, const unsigned char *id, size_t idlen, const EVP_PKEY *pkey, unsigned char *sig, size_t *siglen);`。在函数参数中,md表示哈希算法、msg表示消息、id表示用户标识、pkey表示私钥,sig表示签名输出。 4. 验证数字签名:使用API函数`int sm2_verify(const EVP_MD *md, const unsigned char *msg, size_t msglen, const unsigned char *id, size_t idlen, const EVP_PKEY *pkey, const unsigned char *sig, size_t siglen);`来验证数字签名。在函数参数中,md表示哈希算法、msg表示消息、id表示用户标识、pkey表示公钥,sig表示需要验证的签名。 以上为简要的SM2算法C语言实现的步骤,具体的代码实现需要结合具体的库文件和API函数进行。希望以上回答对你有帮助! ### 回答3: 国密算法SM2是由中国密码学家自主研发的一种非对称加密算法,主要用于数字签名和密钥交换。C语言是一种广泛应用于系统编程和嵌入式开发的编程语言,具有良好的性能和跨平台特性。实现国密算法SM2的C语言版本,可以使算法在不同的硬件和操作系统上运行。 实现SM2算法的C语言版本需要以下几个核心步骤: 1. 导入必要的头文件和库:C语言中,需要导入相关的头文件和库才能使用算法所需的函数和数据类型。 2. 生成密钥对:使用C语言的随机数生成函数生成SM2算法所需的私钥和公钥。 3. 数据加密和解密:使用C语言的加密和解密函数调用SM2算法中的相应函数进行数据的加密和解密。 4. 数字签名和验证:使用C语言的哈希函数计算消息摘要,然后调用SM2算法中的数字签名和验证函数进行签名和验证操作。 5. 密钥交换:通过调用SM2算法中的密钥交换函数,实现双方之间的密钥交换。 6. 进行测试和调试:使用C语言的单元测试框架对实现的算法进行测试和调试,确保算法的正确性和稳定性。 总结来说,实现国密算法SM2的C语言版本需要导入相关的头文件和库,生成密钥对,进行数据加密和解密,实现数字签名和验证,以及实现密钥交换等功能。通过测试和调试保证算法的正确性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值