SAP ABAP SE38 使用代码 调用第三方Api, 批量翻译程序

此处Api使用的有道智云
https://ai.youdao.com/?keyfrom=fanyi-new-nav#/

Api调用参考文档:
https://ai.youdao.com/DOCSIRMA/html/trans/api/wbfy/index.html

需要导入Api网站的证书,有道智云是两个证书。可以到智云AI平台下载,也可也在网易有道的页面下载

先给出成功结果
在这里插入图片描述

注意事项

*---注意事项:
*---1.翻译是覆盖式写入,不能一次只翻译一个元素。
*---2.文本元素长度,需要满足被翻译后的文本长度,一般预设50. 事务代码被翻译后长度不能超36
*---3.被翻译的文字不能超过20(使用的有道智云,超过20,需要特殊处理,此处没有做处理,默认小于20个字
*---3.1 q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 q字符串(当q长度小于等于20*---4.目前只针对RPT4,TRAN,即RPT4(文本元素,tital),TRAN(事务码)

先看结果:
在这里插入图片描述
第一个界面是翻译的文本是否写入成功(与翻译是否成功没关系)
在这里插入图片描述
双击后进入具体元素
在这里插入图片描述
-----------------------------------分割线------------------------------------------------------

0.屏幕处理

SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME .
  SELECT-OPTIONS:S_PROG FOR TSTC-PGMNA .
SELECTION-SCREEN END OF BLOCK BLK01.
AT SELECTION-SCREEN .
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
  PERFORM FRM_DATA_GET."获取需要翻译的数据
  PERFORM FRM_DATA_TRANS."调用Api翻译
  PERFORM FRM_PROG_TRANS."写入翻译
  PERFORM FRM_ALV.

1.使用的变量:


DATA:BEGIN OF GS_DATA,"调用Api需要的字段/第二界面显示
       TEXT_ORI  TYPE STRING, "源文本  ---导入文件字段,3个
       LANGU_ORI TYPE STRING, "源语言
       LANGU_TRA TYPE STRING, "翻译语言
       TEXT_TRA  TYPE STRING, "翻译文本

       PROG      TYPE TSTC-PGMNA, "翻译程序
       SEL       TYPE C,
       MSG       TYPE STRING,
       CODE      TYPE STRING,
       TYPE      TYPE C,
     END OF GS_DATA.
DATA:GT_DATA LIKE TABLE OF GS_DATA.

DATA:BEGIN OF GS_ALV,"第一界面显示
       PROG TYPE TSTC-PGMNA, "翻译程序
       ICON TYPE ICON_D,
       SEL       TYPE C,
     END OF GS_ALV.
DATA:GT_ALV LIKE TABLE OF GS_ALV.

DATA:BEGIN OF GS_RPT4,"文本元素
       PROG          TYPE TSTC-PGMNA, "翻译程序
       LT_LXE_PCX_S1 LIKE TABLE OF LXE_PCX_S1, "程序对应的
     END OF GS_RPT4.
DATA:GT_RPT4 LIKE TABLE OF GS_RPT4.
DATA:GS_TRAN LIKE GS_RPT4,"tcode翻译
     GT_TRAN LIKE GT_RPT4.

2.获取程序的翻译数据

文本元素保存并非保存在表中,而是保存在池里。
通过DEBUG,SE63的代码,找到获取文本的代码如下:
  READ TEXTPOOL objname INTO lt_s_textpool LANGUAGE s_r3_lang STATE 'A'.
读取文本元素的函数其实是两部分构成:
LXE_OBJ_TEXT_PAIR_READ_ && OBJTYPE
OBJTYPE就是文本类型	
【图片不知道为什么插入不进来了,查看路径如下】
SE63->短文本->A5 下面的RPT1,RPT2......就是文本类型。

所以应该是可以通用到SMARTFORMS的翻译,但是因为SMARTFORMS翻译比其他
批量翻译要简单,所以就没有研究代码翻译的。
*----获取程序的翻译数据
*--一般只有 文本元素:PRT4 , 事务代码:TRANS
  DATA:LT_PCX_S1 LIKE TABLE OF LXE_PCX_S1,
       LS_PCX_S1 TYPE LXE_PCX_S1.
  DATA:LV_OBJNAME TYPE LXEOBJNAME.
  
*-----文本元素:PRT4
  SELECT DISTINCT NAME FROM TRDIR INTO TABLE @DATA(LT_TRDIR) WHERE NAME IN @S_PROG."取程序表
  LOOP AT LT_TRDIR INTO DATA(LS_TRDIR).
    LV_OBJNAME = LS_TRDIR-NAME.
    CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ_RPT4'
      EXPORTING
        T_R3_LANG = '*'
        S_R3_LANG = '1'
        O_R3_LANG = '*'
        OBJTYPE   = 'RPT4'
        OBJNAME   = LV_OBJNAME
      TABLES
        LT_PCX_S1 = LT_PCX_S1.

    GS_RPT4-PROG = LS_TRDIR-NAME.
    GS_RPT4-LT_LXE_PCX_S1[] = LT_PCX_S1[].

    LOOP AT LT_PCX_S1 INTO LS_PCX_S1.
      GS_ALV-PROG =  GS_DATA-PROG     = LS_TRDIR-NAME.
      GS_DATA-TEXT_ORI = LS_PCX_S1-S_TEXT.
      GS_DATA-LANGU_ORI = 'en'.
      GS_DATA-LANGU_TRA = 'zh-CHS'.
      APPEND GS_DATA TO GT_DATA.
      APPEND GS_ALV TO GT_ALV.
      CLEAR:LS_PCX_S1,GS_DATA,GS_ALV,LV_OBJNAME.
    ENDLOOP.
    APPEND GS_RPT4 TO GT_RPT4.
    CLEAR:LS_TRDIR,LT_PCX_S1[].
  ENDLOOP.
*----事务代码:TRANS
  SELECT TCODE FROM TSTC INTO TABLE @DATA(LT_TSTC) WHERE PGMNA IN @S_PROG.
  LOOP AT LT_TSTC INTO DATA(LS_TSTC).
    LV_OBJNAME = LS_TSTC-TCODE.
    CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ_TRAN'
      EXPORTING
        T_R3_LANG = '1'
        S_R3_LANG = '1'
        OBJTYPE   = 'TRAN'
        OBJNAME   = LV_OBJNAME
      TABLES
        LT_PCX_S1 = LT_PCX_S1.

    GS_TRAN-PROG = LS_TSTC-TCODE.
    GS_TRAN-LT_LXE_PCX_S1[] = LT_PCX_S1[].

    LOOP AT LT_PCX_S1 INTO LS_PCX_S1.
      GS_ALV-PROG = GS_DATA-PROG     = LS_TSTC-TCODE.
      GS_DATA-TEXT_ORI = LS_PCX_S1-S_TEXT.
      GS_DATA-LANGU_ORI = 'en'.
      GS_DATA-LANGU_TRA = 'zh-CHS'.
      APPEND GS_DATA TO GT_DATA.
      APPEND GS_ALV TO GT_ALV.
      CLEAR:LS_PCX_S1,GS_DATA,GS_ALV,LV_OBJNAME.
### SAP ABAP调用 DeepSeek API 的示例代码 为了在 SAP ABAP 环境中成功调用 DeepSeek API,可以采用 HTTP 请求的方式发送请求并处理响应。下面是一个简单的例子来展示这一过程[^1]。 ```abap REPORT zcall_deepseek_api. DATA: lv_url TYPE string VALUE 'https://api.deepseek.com/v1/example', lv_method TYPE string VALUE 'GET', " 或者 POST, PUT 等方法 lv_request_body TYPE string, lv_response_body TYPE string, lo_http_client TYPE REF TO if_http_client, lo_http_destination TYPE REF TO if_http_ext, lt_cookies TYPE TABLE OF http_cookie, ls_t100 TYPE t100, lv_message TYPE string. TRY. CALL METHOD cl_http_client=>create_by_url EXPORTING url = lv_url IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 creation_failed = 2 internal_error = 3 OTHERS = 4. IF sy-subrc <> 0. WRITE: / 'Error creating HTTP Client'. RETURN. ENDIF. lo_http_client->request->set_method( lv_method ). " 如果有请求体,则设置请求体内容 "lo_http_client->request->set_cdata( lv_request_body ). TRY. lo_http_client->send( EXPORTING i_timeout = 30 ). lo_http_client->receive( CHANGING data = DATA(lv_temp_data) ). CASE lo_http_client->response->get_status_code( ). WHEN 200 OR 201. lv_response_body = lo_http_client->response->get_cdata( ). WRITE: / 'Response:', lv_response_body. WHEN OTHERS. WRITE: / 'HTTP Error Code:', lo_http_client->response->get_status_code( ), lo_http_client->response->get_reason_phrase( ). ENDCASE. CATCH cx_root INTO DATA(e_text). WRITE: / 'Exception occurred during send/receive:' , e_text->get_text( ). ENDTRY. CATCH cx_root INTO DATA(e_text). WRITE: / 'Exception occurred while creating HTTP client:' , e_text->get_text( ). ENDTRY. ``` 此段代码展示了创建 HTTP 客户端连接到指定 URL 并执行 GET 方法的过程;对于其他类型的 HTTP 请求(如 POST),可以在相应位置修改 `lv_method` 变量以及添加必要的请求参数或主体数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值