文本翻译(SAP所有文本更改)和ABAP程序不报错却出错---解决

ALV字段名不显示

自建的透明表

REPORT ZTXYY_1123.
DATA: gr_alv     TYPE REF TO cl_salv_table,
      gr_columns TYPE REF TO cl_salv_columns_table.
DATA: ZPL_LIST TYPE TABLE OF ZPL_EINVOICE_LOG.
CALL METHOD cl_salv_table=>factory
IMPORTING
  r_salv_table = gr_alv
CHANGING
  t_table      = ZPL_LIST ."用该表结构和数据

gr_columns = gr_alv->get_columns( ).
gr_columns->set_optimize( VALUE = 'X' ).
gr_alv->display( ).

执行结果

出现多个列名为空

原因:预定义个描述在alv中不会展示,需要定义数据类型参考

解决方案:定义数据类型参考

注意如果是有多个语言系统,则会出现在中文系统中有列名而英文中没有.

暂时未解决如有解决的请评论回复

文本翻译

SAP ABAP批量翻译工具(翻译+传输)_sap 自动翻译-CSDN博客

YLAN_TRANSLATE ABAP程序批量翻译工具_abap 快速翻译功能-CSDN博客

如何翻译事务代码(tcode)描述-SE63 | 摆渡SAP

 

 p_only只看为空的​​​​​​​

 

*&---------------------------------------------------------------------*
*& Report ZMULTIPLE_TRANSLATION
*&---------------------------------------------------------------------*
*& Author:DeveloprMrMeng
*& Usage :Used to translate common development objects
*& Date  :2024.07.15
*&---------------------------------------------------------------------*
REPORT zmultiple_translation.
*----------------------------------------------------------------------*
* Types Defination
*----------------------------------------------------------------------*
TYPES:
* Selection screen
  BEGIN OF ty_screen,
    package       TYPE tdevc-devclass,                                  "Package
    author        TYPE tadir-author,                                    "Author
    s_langu       TYPE lxe_log-targlng,                                 "Source Language
    t_langu       TYPE lxe_log-targlng,                                 "Target Language
    table         TYPE rsrd1-tbma_val,                                  "Table
    structure     TYPE rsrd1-stru_val,                                  "Sturcture
    data_element  TYPE rsrd1-drma_val,                                  "Data element
    domain        TYPE rsrd1-doma_val,                                  "Domain
    view          TYPE rsrd1-vima_val,                                  "View
    program       TYPE reposrc-progname,                                "Program
    function_grp  TYPE tlibg-area,                                      "Function Group
    function      TYPE tfdir-funcname,                                  "Fucntion
    transaction   TYPE tstc-tcode,                                      "Transaction
    message_class TYPE t100-arbgb,                                      "Message class
    message_no    TYPE t100-msgnr,                                      "Message number
  END OF ty_screen,
  BEGIN OF ty_tadir,
    pgmid     TYPE tadir-pgmid,                                         "Program ID
    object    TYPE tadir-object,                                        "Object Type
    obj_name  TYPE tadir-obj_name,                                      "Object Name
    srcsystem TYPE tadir-srcsystem,                                     "Original System
    author    TYPE tadir-author,                                        "Author
    devclass  TYPE tadir-devclass,                                      "Package
  END OF ty_tadir,
  tt_tadir TYPE STANDARD TABLE OF ty_tadir,
  BEGIN OF ty_fungrp,
    fungrp TYPE tfdir-pname,                                            "Function group
  END OF ty_fungrp,
  tt_fungrp TYPE STANDARD TABLE OF ty_fungrp,
 
  BEGIN OF ty_tfdir,
    funcname TYPE tfdir-funcname,                                       "Function name
    pname    TYPE tfdir-pname,                                          "Fucntion group full name
    include  TYPE tfdir-include,                                        "index
  END OF ty_tfdir,
  tt_tfdir TYPE SORTED TABLE OF ty_tfdir
    WITH UNIQUE KEY pname funcname,
  BEGIN OF ty_d020s,
    prog TYPE d020s-prog,                                               "Program name
    dnum TYPE d020s-dnum,                                               "Screen number
  END OF ty_d020s,
  tt_d020s TYPE STANDARD TABLE OF ty_d020s
    WITH NON-UNIQUE SORTED KEY prog COMPONENTS prog,
  BEGIN OF ty_read_para,
    objtype TYPE lxeobjtype,                                            "Object type
    objname TYPE lxeobjname,                                            "Object name
  END OF ty_read_para,
  tt_read_para TYPE STANDARD TABLE OF ty_read_para,
  ty_attobt    TYPE lxe_attobt,                                         "Translation object type description
  tt_attobt    TYPE SORTED TABLE OF ty_attobt
    WITH UNIQUE KEY lang obj_type,
 
  ty_lxe_log   TYPE lxe_log,                                            "Translation log
  tt_lxe_log   TYPE STANDARD TABLE OF ty_lxe_log,
  ty_t100      TYPE t100,                                               "Message
  tt_t100      TYPE SORTED TABLE OF ty_t100
    WITH UNIQUE KEY sprsl arbgb msgnr,
 
  BEGIN OF ty_alv,
    obj_type TYPE lxe_attobt-obj_type,                                  "Object Type
    ktext    TYPE lxe_attobt-ktext,                                     "Object Type Description
    objname  TYPE lxeobjname,                                           "Object name
    textkey  TYPE lxe_pcx_s1-textkey,                                   "Text key
    icon     TYPE icon_d,                                               "Icon
    s_text   TYPE lxe_pcx_s1-s_text,                                    "Source text
    t_text   TYPE lxe_pcx_s1-t_text,                                    "Target text
    sap_text TYPE lxe_pcx_s1-t_text,                                    "Translation of SAP recommendations
    texttype TYPE lxe_pcx_s1-texttype,                                  "Text type
    devclass TYPE tadir-devclass,                                       "Package
    author   TYPE tadir-author,                                         "Author
    unitmlt  TYPE lxe_pcx_s1-unitmlt,                                   "Maximum Length of Translation Unit
    uppcase  TYPE lxe_pcx_s1-uppcase,                                   "Only Uppercase Allowed
    cbox     TYPE cbox,                                                 "CheckBox
    style    TYPE lvc_t_styl,
    color    TYPE lvc_t_scol,
  END OF ty_alv,
  tt_alv TYPE STANDARD TABLE OF ty_alv
    WITH NON-UNIQUE SORTED KEY cbox COMPONENTS cbox
    WITH NON-UNIQUE SORTED KEY grp COMPONENTS obj_type ktext objname.
 
CONSTANTS:
  gc_custmnr TYPE lxecustmnr VALUE cl_lxe_constants=>c_trl_area_local.
*&---------------------------------------------------------------------*
*& Global Pramaters Defination
*&---------------------------------------------------------------------*
DATA:
  gs_screen  TYPE ty_screen,
  gt_tfdir   TYPE tt_tfdir,
  gt_alv     TYPE tt_alv,
  gt_attobt  TYPE tt_attobt,
  gt_d020s   TYPE tt_d020s,
  gt_t100    TYPE tt_t100,
  gv_t_spras TYPE spras,
  gv_s_spras TYPE spras.
 
FIELD-SYMBOLS:
  <gs_alv> TYPE ty_alv.
 
DATA:
  gt_r_object   TYPE RANGE OF tadir-object,
  gs_r_object   LIKE LINE OF gt_r_object,
  gt_r_obj_name TYPE RANGE OF tadir-obj_name,
  gs_r_obj_name LIKE LINE OF gt_r_obj_name.
*&---------------------------------------------------------------------*
*& Selection Screen Defination
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK mode WITH FRAME TITLE gv_desc0.
PARAMETERS:
  p_tabl AS CHECKBOX DEFAULT '' USER-COMMAND tabl,
  p_view AS CHECKBOX DEFAULT '' USER-COMMAND view,
  p_stru AS CHECKBOX DEFAULT '' USER-COMMAND stru,
  p_dtel AS CHECKBOX DEFAULT '' USER-COMMAND dtel,
  p_doma AS CHECKBOX DEFAULT '' USER-COMMAND doma,
  p_prog AS CHECKBOX DEFAULT '' USER-COMMAND prog,
  p_fugr AS CHECKBOX DEFAULT '' USER-COMMAND fugr,
  p_tran AS CHECKBOX DEFAULT '' USER-COMMAND tran,
  p_mess AS CHECKBOX DEFAULT '' USER-COMMAND mess.
SELECTION-SCREEN END OF BLOCK mode.
 
SELECTION-SCREEN BEGIN OF BLOCK tra WITH FRAME TITLE gv_desc1.
PARAMETERS:
  p_sour TYPE ty_screen-s_langu,
  p_targ TYPE ty_screen-t_langu.
SELECTION-SCREEN END OF BLOCK tra.
 
SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE gv_desc2.
SELECT-OPTIONS:
  s_pack FOR gs_screen-package,
  s_auth FOR gs_screen-author.
SELECTION-SCREEN END OF BLOCK opt.
 
SELECTION-SCREEN BEGIN OF BLOCK ddic WITH FRAME TITLE gv_desc3.
SELECT-OPTIONS:
  s_tabl FOR gs_screen-table MODIF ID tab,
  s_view FOR gs_screen-view MODIF ID vie,
  s_stru FOR gs_screen-structure MODIF ID str,
  s_dtel FOR gs_screen-data_element MODIF ID dte,
  s_doma FOR gs_screen-domain MODIF ID dom.
SELECTION-SCREEN END OF BLOCK ddic.
 
SELECTION-SCREEN BEGIN OF BLOCK prog WITH FRAME TITLE gv_desc4.
SELECT-OPTIONS:
  s_prog FOR gs_screen-program MODIF ID pro.
SELECTION-SCREEN END OF BLOCK prog.
 
SELECTION-SCREEN BEGIN OF BLOCK func WITH FRAME TITLE gv_desc5.
SELECT-OPTIONS:
  s_fugr FOR gs_screen-function_grp MODIF ID fug.
SELECTION-SCREEN END OF BLOCK func.
 
SELECTION-SCREEN BEGIN OF BLOCK trsc WITH FRAME TITLE gv_desc6.
SELECT-OPTIONS:
  s_tran FOR gs_screen-transaction MODIF ID tra.
SELECTION-SCREEN END OF BLOCK trsc.
 
SELECTION-SCREEN BEGIN OF BLOCK mess WITH FRAME TITLE gv_desc7.
SELECT-OPTIONS:
  s_mscl FOR gs_screen-message_class MODIF ID mes,
  s_msno FOR gs_screen-message_no MODIF ID mes.
SELECTION-SCREEN END OF BLOCK mess.
 
PARAMETERS:
  p_only AS CHECKBOX DEFAULT 'X'.
*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
* Initial some paramaters
  PERFORM frm_initial.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
* Update screen defore screen output
  PERFORM frm_update_screen.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN Search Help
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_sour.
  PERFORM frm_f4_for_language USING 'P_SOUR' CHANGING p_sour.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_targ.
  PERFORM frm_f4_for_language USING 'P_TARG' CHANGING p_targ.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* Process Start
  PERFORM frm_start_process.
*&---------------------------------------------------------------------*
*& Form FRM_INITIAL
*&---------------------------------------------------------------------*
*& Initial some paramaters
*&---------------------------------------------------------------------*
FORM frm_initial .
  gv_desc0 = 'Translation Scope'(000).
  gv_desc1 = 'Translation Mode'(001).
  gv_desc2 = 'Default Condition'(002).
  gv_desc3 = 'DDIC Condition'(003).
  gv_desc4 = 'Program Condition'(004).
  gv_desc5 = 'Function Condition'(005).
  gv_desc6 = 'Transaction Condition'(006).
  gv_desc7 = 'Message Condition'(007).
 
  %_p_tabl_%_app_%-text = 'Table'(008).
  %_p_stru_%_app_%-text = 'Structure'(009).
  %_p_dtel_%_app_%-text = 'Data Element'(010).
  %_p_doma_%_app_%-text = 'Domain'(011).
  %_p_view_%_app_%-text = 'View'(012).
  %_p_prog_%_app_%-text = 'Program'(013).
  %_p_fugr_%_app_%-text = 'Function Group'(014).
  %_p_tran_%_app_%-text = 'Transaction'(015).
  %_p_mess_%_app_%-text = 'Message'(016).
 
  %_p_sour_%_app_%-text = 'Source Language'(017).
  %_p_targ_%_app_%-text = 'Target Language'(018).
  %_s_pack_%_app_%-text = 'Package'(019).
  %_s_auth_%_app_%-text = 'Author'(020).
  %_s_tabl_%_app_%-text = 'Table Name'(021).
  %_s_view_%_app_%-text = 'View Name'(022).
  %_s_stru_%_app_%-text = 'Structure Name'(023).
  %_s_dtel_%_app_%-text = 'Data Element Name'(024).
  %_s_doma_%_app_%-text = 'Domain Name'(025).
  %_s_prog_%_app_%-text = 'Program Name'(026).
  %_s_fugr_%_app_%-text = 'Function Group Name'(027).
  %_s_tran_%_app_%-text = 'Transaction Code'(028).
  %_s_mscl_%_app_%-text = 'Message Class'(029).
  %_s_msno_%_app_%-text = 'Message Number'(030).
  %_p_only_%_app_%-text = 'Untranslated only'(031).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_SCREEN
*&---------------------------------------------------------------------*
*& Update screen defore screen output
*&---------------------------------------------------------------------*
FORM frm_update_screen .
  LOOP AT SCREEN.
    IF screen-name = 'S_PACK-LOW' OR screen-name = 'P_SOUR' OR screen-name = 'P_TARG'.
      screen-required = '2'.
    ENDIF.
 
    IF p_tabl = ''.
      IF screen-group1 = 'TAB'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_stru = ''.
      IF screen-group1 = 'STR'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_dtel = ''.
      IF screen-group1 = 'DTE'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_doma = ''.
      IF screen-group1 = 'DOM'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_view = ''.
      IF screen-group1 = 'VIE'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_prog = ''.
      IF screen-group1 = 'PRO'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_fugr = ''.
      IF screen-group1 = 'FUG'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_tran = ''.
      IF screen-group1 = 'TRA'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    IF p_mess = ''.
      IF screen-group1 = 'MES'.
        screen-active = 0.
      ENDIF.
    ENDIF.
 
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_START_PROCESS
*&---------------------------------------------------------------------*
*& Process Start
*&---------------------------------------------------------------------*
FORM frm_start_process .
* Check input
  PERFORM frm_check_input.
 
* Get translation objects
  PERFORM frm_get_object.
 
* Show result as ALV
  PERFORM frm_display_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*& Check input
*&---------------------------------------------------------------------*
FORM frm_check_input .
  IF p_tabl IS INITIAL AND
     p_view IS INITIAL AND
     p_stru IS INITIAL AND
     p_dtel IS INITIAL AND
     p_doma IS INITIAL AND
     p_prog IS INITIAL AND
     p_fugr IS INITIAL AND
     p_tran IS INITIAL AND
     p_mess IS INITIAL.
 
    MESSAGE 'Please select at least one transaction scope!'(m01) TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
 
  IF s_pack IS INITIAL.
*   Fill out all required entry fields
    MESSAGE s055(00) DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
 
  LOOP AT s_pack.
    IF ( s_pack-low+0(1) <> 'Z' AND s_pack-low+0(1) <> 'Y' AND s_pack-low IS NOT INITIAL AND s_pack-low <> '$TMP' ) OR
       ( s_pack-high+0(1) <> 'Z' AND s_pack-high+0(1) <> 'Y' AND s_pack-high IS NOT INITIAL AND s_pack-high <> '$TMP' ).
 
      MESSAGE 'You can select only objects in the custom namespace'(m02) TYPE  'S' DISPLAY LIKE 'E'.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_OBJECT
*&---------------------------------------------------------------------*
*& Get translation objects
*&---------------------------------------------------------------------*
FORM frm_get_object .
* Build select condtion scope
  PERFORM frm_build_scope_cond.
 
* Get tranlation list
  PERFORM frm_get_list.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Show result as ALV
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  DATA:
    ls_layout     TYPE lvc_s_layo,
    lt_fieldcat   TYPE lvc_t_fcat,
    ls_fieldcat   TYPE lvc_s_fcat,
    lt_event_exit TYPE slis_t_event_exit,
    ls_event_exit TYPE slis_event_exit.
 
* Set Layout
  ls_layout-zebra      = 'X'.                                           "Alternating line color
  ls_layout-sel_mode   = 'C'.                                           "SelectionMode
  ls_layout-cwidth_opt = 'X'.                                           "Optimize column width
  ls_layout-box_fname  = 'CBOX'.                                        "Field name of internal table field
  ls_layout-stylefname = 'STYLE'.                                       "Field name of internal table field
  ls_layout-ctab_fname = 'COLOR'.                                       "Field name with complex cell color coding
 
* Set fieldcat
  ls_fieldcat-fieldname = 'OBJ_TYPE'.
  ls_fieldcat-scrtext_l = 'Translation Object Type'(f02).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'KTEXT'.
  ls_fieldcat-scrtext_l = 'Object Type Description'(f03).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'OBJNAME'.
  ls_fieldcat-scrtext_l = 'Object Name'(f04).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'TEXTKEY'.
  ls_fieldcat-scrtext_l = 'Text Key'(f05).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'ICON'.
  ls_fieldcat-just      = 'C'.
  ls_fieldcat-scrtext_l = 'Status'(f08).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'S_TEXT'.
  ls_fieldcat-scrtext_l = 'Source Text'(f06).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'T_TEXT'.
  ls_fieldcat-edit      = 'X'.
  ls_fieldcat-lowercase = 'X'.
  ls_fieldcat-outputlen = 255.
  ls_fieldcat-intlen    = 255.
  ls_fieldcat-dd_outlen = 255.
  ls_fieldcat-scrtext_l = 'Target Text'(f07).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'SAP_TEXT'.
  ls_fieldcat-scrtext_l = 'SAP recommendations'(f09).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'TEXTTYPE'.
  ls_fieldcat-scrtext_l = 'Text Type'(f10).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'DEVCLASS'.
  ls_fieldcat-scrtext_l = 'Package'(f11).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
  ls_fieldcat-fieldname = 'AUTHOR'.
  ls_fieldcat-scrtext_l = 'Author'(f12).
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
 
* Show ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_STATUS_SET'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc            = ls_layout
      it_fieldcat_lvc          = lt_fieldcat
      it_event_exit            = lt_event_exit
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_alv
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_SCOPE_COND
*&---------------------------------------------------------------------*
*& Build select condtion scope
*&---------------------------------------------------------------------*
FORM frm_build_scope_cond .
  gs_r_object-sign   = 'I'.
  gs_r_object-option = 'EQ'.
 
  IF p_tabl = abap_on OR p_stru = abap_on.
    gs_r_object-low = 'TABL'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_view = abap_on.
    gs_r_object-low = 'VIEW'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_dtel = abap_on.
    gs_r_object-low = 'DTEL'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_doma = abap_on.
    gs_r_object-low = 'DOMA'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_prog = abap_on.
    gs_r_object-low = 'PROG'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_fugr = abap_on.
    gs_r_object-low = 'FUGR'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_tran = abap_on.
    gs_r_object-low = 'TRAN'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  IF p_mess = abap_on.
    gs_r_object-low = 'MSAG'.
    APPEND gs_r_object TO gt_r_object.
  ENDIF.
 
  APPEND LINES OF s_tabl TO gt_r_obj_name.
  APPEND LINES OF s_view TO gt_r_obj_name.
  APPEND LINES OF s_stru TO gt_r_obj_name.
  APPEND LINES OF s_dtel TO gt_r_obj_name.
  APPEND LINES OF s_doma TO gt_r_obj_name.
  APPEND LINES OF s_prog TO gt_r_obj_name.
  APPEND LINES OF s_fugr TO gt_r_obj_name.
  APPEND LINES OF s_tran TO gt_r_obj_name.
  APPEND LINES OF s_mscl TO gt_r_obj_name.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_LIST
*&---------------------------------------------------------------------*
*& Get tranlation list
*&---------------------------------------------------------------------*
FORM frm_get_list .
  DATA:
    lt_tadir      TYPE tt_tadir,
    lt_tadir_copy TYPE tt_tadir,
    ls_tadir      TYPE ty_tadir,
    lt_fungrp     TYPE tt_fungrp,
    ls_fungrp     TYPE ty_fungrp,
    lt_attobt     TYPE tt_attobt,
    ls_attobt     TYPE ty_attobt,
    ls_t100       TYPE ty_t100.
 
* Get SPRAS
  SELECT SINGLE r3_lang INTO gv_s_spras FROM lxe_t002x WHERE language = p_sour.
  SELECT SINGLE r3_lang INTO gv_t_spras FROM lxe_t002x WHERE language = p_targ.
 
* Get check list for transaction
  SELECT pgmid
         object
         obj_name
         srcsystem
         author
         devclass
    INTO TABLE lt_tadir
    FROM tadir
   WHERE pgmid = 'R3TR'
     AND object IN gt_r_object
     AND obj_name IN gt_r_obj_name
     AND devclass IN s_pack
     AND author   IN s_auth
     AND delflag  = ''.
 
* If checked Function Group,get function list also.
  IF p_fugr = abap_on.
    LOOP AT lt_tadir INTO ls_tadir WHERE object = 'FUGR'.
      ls_fungrp-fungrp = 'SAPL' && ls_tadir-obj_name.
      COLLECT ls_fungrp INTO lt_fungrp.
      CLEAR ls_fungrp.
    ENDLOOP.
 
    IF lt_fungrp IS NOT INITIAL.
 
*     Get function list
      SELECT funcname
             pname
             include
        INTO TABLE gt_tfdir
        FROM tfdir
         FOR ALL ENTRIES IN lt_fungrp
       WHERE pname = lt_fungrp-fungrp.
    ENDIF.
  ENDIF.
 
  IF p_prog = abap_on.
    lt_tadir_copy = lt_tadir.
    DELETE lt_tadir_copy WHERE object <> 'PROG'.
    IF lt_tadir_copy IS NOT INITIAL.
 
*     Get program screen list
      SELECT prog
             dnum
        INTO TABLE gt_d020s
        FROM d020s
         FOR ALL ENTRIES IN lt_tadir_copy
       WHERE prog = lt_tadir_copy-obj_name.
    ENDIF.
  ENDIF.
 
  IF p_mess = abap_on.
*   Get message info
    SELECT *
      INTO TABLE gt_t100
      FROM t100
     WHERE sprsl = gv_s_spras
       AND arbgb IN s_mscl
       AND msgnr IN s_msno.
  ENDIF.
 
* Get Texts for Object Attribute
  SELECT *
    INTO TABLE gt_attobt
    FROM lxe_attobt
   WHERE lang = sy-langu.
 
  SORT lt_tadir BY object   ASCENDING
                   obj_name ASCENDING.
 
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = 'Data Processing...'(m07).
 
  LOOP AT lt_tadir INTO ls_tadir.
*   Get current translation info
    PERFORM frm_obj_text_read USING ls_tadir.
  ENDLOOP.
 
  IF gt_alv IS INITIAL.
    MESSAGE 'No data!'(m03) TYPE 'S'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_F4_FOR_LANGUAGE
*&---------------------------------------------------------------------*
*& F4 For Language
*&---------------------------------------------------------------------*
*&      <-- CV_LANGUAGE   Language
*&---------------------------------------------------------------------*
FORM frm_f4_for_language USING uv_fname CHANGING cv_language.
  CALL FUNCTION 'LXE_T002_SELECT_LANGUAGE'
    EXPORTING
      dynpprog        = sy-cprog
      dynpnr          = sy-dynnr
      dynpfield       = uv_fname
    IMPORTING
      language        = cv_language
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      no_selection    = 3
      OTHERS          = 4.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OBJ_TEXT_READ
*&---------------------------------------------------------------------*
*& Get current translation info
*&---------------------------------------------------------------------*
*&      --> US_TADIR
*&---------------------------------------------------------------------*
FORM frm_obj_text_read  USING us_tadir TYPE ty_tadir.
  DATA:
    lt_read_para TYPE tt_read_para,
    ls_read_para TYPE ty_read_para,
    ls_alv       TYPE ty_alv,
    ls_color     TYPE lvc_s_scol,
    ls_tfdir     TYPE ty_tfdir,
    ls_attobt    TYPE ty_attobt,
    lv_fungrp    TYPE tfdir-pname,
    ls_d020s     TYPE ty_d020s,
    ls_t100      TYPE ty_t100.
 
  DATA:
    lt_pcx_s1  TYPE STANDARD TABLE OF lxe_pcx_s1,
    ls_pcx_s1  TYPE lxe_pcx_s1,
    lt_pcx_s2  TYPE STANDARD TABLE OF lxe_pcx_s2,
    ls_pcx_s2  TYPE lxe_pcx_s2,
    lv_domatyp TYPE  lxedomatyp,
    lv_domanam TYPE  lxedomanam,
    lv_pstatus TYPE  lxestatprc.
 
  CASE us_tadir-object.
*   Table or Sturcture
    WHEN 'TABL'.
      ls_read_para-objtype = 'BEZD'.                                    "Foreign Key
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
      ls_read_para-objtype = 'TABT'.                                    "Table and Built-in type description
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
*   View
    WHEN 'VIEW'.
      ls_read_para-objtype = 'VIEW'.
      ls_read_para-objname = us_tadir-obj_name.                         "View description
      APPEND ls_read_para TO lt_read_para.
*   Data Element
    WHEN 'DTEL'.
      ls_read_para-objtype = 'DTEL'.                                    "Data element and description
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
*   Domain
    WHEN 'DOMA'.
      ls_read_para-objtype = 'DOMA'.                                    "Domain description
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
      ls_read_para-objtype = 'VALU'.                                    "Domain value
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
*   Program
    WHEN 'PROG'.
      ls_read_para-objtype = 'RPT4'.                                    "Title
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
*      ls_read_para-objtype = 'CA4'.                                    "Menu
*      ls_read_para-objname = us_tadir-obj_name.
*      APPEND ls_read_para TO lt_read_para.
*      ls_read_para-objtype = 'CAD4'.                                   "GUI Status
*      ls_read_para-objname = us_tadir-obj_name.
*      APPEND ls_read_para TO lt_read_para.
      LOOP AT gt_d020s INTO ls_d020s USING KEY prog WHERE prog = us_tadir-obj_name.
        ls_read_para-objtype = 'SRH4'.                                  "Screen title
 
        CONCATENATE us_tadir-obj_name
                    ls_d020s-dnum
               INTO ls_read_para-objname RESPECTING BLANKS.             "Program name + Screen number
        APPEND ls_read_para TO lt_read_para.
        ls_read_para-objtype = 'SRT4'.                                  "Screen texts
 
        CONCATENATE us_tadir-obj_name
                    ls_d020s-dnum
               INTO ls_read_para-objname RESPECTING BLANKS.             "Program name + Screen number
        APPEND ls_read_para TO lt_read_para.
      ENDLOOP.
*   Function Group
    WHEN 'FUGR'.
      ls_read_para-objtype = 'RPT1'.                                    "Function group
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
 
      lv_fungrp = 'SAPL' && us_tadir-obj_name.
 
      LOOP AT gt_tfdir INTO ls_tfdir WHERE pname = lv_fungrp.
        ls_read_para-objtype = 'FNC1'.                                  "Function and parameters
        CONCATENATE ls_tfdir-funcname
                    us_tadir-obj_name
               INTO ls_read_para-objname RESPECTING BLANKS.             "Function group + Function name
        APPEND ls_read_para TO lt_read_para.
      ENDLOOP.
*   Transaction Code
    WHEN 'TRAN'.
      ls_read_para-objtype = 'TRAN'.                                    "Transaction code
      ls_read_para-objname = us_tadir-obj_name.
      APPEND ls_read_para TO lt_read_para.
    WHEN 'MSAG'.
      LOOP AT gt_t100 INTO ls_t100 WHERE arbgb = us_tadir-obj_name.
        ls_read_para-objtype = 'MESS'.                                  "Message
 
        CONCATENATE ls_t100-arbgb
                    ls_t100-msgnr
               INTO ls_read_para-objname RESPECTING BLANKS.             "Message class + Message number
        APPEND ls_read_para TO lt_read_para.
      ENDLOOP.
    WHEN OTHERS.
  ENDCASE.
  LOOP AT lt_read_para INTO ls_read_para.
*   Get translation info
    CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ'
      EXPORTING
        t_lang    = p_targ
        s_lang    = p_sour
        custmnr   = gc_custmnr
        objtype   = ls_read_para-objtype
        objname   = ls_read_para-objname
        read_only = ''
      IMPORTING
        domatyp   = lv_domatyp
        domanam   = lv_domanam
        pstatus   = lv_pstatus
      TABLES
        lt_pcx_s1 = lt_pcx_s1.
*   Get best translation
    CALL FUNCTION 'LXE_PP1_PROPOSALS_GET'
      EXPORTING
        s_lang   = p_sour
        t_lang   = p_targ
        custmnr  = gc_custmnr
        objtype  = ls_read_para-objtype
        domatyp  = lv_domatyp
        domanam  = lv_domanam
      IMPORTING
        pstatus  = lv_pstatus
      TABLES
        t_pcx_s1 = lt_pcx_s1
        t_pcx_s2 = lt_pcx_s2.
    IF lt_pcx_s1 IS NOT INITIAL.
      READ TABLE gt_attobt INTO ls_attobt
        WITH KEY lang     = sy-langu
                 obj_type = ls_read_para-objtype.
      LOOP AT lt_pcx_s1 INTO ls_pcx_s1.
        ls_alv-obj_type = ls_read_para-objtype.                         "Translation OType
        ls_alv-ktext    = ls_attobt-ktext.                              "Translation OType description
        ls_alv-objname  = ls_read_para-objname.                         "Object name
        ls_alv-textkey  = ls_pcx_s1-textkey.                            "Text key
        ls_alv-s_text   = ls_pcx_s1-s_text.                             "Source text
        ls_alv-t_text   = ls_pcx_s1-t_text.                             "Target text
        ls_alv-unitmlt  = ls_pcx_s1-unitmlt.                            "Maximum Length of Translation Unit
        ls_alv-uppcase  = ls_pcx_s1-uppcase.                            "Only Uppercase Allowed
        ls_alv-devclass = us_tadir-devclass.                            "Package
        ls_alv-author   = us_tadir-author.                              "Author
        READ TABLE lt_pcx_s2 INTO ls_pcx_s2
          WITH KEY textkey = ls_pcx_s1-textkey.
        IF sy-subrc = 0.
          ls_alv-sap_text = ls_pcx_s2-best_prop.                        "Translation of SAP recommendations
        ENDIF.
 
        ls_alv-texttype = ls_pcx_s1-texttype.                           "Text type
        IF ls_alv-t_text IS NOT INITIAL.
          IF ls_alv-t_text = ls_alv-sap_text.
            ls_alv-icon = icon_led_green.                               "Green
          ELSE.
            ls_alv-icon = icon_led_yellow.                              "Yellow
          ENDIF.
        ELSE.
          ls_alv-icon = icon_led_red.                                   "Red
        ENDIF.
 
        IF p_only = abap_on AND ls_alv-t_text IS NOT INITIAL.
          CLEAR:ls_alv.
          CONTINUE.
        ENDIF.
 
        APPEND ls_alv TO gt_alv.
 
        CLEAR:ls_alv.
      ENDLOOP.
    ENDIF.
 
    CLEAR:
      lt_pcx_s1,
      ls_pcx_s1,
      lt_pcx_s2,
      ls_pcx_s2.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_STATUS_SET
*&---------------------------------------------------------------------*
*& Set GUI Status
*&---------------------------------------------------------------------*
*&      --> RT_EXTAB      Excluding Button
*&---------------------------------------------------------------------*
FORM frm_status_set USING rt_extab TYPE slis_t_extab.
  DATA:
    lv_title TYPE string.
 
  SELECT SINGLE text
    INTO lv_title
    FROM trdirt
   WHERE name  = sy-repid
     AND sprsl = sy-langu.
 
  lv_title = lv_title && ` (` && p_sour && `->` && p_targ && `)`.
 
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE' WITH lv_title.
ENDFORM.                    "FRM_STATUS_SET
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& User Command
*&---------------------------------------------------------------------*
*&      --> R_UCOMM      User Command Code
*&      --> RS_SELFIELD  Filed Info
*&---------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                            rs_selfield TYPE slis_selfield.
  DATA:
    lo_grid    TYPE REF TO cl_gui_alv_grid,
    ls_stable  TYPE lvc_s_stbl,
    lv_valid   TYPE char1,
    ls_layout  TYPE lvc_s_layo,
    lv_refresh TYPE char1.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  CALL METHOD lo_grid->check_changed_data
    IMPORTING
      e_valid   = lv_valid
    CHANGING
      c_refresh = lv_refresh.
  CASE r_ucomm.
    WHEN 'UPLOAD'.
*     Upload excel
      PERFORM frm_process_upload.
    WHEN 'TRANSPORT'.
*     Transport object to TR
      PERFORM frm_process_transport.
    WHEN 'SAVE'.
*     Save Change
      PERFORM frm_process_save.
    WHEN OTHERS.
  ENDCASE.
  CALL METHOD lo_grid->get_frontend_layout
    IMPORTING
      es_layout = ls_layout.
  ls_layout-cwidth_opt = 'X'.
  CALL METHOD lo_grid->set_frontend_layout
    EXPORTING
      is_layout = ls_layout.
  CALL METHOD lo_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2.
ENDFORM.                    "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_SAVE
*&---------------------------------------------------------------------*
*& Save Change
*&---------------------------------------------------------------------*
FORM frm_process_save .
  DATA:
    lt_pcx_s1      TYPE STANDARD TABLE OF lxe_pcx_s1,
    lt_pcx_s1_read TYPE STANDARD TABLE OF lxe_pcx_s1,
    ls_pcx_s1      TYPE lxe_pcx_s1,
    lv_pstatus     TYPE lxestatprc,
    lv_objname     TYPE lxeobjname,
    lv_err_msg     TYPE lxestring.
 
  FIELD-SYMBOLS:
    <ls_alv> TYPE ty_alv.
 
  LOOP AT gt_alv ASSIGNING <gs_alv> USING KEY cbox WHERE cbox = 'X' AND t_text IS NOT INITIAL.
    MOVE-CORRESPONDING <gs_alv> TO ls_pcx_s1.
    APPEND ls_pcx_s1 TO lt_pcx_s1.
 
    AT END OF objname.
      IF <gs_alv>-obj_type = 'FNC1'.
 
        lv_objname = <gs_alv>-objname+0(30).
 
        CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ_FUNC'
          EXPORTING
            t_r3_lang = gv_t_spras
            s_r3_lang = gv_s_spras
            objtype   = 'FUNC'
            objname   = lv_objname
            read_only = ''
          TABLES
            lt_pcx_s1 = lt_pcx_s1_read.
      ENDIF.
 
      CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_WRITE'
        EXPORTING
          t_lang    = p_targ
          s_lang    = p_sour
          custmnr   = gc_custmnr
          objtype   = <gs_alv>-obj_type
          objname   = <gs_alv>-objname
*         AUTODIST  =
*         RFC_COPY  =
        IMPORTING
          pstatus   = lv_pstatus
          err_msg   = lv_err_msg
        TABLES
          lt_pcx_s1 = lt_pcx_s1.
 
      IF lv_pstatus = 'S'.
        LOOP AT gt_alv ASSIGNING <ls_alv> USING KEY grp
           WHERE obj_type = <gs_alv>-obj_type
             AND ktext    = <gs_alv>-ktext
             AND objname  = <gs_alv>-objname.
 
          IF <ls_alv>-t_text = <ls_alv>-sap_text.
            <ls_alv>-icon = icon_led_green.
          ELSE.
            <ls_alv>-icon = icon_led_yellow.
          ENDIF.
        ENDLOOP.
      ENDIF.
 
      CLEAR:
        lt_pcx_s1,
        ls_pcx_s1,
        lt_pcx_s1_read,
        lv_pstatus,
        lv_err_msg.
    ENDAT.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_UPLOAD
*&---------------------------------------------------------------------*
*& Upload excel
*&---------------------------------------------------------------------*
FORM frm_process_upload .
  DATA:
    lv_file      TYPE rlgrap-filename,
    lv_begin_row TYPE numc4 VALUE 2.
 
  DATA:
    lv_filename      TYPE string,
    lt_records       TYPE solix_tab,
    lv_headerxstring TYPE xstring,
    lv_filelength    TYPE i.
 
  DATA:
    lo_excel_ref TYPE REF TO cl_fdt_xl_spreadsheet,
    lo_data_ref  TYPE REF TO data.
 
  DATA:
    lt_worksheets TYPE STANDARD TABLE OF string,
    ls_worksheets TYPE string.
 
  FIELD-SYMBOLS:
    <lt_data> TYPE STANDARD TABLE.
 
* Get file path
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = lv_file.
 
  IF lv_file IS INITIAL.
    MESSAGE 'Canceled upload!'(m04) TYPE 'S'.
    RETURN.
  ENDIF.
 
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = 'Importing...'(m05).
 
  lv_filename = lv_file.
 
* Uplaod file
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                = lv_filename
      filetype                = 'BIN'
    IMPORTING
      filelength              = lv_filelength
      header                  = lv_headerxstring
    TABLES
      data_tab                = lt_records
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      OTHERS                  = 17.
 
  IF sy-subrc <> 0.
    MESSAGE 'Please close excel and try again.'(m06) TYPE 'S'.
    RETURN.
  ENDIF.
 
* Convert binary to XString
  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length = lv_filelength
    IMPORTING
      buffer       = lv_headerxstring
    TABLES
      binary_tab   = lt_records
    EXCEPTIONS
      failed       = 1
      OTHERS       = 2.
 
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid
          TYPE sy-msgty
        NUMBER sy-msgno
          WITH sy-msgv1
               sy-msgv2
               sy-msgv3
               sy-msgv4.
    RETURN.
  ENDIF.
 
  TRY.
      CREATE OBJECT lo_excel_ref
        EXPORTING
          document_name = lv_filename
          xdocument     = lv_headerxstring.
    CATCH cx_fdt_excel_core .
  ENDTRY.
 
  IF lo_excel_ref IS BOUND.
*   Get sheet list
    lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(
    IMPORTING
      worksheet_names = lt_worksheets ).
 
    IF lt_worksheets IS NOT INITIAL.
*     Get data from first sheet
      READ TABLE lt_worksheets INTO ls_worksheets INDEX 1.
      lo_data_ref = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet( ls_worksheets ).
      ASSIGN lo_data_ref->* TO <lt_data>.
 
      CLEAR gt_alv.
 
*     Convert to internal table
      PERFORM frm_data_conv TABLES gt_alv
                             USING <lt_data>
                                   lv_begin_row.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form FRM_DATA_CONV
*&---------------------------------------------------------------------*
*       Convert to internal table
*----------------------------------------------------------------------*
*      <--CT_TABLE        ALV table
*      -->UT_DATA         Any table
*      -->UV_BEGIN_ROW    Begin row
*----------------------------------------------------------------------*
FORM frm_data_conv TABLES ct_table
                    USING ut_data      TYPE STANDARD TABLE
                          uv_begin_row TYPE numc4.
 
  DATA:lo_typedescr   TYPE REF TO cl_abap_typedescr,
       lo_structdescr TYPE REF TO cl_abap_structdescr,
       lo_tabledescr  TYPE REF TO cl_abap_tabledescr,
       lo_result_ref  TYPE REF TO data,
       lo_newline_ref TYPE REF TO data.
 
  DATA:lv_index TYPE i.
 
  FIELD-SYMBOLS:
    <ls_itab>         TYPE data,
    <ls_newline>      TYPE data,
    <ls_source_value> TYPE data,
    <ls_target_value> TYPE data.
 
* Get result table type
  CALL METHOD cl_abap_structdescr=>describe_by_data
    EXPORTING
      p_data      = ct_table
    RECEIVING
      p_descr_ref = lo_typedescr.
 
  lo_structdescr ?= lo_typedescr.
 
* Create work area refrence
  CREATE DATA lo_newline_ref TYPE HANDLE lo_structdescr.
  ASSIGN lo_newline_ref->* TO <ls_newline>.
 
* Data Mapping
  LOOP AT ut_data ASSIGNING <ls_itab> FROM uv_begin_row.
    DO.
      ADD 1 TO lv_index.
      ASSIGN COMPONENT lv_index OF STRUCTURE <ls_itab> TO <ls_source_value>.
      ASSIGN COMPONENT lv_index OF STRUCTURE <ls_newline> TO <ls_target_value>.
 
      IF <ls_source_value> IS ASSIGNED AND <ls_target_value> IS ASSIGNED.
        <ls_target_value> = <ls_source_value>.
      ELSE.
        EXIT.
      ENDIF.
 
      UNASSIGN:
        <ls_source_value>,
        <ls_target_value>.
    ENDDO.
 
    IF <ls_newline> IS NOT INITIAL.
      APPEND <ls_newline> TO ct_table.
    ENDIF.
 
    CLEAR:
      <ls_newline>,
      lv_index.
  ENDLOOP.
 
  IF ct_table[] IS INITIAL.
    MESSAGE 'No data!'(m03) TYPE 'S'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_TRANSPORT
*&---------------------------------------------------------------------*
*& Transport object to TR
*&---------------------------------------------------------------------*
FORM frm_process_transport .
  DATA:
    lt_lxe_log TYPE tt_lxe_log,
    ls_lxe_log TYPE ty_lxe_log,
    lt_alv     TYPE tt_alv,
    lv_has_err TYPE flag.
 
  DATA:
    ls_request TYPE trwbo_request_header.
 
  DATA:
    lv_pstatus TYPE lxestatprc,
    lt_objlist TYPE STANDARD TABLE OF e071,
    lt_keylist TYPE STANDARD TABLE OF e071k.
 
  lt_alv = gt_alv.
  DELETE lt_alv WHERE cbox = ''.
  IF lt_alv IS INITIAL.
    MESSAGE 'Please select any line and try again'(m08) TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
 
  DELETE lt_alv WHERE t_text IS INITIAL.
  IF lt_alv IS INITIAL.
    MESSAGE 'The object is still untranslated and cannot be transferred'(m09) TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
 
  READ TABLE lt_alv TRANSPORTING NO FIELDS WITH KEY devclass = '$TMP'.
  IF sy-subrc = 0.
    MESSAGE 'Local object cannot be transferred'(m10) TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
 
* Get translation log
  SELECT *
    INTO TABLE lt_lxe_log
    FROM lxe_log
     FOR ALL ENTRIES IN lt_alv
   WHERE custmnr  = gc_custmnr
     AND targlng  = p_targ
     AND objtype  = lt_alv-obj_type
     AND objtype <> cl_lxe_constants=>c_objtype_dems
     AND objname  = lt_alv-objname
     AND uname   IN s_auth.
 
  CHECK lt_lxe_log IS NOT INITIAL.
 
* Select or Create a TR
  CALL FUNCTION 'TR_REQUEST_CHOICE'
    EXPORTING
      iv_request_types     = 'TK'
    IMPORTING
      es_request           = ls_request
    EXCEPTIONS
      invalid_request      = 1
      invalid_request_type = 2
      user_not_owner       = 3
      no_objects_appended  = 4
      enqueue_error        = 5
      cancelled_by_user    = 6
      recursive_call       = 7
      OTHERS               = 8.
 
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid
          TYPE 'S'
        NUMBER sy-msgno
          WITH sy-msgv1
               sy-msgv2
               sy-msgv3
               sy-msgv4
       DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
 
  LOOP AT lt_lxe_log INTO ls_lxe_log.
    CALL FUNCTION 'LXE_OBJ_CREATE_TRANSPORT_ENTRY'
      EXPORTING
        language = p_targ
        custmnr  = gc_custmnr
        objtype  = ls_lxe_log-objtype
        objname  = ls_lxe_log-objname
        tabkey   = ls_lxe_log-tabkey
*       ADD_TADIR            = ''
      IMPORTING
*       TADIR_OBJECT         =
*       TADIR_OBJ_NAME       =
        pstatus  = lv_pstatus
      TABLES
        ex_e071  = lt_objlist
        ex_e071k = lt_keylist.
 
    IF lv_pstatus = 'S'.
      CALL FUNCTION 'TR_REQUEST_CHOICE'
        EXPORTING
          iv_suppress_dialog   = 'X'
          iv_request_types     = 'TK'
          iv_request           = ls_request-trkorr
          it_e071              = lt_objlist
          it_e071k             = lt_keylist
          iv_with_error_log    = 'X'
          iv_no_owner_check    = 'X'
*       IMPORTING
*         ES_REQUEST           =
        EXCEPTIONS
          invalid_request      = 1
          invalid_request_type = 2
          user_not_owner       = 3
          no_objects_appended  = 4
          enqueue_error        = 5
          cancelled_by_user    = 6
          recursive_call       = 7
          OTHERS               = 8.
 
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid
              TYPE 'S'
            NUMBER sy-msgno
              WITH sy-msgv1
                   sy-msgv2
                   sy-msgv3
                   sy-msgv4
           DISPLAY LIKE 'E'.
        RETURN.
      ENDIF.
    ENDIF.
  ENDLOOP.
 
  MESSAGE 'Successfully added to the request list'(m11) TYPE 'S'.
ENDFORM.

 

SAP程序开发过程的翻译任务

可以对程序标题进行翻译(即程序属性翻译)

输入翻译内容后会变黄.

对于一些程序中使用的文本换成文本元素使用

添加进文本元素后激活

后面继续goto 中点翻译进入界面会自动添加

注意当翻译文本过长会出现翻译报错

解决办法提高文本元素自身长度

实现结果

创想ALV的列标题,字段值都用文本元素替代实现ALV不同语言系统不同ALV.

对gui状态栏进行翻译

点击翻译后进入

进入

其中红灯表示还没有翻译

保存

 颜色变为黄.

状态栏/screen自绘界面也可以翻译 在se80

消息类中文本翻译

数据元素的翻译描述

zstudent_hq_02为数据库表.

数据元素描述,短文本-长文本翻译.

翻译内容的传输

SAP ABAP修改字段描述(翻译及传输)_abap翻译传输-CSDN博客

如何翻译事务代码(tcode)描述-SE63 | 摆渡SAP

所有翻译后的内容,最后通过sap专门的翻译工具单独生成翻译传输请求后再进行传输,否则可能导致增强部分内容无法正常传输到测试系统。

方法一、使用Report:RS_LXE_RECORD_TORDER,T-Code:SLXT
(1)执行事务码:SLXT

(2)点执行按钮

(3)SE63,或SE38翻译相关程序,用SE01,可以看到请求号:R3DK916560

1, 找到transaction对象

SE63点击short texts按钮

在弹出的窗口内找到transaction对象,

双击transactions行

2, 编辑翻译语言

在屏幕上输入tcode和需要翻译的语言,点击edit按钮进入编辑界面,

 

 翻译后,保存,

需要注意的事,这个tcode翻译需要手动通过tcode SLXT添加到传输请求(TR)上,详细参照-->

使用SLXT传输翻译文本


(4)SE09里面可以看到对应的请求号

方法二:自己创建一个请求并添加,Program ID为:LANG

 效果如下:

 

 

翻译常见问题

 问题描述:中韩双语配置的时候,发现SE51翻译屏幕的时候,找不到中文的文本,具体情况如下,查看了很多的地方,找不到问题的原因,还是翻了一下之前的文档才发现了不对。

要翻译的界面如下

问题说明:
(1)通过SE51找到对应的屏幕

 注意一下下面的位置,只有是F或者为空的时候才可以翻译文本。

 注意一下下面的位置,只有是F或者为空的时候才可以翻译文本。

(2)修改后进入

修改完成后,记得激活一下。

(3)保存传输后,效果如下:

SAP文本修改 

干货!SAP业务顾问也会的增强——标准字段文本修改的4种方法-CSDN博客

SAP文本分为4种(仅个人观点):

1.界面文本(Interface text),如图1中的1;(GUI文本)

2.屏幕文本(Screen Text),如图1中的2;(选择屏幕文本)

                                                 图1

3.区域菜单,如图2中的3,根据需要,调整区域菜单的描述;

                                                      图2

4.事务代码文本,如图3。

                                           图3

修改界面文本的方法  

采购订单显示界面(事务代码:ME23N)抬头文本为“标准采购订单”+订单号+“已被”+用户名+“创建”,如果想要修改描述,鼠标点击当前界面(如行项目),点击F1,点击“技术信息”。

从下图中可以看出此界面是在程序:SAPLMEGUI中,GUI状态为:NORMAL_EXT。

双击“NORMAL_EXT”,或者在SE80中选择“程序”,输入SAPLMEGUI,回车。

找到GUI状态:NORMAL_EXT。双击NORMAL_EXT。转到->翻译,输入源语言和目标语言。回车或打钩。

双击界面文本下的“MEGUI”

找到文本,修改,保存,保存,后退,激活GUI状态。

重新查看采购订单,看到界面文本已修改。

2

修改屏幕文本的方法 

屏幕文本分为2种,第一种是屏幕字段的文本来源于屏幕字段对应的数据元素的文本,这种修改元素的文本即可。第二种是屏幕字段的文本直接在屏幕中定义,此时需要修改屏幕。

以采购订单(ME23N)中的“税码”(第一种)和“基于收货的发票校验”(第二种)字段为例。

选中“基于收货的发票校验”字段,点击F1,然后选中技术信息。

字段对应的屏幕是程序:SAPLMEGUI,屏幕编号:1317,字段对应的数据元素WEBRE,对应的屏幕字段为:MEPO1317-WEBRE。双击屏幕编号“1317”,跳转到屏幕制作器中。

MEPO1317-MWSKZ(税码)屏幕字段的字典属性为2,1~4表示字段的屏幕文本取自字段对应的数据元素中的文本。MEPO1317-WEBRE(基于收货的发票校验)屏幕字段的字典属性为F,表示该字段的屏幕文本直接在屏幕中定义。

2.1税码的修改方法(含增强)
事务代码:CMOD,转到->转到->文本增强->关键字->更改

输入数据元素:MWSKZ,因为字典属性为2,因此修改中字段标签。

重新查看订单,税码描述已修改。

2.2基于收货的发票校验字段修改方法(F类型)
选中MEPO1317-WEBRE字段,转到->翻译,选择翻译的语言,本例选“ZH”,

双击SRT1的MEGUI,

找到“基于收货的发票校验”并单击,修改描述,此例中故意将两个描述设为不同,保存,后退,保存,激活。

重新查看订单,“基于收货的发票校验”描述改为“基于收货的发票校验TEST1”,当光标放在“基于收货的发票校验TEST1”处时,显示“基于收货的发票校验TEST2”。因此可以看出上述图中的2个描述,一个是文本描述,一个是工具提示的描述。

3

修改区域菜单的方法   

如果想修改区域菜单的文本,如下图想修改“业务伙伴”,选中“业务伙伴”,点击“附加”->“技术明细”,找到对应的区域菜单“VS00”

进入事务代码:SE43,区域菜单中输入上一步得到的“VS00”->“实例程序”->“翻译”。

选择语言

找到业务伙伴,换成想要的描述即可,保存即可。

回到菜单栏,看到区域菜单描述已修改。

4

修改事务代码文本的方法  

首先,创建事务代码:SE93,输入事务代码及程序名,保存。

 如果是同语言的事务代码描述修改,直接在SE93中修改,保存即可。如果需要依据登陆系统语言展示不同事务代码描述,即翻译功能,使用事务代码:SE63,“短文本”。

查找“TRAN”,双击“TRAN 事务”

“对象名称”中输入事务代码,选择源语言及目标语言,回车或点击“编辑”

输入在目标语言系统的描述,点击“保存”

回到主页

<think>好的,我现在要解决用户遇到的SAP UI5项目部署到ABAP服务器时出现的“self-signed certificate”错误。首先,我需要理解这个问题的背景。用户在使用SAP UI5开发工具进行部署时,遇到了证书问题,具体是自签名证书被信任导致的错误。 首先,我应该回忆一下自签名证书在HTTPS连接中的作用。当客户端(比如SAP UI5的部署工具)与服务器(ABAP服务器)建立安全连接时,如果服务器使用自签名证书,而客户端的信任库中没有该证书,就会引发证书验证失败的错误。这时候,常见的解决办法是将服务器的自签名证书导入到客户端的信任库中,或者绕过证书验证(虽然推荐生产环境这样做)。 接下来,我需要考虑用户的具体情况。用户可能是在开发或测试环境中使用自签名证书,因此需要调整部署工具的设置以信任该证书。可能的解决方案包括: 1. **将ABAP服务器的自签名证书导入到部署工具的信任链中**:这需要用户导出ABAP服务器的证书,然后将其添加到本地机器的信任库(如Java的cacerts,因为SAP工具通常基于Java)。 2. **在部署命令中添加参数以忽略证书验证**:例如,在使用MTA部署工具或UI5 CLI时,可能存在参数允许验证SSL证书,但这可能有安全风险,只建议临时使用。 3. **配置SAP BAS或使用的IDE信任该证书**:如果用户使用的是SAP Business Application Studio或其他基于浏览器的工具,可能需要让浏览器信任该证书,从而影响部署工具的行为。 然后,我需要详细梳理每个步骤的具体操作方法,确保用户能够逐步执行。例如,导出证书的步骤可能涉及使用浏览器访问ABAP服务器,导出证书文件,然后使用keytool命令将其添加到Java的cacerts文件中。同时,需要注意Java的版本路径是否正确,特别是SAP工具可能使用的特定JRE。 此外,还要考虑同操作系统下的路径差异,比如Windows、MacOS或Linux中cacerts文件的位置同。另外,如果用户的环境中使用的是Docker或容器,可能需要进入容器内部进行证书导入,这增加了复杂性。 还要提醒用户注意安全风险,忽略证书验证仅适用于非生产环境,避免在生产环境中使用此方法。同时,检查ABAP服务器证书是否确实为自签名,是否存在其他配置问题,比如证书过期或主机名匹配等。 最后,可能需要提供一些常见问题排查步骤,例如检查网络连接,确认证书是否正确导入,重启相关服务等。确保用户能够全面理解问题根源,并根据实际情况选择合适的解决方案。</think>以下是针对SAP UI5项目部署到ABAP时出现`self-signed certificate`错误的逐步解决方案: --- ### **问题原因** 当ABAP服务器使用**自签名证书(非CA机构颁发)**时,部署工具(如`@sap/ux-ui5-tooling`)无法验证其合法性,触发SSL/TLS证书信任错误。 --- ### **解决方法** #### **1. 将ABAP证书导入本地信任库(推荐)** **步骤:** 1. **导出ABAP服务器证书** - 用浏览器访问ABAP服务器的Fiori Launchpad URL(如`https://your-abap-server:port`) - 点击地址栏锁图标 → **证书信息** → **导出证书**(保存为`.crt`或`.pem`格式) 2. **找到Java默认信任库路径** - SAP部署工具通常依赖Java的`cacerts`文件,路径示例: - Windows: `<JAVA_HOME>\jre\lib\security\cacerts` - Mac/Linux: `$JAVA_HOME/jre/lib/security/cacerts` 3. **使用`keytool`导入证书** ```bash keytool -import -alias ABAP_SERVER -keystore [cacerts路径] -file [导出的证书路径] ``` - 默认密码:`changeit` - 示例: ```bash keytool -import -alias ABAP_DEV -keystore /usr/lib/jvm/java-11-openjdk/lib/security/cacerts -file ~/Downloads/abap.crt ``` 4. **重启部署工具** - 确保所有依赖Java的进程(如VS Code、CLI)重启以加载新证书 --- #### **2. 临时绕过证书验证(仅限开发环境)** **方法一:** 在部署命令中添加`strictSSL:false` ```bash ui5 deploy --config ui5-deploy.yaml --verbose --strict-ssl false ``` **方法二:** 设置环境变量 ```bash export NODE_TLS_REJECT_UNAUTHORIZED=0 # Linux/Mac set NODE_TLS_REJECT_UNAUTHORIZED=0 # Windows ``` --- #### **3. 配置SAP BAS信任证书** 如果使用**SAP Business Application Studio**: 1. 通过左侧菜单打开**终端** 2. 运行: ```bash export NODE_EXTRA_CA_CERTS=[证书绝对路径] ``` 例如: ```bash export NODE_EXTRA_CA_CERTS=/home/user/project/abap.crt ``` --- ### **注意事项** 1. **安全警告** - 方法2会禁用SSL验证,**仅限临时测试使用**,生产环境必须使用可信证书。 2. **证书有效性检查** - 确保证书未过期,且`Common Name (CN)`匹配ABAP服务器域名。 3. **工具兼容性** - 如果使用`MTA部署工具`,需同样配置其底层Java环境。 --- ### **附录:常见错误排查** - **错误:`certificate has expired`** → 更新ABAP服务器证书或同步本地时间。 - **错误:`Hostname/IP does not match certificate`** → 确保证书中的域名与ABAP服务器地址完全一致。 - **Java版本冲突** → 通过`which java`或`where java`检查部署工具实际使用的JRE路径。 --- 通过上述步骤,应能解决自签名证书导致的部署问题。如仍报错,请提供完整的控制台日志以进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值