SAP ABAP批量翻译工具(翻译+传输)

**


背景:

在海外项目开发中,因为涉及多语言,翻译是很常见的一个需求,往往我们需要手工去翻译大量的自建表,数据元素,域,域值,结构,消息类等等一系列开发对象,这个过程很无聊也很费时,SAP又没有提供批量翻译的入口,只能在各自的开发界面,或者SE63去针对单个对象挨个翻译,所以懒惰促使我不得不开发一个批量翻译的工具,可以在统一入口来批量维护。


程序界面:

作为开发的第一个版本,主要包括以下功能,后续根据实际需求再优化或者追加一些功能吧:

  • 表翻译:表标题描述翻译、表中内置类型字段翻译。
  • 视图:视图标题翻译。
  • 结构:结构标题描述翻译,结构中内置类型字段翻译。
  • 数据元素:数据元素描述翻译、数据元素长/中/短/标题描述翻译。
  • :域描述翻译、域值翻译。
  • 程序:程序标题翻译、程序屏幕标题翻译、程序屏幕内容翻译(菜单、GUI状态的翻译被注释掉了,有需要放开对应代码即可)。
  • 函数组:函数组中所有函数描述翻译、函数参数翻译。
  • 事务代码:事务代码描述翻译。
  • 消息类:消息类描述翻译。

执行效果:

翻译步骤:
  1. 使用ALV标准下载功能下载至EXCEL,也可以直接在ALV中编辑;
  2. 在本地EXCEL中批量翻译好之后,点击ALV界面导入按钮,全选后点击按钮,黄灯代表已翻译,但与SAP标准建议翻译不一致,红灯代表尚未翻译,绿灯代表与SAP标准建议翻译一致;
  3. 选中需要传输的数据,点击按钮即可将数据保存至指定请求中。


代码部署注意点:

1.ECC和S4版本中部分参数有差异,目前发现以下两处需要调整:

2.代码复制后需要创建GUI TITLE以及GUI STATUS:

3.标准函数保存翻译时,以对象类型+对象名相同的为一组去更新,所以填写翻译时以及选择时不要漏填漏选。


完整源码:


 
 
  1. * &--------------------------------------------------------------------- *
  2. * & Report ZMULTIPLE_TRANSLATION
  3. * &--------------------------------------------------------------------- *
  4. * & Author:DeveloprMrMeng
  5. * & Usage :Used to translate common development objects
  6. * & Date : 2024.07.15
  7. * &--------------------------------------------------------------------- *
  8. REPORT zmultiple_translation.
  9. *---------------------------------------------------------------------- *
  10. * Types Defination
  11. *---------------------------------------------------------------------- *
  12. TYPES:
  13. * Selection screen
  14. BEGIN OF ty_ screen,
  15. package TYPE tdevc-devclass, "Package
  16. author TYPE tadir-author, "Author
  17. s_langu TYPE lxe_log-targlng, "Source Language
  18. t_langu TYPE lxe_log-targlng, "Target Language
  19. table TYPE rsrd 1-tbma_val, "Table
  20. structure TYPE rsrd1-stru_val, "Sturcture
  21. data_element TYPE rsrd 1-drma_val, "Data element
  22. domain TYPE rsrd1-doma_val, "Domain
  23. view TYPE rsrd 1-vima_val, "View
  24. program TYPE reposrc-progname, " Program
  25. function_grp TYPE tlibg-area, "Function Group
  26. function TYPE tfdir-funcname, "Fucntion
  27. transaction TYPE tstc-tcode, "Transaction
  28. message_class TYPE t100-arbgb, "Message class
  29. message_ no TYPE t 100-msgnr, "Message number
  30. END OF ty_screen,
  31. BEGIN OF ty_tadir,
  32. pgmid TYPE tadir-pgmid, " Program ID
  33. object TYPE tadir-object, "Object Type
  34. obj_name TYPE tadir-obj_name, " Object Name
  35. srcsystem TYPE tadir-srcsystem, "Original System
  36. author TYPE tadir-author, "Author
  37. devclass TYPE tadir-devclass, "Package
  38. END OF ty_tadir,
  39. tt_tadir TYPE STANDARD TABLE OF ty_tadir,
  40. BEGIN OF ty_fungrp,
  41. fungrp TYPE tfdir-pname, " Function group
  42. END OF ty_fungrp,
  43. tt_fungrp TYPE STANDARD TABLE OF ty_fungrp,
  44. BEGIN OF ty_tfdir,
  45. funcname TYPE tfdir-funcname, "Function name
  46. pname TYPE tfdir-pname, "Fucntion group full name
  47. include TYPE tfdir-include, "index
  48. END OF ty_tfdir,
  49. tt_tfdir TYPE SORTED TABLE OF ty_tfdir
  50. WITH UNIQUE KEY pname funcname,
  51. BEGIN OF ty_d020s,
  52. prog TYPE d020s-prog, " Program name
  53. dnum TYPE d 020s-dnum, "Screen number
  54. END OF ty_d020s,
  55. tt_d020s TYPE STANDARD TABLE OF ty_d020s
  56. WITH NON-UNIQUE SORTED KEY prog COMPONENTS prog,
  57. BEGIN OF ty_read_para,
  58. objtype TYPE lxeobjtype, " Object type
  59. objname TYPE lxeobjname, "Object name
  60. END OF ty_read_para,
  61. tt_read_para TYPE STANDARD TABLE OF ty_read_para,
  62. ty_attobt TYPE lxe_attobt, "Translation object type description
  63. tt_attobt TYPE SORTED TABLE OF ty_attobt
  64. WITH UNIQUE KEY lang obj_ type,
  65. ty_lxe_log TYPE lxe_log, "Translation log
  66. tt_lxe_log TYPE STANDARD TABLE OF ty_lxe_log,
  67. ty_t100 TYPE t100, "Message
  68. tt_t 100 TYPE SORTED TABLE OF ty_t 100
  69. WITH UNIQUE KEY sprsl arbgb msgnr,
  70. BEGIN OF ty_alv,
  71. obj_ type TYPE lxe_attobt-obj_ type, "Object Type
  72. ktext TYPE lxe_attobt-ktext, " Object Type Description
  73. objname TYPE lxeobjname, "Object name
  74. textkey TYPE lxe_pcx_s1-textkey, "Text key
  75. icon TYPE icon_d, "Icon
  76. s_text TYPE lxe_pcx_s1-s_text, " Source text
  77. t_text TYPE lxe_pcx_s 1-t_text, "Target text
  78. sap_text TYPE lxe_pcx_s1-t_text, "Translation of SAP recommendations
  79. texttype TYPE lxe_pcx_s 1-texttype, "Text type
  80. devclass TYPE tadir-devclass, "Package
  81. author TYPE tadir-author, "Author
  82. unitmlt TYPE lxe_pcx_s1-unitmlt, "Maximum Length of Translation Unit
  83. uppcase TYPE lxe_pcx_s 1-uppcase, "Only Uppercase Allowed
  84. cbox TYPE cbox, "CheckBox
  85. style TYPE lvc_t_styl,
  86. color TYPE lvc_t_scol,
  87. END OF ty_alv,
  88. tt_alv TYPE STANDARD TABLE OF ty_alv
  89. WITH NON-UNIQUE SORTED KEY cbox COMPONENTS cbox
  90. WITH NON-UNIQUE SORTED KEY grp COMPONENTS obj_ type ktext objname.
  91. CONSTANTS:
  92. gc_custmnr TYPE lxecustmnr VALUE cl_lxe_constants = >c_trl_ area_local.
  93. * &--------------------------------------------------------------------- *
  94. * & Global Pramaters Defination
  95. * &--------------------------------------------------------------------- *
  96. DATA:
  97. gs_ screen TYPE ty_ screen,
  98. gt_tfdir TYPE tt_tfdir,
  99. gt_alv TYPE tt_alv,
  100. gt_attobt TYPE tt_attobt,
  101. gt_d 020s TYPE tt_d 020s,
  102. gt_t 100 TYPE tt_t 100,
  103. gv_t_spras TYPE spras,
  104. gv_s_spras TYPE spras.
  105. FIELD-SYMBOLS:
  106. <gs_alv > TYPE ty_alv.
  107. DATA:
  108. gt_r_ object TYPE RANGE OF tadir-object,
  109. gs_r_ object LIKE LINE OF gt_r_ object,
  110. gt_r_obj_name TYPE RANGE OF tadir-obj_name,
  111. gs_r_obj_name LIKE LINE OF gt_r_obj_name.
  112. * &--------------------------------------------------------------------- *
  113. * & Selection Screen Defination
  114. * &--------------------------------------------------------------------- *
  115. SELECTION-SCREEN BEGIN OF BLOCK mode WITH FRAME TITLE gv_desc 0.
  116. PARAMETERS:
  117. p_tabl AS CHECKBOX DEFAULT '' USER-COMMAND tabl,
  118. p_view AS CHECKBOX DEFAULT '' USER-COMMAND view,
  119. p_stru AS CHECKBOX DEFAULT '' USER-COMMAND stru,
  120. p_dtel AS CHECKBOX DEFAULT '' USER-COMMAND dtel,
  121. p_doma AS CHECKBOX DEFAULT '' USER-COMMAND doma,
  122. p_prog AS CHECKBOX DEFAULT '' USER-COMMAND prog,
  123. p_fugr AS CHECKBOX DEFAULT '' USER-COMMAND fugr,
  124. p_tran AS CHECKBOX DEFAULT '' USER-COMMAND tran,
  125. p_mess AS CHECKBOX DEFAULT '' USER-COMMAND mess.
  126. SELECTION-SCREEN END OF BLOCK mode.
  127. SELECTION-SCREEN BEGIN OF BLOCK tra WITH FRAME TITLE gv_desc 1.
  128. PARAMETERS:
  129. p_sour TYPE ty_screen-s_langu,
  130. p_targ TYPE ty_screen-t_langu.
  131. SELECTION-SCREEN END OF BLOCK tra.
  132. SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE gv_desc 2.
  133. SELECT-OPTIONS:
  134. s_pack FOR gs_screen-package,
  135. s_auth FOR gs_screen-author.
  136. SELECTION-SCREEN END OF BLOCK opt.
  137. SELECTION-SCREEN BEGIN OF BLOCK ddic WITH FRAME TITLE gv_desc 3.
  138. SELECT-OPTIONS:
  139. s_tabl FOR gs_screen-table MODIF ID tab,
  140. s_view FOR gs_screen-view MODIF ID vie,
  141. s_stru FOR gs_screen-structure MODIF ID str,
  142. s_dtel FOR gs_screen-data_element MODIF ID dte,
  143. s_doma FOR gs_screen-domain MODIF ID dom.
  144. SELECTION-SCREEN END OF BLOCK ddic.
  145. SELECTION-SCREEN BEGIN OF BLOCK prog WITH FRAME TITLE gv_desc 4.
  146. SELECT-OPTIONS:
  147. s_prog FOR gs_screen-program MODIF ID pro.
  148. SELECTION-SCREEN END OF BLOCK prog.
  149. SELECTION-SCREEN BEGIN OF BLOCK func WITH FRAME TITLE gv_desc 5.
  150. SELECT-OPTIONS:
  151. s_fugr FOR gs_screen-function_grp MODIF ID fug.
  152. SELECTION-SCREEN END OF BLOCK func.
  153. SELECTION-SCREEN BEGIN OF BLOCK trsc WITH FRAME TITLE gv_desc 6.
  154. SELECT-OPTIONS:
  155. s_tran FOR gs_screen-transaction MODIF ID tra.
  156. SELECTION-SCREEN END OF BLOCK trsc.
  157. SELECTION-SCREEN BEGIN OF BLOCK mess WITH FRAME TITLE gv_desc 7.
  158. SELECT-OPTIONS:
  159. s_mscl FOR gs_screen-message_ class MODIF ID mes,
  160. s_msno FOR gs_screen-message_ no MODIF ID mes.
  161. SELECTION-SCREEN END OF BLOCK mess.
  162. PARAMETERS:
  163. p_only AS CHECKBOX DEFAULT 'X'.
  164. * &--------------------------------------------------------------------- *
  165. * & INITIALIZATION
  166. * &--------------------------------------------------------------------- *
  167. INITIALIZATION.
  168. * Initial some paramaters
  169. PERFORM frm_ initial.
  170. * &--------------------------------------------------------------------- *
  171. * & SELECTION-SCREEN OUTPUT
  172. * &--------------------------------------------------------------------- *
  173. AT SELECTION-SCREEN OUTPUT.
  174. * Update screen defore screen output
  175. PERFORM frm_update_ screen.
  176. * &--------------------------------------------------------------------- *
  177. * & SELECTION-SCREEN Search Help
  178. * &--------------------------------------------------------------------- *
  179. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_sour.
  180. PERFORM frm_f 4_ for_language USING 'P_SOUR' CHANGING p_sour.
  181. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_targ.
  182. PERFORM frm_f 4_ for_language USING 'P_TARG' CHANGING p_targ.
  183. * &--------------------------------------------------------------------- *
  184. * & START-OF-SELECTION
  185. * &--------------------------------------------------------------------- *
  186. START-OF-SELECTION.
  187. * Process Start
  188. PERFORM frm_ start_process.
  189. * &--------------------------------------------------------------------- *
  190. * & Form FRM_ INITIAL
  191. * &--------------------------------------------------------------------- *
  192. * & Initial some paramaters
  193. * &--------------------------------------------------------------------- *
  194. FORM frm_ initial .
  195. gv_desc 0 = 'Translation Scope'( 000).
  196. gv_desc 1 = 'Translation Mode'( 001).
  197. gv_desc 2 = 'Default Condition'( 002).
  198. gv_desc 3 = 'DDIC Condition'( 003).
  199. gv_desc 4 = 'Program Condition'( 004).
  200. gv_desc 5 = 'Function Condition'( 005).
  201. gv_desc 6 = 'Transaction Condition'( 006).
  202. gv_desc 7 = 'Message Condition'( 007).
  203. %_p_tabl_%_app_%-text = 'Table'( 008).
  204. %_p_stru_%_app_%-text = 'Structure'( 009).
  205. %_p_dtel_%_app_%-text = 'Data Element'( 010).
  206. %_p_doma_%_app_%-text = 'Domain'( 011).
  207. %_p_view_%_app_%-text = 'View'( 012).
  208. %_p_prog_%_app_%-text = 'Program'( 013).
  209. %_p_fugr_%_app_%-text = 'Function Group'( 014).
  210. %_p_tran_%_app_%-text = 'Transaction'( 015).
  211. %_p_mess_%_app_%-text = 'Message'( 016).
  212. %_p_sour_%_app_%-text = 'Source Language'( 017).
  213. %_p_targ_%_app_%-text = 'Target Language'( 018).
  214. %_s_pack_%_app_%-text = 'Package'( 019).
  215. %_s_auth_%_app_%-text = 'Author'( 020).
  216. %_s_tabl_%_app_%-text = 'Table Name'( 021).
  217. %_s_view_%_app_%-text = 'View Name'( 022).
  218. %_s_stru_%_app_%-text = 'Structure Name'( 023).
  219. %_s_dtel_%_app_%-text = 'Data Element Name'( 024).
  220. %_s_doma_%_app_%-text = 'Domain Name'( 025).
  221. %_s_prog_%_app_%-text = 'Program Name'( 026).
  222. %_s_fugr_%_app_%-text = 'Function Group Name'( 027).
  223. %_s_tran_%_app_%-text = 'Transaction Code'( 028).
  224. %_s_mscl_%_app_%-text = 'Message Class'( 029).
  225. %_s_msno_%_app_%-text = 'Message Number'( 030).
  226. %_p_only_%_app_%-text = 'Untranslated only'( 031).
  227. ENDFORM.
  228. * &--------------------------------------------------------------------- *
  229. * & Form FRM_UPDATE_ SCREEN
  230. * &--------------------------------------------------------------------- *
  231. * & Update screen defore screen output
  232. * &--------------------------------------------------------------------- *
  233. FORM frm_update_ screen .
  234. LOOP AT SCREEN.
  235. IF screen-name = 'S_PACK-LOW' OR screen-name = 'P_SOUR' OR screen-name = 'P_TARG'.
  236. screen-required = '2'.
  237. ENDIF.
  238. IF p_tabl = ''.
  239. IF screen-group 1 = 'TAB'.
  240. screen-active = 0.
  241. ENDIF.
  242. ENDIF.
  243. IF p_stru = ''.
  244. IF screen-group 1 = 'STR'.
  245. screen-active = 0.
  246. ENDIF.
  247. ENDIF.
  248. IF p_dtel = ''.
  249. IF screen-group 1 = 'DTE'.
  250. screen-active = 0.
  251. ENDIF.
  252. ENDIF.
  253. IF p_doma = ''.
  254. IF screen-group 1 = 'DOM'.
  255. screen-active = 0.
  256. ENDIF.
  257. ENDIF.
  258. IF p_view = ''.
  259. IF screen-group 1 = 'VIE'.
  260. screen-active = 0.
  261. ENDIF.
  262. ENDIF.
  263. IF p_prog = ''.
  264. IF screen-group 1 = 'PRO'.
  265. screen-active = 0.
  266. ENDIF.
  267. ENDIF.
  268. IF p_fugr = ''.
  269. IF screen-group 1 = 'FUG'.
  270. screen-active = 0.
  271. ENDIF.
  272. ENDIF.
  273. IF p_tran = ''.
  274. IF screen-group 1 = 'TRA'.
  275. screen-active = 0.
  276. ENDIF.
  277. ENDIF.
  278. IF p_mess = ''.
  279. IF screen-group 1 = 'MES'.
  280. screen-active = 0.
  281. ENDIF.
  282. ENDIF.
  283. MODIFY SCREEN.
  284. ENDLOOP.
  285. ENDFORM.
  286. * &--------------------------------------------------------------------- *
  287. * & Form FRM_ START_PROCESS
  288. * &--------------------------------------------------------------------- *
  289. * & Process Start
  290. * &--------------------------------------------------------------------- *
  291. FORM frm_ start_process .
  292. * Check input
  293. PERFORM frm_check_ input.
  294. * Get translation objects
  295. PERFORM frm_ get_ object.
  296. * Show result as ALV
  297. PERFORM frm_ display_alv.
  298. ENDFORM.
  299. * &--------------------------------------------------------------------- *
  300. * & Form FRM_CHECK_ INPUT
  301. * &--------------------------------------------------------------------- *
  302. * & Check input
  303. * &--------------------------------------------------------------------- *
  304. FORM frm_check_ input .
  305. IF p_tabl IS INITIAL AND
  306. p_view IS INITIAL AND
  307. p_stru IS INITIAL AND
  308. p_dtel IS INITIAL AND
  309. p_doma IS INITIAL AND
  310. p_prog IS INITIAL AND
  311. p_fugr IS INITIAL AND
  312. p_tran IS INITIAL AND
  313. p_mess IS INITIAL.
  314. MESSAGE 'Please select at least one transaction scope!'(m 01) TYPE 'S' DISPLAY LIKE 'E'.
  315. LEAVE LIST-PROCESSING.
  316. ENDIF.
  317. IF s_pack IS INITIAL.
  318. * Fill out all required entry fields
  319. MESSAGE s 055( 00) DISPLAY LIKE 'E'.
  320. LEAVE LIST-PROCESSING.
  321. ENDIF.
  322. LOOP AT s_pack.
  323. 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
  324. ( 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' ).
  325. MESSAGE 'You can select only objects in the custom namespace'(m 02) TYPE 'S' DISPLAY LIKE 'E'.
  326. LEAVE LIST-PROCESSING.
  327. ENDIF.
  328. ENDLOOP.
  329. ENDFORM.
  330. * &--------------------------------------------------------------------- *
  331. * & Form FRM_ GET_ OBJECT
  332. * &--------------------------------------------------------------------- *
  333. * & Get translation objects
  334. * &--------------------------------------------------------------------- *
  335. FORM frm_ get_ object .
  336. * Build select condtion scope
  337. PERFORM frm_build_scope_cond.
  338. * Get tranlation list
  339. PERFORM frm_ get_list.
  340. ENDFORM.
  341. * &--------------------------------------------------------------------- *
  342. * & Form FRM_ DISPLAY_ALV
  343. * &--------------------------------------------------------------------- *
  344. * & Show result as ALV
  345. * &--------------------------------------------------------------------- *
  346. FORM frm_ display_alv .
  347. DATA:
  348. ls_layout TYPE lvc_s_layo,
  349. lt_fieldcat TYPE lvc_t_fcat,
  350. ls_fieldcat TYPE lvc_s_fcat,
  351. lt_event_ exit TYPE slis_t_event_ exit,
  352. ls_event_ exit TYPE slis_event_ exit.
  353. * Set Layout
  354. ls_layout-zebra = 'X'. "Alternating line color
  355. ls_layout-sel_mode = 'C'. "SelectionMode
  356. ls_layout-cwidth_opt = 'X'. "Optimize column width
  357. ls_layout-box_fname = 'CBOX'. "Field name of internal table field
  358. ls_layout-stylefname = 'STYLE'. "Field name of internal table field
  359. ls_layout-ctab_fname = 'COLOR'. "Field name with complex cell color coding
  360. * Set fieldcat
  361. ls_fieldcat-fieldname = 'OBJ_TYPE'.
  362. ls_fieldcat-scrtext_l = 'Translation Object Type'(f 02).
  363. APPEND ls_fieldcat TO lt_fieldcat.
  364. CLEAR ls_fieldcat.
  365. ls_fieldcat-fieldname = 'KTEXT'.
  366. ls_fieldcat-scrtext_l = 'Object Type Description'(f 03).
  367. APPEND ls_fieldcat TO lt_fieldcat.
  368. CLEAR ls_fieldcat.
  369. ls_fieldcat-fieldname = 'OBJNAME'.
  370. ls_fieldcat-scrtext_l = 'Object Name'(f 04).
  371. APPEND ls_fieldcat TO lt_fieldcat.
  372. CLEAR ls_fieldcat.
  373. ls_fieldcat-fieldname = 'TEXTKEY'.
  374. ls_fieldcat-scrtext_l = 'Text Key'(f 05).
  375. APPEND ls_fieldcat TO lt_fieldcat.
  376. CLEAR ls_fieldcat.
  377. ls_fieldcat-fieldname = 'ICON'.
  378. ls_fieldcat-just = 'C'.
  379. ls_fieldcat-scrtext_l = 'Status'(f 08).
  380. APPEND ls_fieldcat TO lt_fieldcat.
  381. CLEAR ls_fieldcat.
  382. ls_fieldcat-fieldname = 'S_TEXT'.
  383. ls_fieldcat-scrtext_l = 'Source Text'(f 06).
  384. APPEND ls_fieldcat TO lt_fieldcat.
  385. CLEAR ls_fieldcat.
  386. ls_fieldcat-fieldname = 'T_TEXT'.
  387. ls_fieldcat-edit = 'X'.
  388. ls_fieldcat-lowercase = 'X'.
  389. ls_fieldcat-outputlen = 255.
  390. ls_fieldcat-intlen = 255.
  391. ls_fieldcat-dd_outlen = 255.
  392. ls_fieldcat-scrtext_l = 'Target Text'(f 07).
  393. APPEND ls_fieldcat TO lt_fieldcat.
  394. CLEAR ls_fieldcat.
  395. ls_fieldcat-fieldname = 'SAP_TEXT'.
  396. ls_fieldcat-scrtext_l = 'SAP recommendations'(f 09).
  397. APPEND ls_fieldcat TO lt_fieldcat.
  398. CLEAR ls_fieldcat.
  399. ls_fieldcat-fieldname = 'TEXTTYPE'.
  400. ls_fieldcat-scrtext_l = 'Text Type'(f 10).
  401. APPEND ls_fieldcat TO lt_fieldcat.
  402. CLEAR ls_fieldcat.
  403. ls_fieldcat-fieldname = 'DEVCLASS'.
  404. ls_fieldcat-scrtext_l = 'Package'(f 11).
  405. APPEND ls_fieldcat TO lt_fieldcat.
  406. CLEAR ls_fieldcat.
  407. ls_fieldcat-fieldname = 'AUTHOR'.
  408. ls_fieldcat-scrtext_l = 'Author'(f 12).
  409. APPEND ls_fieldcat TO lt_fieldcat.
  410. CLEAR ls_fieldcat.
  411. * Show ALV
  412. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  413. EXPORTING
  414. i_callback_ program = sy-repid
  415. i_callback_ pf_ status_ set = 'FRM_STATUS_SET'
  416. i_callback_user_command = 'FRM_USER_COMMAND'
  417. is_layout_lvc = ls_layout
  418. it_fieldcat_lvc = lt_fieldcat
  419. it_event_ exit = lt_event_ exit
  420. i_save = 'A'
  421. TABLES
  422. t_outtab = gt_alv
  423. EXCEPTIONS
  424. program_ error = 1
  425. OTHERS = 2.
  426. ENDFORM.
  427. * &--------------------------------------------------------------------- *
  428. * & Form FRM_BUILD_SCOPE_COND
  429. * &--------------------------------------------------------------------- *
  430. * & Build select condtion scope
  431. * &--------------------------------------------------------------------- *
  432. FORM frm_build_scope_cond .
  433. gs_r_object-sign = 'I'.
  434. gs_r_object-option = 'EQ'.
  435. IF p_tabl = abap_ on OR p_stru = abap_ on.
  436. gs_r_object-low = 'TABL'.
  437. APPEND gs_r_ object TO gt_r_ object.
  438. ENDIF.
  439. IF p_view = abap_ on.
  440. gs_r_object-low = 'VIEW'.
  441. APPEND gs_r_ object TO gt_r_ object.
  442. ENDIF.
  443. IF p_dtel = abap_ on.
  444. gs_r_object-low = 'DTEL'.
  445. APPEND gs_r_ object TO gt_r_ object.
  446. ENDIF.
  447. IF p_doma = abap_ on.
  448. gs_r_object-low = 'DOMA'.
  449. APPEND gs_r_ object TO gt_r_ object.
  450. ENDIF.
  451. IF p_prog = abap_ on.
  452. gs_r_object-low = 'PROG'.
  453. APPEND gs_r_ object TO gt_r_ object.
  454. ENDIF.
  455. IF p_fugr = abap_ on.
  456. gs_r_object-low = 'FUGR'.
  457. APPEND gs_r_ object TO gt_r_ object.
  458. ENDIF.
  459. IF p_tran = abap_ on.
  460. gs_r_object-low = 'TRAN'.
  461. APPEND gs_r_ object TO gt_r_ object.
  462. ENDIF.
  463. IF p_mess = abap_ on.
  464. gs_r_object-low = 'MSAG'.
  465. APPEND gs_r_ object TO gt_r_ object.
  466. ENDIF.
  467. APPEND LINES OF s_tabl TO gt_r_obj_name.
  468. APPEND LINES OF s_view TO gt_r_obj_name.
  469. APPEND LINES OF s_stru TO gt_r_obj_name.
  470. APPEND LINES OF s_dtel TO gt_r_obj_name.
  471. APPEND LINES OF s_doma TO gt_r_obj_name.
  472. APPEND LINES OF s_prog TO gt_r_obj_name.
  473. APPEND LINES OF s_fugr TO gt_r_obj_name.
  474. APPEND LINES OF s_tran TO gt_r_obj_name.
  475. APPEND LINES OF s_mscl TO gt_r_obj_name.
  476. ENDFORM.
  477. * &--------------------------------------------------------------------- *
  478. * & Form FRM_ GET_LIST
  479. * &--------------------------------------------------------------------- *
  480. * & Get tranlation list
  481. * &--------------------------------------------------------------------- *
  482. FORM frm_ get_list .
  483. DATA:
  484. lt_tadir TYPE tt_tadir,
  485. lt_tadir_ copy TYPE tt_tadir,
  486. ls_tadir TYPE ty_tadir,
  487. lt_fungrp TYPE tt_fungrp,
  488. ls_fungrp TYPE ty_fungrp,
  489. lt_attobt TYPE tt_attobt,
  490. ls_attobt TYPE ty_attobt,
  491. ls_t 100 TYPE ty_t 100.
  492. * Get SPRAS
  493. SELECT SINGLE r 3_lang INTO gv_s_spras FROM lxe_t 002x WHERE language = p_sour.
  494. SELECT SINGLE r 3_lang INTO gv_t_spras FROM lxe_t 002x WHERE language = p_targ.
  495. * Get check list for transaction
  496. SELECT pgmid
  497. object
  498. obj_name
  499. srcsystem
  500. author
  501. devclass
  502. INTO TABLE lt_tadir
  503. FROM tadir
  504. WHERE pgmid = 'R3TR'
  505. AND object IN gt_r_ object
  506. AND obj_name IN gt_r_obj_name
  507. AND devclass IN s_pack
  508. AND author IN s_auth
  509. AND delflag = ''.
  510. * If checked Function Group, get function list also.
  511. IF p_fugr = abap_ on.
  512. LOOP AT lt_tadir INTO ls_tadir WHERE object = 'FUGR'.
  513. ls_fungrp-fungrp = 'SAPL' & & ls_tadir-obj_name.
  514. COLLECT ls_fungrp INTO lt_fungrp.
  515. CLEAR ls_fungrp.
  516. ENDLOOP.
  517. IF lt_fungrp IS NOT INITIAL.
  518. * Get function list
  519. SELECT funcname
  520. pname
  521. include
  522. INTO TABLE gt_tfdir
  523. FROM tfdir
  524. FOR ALL ENTRIES IN lt_fungrp
  525. WHERE pname = lt_fungrp-fungrp.
  526. ENDIF.
  527. ENDIF.
  528. IF p_prog = abap_ on.
  529. lt_tadir_ copy = lt_tadir.
  530. DELETE lt_tadir_ copy WHERE object <> 'PROG'.
  531. IF lt_tadir_ copy IS NOT INITIAL.
  532. * Get program screen list
  533. SELECT prog
  534. dnum
  535. INTO TABLE gt_d 020s
  536. FROM d 020s
  537. FOR ALL ENTRIES IN lt_tadir_ copy
  538. WHERE prog = lt_tadir_copy-obj_name.
  539. ENDIF.
  540. ENDIF.
  541. IF p_mess = abap_ on.
  542. * Get message info
  543. SELECT *
  544. INTO TABLE gt_t 100
  545. FROM t 100
  546. WHERE sprsl = gv_s_spras
  547. AND arbgb IN s_mscl
  548. AND msgnr IN s_msno.
  549. ENDIF.
  550. * Get Texts for Object Attribute
  551. SELECT *
  552. INTO TABLE gt_attobt
  553. FROM lxe_attobt
  554. WHERE lang = sy-langu.
  555. SORT lt_tadir BY object ASCENDING
  556. obj_name ASCENDING.
  557. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  558. EXPORTING
  559. text = 'Data Processing...'(m 07).
  560. LOOP AT lt_tadir INTO ls_tadir.
  561. * Get current translation info
  562. PERFORM frm_obj_text_ read USING ls_tadir.
  563. ENDLOOP.
  564. IF gt_alv IS INITIAL.
  565. MESSAGE 'No data!'(m 03) TYPE 'S'.
  566. LEAVE LIST-PROCESSING.
  567. ENDIF.
  568. ENDFORM.
  569. * &--------------------------------------------------------------------- *
  570. * & Form FRM_F 4_ FOR_LANGUAGE
  571. * &--------------------------------------------------------------------- *
  572. * & F 4 For Language
  573. * &--------------------------------------------------------------------- *
  574. * & <-- CV_LANGUAGE Language
  575. * &--------------------------------------------------------------------- *
  576. FORM frm_f 4_ for_language USING uv_fname CHANGING cv_language.
  577. CALL FUNCTION 'LXE_T002_SELECT_LANGUAGE'
  578. EXPORTING
  579. dynpprog = sy-cprog
  580. dynpnr = sy-dynnr
  581. dynpfield = uv_fname
  582. IMPORTING
  583. language = cv_language
  584. EXCEPTIONS
  585. parameter_ error = 1
  586. no_ values_found = 2
  587. no_selection = 3
  588. OTHERS = 4.
  589. ENDFORM.
  590. * &--------------------------------------------------------------------- *
  591. * & Form FRM_OBJ_TEXT_ READ
  592. * &--------------------------------------------------------------------- *
  593. * & Get current translation info
  594. * &--------------------------------------------------------------------- *
  595. * & -- > US_TADIR
  596. * &--------------------------------------------------------------------- *
  597. FORM frm_obj_text_ read USING us_tadir TYPE ty_tadir.
  598. DATA:
  599. lt_ read_para TYPE tt_ read_para,
  600. ls_ read_para TYPE ty_ read_para,
  601. ls_alv TYPE ty_alv,
  602. ls_color TYPE lvc_s_scol,
  603. ls_tfdir TYPE ty_tfdir,
  604. ls_attobt TYPE ty_attobt,
  605. lv_fungrp TYPE tfdir-pname,
  606. ls_d 020s TYPE ty_d 020s,
  607. ls_t 100 TYPE ty_t 100.
  608. DATA:
  609. lt_pcx_s 1 TYPE STANDARD TABLE OF lxe_pcx_s 1,
  610. ls_pcx_s 1 TYPE lxe_pcx_s 1,
  611. lt_pcx_s 2 TYPE STANDARD TABLE OF lxe_pcx_s 2,
  612. ls_pcx_s 2 TYPE lxe_pcx_s 2,
  613. lv_domatyp TYPE lxedomatyp,
  614. lv_domanam TYPE lxedomanam,
  615. lv_pstatus TYPE lxestatprc.
  616. CASE us_tadir-object.
  617. * Table or Sturcture
  618. WHEN 'TABL'.
  619. ls_ read_para-objtype = 'BEZD'. "Foreign Key
  620. ls_read_para-objname = us_tadir-obj_name.
  621. APPEND ls_read_para TO lt_read_para.
  622. ls_read_para-objtype = 'TABT'. " Table and Built-in type description
  623. ls_ read_para-objname = us_tadir-obj_name.
  624. APPEND ls_ read_para TO lt_ read_para.
  625. * View
  626. WHEN 'VIEW'.
  627. ls_ read_para-objtype = 'VIEW'.
  628. ls_ read_para-objname = us_tadir-obj_name. "View description
  629. APPEND ls_read_para TO lt_read_para.
  630. * Data Element
  631. WHEN 'DTEL'.
  632. ls_read_para-objtype = 'DTEL'. " Data element and description
  633. ls_ read_para-objname = us_tadir-obj_name.
  634. APPEND ls_ read_para TO lt_ read_para.
  635. * Domain
  636. WHEN 'DOMA'.
  637. ls_ read_para-objtype = 'DOMA'. "Domain description
  638. ls_read_para-objname = us_tadir-obj_name.
  639. APPEND ls_read_para TO lt_read_para.
  640. ls_read_para-objtype = 'VALU'. "Domain value
  641. ls_ read_para-objname = us_tadir-obj_name.
  642. APPEND ls_ read_para TO lt_ read_para.
  643. * Program
  644. WHEN 'PROG'.
  645. ls_ read_para-objtype = 'RPT4'. "Title
  646. ls_read_para-objname = us_tadir-obj_name.
  647. APPEND ls_read_para TO lt_read_para.
  648. * ls_read_para-objtype = 'CA4'. "Menu
  649. * ls_ read_para-objname = us_tadir-obj_name.
  650. * APPEND ls_ read_para TO lt_ read_para.
  651. * ls_ read_para-objtype = 'CAD4'. "GUI Status
  652. * ls_read_para-objname = us_tadir-obj_name.
  653. * APPEND ls_read_para TO lt_read_para.
  654. LOOP AT gt_d020s INTO ls_d020s USING KEY prog WHERE prog = us_tadir-obj_name.
  655. ls_read_para-objtype = 'SRH4'. " Screen title
  656. CONCATENATE us_tadir-obj_name
  657. ls_d 020s-dnum
  658. INTO ls_ read_para-objname RESPECTING BLANKS. "Program name + Screen number
  659. APPEND ls_read_para TO lt_read_para.
  660. ls_read_para-objtype = 'SRT4'. " Screen texts
  661. CONCATENATE us_tadir-obj_name
  662. ls_d 020s-dnum
  663. INTO ls_ read_para-objname RESPECTING BLANKS. "Program name + Screen number
  664. APPEND ls_read_para TO lt_read_para.
  665. ENDLOOP.
  666. * Function Group
  667. WHEN 'FUGR'.
  668. ls_read_para-objtype = 'RPT1'. " Function group
  669. ls_ read_para-objname = us_tadir-obj_name.
  670. APPEND ls_ read_para TO lt_ read_para.
  671. lv_fungrp = 'SAPL' & & us_tadir-obj_name.
  672. LOOP AT gt_tfdir INTO ls_tfdir WHERE pname = lv_fungrp.
  673. ls_ read_para-objtype = 'FNC1'. "Function and parameters
  674. CONCATENATE ls_tfdir-funcname
  675. us_tadir-obj_name
  676. INTO ls_read_para-objname RESPECTING BLANKS. " Function group + Function name
  677. APPEND ls_ read_para TO lt_ read_para.
  678. ENDLOOP.
  679. * Transaction Code
  680. WHEN 'TRAN'.
  681. ls_ read_para-objtype = 'TRAN'. "Transaction code
  682. ls_read_para-objname = us_tadir-obj_name.
  683. APPEND ls_read_para TO lt_read_para.
  684. WHEN 'MSAG'.
  685. LOOP AT gt_t100 INTO ls_t100 WHERE arbgb = us_tadir-obj_name.
  686. ls_read_para-objtype = 'MESS'. "Message
  687. CONCATENATE ls_t 100-arbgb
  688. ls_t 100-msgnr
  689. INTO ls_ read_para-objname RESPECTING BLANKS. "Message class + Message number
  690. APPEND ls_read_para TO lt_read_para.
  691. ENDLOOP.
  692. WHEN OTHERS.
  693. ENDCASE.
  694. LOOP AT lt_read_para INTO ls_read_para.
  695. * Get translation info
  696. CALL FUNCTION 'LXE_OBJ_TEXT_PAIR_READ'
  697. EXPORTING
  698. t_lang = p_targ
  699. s_lang = p_sour
  700. custmnr = gc_custmnr
  701. objtype = ls_read_para-objtype
  702. objname = ls_read_para-objname
  703. read_only = ''
  704. IMPORTING
  705. domatyp = lv_domatyp
  706. domanam = lv_domanam
  707. pstatus = lv_pstatus
  708. TABLES
  709. lt_pcx_s1 = lt_pcx_s1.
  710. * Get best translation
  711. CALL FUNCTION 'LXE_PP1_PROPOSALS_GET'
  712. EXPORTING
  713. s_lang = p_sour
  714. t_lang = p_targ
  715. custmnr = gc_custmnr
  716. objtype = ls_read_para-objtype
  717. domatyp = lv_domatyp
  718. domanam = lv_domanam
  719. IMPORTING
  720. pstatus = lv_pstatus
  721. TABLES
  722. t_pcx_s1 = lt_pcx_s1
  723. t_pcx_s2 = lt_pcx_s2.
  724. IF lt_pcx_s1 IS NOT INITIAL.
  725. READ TABLE gt_attobt INTO ls_attobt
  726. WITH KEY lang = sy-langu
  727. obj_type = ls_read_para-objtype.
  728. LOOP AT lt_pcx_s1 INTO ls_pcx_s1.
  729. ls_alv-obj_type = ls_read_para-objtype. "Translation OType
  730. ls_alv-ktext = ls_attobt-ktext. "Translation OType description
  731. ls_alv-objname = ls_read_para-objname. " Object name
  732. ls_alv-textkey = ls_pcx_s 1-textkey. "Text key
  733. ls_alv-s_text = ls_pcx_s1-s_text. " Source text
  734. ls_alv-t_text = ls_pcx_s 1-t_text. "Target text
  735. ls_alv-unitmlt = ls_pcx_s1-unitmlt. "Maximum Length of Translation Unit
  736. ls_alv-uppcase = ls_pcx_s 1-uppcase. "Only Uppercase Allowed
  737. ls_alv-devclass = us_tadir-devclass. "Package
  738. ls_alv-author = us_tadir-author. "Author
  739. READ TABLE lt_pcx_s2 INTO ls_pcx_s2
  740. WITH KEY textkey = ls_pcx_s1-textkey.
  741. IF sy-subrc = 0.
  742. ls_alv-sap_text = ls_pcx_s2-best_prop. "Translation of SAP recommendations
  743. ENDIF.
  744. ls_alv-texttype = ls_pcx_s 1-texttype. "Text type
  745. IF ls_alv-t_text IS NOT INITIAL.
  746. IF ls_alv-t_text = ls_alv-sap_text.
  747. ls_alv-icon = icon_led_green. "Green
  748. ELSE.
  749. ls_alv-icon = icon_led_yellow. "Yellow
  750. ENDIF.
  751. ELSE.
  752. ls_alv-icon = icon_led_red. "Red
  753. ENDIF.
  754. IF p_only = abap_ on AND ls_alv-t_text IS NOT INITIAL.
  755. CLEAR:ls_alv.
  756. CONTINUE.
  757. ENDIF.
  758. APPEND ls_alv TO gt_alv.
  759. CLEAR:ls_alv.
  760. ENDLOOP.
  761. ENDIF.
  762. CLEAR:
  763. lt_pcx_s 1,
  764. ls_pcx_s 1,
  765. lt_pcx_s 2,
  766. ls_pcx_s 2.
  767. ENDLOOP.
  768. ENDFORM.
  769. * &--------------------------------------------------------------------- *
  770. * & Form FRM_ STATUS_ SET
  771. * &--------------------------------------------------------------------- *
  772. * & Set GUI Status
  773. * &--------------------------------------------------------------------- *
  774. * & -- > RT_EXTAB Excluding Button
  775. * &--------------------------------------------------------------------- *
  776. FORM frm_ status_ set USING rt_extab TYPE slis_t_extab.
  777. DATA:
  778. lv_title TYPE string.
  779. SELECT SINGLE text
  780. INTO lv_title
  781. FROM trdirt
  782. WHERE name = sy-repid
  783. AND sprsl = sy-langu.
  784. lv_title = lv_title & & ` (` & & p_sour & & `- >` & & p_targ & & `)`.
  785. SET PF-STATUS 'STATUS'.
  786. SET TITLEBAR 'TITLE' WITH lv_title.
  787. ENDFORM. "FRM_STATUS_SET
  788. *&---------------------------------------------------------------------*
  789. *& Form FRM_USER_COMMAND
  790. *&---------------------------------------------------------------------*
  791. *& User Command
  792. *&---------------------------------------------------------------------*
  793. *& --> R_UCOMM User Command Code
  794. *& --> RS_SELFIELD Filed Info
  795. *&---------------------------------------------------------------------*
  796. FORM frm_user_command USING r_ucomm LIKE sy-ucomm
  797. rs_selfield TYPE slis_selfield.
  798. DATA:
  799. lo_grid TYPE REF TO cl_gui_alv_grid,
  800. ls_stable TYPE lvc_s_stbl,
  801. lv_valid TYPE char1,
  802. ls_layout TYPE lvc_s_layo,
  803. lv_refresh TYPE char1.
  804. ls_stable-row = 'X'.
  805. ls_stable-col = 'X'.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值