ABAP 远程RFC调用


前言

本文主要介绍ABAP调用远程RFC,SM59配置及相关代码演示!


一、SM59配置

需要SM59配置被调用方信息!

1.事务码:SM59

2.ABAP连接:

 3.服务器地址及账号密码:

 

 4.连接测试:成功

二、远程RFC进行调用测试

1.检查是否联通

函数:TREX_RFC_CONNECT_CHECK_LOCAL

代码如下(示例):

*&---------------------------------------------------------------------*
*& Report YTEST_001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest_001.

DATA:
  lv_dest TYPE rfcdes-rfcdest VALUE 'ZTEST_001',
  ls_res  TYPE trexs_connection_check_result.

"远程是否连接
CALL FUNCTION 'TREX_RFC_CONNECT_CHECK_LOCAL'
  EXPORTING
    trex_destination        = lv_dest
  IMPORTING
    local_result            = ls_res
  EXCEPTIONS
    system_failure          = 1
    communication_failure   = 2
    authority_not_available = 3
    send_error              = 4
    OTHERS                  = 5.

IF ls_res-ping_time = '        0'."无响应
  MESSAGE 'SAP 联通 失败' TYPE 'I'.
ENDIF.

2.调用远程RFC

代码如下(示例):

*&---------------------------------------------------------------------*
*& Report YTEST_001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest_001.

DATA:
  lo_root       TYPE REF TO cx_root,
  lv_subrc      TYPE sy-subrc,
  lv_error_text TYPE c LENGTH 100,
  lv_rfc        TYPE funcname VALUE 'YM_RFCTEST'," 被调用方RFC名称
  lv_rfcdest    TYPE char30 VALUE 'ZTEST_001',   " SM59 连接名称
  lv_output     TYPE c.


* 发送数据
TRY.
    CALL FUNCTION lv_rfc
      DESTINATION lv_rfcdest
      EXPORTING
        iv_input              = 'RFC'
      IMPORTING
        ev_output             = lv_output
      EXCEPTIONS
        system_failure        = 1 MESSAGE lv_error_text
        communication_failure = 2 MESSAGE lv_error_text
        OTHERS                = 99.
  CATCH cx_root INTO lo_root.
    DATA(lv_message) = lo_root->get_text( ).
    MESSAGE lv_message TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
ENDTRY.

WRITE lv_output.

 调用成功!

总结

希望能帮助大家!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SM2算法是一种国密算法,用于椭圆曲线数字签名算法(ECDSA)和密钥交换协议(ECDH)。下面是一个用Python实现SM2算法的示例代码。 首先,我们需要导入一些工具库,如pycryptodome和ecc库,这两个库可以通过pip安装: ```python !pip install pycryptodome !pip install ecc ``` 然后,我们就可以开始编写SM2算法了: ```python from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Util.number import bytes_to_long, long_to_bytes from ecc.curves import Curve, Point from ecc.key import find_curve_by_name, gen_keypair # 定义SM2算法用到的常量 a = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC b = 0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93 p = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF n = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123 # 定义SM2算法用到的椭圆曲线 curve = Curve(a, b, p, 1, 2, n, Point(0x4A96B5688EF573284664698968C38BB913CBFC82B9329B0F72EB7CBD7C3C3D63, 0x23A628553168947D59DCC912042351377AC5FB32F9C31F63B8F25C9A7FDC32A0)) # 生成随机的SM2密钥对 private_key, public_key = gen_keypair(curve) # 定义SM2算法用到的哈希函数 def sm3_hash(msg): from hashlib import sha256 from sm3 import sm3_kdf # 先进行SHA-256哈希 h = sha256() h.update(msg) msg_hash = h.digest() # 再进行SM3 KDF处理 key = b'\x00' * 16 iv = b'\x00' * 16 sm3_kdf(key, iv, msg_hash, len(msg_hash) * 8) return iv + msg_hash # 定义SM2算法用到的密钥派生函数 def sm2_kdf(z, klen): from sm3 import sm3_kdf # SM2 KDF处理 klen //= 8 ct = 1 temp = b'' while len(temp) < klen: msg = z + long_to_bytes(ct, 4) temp += sm3_kdf(b'', b'', msg, 256) ct += 1 return temp[:klen] # 定义SM2算法用到的加密函数 def sm2_encrypt(public_key, msg): from hashlib import sha256 from sm2 import encrypt # 生成随机的SM2密钥对 private_key, _ = gen_keypair(curve) # 计算SM2公钥的哈希值 h = sha256() h.update(public_key.export()) z = h.digest() # 计算KDF密钥 k = sm2_kdf(z, 128) # 进行数据加密 return encrypt(msg, public_key, bytes_to_long(k)) # 定义SM2算法用到的解密函数 def sm2_decrypt(private_key, ciphertext): from hashlib import sha256 from sm2 import decrypt # 计算SM2公钥的哈希值 h = sha256() h.update(private_key.public_key.export()) z = h.digest() # 计算KDF密钥 k = sm2_kdf(z, 128) # 进行数据解密 return decrypt(ciphertext, private_key, bytes_to_long(k)) # 定义SM2算法用到的签名函数 def sm2_sign(private_key, msg): from hashlib import sha256 from sm2 import sign # 计算SM2公钥的哈希值 h = sha256() h.update(private_key.public_key.export()) z = h.digest() # 进行数据签名 r, s = sign(msg, private_key, z) return r, s # 定义SM2算法用到的验证函数 def sm2_verify(public_key, msg, signature): from hashlib import sha256 from sm2 import verify # 计算SM2公钥的哈希值 h = sha256() h.update(public_key.export()) z = h.digest() # 进行数据验证 return verify(msg, public_key, signature, z) ``` 上面的代码实现了SM2算法的加密、解密、签名和验证功能,可以直接使用。其中,加密和解密使用了AES算法,需要安装pycryptodome库;签名和验证使用了ecc库。 使用示例: ```python # 加密示例 msg = b"Hello, SM2!" ciphertext = sm2_encrypt(public_key, msg) print("Ciphertext:", ciphertext.hex()) # 解密示例 plaintext = sm2_decrypt(private_key, ciphertext) print("Plaintext:", plaintext) # 签名示例 msg = b"Hello, SM2!" r, s = sm2_sign(private_key, msg) print("Signature:", (r, s)) # 验证示例 msg = b"Hello, SM2!" signature = (r, s) is_valid = sm2_verify(public_key, msg, signature) print("Is valid:", is_valid) ``` 注意:由于SM2算法涉及到国密相关的算法和标准,因此在实际使用中需要注意相关的法律和安全问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值