Vous êtes sur la page 1sur 112

*&---------------------------------------------------------------------* *& Report ZFLP_REPORT_TRANSPORTS_LIGHT *& *& Author : Leepetit - scorpworld@yahoo.com *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* * * Pour usage personnel uniquement.

Ne pas distribuer en entreprise. * Toute remarque ou ide d'amlioration est bienvenue * (Voir partie 'Attention'). * * Pensez l'auteur : Paypal scorpworld@yahoo.com * Une version comportant plus d'options sera envoye * pour toute aide. * Merci. * *&---------------------------------------------------------------------* * PRE-REQUIS : * Cration automatique des textes : sur l'cran des * textes de programme, menu utilities->adjust->text symbols. * *&---------------------------------------------------------------------* * Attention: * * - Versions antrieures ECC : non compatibles. Utiliser V8. * - Le blocage des OT n'est fait que pour les OT workbench du user. * - Les nomenclatures OT et les projets ne sont grs que partiellement * - Certaines fonctions peuvent ncessiter un refresh de l'cran. * - Les protocoles de transferts les plus anciens sont rafraichis. * (Les ordres impacts n'auront donc pas de dates de transports). * *&---------------------------------------------------------------------* REPORT zflp_report_transports_ecc. *----------------------------------------------------------------------* Declaration des tables et variables *----------------------------------------------------------------------TABLES: e070, e071, e07t, usr02, ctsproject. TYPE-POOLS : slis, cntl, strhi, trsel, icon, trwbo. *----------------------------------------------------------------------* Donnes de slection *----------------------------------------------------------------------TYPES: ty_e071 TYPE STANDARD TABLE OF e071, ty_type TYPE RANGE OF e071-object, ty_typeot TYPE RANGE OF e070-trfunction. DATA: s_e071 s_e071_bis t_e071 t_e071_bis t_e071_tmp s_e070 t_e070 t_e070_bis t_e070_dbl s_e070a t_e070a t_e070a_bis s_project TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE TYPE e071, e071, TABLE OF e071, TABLE OF e071, TABLE OF e071, e070, TABLE OF e070, TABLE OF e070, TABLE OF e070, e070a, TABLE OF e070a, TABLE OF e070a, ctsproject,

t_project TYPE TABLE OF ctsproject, s_e07t TYPE e07t, t_e07t TYPE TABLE OF e07t, t_e07t_save TYPE TABLE OF e07t, s_dd07t TYPE dd07t, t_dd07t TYPE TABLE OF dd07t, s_obj_text TYPE ko100, t_obj_text TYPE TABLE OF ko100, s_cofile TYPE tstrfcofil, t_cofile TYPE TABLE OF tstrfcofil, s_stable TYPE lvc_s_stbl, s_type TYPE LINE OF ty_type, s_typeot TYPE LINE OF ty_typeot, t_new_tasks TYPE trwbo_request_headers, s_new_tasks TYPE trwbo_request_header, s_new_request TYPE trwbo_request_header. *----------------------------------------------------------------------* Tables de donnes *----------------------------------------------------------------------DATA: BEGIN OF t_doublon OCCURS 0, "#EC * pgmid LIKE e071-pgmid, object LIKE e071-object, obj_name LIKE e071-obj_name, trkorr LIKE e070-trkorr, box(1) TYPE c, devclass TYPE devclass, END OF t_doublon. TYPES: ty_doublon LIKE t_doublon, ty_doublons TYPE STANDARD TABLE OF ty_doublon. DATA : s_doublon TYPE ty_doublon, t_tadir TYPE STANDARD TABLE OF ty_doublon. TYPES: BEGIN OF ty_key_user, user LIKE sy-uname, proj TYPE tr_extpid, node_key TYPE lvc_nkey, END OF ty_key_user. DATA : t_key_user TYPE TABLE OF ty_key_user, s_key_user TYPE ty_key_user. TYPES: BEGIN OF ty_transp, tarsystem TYPE trtarsys, function TYPE trbatfunc, trstep TYPE trtpstep, retcode TYPE strw_int4, END OF ty_transp. DATA : t_transp TYPE TABLE OF ty_transp, s_transp TYPE ty_transp. *----------------------------------------------------------------------* Donnes d'affichage *----------------------------------------------------------------------* Utilisation de LIKE sauf pour les types lementaires, * pour la fonction REUSE_ALV_FIELDCATALOG_MERGE DATA: BEGIN OF t_edit OCCURS 0, "#EC * box(1) TYPE c, syst(3) TYPE c, proj TYPE tr_extpid, korrnum LIKE e070-trkorr,

tache LIKE e070-strkorr, trfunction LIKE dd07t-ddtext, text LIKE e07t-as4text, user LIKE sy-uname, username LIKE adrp-name_text, objname LIKE e071-obj_name, value LIKE e071k-tabkey, type(4) TYPE c, type_af(4) TYPE c, lib LIKE ko100-text, date TYPE char8, time TYPE e070-as4time, liber(1) TYPE c, tarsystem LIKE e070-tarsystem, r7(10) TYPE c, time_r7 LIKE tstrfcofil-trtime, prod(10) TYPE c, time_prd LIKE tstrfcofil-trtime, transp(50) TYPE c, tr_err(50) TYPE c, retcode TYPE sysubrc, pgmid TYPE pgmid, object TYPE trobjtype, objfunc TYPE objfunc, devclass TYPE devclass, proj_desc TYPE as4text, user_ot TYPE sy-uname, node_key TYPE lvc_nkey, color TYPE lvc_t_scol, END OF t_edit. TYPES: ty_edit LIKE t_edit. DATA: DATA: DATA: DATA: DATA: DATA: s_edit t_edit_disp t_item s_item s_style t_edit_tree TYPE TYPE TYPE TYPE TYPE TYPE ty_edit. TABLE OF ty_edit. TABLE OF ty_edit. ty_edit. lvc_s_styl. TABLE OF ty_edit.

"#EC * "#EC * "#EC * "#EC *

"#EC * "#EC * "#EC *

DATA: BEGIN OF t_edit_ot OCCURS 0, korrnum LIKE e070-trkorr, text LIKE e07t-as4text, button TYPE iconname, user LIKE sy-uname, liber(1) TYPE c, transp(50) TYPE c, korrnum2 LIKE e070-trkorr, r7(10) TYPE c, time_r7 LIKE tstrfcofil-trtime, retcode TYPE sysubrc, style TYPE lvc_t_styl, color TYPE lvc_t_scol, END OF t_edit_ot. TYPES: ty_edit_ot LIKE t_edit_ot. DATA: s_edit_ot TYPE ty_edit_ot. DATA: t_edit_ot_disp TYPE TABLE OF ty_edit_ot. FIELD-SYMBOLS <fs_edit> TYPE ty_edit. FIELD-SYMBOLS <fs_e07t> TYPE e07t. FIELD-SYMBOLS <fs_edit_ot> TYPE ty_edit_ot.

"#EC *

"#EC *

FIELD-SYMBOLS <fs_edit_ot2> TYPE ty_edit_ot. FIELD-SYMBOLS <fs_tadir> TYPE ty_doublon. TYPES : BEGIN OF ty_sort, trfunction TYPE trfunction, user TYPE syuname, proj TYPE tr_extpid, liber(1) TYPE c, node_key TYPE lvc_nkey, END OF ty_sort. DATA: s_sort TYPE ty_sort. DATA: t_sort TYPE TABLE OF ty_sort. TYPES: BEGIN OF ty_e071k. INCLUDE TYPE e071k. TYPES: obj_name TYPE trobj_name, END OF ty_e071k. DATA: s_e071k TYPE ty_e071k, t_e071k TYPE TABLE OF ty_e071k, t_e071k_bis TYPE TABLE OF ty_e071k. TYPES: BEGIN OF ty_legend, cell(10) TYPE c, lib(50) TYPE c, color TYPE lvc_t_scol, END OF ty_legend. TYPES: BEGIN OF ty_rep_var, report LIKE rsvar-report, variant LIKE rsvar-variant, END OF ty_rep_var. DATA: s_rep_var TYPE ty_rep_var, t_rep TYPE TABLE OF ty_rep_var, t_rep_var TYPE TABLE OF ty_rep_var. DATA: t_key_expand TYPE lvc_t_nkey, s_key_expand TYPE lvc_nkey. TYPES : BEGIN OF ty_username, user TYPE usr21-bname, username TYPE adrp-name_text, END OF ty_username. DATA: s_username TYPE ty_username, t_username TYPE TABLE OF ty_username. DATA: s_lock t_lock s_trad_log t_trad_log TYPE TYPE TYPE TYPE trwbo_request, TABLE OF trwbo_request, lxe_log, TABLE OF lxe_log. "#EC * "#EC *

*----------------------------------------------------------------------* Donnes ALV *----------------------------------------------------------------------DATA: s_color TYPE lvc_s_scol, s_disvariant TYPE disvariant, t_fieldcat_lvc TYPE lvc_t_fcat, t_fieldcat_ot TYPE lvc_t_fcat, t_fieldcat_tree TYPE lvc_t_fcat, s_layout_lvc TYPE lvc_s_layo.

* ALV : conteneur et grille CLASS lcl_event_receiver DEFINITION DEFERRED. DATA : g_alv_grid TYPE REF TO cl_gui_alv_grid, g_alv_grid2 TYPE REF TO cl_gui_alv_grid, g_alv_grid_dbl TYPE REF TO cl_gui_alv_grid, g_alv_cont TYPE REF TO cl_gui_docking_container, g_alv_cont2 TYPE REF TO cl_gui_docking_container, g_alv_cont3 TYPE REF TO cl_gui_docking_container, g_event_receiver TYPE REF TO lcl_event_receiver, g_tree TYPE REF TO cl_gui_alv_tree, g_behaviour_tree TYPE REF TO cl_dragdrop, g_behaviour_tree2 TYPE REF TO cl_dragdrop, g_behaviour_alv TYPE REF TO cl_dragdrop. DATA : t_node_key TYPE lvc_t_nkey. * Donnes reprise / fusion DATA : w_korrnum TYPE trkorr, w_target_request TYPE trkorr, t_ranges TYPE trsel_ts_ranges, t_objects TYPE TABLE OF e071. * Donnes Batch-input pour SCC1 DATA : t_bdc TYPE STANDARD TABLE OF bdcdata, s_bdc TYPE bdcdata. *----------------------------------------------------------------------* Variables *----------------------------------------------------------------------DATA: w_user TYPE tr_as4user, w_date(8) TYPE c, w_request_new TYPE e070-trkorr, w_node_key TYPE lvc_nkey, w_mode(1) TYPE c, "Mode de traitement popup w_chg_tmp(1) TYPE c, "Re-selection aprs popup w_cpt_open TYPE char5 VALUE '0', w_cpt_release TYPE char5 VALUE '0', w_cpt_transp TYPE char5 VALUE '0', w_cpt_transp2 TYPE char5 VALUE '0', w_title(100) TYPE c, w_ref TYPE trvalue, w_mode_bdc TYPE c VALUE 'A', w_no_lock TYPE flag, w_handle_tree TYPE i, w_handle_tree2 TYPE i, w_all_selected TYPE flag, w_handle_alv TYPE i, w_sorted TYPE flag, w_first_key TYPE lvc_nkey. *----------------------------------------------------------------------* Ranges *----------------------------------------------------------------------TYPES: ty_ordre TYPE RANGE OF trkorr. DATA: r_ordre TYPE ty_ordre, r_ordre2 TYPE ty_ordre, r_tache TYPE ty_ordre, rs_ordre TYPE LINE OF ty_ordre. TYPES: ty_statut TYPE RANGE OF trstatus. DATA: r_statut TYPE ty_statut, r_statut_lib TYPE ty_statut, rs_statut TYPE LINE OF ty_statut.

*----------------------------------------------------------------------* Declaration de l'cran de slection *----------------------------------------------------------------------* Container onglets SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 25 LINES, TAB (24) button1 USER-COMMAND push1, TAB (24) button2 USER-COMMAND push2, TAB (24) button3 USER-COMMAND push3, TAB (24) button6 USER-COMMAND push6, END OF BLOCK mytab. * Paramtres de slection SELECTION-SCREEN BEGIN OF SCREEN 1001 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK sel WITH FRAME TITLE selt. *** Slection par user SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) chx1c. PARAMETERS p_chx1 RADIOBUTTON GROUP sel. SELECTION-SCREEN END OF LINE. * User(s) SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(27) userc. SELECT-OPTIONS : s_user FOR usr02-bname DEFAULT sy-uname MATCHCODE OBJECT user_comp. SELECTION-SCREEN END OF LINE. *** Slection par ordre SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) chx2c. PARAMETERS p_chx2 RADIOBUTTON GROUP sel. SELECTION-SCREEN END OF LINE. * Projet SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) proc. PARAMETERS : p_pro LIKE ctsproject-trkorr. SELECTION-SCREEN END OF LINE. * Numro d'ordre SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(27) ordc. SELECT-OPTIONS : s_ord FOR e07t-trkorr. SELECTION-SCREEN END OF LINE. * Libell d'ordre SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(27) libc. SELECT-OPTIONS : s_lib FOR e07t-as4text. SELECTION-SCREEN END OF LINE. *** Slection par objet SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) chx3c. PARAMETERS p_chx3 RADIOBUTTON GROUP sel. SELECTION-SCREEN END OF LINE. * Objet SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(27) objc. SELECT-OPTIONS : s_obj FOR e071-obj_name. SELECTION-SCREEN END OF LINE. * Si table : valeur recherche

"#EC *

"#EC * "#EC *

"#EC *

"#EC *

"#EC *

"#EC *

"#EC *

"#EC *

SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) valuec. PARAMETERS: p_value TYPE e071k-tabkey. SELECTION-SCREEN END OF LINE. * Slectionner tous les objets des OT trouvs SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) selobjc. PARAMETERS: p_selobj AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF LINE. *** Slection par date SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(30) chx4c. PARAMETERS p_chx4 RADIOBUTTON GROUP sel. SELECTION-SCREEN END OF LINE. * Date de libration SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(27) datec. SELECT-OPTIONS : s_date FOR e070-as4date. SELECTION-SCREEN END OF LINE. SKIP. * Prendre en compte toutes les slections SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (1) blanc. PARAMETERS: p_allsel AS CHECKBOX. SELECTION-SCREEN COMMENT 6(50) allselc. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK sel. SELECTION-SCREEN END OF SCREEN 1001. *** Options de slection SELECTION-SCREEN BEGIN OF SCREEN 1002 AS SELECTION-SCREEN BEGIN OF BLOCK aff WITH * Pr-slections SELECTION-SCREEN COMMENT 2(38) tlibo. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(18) topt1. PARAMETERS: p_opt1 RADIOBUTTON GROUP opt SELECTION-SCREEN COMMENT 23(10) topt2. PARAMETERS: p_opt2 RADIOBUTTON GROUP opt SELECTION-SCREEN COMMENT 36(10) topt3. SELECTION-SCREEN END OF LINE. SUBSCREEN. FRAME TITLE afft.

"#EC *

"#EC *

"#EC *

"#EC *

"#EC *

USER-COMMAND opt. "#EC * DEFAULT 'X'. "#EC *

SELECTION-SCREEN SKIP. * Tous les OT SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) allc. PARAMETERS: p_all RADIOBUTTON GROUP lib DEFAULT 'X'. SELECTION-SCREEN END OF LINE. * Uniquement les OT libers SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) tlibc. PARAMETERS: p_tlib RADIOBUTTON GROUP lib. SELECTION-SCREEN END OF LINE. * Uniquement les OT modifiables SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) nolibc. PARAMETERS: p_nolib RADIOBUTTON GROUP lib. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK aff.

"#EC *

"#EC *

"#EC *

SELECTION-SCREEN END OF SCREEN 1002. *** Affichage SELECTION-SCREEN BEGIN OF SCREEN 1003 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK aff2 WITH FRAME TITLE aff2t. * Tri par projet SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) projc. PARAMETERS: p_proj AS CHECKBOX. "#EC * SELECTION-SCREEN END OF LINE. * Tri par user SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) tuserc. PARAMETERS: p_user AS CHECKBOX. "#EC * SELECTION-SCREEN END OF LINE. * Tri SE10 SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) tse10. PARAMETERS: p_se10 AS CHECKBOX DEFAULT 'X'. "#EC * SELECTION-SCREEN END OF LINE. * Modification des libell par OT SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) libotc. PARAMETERS: p_libot AS CHECKBOX DEFAULT 'X'. "#EC * SELECTION-SCREEN END OF LINE. * Ne pas afficher les OT transports SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) notrc. PARAMETERS: p_no_tr AS CHECKBOX. "#EC * SELECTION-SCREEN END OF LINE. * Afficher les objets dans l'arborescence SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) arboc. PARAMETERS: p_arbo AS CHECKBOX DEFAULT 'X'. "#EC * SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK aff2. SELECTION-SCREEN END OF SCREEN 1003. *** Transports SELECTION-SCREEN BEGIN OF SCREEN 1006 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE optt. * Ne pas rechercher les transports SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) notranc. PARAMETERS: p_notran AS CHECKBOX. SELECTION-SCREEN END OF LINE. * Nom de l'environnement de r7 SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) r7c. PARAMETERS: p_r7 TYPE trtarsys DEFAULT 'QAS' OBLIGATORY. SELECTION-SCREEN END OF LINE. * Nom de l'environnement de prod SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) prodc. PARAMETERS: p_prod TYPE trtarsys DEFAULT 'PRD' OBLIGATORY. SELECTION-SCREEN END OF LINE. * Transports : r7 et prod uniquement SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) trspc. PARAMETERS: p_trsp AS CHECKBOX DEFAULT 'X'.

"#EC *

"#EC *

"#EC *

"#EC *

SELECTION-SCREEN END OF LINE. * Controler les tapes indpendantes de l'ordre de transport SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) tstep. PARAMETERS: p_step AS CHECKBOX. "#EC * SELECTION-SCREEN END OF LINE. * Types d'objets ignorer SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(35) typec. SELECT-OPTIONS: r_type FOR e071-object. "#EC * SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(35) typehc. SELECT-OPTIONS: r_typeh FOR e071-object. "#EC * SELECTION-SCREEN END OF LINE. * Types d'ordres ignorer SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(35) typeoc. SELECT-OPTIONS: r_typeot FOR e070-trfunction. "#EC * SELECTION-SCREEN END OF LINE. * Fusionner les types d'objets quivalents. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(38) fusioc. PARAMETERS: p_fusio AS CHECKBOX. "#EC * SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK opt. SELECTION-SCREEN END OF SCREEN 1006. * Ecran vides pour traitement SELECTION-SCREEN BEGIN OF SCREEN 0100. SELECTION-SCREEN END OF SCREEN 0100. SELECTION-SCREEN BEGIN OF SCREEN 0200. SELECTION-SCREEN END OF SCREEN 0200. *---------------------------------------------------------------------* * Initialisation de l'cran de slection *---------------------------------------------------------------------* INITIALIZATION. mytab-prog = sy-repid. mytab-dynnr = 1001. mytab-activetab = 'PUSH1'. * Textes de selt = afft = aff2t = optt = button1 = button2 = button3 = button6 = proc = allc = tlibc = nolibc = chx1c = chx2c = chx3c = chx4c = selection 'Paramtres de slection'(s01). 'Options de slection'(s02). 'Options d''affichage'(s03). 'Transports'(s06). 'Paramtres de slection'(s01). 'Options de slection'(s02). 'Options d''affichage'(s03). 'Transports'(s06). 'Projet'(s08). 'Tous les OT'(s09). 'Uniquement les OT libers'(s10). 'Uniquement les OT modifiables'(s11). 'Slection par user'(s12). 'Slection par ordre'(s13). 'Slection par objet'(s14). 'Slection par date'(s15).

valuec selobjc datec libc objc ordc userc r7c prodc typec tstep typehc typeoc notrc arboc trspc allselc libotc notranc projc tuserc fusioc tse10 tlibo topt1 topt2 topt3

= = = = = = = = = = = = = = = = = = = = = = = = = = =

'Si table : valeur recherche'(s16). 'Slectionner tous les objets'(s17). 'Date de libration'(s18). 'Libell d''ordre'(s19). 'Objet'(s20). 'Numro d''ordre'(s21). 'User(s)'(s22). 'Nom de l''environnement de r7'(s24). 'Nom de l''environnement de prod'(s25). 'Types d''objets ignorer'(s26). 'Controler les tapes indpendantes'(s63). 'Types d''objets contenu de table'(s27). 'Types d''ordres ignorer'(s28). 'Ne pas afficher les OT transports'(s31). 'Ajouter les objets dans l''arborescence'(s59). 'Transports : r7 et prod uniquement'(s34). 'Prendre en compte toutes les slections'(s37). 'Modification des libell par OT'(s38). 'Ne pas rechercher les transports'(s39). 'Tri par projet'(s40). 'Tri par user'(s41). 'Fusionner les types d''objet quivalents'(s46). 'Tri SE10'(s60). 'Pr-slections :'(u19). 'Reporting'(u20). 'Rapide'(u21). 'Complet'(u32).

* Statuts d'OT librs rs_statut-sign = 'I'. rs_statut-option = 'EQ'. rs_statut-low = 'O'. APPEND rs_statut TO r_statut_lib. rs_statut-low = 'R'. APPEND rs_statut TO r_statut_lib. rs_statut-low = 'N'. APPEND rs_statut TO r_statut_lib. * Types d'objets ignorer s_type-sign = 'I'. s_type-option = 'EQ'. s_type-low = 'RELE'. "Commentaire APPEND s_type TO r_type. s_type-low = 'MERG'. "Commentaire APPEND s_type TO r_type. * Types d'objets ignorer (historique) s_type-low = 'TABU'. "Contenu de table APPEND s_type TO r_typeh. s_type-low = 'TDAT'. APPEND s_type TO r_typeh. s_type-low = 'CDAT'. "Filename APPEND s_type TO r_typeh. s_type-low = 'VDAT'. "View Maintenance: Data APPEND s_type TO r_typeh. * Types d'ordres ignorer s_typeot-sign = 'I'. s_typeot-option = 'EQ'. s_typeot-low = 'G'. "Nomenclature projet CTS APPEND s_typeot TO r_typeot. s_typeot-low = 'P'. "Nomenclature pour monte de version APPEND s_typeot TO r_typeot.

s_typeot-low = 'D'. "Nomenclature pour Support Package APPEND s_typeot TO r_typeot. s_typeot-low = 'F'. "Nomenclature APPEND s_typeot TO r_typeot. s_stable-col = 'X'. s_stable-row = 'X'. CLEAR w_no_lock. *---------------------------------------------------------------------* * PBO *---------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. * Ecrans de traitement IF sy-dynnr = '0100'. PERFORM init_0100. PERFORM status_0100. EXIT. ENDIF. IF sy-dynnr = '0200'. PERFORM init_0200. EXIT. ENDIF. *---------------------------------------------------------------------* * PAI *---------------------------------------------------------------------* AT SELECTION-SCREEN. * Ecrans de traitement IF sy-dynnr = '0100'. PERFORM user_command_0100. EXIT. ENDIF. IF sy-dynnr = '0200'. EXIT. ENDIF. * Gestion des onglets CASE sy-ucomm. WHEN 'PUSH1'. mytab-dynnr = 1001. WHEN 'PUSH2'. mytab-dynnr = 1002. WHEN 'PUSH3'. mytab-dynnr = 1003. WHEN 'PUSH6'. mytab-dynnr = 1006. WHEN OTHERS. ENDCASE. CHECK NOT sy-ucomm(1) = '%'. * Pr-selections IF sy-ucomm = 'OPT'. * Report rapide IF p_opt1 = 'X'. CLEAR : p_proj, p_user, p_se10, p_arbo, p_no_tr, p_tlib, p_all.

p_nolib = 'X'. p_notran = 'X'. ENDIF. * Report complet IF p_opt2 = 'X'. CLEAR : p_proj, p_user, p_notran, p_no_tr, p_tlib, p_nolib. p_se10 = 'X'. p_arbo = 'X'. p_all = 'X'. ENDIF. ENDIF. IF p_no_tr = 'X'. CLEAR p_notran. ENDIF. * Projets IF NOT p_pro IS INITIAL. p_proj = 'X'. ENDIF. * Affichage IF p_se10 = 'X'. CLEAR : p_proj, p_user. ENDIF. IF p_chx1 = 'X' AND s_user IS INITIAL AND s_user[] IS INITIAL. MESSAGE e701(bc) WITH 'Veuillez indiquer un ou plusieurs users'(m01). ELSEIF p_chx2 = 'X' AND s_lib IS INITIAL AND s_lib[] IS INITIAL AND s_ord IS INITIAL AND s_ord[] IS INITIAL AND p_pro IS INITIAL. MESSAGE e701(bc) WITH 'Veuillez indiquer tout ou partie du libell'(m02). ELSEIF p_chx3 = 'X' AND s_obj IS INITIAL AND s_obj[] IS INITIAL. MESSAGE e701(bc) WITH 'Veuillez indiquer un ou plusieurs objets'(m03). ENDIF. IF p_chx4 = 'X' AND p_nolib = 'X'. MESSAGE e701(bc) WITH 'Options incompatibles'(m05). ENDIF. * Statuts Modifiables / Libers REFRESH r_statut. IF p_tlib = 'X'. r_statut[] = r_statut_lib[]. ENDIF. IF p_nolib = 'X'. rs_statut-sign = 'I'. rs_statut-option = 'EQ'. rs_statut-low = 'D'. APPEND rs_statut TO r_statut. rs_statut-low = 'L'. APPEND rs_statut TO r_statut.

ENDIF. * Effacage des slections inutiles IF p_allsel IS INITIAL. IF p_chx1 IS INITIAL. REFRESH s_user. ENDIF. IF p_chx2 IS INITIAL. REFRESH: s_ord, s_lib. ENDIF. IF p_chx3 IS INITIAL. REFRESH s_obj. CLEAR p_value. ENDIF. IF p_chx4 IS INITIAL. REFRESH s_date. ENDIF. ELSE. IF p_chx2 IS INITIAL AND NOT s_lib[] IS INITIAL. CLEAR : p_chx1, p_chx3, p_chx4. p_chx2 = 'X'. ENDIF. ENDIF. *---------------------------------------------------------------------* * CLASS lcl_event_receiver DEFINITION *---------------------------------------------------------------------* * Interception des vnements des ALV *---------------------------------------------------------------------* CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. METHODS: * Events (Grille ALV objets) m_user_command FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm, m_hotspot FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no, m_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object, "TYPE REF TO cl_alv_event_toolbar_set * Events (Lgende) handle_close FOR EVENT close OF cl_gui_dialogbox_container IMPORTING sender, * Events (doublons) m_toolbar2 FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object, "TYPE REF TO cl_alv_event_toolbar_set m_user_command2 FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm, * Events (Arbre ALV OT) m_user_command4 FOR EVENT before_user_command OF cl_gui_alv_tree IMPORTING ucomm, m_double_click2 FOR EVENT node_double_click OF cl_gui_alv_tree IMPORTING node_key,

Events (Grille ALV OT) m_user_command5 FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm, m_toolbar3 FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object, "TYPE REF TO cl_alv_event_toolbar_set m_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed, m_hotspot2 FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id es_row_no, Events (Drag&Drop) handle_alv_drag FOR EVENT ondrag OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj, handle_tree_drag FOR EVENT on_drag_multiple OF cl_gui_alv_tree IMPORTING drag_drop_object fieldname node_key_table, handle_tree_drop FOR EVENT on_drop OF cl_gui_alv_tree IMPORTING node_key drag_drop_object, handle_alv_drop_complete FOR EVENT ondropcomplete OF cl_gui_alv_grid IMPORTING e_row e_column e_dragdropobj, handle_tree_drop_complete FOR EVENT on_drop_complete_multiple OF cl_gui_alv_tree IMPORTING drag_drop_object fieldname node_key_table. "lcl_event_receiver DEFINITION

ENDCLASS.

* Classe d'change pour le drag and drop CLASS lcl_dragdropobj DEFINITION. PUBLIC SECTION. DATA: t_edit TYPE TABLE OF ty_edit, t_ranges_repr TYPE trsel_ts_ranges, t_ranges_join TYPE trsel_ts_ranges, w_index TYPE i. ENDCLASS. "lcl_dragdropobj DEFINITION

*---------------------------------------------------------------------* * CLASS lcl_event_receiver IMPLEMENTATION *---------------------------------------------------------------------* * Interception des vnements des ALV *---------------------------------------------------------------------* CLASS lcl_event_receiver IMPLEMENTATION. * User-command METHOD m_user_command. DATA : l_objtype TYPE versobjtyp, l_objname TYPE versobjnam, l_done TYPE flag, l_count TYPE i, l_mess TYPE char3,

lt_edit_disp TYPE TABLE OF ty_edit, l_pstatus TYPE lxestatprc, lt_e071 TYPE TABLE OF e071, lt_e071k TYPE TABLE OF e071k, l_order TYPE trkorr, l_obj TYPE trobj_name, l_form TYPE tdform. * CASE e_ucomm. (Un)select all WHEN 'SALL'. IF w_all_selected IS INITIAL. LOOP AT t_edit_disp ASSIGNING <fs_edit>. <fs_edit>-box = 'X'. ENDLOOP. w_all_selected = 'X'. ELSE. LOOP AT t_edit_disp ASSIGNING <fs_edit>. CLEAR <fs_edit>-box. ENDLOOP. CLEAR w_all_selected. ENDIF. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. * Suppression des doublons WHEN 'SORT'. w_sorted = 'X'. SORT t_edit_disp BY type objname value. DELETE ADJACENT DUPLICATES FROM t_edit_disp COMPARING type objname value. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. * Ajout variantes WHEN 'VARI'. REFRESH : t_rep_var, t_rep. LOOP AT t_edit_disp INTO s_edit WHERE box = 'X'. IF s_edit-type = 'FUGR'. CONCATENATE 'SAPL' s_edit-objname INTO s_edit-objname. ENDIF. s_rep_var-report = s_edit-objname. APPEND s_rep_var TO t_rep. ENDLOOP. IF NOT t_rep[] IS INITIAL. SELECT report variant FROM varid INTO TABLE t_rep_var FOR ALL ENTRIES IN t_rep WHERE report = t_rep-report. ENDIF. IF NOT t_rep_var[] IS INITIAL. PERFORM var_transport IN PROGRAM saplsvar TABLES t_rep_var. PERFORM refresh USING 'X'. ENDIF.

Ajout testes standards WHEN 'TEXT'. CLEAR s_edit_ot. READ TABLE t_edit_ot_disp INTO s_edit_ot INDEX 1. SUBMIT rstxtran VIA SELECTION-SCREEN AND RETURN WITH corr = s_edit_ot-korrnum. Ajout de formulaire Sapscript WHEN 'FORM'. CALL FUNCTION 'DISPLAY_FORM_TREE_F4' EXPORTING p_tree_name = 'SAP_ALL' p_display_mode = 'D' IMPORTING p_form_name = l_form EXCEPTIONS cancelled = 1 parameter_error = 2 not_found = 3 OTHERS = 4. CHECK sy-subrc = 0. IF l_form(1) <> 'Z' AND l_form(1) <> 'Y'. MESSAGE w701(bc) WITH 'Slectionnez un formulaire spcifique'(m45). EXIT. ENDIF. l_obj = l_form. CALL FUNCTION 'TRINT_TADIR_POPUP_ENTRY_E071' EXPORTING wi_e071_pgmid = 'R3TR' wi_e071_object = 'FORM' wi_e071_obj_name = l_obj EXCEPTIONS display_mode = 1 exit = 2 global_tadir_insert_error = 3 no_repair_selected = 4 no_systemname = 5 no_systemtype = 6 no_tadir_type = 7 reserved_name = 8 tadir_enqueue_failed = 9 devclass_not_found = 10 tadir_not_exist = 11 object_exists = 12 internal_error = 13 object_append_error = 14 tadir_modify_error = 15 object_locked = 16 no_object_authority = 17 OTHERS = 18. IF sy-subrc = 0. PERFORM refresh USING 'X'. ENDIF.

Ajout Traductions WHEN 'TRAD'. REFRESH t_trad_log.

lt_edit_disp[] = t_edit_disp[]. DELETE lt_edit_disp WHERE NOT box = 'X'. SORT lt_edit_disp BY objname liber. DELETE ADJACENT DUPLICATES FROM lt_edit_disp COMPARING objname. IF NOT lt_edit_disp[] IS INITIAL. Cas des classes et des messages LOOP AT lt_edit_disp ASSIGNING <fs_edit>. IF <fs_edit>-objname CS '='. CLEAR <fs_edit>-objname+sy-fdpos. ENDIF. IF <fs_edit>-type = 'MESS'. l_count = STRLEN( <fs_edit>-objname ). l_count = l_count - 3. l_mess = <fs_edit>-objname+l_count(3). <fs_edit>-objname(20) = <fs_edit>-objname(l_count). <fs_edit>-objname+20(3) = l_mess. ENDIF. ENDLOOP. SELECT * FROM lxe_log INTO TABLE t_trad_log FOR ALL ENTRIES IN lt_edit_disp WHERE objname = lt_edit_disp-objname(70). ENDIF. LOOP AT lt_edit_disp INTO s_edit. IF NOT s_edit-liber IS INITIAL. IF l_order IS INITIAL. PERFORM ask_order USING l_order 'X'. ENDIF. s_edit-korrnum = l_order. ENDIF. IF s_edit-korrnum IS INITIAL. CONTINUE. ENDIF. LOOP AT t_trad_log INTO s_trad_log WHERE objname = s_edit-objname. Create transport entries CALL FUNCTION 'LXE_OBJ_CREATE_TRANSPORT_ENTRY' EXPORTING language = s_trad_log-targlng custmnr = s_trad_log-custmnr objtype = s_trad_log-objtype objname = s_trad_log-objname tabkey = s_trad_log-tabkey IMPORTING pstatus = l_pstatus TABLES ex_e071 = lt_e071 ex_e071k = lt_e071k. IF l_pstatus = 'S'. Insert into given transport CALL FUNCTION 'TR_REQUEST_CHOICE' EXPORTING iv_suppress_dialog = 'X' iv_request_types = 'K' iv_request = s_edit-korrnum it_e071 = lt_e071[] it_e071k = lt_e071k[] iv_with_error_log = 'X'

iv_no_owner_check EXCEPTIONS invalid_request invalid_request_type user_not_owner no_objects_appended enqueue_error cancelled_by_user recursive_call OTHERS IF sy-subrc = 0. l_done = 'X'. ENDIF. ENDIF. ENDLOOP. ENDLOOP. IF NOT l_done IS INITIAL. PERFORM refresh USING 'X'. ENDIF. *

= 'X' = = = = = = = = 1 2 3 4 5 6 7 8.

Reprise d'objets WHEN 'REPR'. CLEAR w_target_request. REFRESH t_objects. Recherche des lignes slectionnes LOOP AT t_edit_disp INTO s_edit. CHECK s_edit-box = 'X'. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. ENDIF. s_e071_bis-trkorr = w_korrnum. s_e071_bis-pgmid = s_edit-pgmid. s_e071_bis-object = s_edit-object. s_e071_bis-obj_name = s_edit-objname. s_e071_bis-objfunc = s_edit-objfunc. APPEND s_e071_bis TO t_objects. ENDLOOP. PERFORM repr_join_pack USING e_ucomm ''. Raffraichissement. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. Remote comparaison WHEN 'COMP'. READ TABLE t_edit_disp INTO s_edit WITH KEY box = 'X'. IF sy-subrc <> 0. MESSAGE i701(bc) WITH 'Cochez une ligne'(m07).

EXIT. ENDIF. l_objtype = s_edit-object. l_objname = s_edit-objname. CALL FUNCTION 'SVRS_DISPLAY_DIRECTORY_NEW' EXPORTING object_type = l_objtype object_name = l_objname EXCEPTIONS no_directory = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDCASE. ENDMETHOD. "m_user_command * Barre d'options METHOD m_toolbar. DATA : bouton TYPE stb_button. * Ajout des boutons spcifiques la barre des taches bouton-function = 'REPR'. bouton-icon = icon_transfer. bouton-butn_type = 0. bouton-quickinfo = 'Reprendre objets'(t01). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'VARI'. bouton-icon = icon_variants. bouton-butn_type = 0. bouton-quickinfo = 'Ajout des variantes de prog.'(t04). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'TRAD'. bouton-icon = icon_text_field. bouton-butn_type = 0. bouton-quickinfo = 'Ajout des traductions.'(t00). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'COMP'. bouton-icon = icon_compare. bouton-butn_type = 0. bouton-quickinfo = 'Gestion des versions'(t06). APPEND bouton TO e_object->mt_toolbar. CLEAR bouton. bouton-butn_type = 3. "Separateur APPEND bouton TO e_object->mt_toolbar. bouton-function = 'TEXT'. bouton-icon = icon_ben_current_benefits. bouton-butn_type = 0. bouton-quickinfo = 'Ajout de textes sapscript.'(u15). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'FORM'. bouton-icon = icon_spool_request. bouton-butn_type = 0. bouton-quickinfo = 'Ajout de formulaire sapscript.'(u16). APPEND bouton TO e_object->mt_toolbar.

CLEAR bouton. bouton-butn_type = 3. "Separateur APPEND bouton TO e_object->mt_toolbar. bouton-function = 'SORT'. bouton-icon = icon_mass_change. bouton-butn_type = 0. bouton-quickinfo = 'Supprimer les doublons'(t05). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'SALL'. bouton-icon = icon_checkbox. bouton-butn_type = 0. bouton-quickinfo = '(D)slectionner tout'(t02). APPEND bouton TO e_object->mt_toolbar. * Suppression des fonctions inutiles PERFORM suppr_fct TABLES e_object->mt_toolbar. ENDMETHOD.

"m_toolbar2

* Appel de fonctions externes METHOD m_hotspot. PERFORM goto USING 'T_EDIT_DISP' e_column_id-fieldname e_row_id-index. ENDMETHOD. "m_hotspot METHOD handle_close. * Set dialogbox invisible (the dialogbox is destroyed outomatically * when the user switches to another dynpro). CALL METHOD sender->set_visible EXPORTING visible = space. IF w_mode = 'T'. * En cas d'insertion d'objets temporaire dans des OT : reselection IF NOT w_chg_tmp IS INITIAL. PERFORM selection. ENDIF. ELSEIF w_mode = 'D' AND NOT t_doublon[] IS INITIAL. MESSAGE i701(bc) WITH 'Dplacement annul'(m08). ENDIF. IF w_mode = 'I'. SET SCREEN 100. ELSE. SET SCREEN 0. LEAVE SCREEN. ENDIF. ENDMETHOD. "handle_close * Barre d'options - Doublons METHOD m_toolbar2. DATA : bouton TYPE stb_button. * Ajout des boutons spcifiques la barre des taches IF w_mode = 'D'. bouton-function = 'OLD'. bouton-icon = icon_database_table. bouton-text = 'Supprimer de l''OT d''origine'(t08). bouton-butn_type = 0. bouton-quickinfo = 'Supprimer de l''OT d''origine'(t08). APPEND bouton TO e_object->mt_toolbar.

bouton-function = 'NEW'. bouton-icon = icon_database_table_ina. bouton-text = 'Supprimer de l''OT cre'(t10). bouton-butn_type = 0. bouton-quickinfo = 'Supprimer de l''OT cre'(t10). APPEND bouton TO e_object->mt_toolbar. ELSEIF w_mode <> 'C'. bouton-function = 'CHG'. bouton-icon = icon_database_table_ina. bouton-text = 'Changer de classe de dev'(t12). bouton-butn_type = 0. bouton-quickinfo = 'Changer de classe de dev'(t12). APPEND bouton TO e_object->mt_toolbar. ENDIF. * Suppression des fonctions inutiles PERFORM suppr_fct TABLES e_object->mt_toolbar. ENDMETHOD.

"m_toolbar2

* User-command2 - Doublons METHOD m_user_command2. DATA : lwe_tadir TYPE tadir. CHECK w_mode <> 'C'. IF e_ucomm = 'OLD' OR e_ucomm = 'NEW'. LOOP AT t_doublon INTO s_doublon WHERE box = 'X'. IF e_ucomm = 'OLD'. SELECT * UP TO 1 ROWS FROM e071 INTO s_e071_bis WHERE trkorr = s_doublon-trkorr AND pgmid = s_doublon-pgmid AND object = s_doublon-object AND obj_name = s_doublon-obj_name AND objfunc <> 'D'. ENDSELECT. IF NOT sy-subrc = 0 AND NOT p_fusio IS INITIAL. IF s_doublon-pgmid = 'R3TR' AND s_doublon-object = 'PROG'. s_doublon-pgmid = 'LIMU'. s_doublon-object = 'REPS'. ENDIF. IF s_doublon-pgmid = 'R3TR' AND s_doublon-object = 'DTEL'. s_doublon-pgmid = 'LIMU'. s_doublon-object = 'DTED'. ENDIF. IF s_doublon-pgmid = 'R3TR' AND s_doublon-object = 'DOMA'. s_doublon-pgmid = 'LIMU'. s_doublon-object = 'DOMD'. ENDIF. SELECT * UP TO 1 ROWS FROM e071 INTO s_e071_bis WHERE trkorr = s_doublon-trkorr AND pgmid = s_doublon-pgmid AND object = s_doublon-object AND obj_name = s_doublon-obj_name

AND objfunc <> 'D'. ENDSELECT. ENDIF. CHECK sy-subrc = 0. PERFORM delete_object USING s_e071_bis. ENDIF. IF e_ucomm = 'NEW'. LOOP AT t_e071_bis INTO s_e071_bis "Table alimente dans la methode m_user_command WHERE pgmid = s_doublon-pgmid AND object = s_doublon-object AND obj_name = s_doublon-obj_name. CHECK w_request_new <> s_doublon-trkorr. s_e071_bis-trkorr = w_request_new. PERFORM delete_object USING s_e071_bis. ENDLOOP. IF s_doublon-pgmid = 'R3TR' AND ( s_doublon-object = 'PROG' OR s_doublon-object = 'DTEL' OR s_doublon-object = 'DOMA' ) AND NOT p_fusio IS INITIAL. s_doublon-pgmid = 'LIMU'. IF s_doublon-object = 'PROG'. s_doublon-object = 'REPS'. ENDIF. IF s_doublon-object = 'DTEL'. s_doublon-object = 'DTED'. ENDIF. IF s_doublon-object = 'DOMA'. s_doublon-object = 'DOMD'. ENDIF. LOOP AT t_e071_bis INTO s_e071_bis WHERE pgmid = s_doublon-pgmid AND object = s_doublon-object AND obj_name = s_doublon-obj_name. CHECK w_request_new <> s_doublon-trkorr. s_e071_bis-trkorr = w_request_new. PERFORM delete_object USING s_e071_bis. ENDLOOP. ENDIF. ENDIF. ENDLOOP. DELETE t_doublon WHERE box = 'X'. ENDIF. IF e_ucomm = 'CHG'. LOOP AT t_tadir ASSIGNING <fs_tadir> WHERE box = 'X'. CLEAR lwe_tadir. CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071' EXPORTING wi_e071_pgmid = <fs_tadir>-pgmid wi_e071_object = <fs_tadir>-object wi_e071_obj_name = <fs_tadir>-obj_name IMPORTING we_tadir = lwe_tadir EXCEPTIONS display_mode = 1 exit = 2 global_tadir_insert_error = 3

no_repair_selected = 4 no_systemname = 5 no_systemtype = 6 no_tadir_type = 7 reserved_name = 8 tadir_enqueue_failed = 9 devclass_not_found = 10 tadir_not_exist = 11 object_exists = 12 internal_error = 13 object_append_error = 14 tadir_modify_error = 15 object_locked = 16 no_object_authority = 17 OTHERS = 18. IF sy-subrc = 0 AND NOT lwe_tadir-devclass = '$TMP'. <fs_tadir>-devclass = lwe_tadir-devclass. w_chg_tmp = 'X'. ENDIF. ENDLOOP. DELETE t_tadir WHERE NOT devclass IS INITIAL. ENDIF. CALL METHOD g_alv_grid_dbl->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. ENDMETHOD. * User-command - Arbre METHOD m_user_command4. DATA : l_answer TYPE flag, l_answer2 TYPE flag, ls_edit TYPE ty_edit, ls_edit2 TYPE ty_edit, lt_e070 TYPE TABLE OF e070, ls_e071 TYPE e071, l_find TYPE flag, l_node_key TYPE lvc_nkey, l_node_key2 TYPE lvc_nkey, l_node_key3 TYPE lvc_nkey, l_trkorr TYPE trsel_trs_trkorr, l_node_style TYPE lvc_s_lacn, l_check TYPE flag, l_obj TYPE flag, l_cpt TYPE i, l_user_new TYPE as4user, ls_request TYPE trwbo_request_header, ls_request2 TYPE trwbo_request, lt_selected_node TYPE lvc_t_nkey. * Identification de la ligne slectionne CALL METHOD g_tree->get_selected_nodes CHANGING ct_selected_nodes = lt_selected_node. READ TABLE lt_selected_node INTO l_node_key INDEX 1. CHECK sy-subrc = 0. "m_user_command2

CASE ucomm. Refresh WHEN 'REFR'. CLEAR w_sorted. PERFORM refresh USING ''. Utilitaires WHEN 'TOOL'. CALL TRANSACTION 'SE03'. Masquer WHEN 'MASK'. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK NOT s_edit-korrnum IS INITIAL. Recherche noeud le plus lev IF NOT s_edit-tache IS INITIAL. READ TABLE t_edit_tree INTO s_edit WITH KEY korrnum = s_edit-korrnum tache = space. IF sy-subrc = 0. l_node_key = s_edit-node_key. ENDIF. ENDIF. Suppression du noeud CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key. DELETE t_edit_ot_disp WHERE korrnum = IF w_sorted IS INITIAL. DELETE t_edit_disp WHERE korrnum ENDIF. DELETE t_edit_ot WHERE korrnum = DELETE t_edit WHERE korrnum = s_edit-korrnum. = s_edit-korrnum. s_edit-korrnum. s_edit-korrnum.

* *

CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDLOOP. * * * Objets (vrification syntaxe) Vrifier cohrence de l'ordre WHEN 'CHAO' OR 'CHCY'. Recherche de la 1ere ligne slectionne CLEAR: s_edit, l_node_key. READ TABLE lt_selected_node INTO l_node_key INDEX 1. IF sy-subrc = 0.

READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. ENDIF. CHECK s_edit-liber IS INITIAL. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. ENDIF. CHECK NOT w_korrnum IS INITIAL. CALL FUNCTION 'TRINT_TDR_USER_COMMAND' EXPORTING iv_object = w_korrnum iv_type = '' iv_command = ucomm. * * Afficher objets inactifs WHEN 'INAC'. Recherche de la 1ere ligne slectionne CLEAR: s_edit, l_node_key. READ TABLE lt_selected_node INTO l_node_key INDEX 1. IF sy-subrc = 0. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. ENDIF. CHECK s_edit-liber IS INITIAL. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. ENDIF. CHECK NOT w_korrnum IS INITIAL. CALL FUNCTION 'RS_INACTIVE_OBJECTS_LIST' EXPORTING uname = space transport_request = w_korrnum list_as_popup = 'X' EXCEPTIONS OTHERS = 0. Trier et comprimer WHEN 'SORT'. CLEAR l_check. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK s_edit-liber IS INITIAL. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. ENDIF. CHECK NOT w_korrnum IS INITIAL. CALL FUNCTION 'TR_SORT_AND_COMPRESS_COMM' EXPORTING iv_trkorr = w_korrnum EXCEPTIONS

* *

OTHERS = 1. IF sy-subrc = 0. l_check = 'X'. ENDIF. ENDLOOP. IF NOT l_check IS INITIAL. PERFORM refresh USING 'X'. ENDIF. * * Changement type de tache WHEN 'CLAS'. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK NOT <fs_edit>-korrnum IS INITIAL. CHECK NOT <fs_edit>-tache IS INITIAL. CHECK <fs_edit>-objname IS INITIAL. * Lecture tache ls_request-trkorr = <fs_edit>-tache. CALL FUNCTION 'TRINT_READ_REQUEST_HEADER' EXPORTING iv_read_e070 = 'X' iv_read_e070c = 'X' CHANGING cs_request = ls_request EXCEPTIONS empty_trkorr = 1 not_exist_e070 = 2 OTHERS = 3. CHECK sy-subrc = 0. Modification du type CALL FUNCTION 'TR_CHANGE_TRFUNCTION' CHANGING cs_request_header = ls_request EXCEPTIONS action_aborted_by_user = 1 change_not_allowed = 2 db_access_error = 3 OTHERS = 4. IF sy-subrc = 0. COMMIT WORK. CLEAR s_dd07t. READ TABLE t_dd07t INTO s_dd07t WITH KEY domvalue_l = ls_request-trfunction BINARY SEARCH. s_edit = <fs_edit>. CONCATENATE ls_request-trfunction s_dd07t-ddtext INTO s_edit-trfunction SEPARATED BY ' - '. * Modification affichage CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key

i_outtab_line = s_edit. <fs_edit>-trfunction = s_edit-trfunction. IF p_user = 'X'. LOOP AT t_edit_tree ASSIGNING <fs_edit> WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND objname = space AND node_key <> s_edit-node_key. ls_edit = <fs_edit>. ls_edit-trfunction = s_edit-trfunction. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key2 i_outtab_line = ls_edit. <fs_edit>-trfunction = ls_edit-trfunction. ENDLOOP. ENDIF. ENDIF. ENDLOOP. IF sy-subrc = 0. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDIF. * * Creation WHEN 'CREA'. Recherche de la 1ere ligne slectionne CLEAR: s_edit, l_node_key. READ TABLE lt_selected_node INTO l_node_key INDEX 1. IF sy-subrc = 0. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. ENDIF. IF ( s_edit-korrnum IS INITIAL AND NOT s_edit-objname IS INITIAL ) OR NOT s_edit-liber IS INITIAL. MESSAGE w701(bc) WITH 'Slectionner un OT non libr ou l''entte'(m25). EXIT. ENDIF. * * Ajout de tches IF NOT s_edit-korrnum IS INITIAL. Recherche de l'OT READ TABLE t_edit_tree INTO ls_edit WITH KEY korrnum = s_edit-korrnum tache = space. IF sy-subrc = 0. l_node_key2 = ls_edit-node_key. CALL FUNCTION 'TRINT_TDR_USER_COMMAND' EXPORTING iv_object = ls_edit-korrnum iv_type = ls_edit-trfunction iv_command = 'ADDT'. COMMIT WORK.

Recherche de la tche cre SELECT * FROM e070 INTO TABLE lt_e070 WHERE strkorr = ls_edit-korrnum. LOOP AT lt_e070 INTO s_e070. READ TABLE t_edit_tree WITH KEY tache = s_e070-trkorr TRANSPORTING NO FIELDS. CHECK NOT sy-subrc = 0. Mise en forme des donnes SELECT * FROM e07t APPENDING TABLE t_e07t WHERE trkorr = s_e070-trkorr. APPEND s_e070 TO t_e070. PERFORM fill_edit TABLES t_edit USING s_e070 'X' ''. READ TABLE t_edit INTO ls_edit WITH KEY tache = s_e070-trkorr. PERFORM add_node_task USING l_node_key2 ls_edit l_node_key3 ''. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY korrnum = ls_edit-korrnum tache = ls_edit-tache. IF sy-subrc = 0. <fs_edit>-node_key = l_node_key3. ENDIF. ENDLOOP. ENDIF.

Creation d'OT ELSE. IF NOT s_edit-user IS INITIAL AND s_edit-user <> sy-uname. "#EC * MESSAGE w701(bc) WITH 'Vous ne pouvez crer d''ordre pour un autre user'(m09). EXIT. ENDIF. PERFORM create_order USING s_edit-proj. CHECK NOT s_new_request-trkorr IS INITIAL. PERFORM lock USING s_new_request-trkorr. COMMIT WORK. ENDIF. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. Suppression WHEN 'DELE'. CLEAR: l_find, l_answer, l_answer2. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK s_edit-liber IS INITIAL. IF s_edit-korrnum IS INITIAL AND NOT s_edit-objname IS INITIAL

. *

Lecture tache CALL METHOD g_tree->get_parent EXPORTING

i_node_key = l_node_key IMPORTING e_parent_node_key = l_node_key2. READ TABLE t_edit_tree INTO s_item WITH KEY node_key = l_node_key2. CHECK sy-subrc = 0. IF NOT s_item-tache IS INITIAL. w_korrnum = s_item-tache. ELSE. w_korrnum = s_item-korrnum. ENDIF. CHECK s_item-liber IS INITIAL. l_find = 'X'. * Popup de confirmation IF l_answer2 IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Suppression d''objet'(u13) text_question = 'Etes-vous rellement sr ???'(u14) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) IMPORTING answer = l_answer2 EXCEPTIONS text_not_found = 0 OTHERS = 0. ENDIF. IF l_answer2 <> '1'. EXIT. ENDIF. CLEAR ls_request2. ls_request2-h-trkorr = w_korrnum. CALL FUNCTION 'TRINT_READ_REQUEST' EXPORTING iv_read_e070 = iv_read_e07t = iv_read_e070c = iv_read_e070m = iv_read_objs_keys = iv_read_objs = iv_read_attributes = iv_suppress_lockflag_handling = CHANGING cs_request = EXCEPTIONS error_occured = OTHERS = CHECK sy-subrc = 0.

'X' 'X' 'X' 'X' 'X' 'X' 'X' 'X' ls_request2 1 2.

SELECT * FROM e071 INTO ls_e071 UP TO 1 ROWS WHERE trkorr = w_korrnum AND pgmid = s_edit-pgmid AND object = s_edit-object AND obj_name = s_edit-objname. ENDSELECT.

CHECK sy-subrc = 0. CALL FUNCTION 'TR_DELETE_COMM_OBJECT_KEYS' EXPORTING is_e071_delete = ls_e071 iv_dialog_flag = '' CHANGING cs_request = ls_request2 EXCEPTIONS e_database_access_error = 1 e_empty_lockkey = 2 e_bad_target_request = 3 e_wrong_source_client = 4 n_no_deletion_of_c_objects = 5 n_no_deletion_of_corr_entry = 6 n_object_entry_doesnt_exist = 7 n_request_already_released = 8 n_request_from_other_system = 9 r_action_aborted_by_user = 10 r_foreign_lock = 11 w_bigger_lock_in_same_order = 12 w_duplicate_entry = 13 w_no_authorization = 14 w_user_not_owner = 15 OTHERS = 16. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. CONTINUE. ENDIF. * Modification affichage CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key. IF w_sorted IS INITIAL. DELETE t_edit_disp WHERE node_key = l_node_key. ENDIF. DELETE t_edit_tree WHERE node_key = l_node_key. IF p_user = 'X'. LOOP AT t_edit_tree INTO ls_edit WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND pgmid = s_edit-pgmid AND object = s_edit-object AND objname = s_edit-objname AND node_key <> s_edit-node_key. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key2. ENDLOOP. IF sy-subrc = 0. DELETE t_edit_tree WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND pgmid = s_edit-pgmid AND object = s_edit-object

AND objname = s_edit-objname. ENDIF. ENDIF. CONTINUE. ENDIF. CHECK NOT s_edit-korrnum IS INITIAL. l_find = 'X'. * Popup de confirmation IF l_answer IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Suppression des OT slectionns'(t14) text_question = 'Confirmez-vous la suppression ?'(t15) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) IMPORTING answer = l_answer EXCEPTIONS text_not_found = 0 OTHERS = 0. ENDIF. IF l_answer <> '1'. EXIT. ENDIF. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. ENDIF. CALL FUNCTION 'TR_DELETE_COMM' EXPORTING wi_trkorr = w_korrnum EXCEPTIONS file_access_error = 1 order_already_released = 2 order_contains_c_member = 3 order_contains_locked_entries = 4 order_is_refered = 5 repair_order = 6 user_not_owner = 7 delete_was_cancelled = 8 ordernumber_empty = 9 tr_enqueue_failed = 10 objects_free_but_still_locks = 11 order_lock_failed = 12 no_authorization = 13 wrong_client = 14 project_still_referenced = 15 successors_already_released = 16 OTHERS = 17. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'W' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. CONTINUE. ENDIF.

Modification affichage CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key. IF p_user = 'X'. LOOP AT t_edit_tree INTO ls_edit WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND node_key <> s_edit-node_key. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key2. ENDLOOP. ENDIF. IF w_sorted IS INITIAL. DELETE t_edit_disp WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache. ENDIF. DELETE t_edit_tree WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache. DELETE t_edit_ot_disp WHERE korrnum = w_korrnum. IF s_edit-tache IS INITIAL. SUBTRACT 1 FROM w_cpt_open. ENDIF. DELETE t_lock WHERE h-trkorr = w_korrnum. ENDLOOP. IF l_find IS INITIAL. MESSAGE e701(bc) WITH 'Aucun OT non libr n''est slectionn'(m10). ENDIF. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush.

* *

Copie inter-mandant - SCC1 WHEN 'SCC1'. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK NOT s_edit-korrnum IS INITIAL. READ TABLE t_e070 INTO s_e070 WITH KEY trkorr = s_edit-korrnum. CHECK s_e070-korrdev = 'CUST'. "Que les OT de custo REFRESH t_bdc. s_bdc-program = 'SAPMSCC1'.

s_bdc-dynpro = '0111'. s_bdc-dynbegin = 'X'. APPEND s_bdc TO t_bdc. CLEAR s_bdc. s_bdc-fnam = 'COMFILE'. s_bdc-fval = s_edit-korrnum. APPEND s_bdc TO t_bdc. CALL TRANSACTION 'SCC1' USING t_bdc MODE w_mode_bdc. ENDLOOP. * Protocole de transport WHEN 'PROT'. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0 AND NOT s_edit-korrnum IS INITIAL. Appel du protocole de transport SUBMIT rddprott AND RETURN WITH pv_korr = s_edit-korrnum. Expand all WHEN 'PLUS'. CALL METHOD g_tree->expand_nodes EXPORTING it_node_key = t_node_key. Collapse all WHEN 'MOIN'. CALL METHOD g_tree->collapse_all_nodes. Reaffectation WHEN 'USR'. CLEAR : l_user_new, l_find. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK <fs_edit>-liber IS INITIAL. CHECK NOT <fs_edit>-korrnum IS INITIAL. CHECK <fs_edit>-objname IS INITIAL. l_find = 'X'. * Popup demandant le nouveau user IF l_user_new IS INITIAL. PERFORM call_screen_new_user IN PROGRAM saplstri USING <fs_edit>-user l_user_new 30 14. ENDIF. IF NOT <fs_edit>-tache IS INITIAL. w_korrnum = <fs_edit>-tache. ELSE. w_korrnum = <fs_edit>-korrnum. ENDIF. CALL FUNCTION 'TRINT_CHANGE_USERNAME' EXPORTING "#EC *

* *

wi_dialog = ' ' wi_trkorr = w_korrnum wi_user = l_user_new EXCEPTIONS already_released = 1 e070_update_error = 2 file_access_error = 3 not_exist_e070 = 4 user_does_not_exist = 5 unallowed_user = 6 user_not_authorized = 7 wrong_client = 8 OTHERS = 9. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF p_user = 'X'. CLEAR l_check. READ TABLE t_edit_tree WITH KEY korrnum = s_edit-korrnum user = l_user_new TRANSPORTING NO FIELDS. IF sy-subrc = 0. l_check = 'X'. "L'OT apparait dj sur le user. ENDIF. ENDIF. * Modification affichage s_edit = <fs_edit>. s_edit-user = l_user_new. CLEAR s_username. READ TABLE t_username INTO s_username WITH KEY user = s_edit-user. IF sy-subrc <> 0. SELECT a~bname b~name_text INTO s_username FROM usr21 AS a INNER JOIN adrp AS b ON a~persnumber = b~persnumber UP TO 1 ROWS WHERE a~bname = s_edit-user. ENDSELECT. IF sy-subrc = 0. APPEND s_username TO t_username. ENDIF. ENDIF. s_edit-username = s_username-username. CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key i_outtab_line = s_edit. <fs_edit>-user = l_user_new. <fs_edit>-username = s_username-username. IF p_user = 'X'. LOOP AT t_edit_tree ASSIGNING <fs_edit> WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND objname = space

AND node_key <> s_edit-node_key. ls_edit = <fs_edit>. ls_edit-user = s_edit-user. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key2 i_outtab_line = ls_edit. <fs_edit>-user = ls_edit-user. ENDLOOP. ENDIF. READ TABLE t_edit_ot ASSIGNING <fs_edit_ot> WITH KEY korrnum = w_korrnum. IF sy-subrc = 0. <fs_edit_ot>-user = s_edit-user. ENDIF. READ TABLE t_edit_ot_disp ASSIGNING <fs_edit_ot> WITH KEY korrnum = w_korrnum. IF sy-subrc = 0. <fs_edit_ot>-user = s_edit-user. ENDIF. * Deplacement du noeud (OT) CLEAR s_sort. IF NOT p_user IS INITIAL. IF s_edit-tache IS INITIAL AND l_check IS INITIAL. IF s_edit-proj IS INITIAL. s_edit-proj = 'Without project'(t67). ENDIF. READ TABLE t_sort INTO s_sort WITH KEY user = l_user_new proj = s_edit-proj liber = space. IF sy-subrc <> 0. READ TABLE t_sort INTO s_sort WITH KEY user = l_user_new liber = space. ENDIF. IF NOT s_sort-node_key IS INITIAL. CALL METHOD g_tree->expand_node EXPORTING i_node_key = s_sort-node_key. CALL METHOD g_tree->move_node EXPORTING i_node_key = l_node_key i_relatkey = s_sort-node_key i_relatship = cl_gui_column_tree=>relat_first_child. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. IF l_find IS INITIAL. MESSAGE e701(bc) WITH 'Aucun OT non libr n''est slectionn'(m10). ENDIF. CALL METHOD g_alv_grid->refresh_table_display EXPORTING

is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. * Libration WHEN 'LIB' OR 'LIBD'. CLEAR: l_find. Popup de confirmation CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Libration des OT slectionns'(t18) text_question = 'Confirmez-vous la libration ?'(t19) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) IMPORTING answer = l_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. CHECK sy-subrc = 0 AND l_answer = '1'. LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK s_edit-liber IS INITIAL. CHECK NOT s_edit-korrnum IS INITIAL. l_find = 'X'. IF NOT s_edit-tache IS INITIAL. w_korrnum = s_edit-tache. ELSE. w_korrnum = s_edit-korrnum. Avant de liberer l'OT, vrification des tches LOOP AT t_edit_tree INTO ls_edit WHERE korrnum = w_korrnum. CHECK NOT ls_edit-tache IS INITIAL. l_node_key2 = ls_edit-node_key. IF ls_edit-liber IS INITIAL. CLEAR w_user. CALL FUNCTION 'TR_SORT_AND_COMPRESS_COMM' EXPORTING iv_trkorr = ls_edit-tache EXCEPTIONS trkorr_not_found = 0 order_released = 0 error_while_modifying_obj_list = 0 tr_enqueue_failed = 0 no_authorization = 0 OTHERS = 0. DO. CALL FUNCTION 'TR_RELEASE_REQUEST' EXPORTING iv_trkorr = ls_edit-tache iv_dialog = 'X' iv_success_message = 'X'

iv_display_export_log = ' ' EXCEPTIONS docu_missing = 1 OTHERS = 2. IF sy-subrc = 0. ls_edit-liber = 'X'. EXIT. ELSE. IF NOT w_user IS INITIAL. PERFORM change_user USING ls_edit-tache ' '. ls_edit-user = w_user. EXIT. ELSE. PERFORM change_user USING ls_edit-tache 'X'. ls_edit-user = sy-uname. ENDIF. ENDIF. ENDDO. ENDIF. Modification affichage IF NOT ls_edit-liber IS INITIAL. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key2. DELETE t_edit_tree WHERE node_key = l_node_key2. DELETE t_edit_ot_disp WHERE korrnum = ls_edit-tache. DELETE t_edit_ot WHERE korrnum = ls_edit-tache. IF p_user = 'X'. LOOP AT t_edit_tree INTO ls_edit2 WHERE korrnum = ls_edit-korrnum AND tache = ls_edit-tache AND objname = space AND node_key <> ls_edit-node_key. l_node_key2 = ls_edit2-node_key. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key2. ENDLOOP. IF sy-subrc = 0. DELETE t_edit_tree WHERE korrnum = ls_edit-korrnum AND tache = ls_edit-tache. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDIF. CLEAR w_user. CALL FUNCTION 'TR_SORT_AND_COMPRESS_COMM' EXPORTING iv_trkorr = w_korrnum EXCEPTIONS trkorr_not_found = 0 order_released = 0 error_while_modifying_obj_list = 0 tr_enqueue_failed = 0

no_authorization OTHERS

= 0 = 0.

DO. CALL FUNCTION 'TR_RELEASE_REQUEST' EXPORTING iv_trkorr = w_korrnum iv_dialog = 'X' iv_success_message = 'X' iv_display_export_log = ' ' EXCEPTIONS cts_initialization_failure = 1 enqueue_failed = 2 no_authorization = 3 invalid_request = 4 request_already_released = 5 repeat_too_early = 6 error_in_export_methods = 7 object_check_error = 8 docu_missing = 9 db_access_error = 10 action_aborted_by_user = 11 export_failed = 12 OTHERS = 13. IF sy-subrc = 0. s_edit-liber = 'X'. EXIT. ELSE. IF NOT w_user IS INITIAL. PERFORM change_user USING w_korrnum ' '. s_edit-user = w_user. EXIT. ELSE. PERFORM change_user USING w_korrnum 'X'. s_edit-user = sy-uname. ENDIF. ENDIF. ENDDO. IF s_edit-liber IS INITIAL. MESSAGE i701(bc) WITH 'Erreur lors de la libration'(m13). CONTINUE. ENDIF. * Modification affichage CLEAR l_node_style. l_node_style-style = 2. "Ecriture bleue l_node_style-u_style = 'X'. l_node_style-u_dragdrop = 'X'. CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key is_node_layout = l_node_style i_outtab_line = s_edit. MODIFY t_edit_tree FROM s_edit TRANSPORTING liber user WHERE node_key = l_node_key. IF p_user = 'X'.

LOOP AT t_edit_tree ASSIGNING <fs_edit> WHERE korrnum = s_edit-korrnum AND tache = s_edit-tache AND objname = space AND node_key <> s_edit-node_key. ls_edit = <fs_edit>. ls_edit-liber = 'X'. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->change_node EXPORTING i_node_key = l_node_key2 is_node_layout = l_node_style i_outtab_line = ls_edit. <fs_edit>-liber = 'X'. ENDLOOP. ENDIF. * Mise jour grille LOOP AT t_edit_ot_disp ASSIGNING <fs_edit_ot>. CHECK <fs_edit_ot>-korrnum = w_korrnum OR <fs_edit_ot>-korrnum2 = w_korrnum. <fs_edit_ot>-liber = s_edit-liber. REFRESH <fs_edit_ot>-style. CLEAR s_style. s_style-style = cl_gui_alv_grid=>mc_style_disabled. s_style-fieldname = 'TEXT'. APPEND s_style TO <fs_edit_ot>-style. ENDLOOP. LOOP AT t_edit_ot ASSIGNING <fs_edit_ot>. CHECK <fs_edit_ot>-korrnum = w_korrnum OR <fs_edit_ot>-korrnum2 = w_korrnum. <fs_edit_ot>-liber = s_edit-liber. REFRESH <fs_edit_ot>-style. CLEAR s_style. s_style-style = cl_gui_alv_grid=>mc_style_disabled. s_style-fieldname = 'TEXT'. APPEND s_style TO <fs_edit_ot>-style. ENDLOOP. La suite ne concerne que la libration d'OT CHECK s_edit-tache IS INITIAL. DELETE t_lock WHERE h-trkorr = s_edit-korrnum. IF p_user = 'X'. LOOP AT t_edit_tree INTO ls_edit WHERE korrnum = s_edit-korrnum AND tache = space AND objname = space AND node_key <> s_edit-node_key. l_node_key2 = ls_edit-node_key. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = l_node_key2. DELETE t_edit_tree WHERE node_key = l_node_key2. ENDLOOP. ENDIF. * Deplacement du noeud

CLEAR s_sort. IF NOT p_se10 IS INITIAL. READ TABLE t_sort INTO s_sort WITH KEY trfunction = s_edit-trfunction(1) liber = 'X'. ELSEIF NOT p_proj IS INITIAL. IF s_edit-proj IS INITIAL. s_edit-proj = 'Without project'(t67). ENDIF. READ TABLE t_sort INTO s_sort WITH KEY user = sy-uname proj = s_edit-proj liber = 'X'. IF sy-subrc <> 0. READ TABLE t_sort INTO s_sort WITH KEY proj = s_edit-proj liber = 'X'. ENDIF. ELSE. READ TABLE t_sort INTO s_sort WITH KEY user = sy-uname liber = 'X'. ENDIF. IF NOT s_sort-node_key IS INITIAL. CALL METHOD g_tree->expand_node EXPORTING i_node_key = s_sort-node_key. CALL METHOD g_tree->move_node EXPORTING i_node_key = l_node_key i_relatkey = s_sort-node_key i_relatship = cl_gui_column_tree=>relat_first_child. ENDIF. Ajout objets LOOP AT t_edit INTO ls_edit WHERE korrnum = s_edit-korrnum AND tache <> space. ls_edit-liber = 'X'. PERFORM add_node_item USING l_node_key ls_edit ''. ENDLOOP. SUBTRACT ADD 1 TO ADD 1 TO ADD 1 TO ENDLOOP. 1 FROM w_cpt_open. w_cpt_release. w_cpt_transp. w_cpt_transp2.

IF l_find IS INITIAL. MESSAGE e701(bc) WITH 'Aucun OT non libr n''est slectionn'(m10). ENDIF. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. * Import

* *

WHEN 'IMP'. Appel de la STMS CALL FUNCTION 'TMS_UI_IMPORT_OVERVIEW'. Reprise d'objets & Fusion d'ordres WHEN 'REPR' OR 'JOIN'. CLEAR w_target_request. REFRESH: t_objects, t_ranges-trkorr. Recherche des lignes slectionnes LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. CHECK sy-subrc = 0. CHECK NOT s_edit-korrnum IS INITIAL.

Fusion d'OT : que les non-librs IF ucomm = 'JOIN' AND NOT s_edit-liber IS INITIAL. MESSAGE e701(bc) WITH 'Ne slectionnez que des ordres non librs'(m15). ENDIF. Fusion : Les objets seront stocks dans le premier OT IF ucomm = 'JOIN' AND w_target_request IS INITIAL. w_target_request = s_edit-korrnum. CONTINUE. ENDIF. Fusion : On ne prends ni l'OT ni les tches de destination IF ucomm = 'JOIN' AND w_target_request = s_edit-korrnum. CONTINUE. ENDIF. IF NOT s_edit-tache IS INITIAL. l_trkorr-sign = 'I'. l_trkorr-option = 'EQ'. l_trkorr-low = s_edit-tache. APPEND l_trkorr TO t_ranges-trkorr. w_korrnum = s_edit-korrnum. ELSE. l_trkorr-sign = 'I'. l_trkorr-option = 'EQ'. l_trkorr-low = s_edit-korrnum. APPEND l_trkorr TO t_ranges-trkorr. w_korrnum = s_edit-korrnum. LOOP AT t_edit_tree INTO s_edit WHERE korrnum = w_korrnum AND NOT tache IS INITIAL. l_trkorr-sign = 'I'. l_trkorr-option = 'EQ'. l_trkorr-low = s_edit-tache. APPEND l_trkorr TO t_ranges-trkorr. ENDLOOP. ENDIF. ENDLOOP. PERFORM repr_join_pack USING ucomm 'X'.

Raffraichissement.

CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. * * Afficher selection WHEN 'SELA'. Vrification des modifications de libell CLEAR w_sorted. l_check = 'X'. PERFORM save_libelle USING l_check. CHECK NOT l_check IS INITIAL. t_edit_disp[] = t_edit[]. t_edit_ot_disp[] = t_edit_ot[]. REFRESH: r_ordre, r_ordre2, r_tache. * Recherche des lignes slectionnes CLEAR: l_obj, l_cpt. LOOP AT lt_selected_node INTO l_node_key. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = l_node_key. PERFORM fill_rs_ordre USING l_obj. ADD 1 TO l_cpt. ENDLOOP. IF l_cpt > 1 AND l_obj = 'X'. t_edit_ot_disp[] = t_edit_ot[]. CLEAR l_obj. ENDIF. IF NOT r_tache[] IS INITIAL. CLEAR rs_ordre. rs_ordre-sign = 'I'. rs_ordre-option = 'EQ'. APPEND rs_ordre TO r_tache. ENDIF. DELETE t_edit_disp WHERE NOT korrnum IN r_ordre. DELETE t_edit_disp WHERE NOT tache IN r_tache. IF l_obj IS INITIAL. IF p_libot IS INITIAL. DELETE t_edit_ot_disp WHERE NOT korrnum IN r_ordre2 AND NOT korrnum2 IN r_ordre2. ELSE. DELETE t_edit_ot_disp WHERE NOT korrnum IN r_ordre. ENDIF. ENDIF. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display

EXPORTING is_stable = s_stable i_soft_refresh = 'X'. ENDCASE. ENDMETHOD. "m_user_command4 * Selection - Arbre ALV OT METHOD m_double_click2. DATA : l_check TYPE flag, l_obj TYPE flag. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = node_key. CHECK sy-subrc = 0. * Vrification des modifications de libell CLEAR w_sorted. l_check = 'X'. PERFORM save_libelle USING l_check. CHECK NOT l_check IS INITIAL. t_edit_disp[] = t_edit[]. t_edit_ot_disp[] = t_edit_ot[]. REFRESH: r_ordre, r_ordre2, r_tache. CLEAR l_obj. PERFORM fill_rs_ordre USING l_obj. IF NOT r_tache[] IS INITIAL. CLEAR rs_ordre. rs_ordre-sign = 'I'. rs_ordre-option = 'EQ'. APPEND rs_ordre TO r_tache. ENDIF. DELETE t_edit_disp WHERE NOT korrnum IN r_ordre. DELETE t_edit_disp WHERE NOT tache IN r_tache. IF l_obj IS INITIAL. IF p_libot IS INITIAL. DELETE t_edit_ot_disp WHERE NOT korrnum IN r_ordre2 AND NOT korrnum2 IN r_ordre2. ELSE. DELETE t_edit_ot_disp WHERE NOT korrnum IN r_ordre. ENDIF. ENDIF. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. ENDMETHOD. "m_double_click2 METHOD m_toolbar3. DATA : bouton TYPE stb_button.

bouton-function = 'INFO'. bouton-icon = icon_information. bouton-butn_type = 0. bouton-quickinfo = 'Lgende'(t20). APPEND bouton TO e_object->mt_toolbar. bouton-function = 'SAVE'. bouton-icon = icon_system_save. bouton-butn_type = 0. bouton-quickinfo = 'Sauvegarde'(t21). APPEND bouton TO e_object->mt_toolbar. * Suppression des fonctions inutiles PERFORM suppr_fct TABLES e_object->mt_toolbar. ENDMETHOD. METHOD m_user_command5. IF e_ucomm = 'INFO'. PERFORM display_info. CLEAR e_ucomm. ENDIF. IF e_ucomm = 'SAVE'. PERFORM save_libelle USING ' '. CLEAR e_ucomm. ENDIF. ENDMETHOD. "m_user_command5 * Modification des libells - Grille ALV OT METHOD m_data_changed. DATA : l_mod_cells TYPE lvc_s_modi. * * Sauvegarde des libells Pour chaque cellule modifie LOOP AT er_data_changed->mt_mod_cells INTO l_mod_cells. READ TABLE t_edit_ot_disp ASSIGNING <fs_edit_ot> INDEX l_mod_cells-row_id. CHECK <fs_edit_ot>-liber IS INITIAL. w_korrnum = <fs_edit_ot>-korrnum. * Vrification que le libell t modifi. CLEAR s_e07t. READ TABLE t_e07t INTO s_e07t WITH KEY trkorr = w_korrnum langu = sy-langu BINARY SEARCH. IF sy-subrc <> 0. L'insertion ne marche pas si le texte existe dj dans une autre langue : bug de la fonction standard. READ TABLE t_e07t INTO s_e07t WITH KEY trkorr = w_korrnum BINARY SEARCH. IF sy-subrc <> 0. s_e07t-langu = sy-langu. ENDIF. ENDIF. s_e07t-as4text = l_mod_cells-value.

"m_toolbar3

* *

CHECK s_e07t-as4text <> s_edit-text. READ TABLE t_e07t_save WITH KEY trkorr = w_korrnum TRANSPORTING NO FIELDS. IF sy-subrc = 0. MODIFY t_e07t_save FROM s_e07t INDEX sy-tabix. ELSE. APPEND s_e07t TO t_e07t_save. ENDIF. ENDLOOP. ENDMETHOD. "m_data_changed * Appel de fonctions externes METHOD m_hotspot2. PERFORM goto USING 'T_EDIT_OT_DISP' e_column_id-fieldname e_row_id-index. ENDMETHOD. "m_hotspot2 * Drag and Drop * L'vnement 'onDrag' est utilis pour crer un objet (dataobj) * avec les donnes necessaires au 'fetch' METHOD handle_alv_drag. DATA: g_dataobj TYPE REF TO lcl_dragdropobj, l_edit TYPE ty_edit. * * Lecture entre d'origine READ TABLE t_edit_disp INDEX e_row-index INTO l_edit. Creation d'un objet pour transferer les donnes CREATE OBJECT g_dataobj. APPEND l_edit TO g_dataobj->t_edit. MOVE e_row-index TO g_dataobj->w_index. Envoi de l'objet. e_dragdropobj->object = g_dataobj. ENDMETHOD. "handle_alv_drag

METHOD handle_tree_drag. DATA: g_dataobj TYPE REF TO lcl_dragdropobj, l_node_key TYPE lvc_nkey, l_trkorr TYPE trsel_trs_trkorr, l_edit TYPE ty_edit. * Cration d'un objet pour transferer les donnes CREATE OBJECT g_dataobj. * LOOP AT node_key_table INTO l_node_key. Lecture entre d'origine READ TABLE t_edit_tree INTO l_edit WITH KEY node_key = l_node_key. IF NOT l_edit-objname IS INITIAL. APPEND l_edit TO g_dataobj->t_edit. ELSE. l_trkorr-sign = 'I'. l_trkorr-option = 'EQ'. IF NOT l_edit-tache IS INITIAL. l_trkorr-low = l_edit-tache. ELSE. LOOP AT t_edit_tree INTO s_edit WHERE korrnum = l_edit-korrnum AND NOT tache IS INITIAL.

l_trkorr-low = s_edit-tache. IF s_edit-liber IS INITIAL. APPEND l_trkorr TO g_dataobj->t_ranges_join-trkorr. ELSE. APPEND l_trkorr TO g_dataobj->t_ranges_repr-trkorr. ENDIF. ENDLOOP. l_trkorr-low = l_edit-korrnum. ENDIF. IF l_edit-liber IS INITIAL. APPEND l_trkorr TO g_dataobj->t_ranges_join-trkorr. ELSE. APPEND l_trkorr TO g_dataobj->t_ranges_repr-trkorr. ENDIF. ENDIF. ENDLOOP. * Envoi de l'objet. drag_drop_object->object = g_dataobj. ENDMETHOD. "handle_tree_drag

* L'venement 'OnDrop' est utilis pour traiter les donnes reues. METHOD handle_tree_drop. DATA: g_dataobj TYPE REF TO lcl_dragdropobj, l_done TYPE flag, l_edit TYPE ty_edit. CATCH SYSTEM-EXCEPTIONS move_cast_error = 1. g_dataobj ?= drag_drop_object->object. READ TABLE t_edit_tree INTO s_edit WITH KEY node_key = node_key. CHECK sy-subrc = 0. IF NOT s_edit-tache IS INITIAL. w_target_request = s_edit-tache. ELSE. w_target_request = s_edit-korrnum. ENDIF. * Traitement des objets REFRESH t_objects. LOOP AT g_dataobj->t_edit INTO l_edit. IF NOT l_edit-tache IS INITIAL. s_e071_bis-trkorr = l_edit-tache. ELSE. s_e071_bis-trkorr = l_edit-korrnum. ENDIF. * Deplacement dans la mme tache : abandon. IF l_edit-korrnum = s_edit-korrnum. CONTINUE. ENDIF. s_e071_bis-pgmid = l_edit-pgmid. s_e071_bis-object = l_edit-object. s_e071_bis-obj_name = l_edit-objname. s_e071_bis-objfunc = l_edit-objfunc. APPEND s_e071_bis TO t_objects.

l_done = 'X'. ENDLOOP. IF NOT l_done IS INITIAL. PERFORM repr_join_pack USING 'REPR' ''. ENDIF. * Traitement de fusion REFRESH: t_objects. CLEAR: t_ranges. DELETE g_dataobj->t_ranges_join-trkorr WHERE low = s_edit-korrnum OR low = s_edit-tache. IF NOT g_dataobj->t_ranges_join-trkorr[] IS INITIAL. t_ranges-trkorr[] = g_dataobj->t_ranges_join-trkorr[]. PERFORM repr_join_pack USING 'JOIN' 'X'. ENDIF. * Traitement de reprise REFRESH: t_objects. CLEAR: t_ranges. DELETE g_dataobj->t_ranges_repr-trkorr WHERE low = s_edit-korrnum OR low = s_edit-tache. IF NOT g_dataobj->t_ranges_repr-trkorr[] IS INITIAL. t_ranges-trkorr[] = g_dataobj->t_ranges_repr-trkorr[]. PERFORM repr_join_pack USING 'REPR' 'X'.

ENDIF. ENDCATCH. IF sy-subrc <> 0. * En cas d'erreur : abandon CALL METHOD drag_drop_object->abort. ENDIF. ENDMETHOD. "handle_tree_drop * L'venement 'OnDropComplete' est utilis pour mettre jour * l'objets d'origine la fin du drag and drop. METHOD handle_alv_drop_complete. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDMETHOD. "handle_alv_drop_complete METHOD handle_tree_drop_complete. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDMETHOD. "handle_alv_drop_complete

ENDCLASS.

"lcl_event_receiver IMPLEMENTATION

*----------------------------------------------------------------------* START-OF-SELECTION. *----------------------------------------------------------------------START-OF-SELECTION. * Slection des donnes CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 1 text = 'Slection des donnes'(t22). PERFORM selection. * Popup objets temporaires IF NOT t_tadir[] IS INITIAL. CREATE OBJECT g_event_receiver. w_mode = 'T'. CALL SELECTION-SCREEN 0200. ENDIF. * Alimentation de la table d'affichage CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 50 text = 'Tri des donnes'(t99). PERFORM fill_data. * Export PERFORM fieldcatalog USING 'T_EDIT'. CREATE OBJECT g_event_receiver. * Reporting PERFORM export_alv. IF NOT t_lock[] IS INITIAL. PERFORM unlock. ENDIF. LEAVE LIST-PROCESSING. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form selection *&---------------------------------------------------------------------* * Slection des donnes *----------------------------------------------------------------------* FORM selection . * Initialisation CLEAR: t_e070, t_edit, t_e071, t_e07t, t_e071k, t_item, t_e070_dbl. REFRESH: t_e070, t_edit, t_e071, t_e07t, t_e071k, t_item, t_e070_dbl, t_node_key, t_lock, t_edit_ot. * Slection par user IF p_chx1 = 'X'. * Slection des ordres SELECT * FROM e070

APPENDING TABLE t_e070 WHERE trkorr IN s_ord AND as4user IN s_user AND trstatus IN r_statut AND as4date IN s_date. * Suppression des entres inutiles PERFORM delete_from_e070 TABLES t_e070.

* Slection par ordre ELSEIF p_chx2 = 'X'. * Slection des ordres IF NOT p_pro IS INITIAL. w_ref = p_pro. SELECT * FROM e070a INTO TABLE t_e070a WHERE trkorr IN s_ord AND attribute = 'SAP_CTS_PROJECT' AND reference = w_ref. IF NOT t_e070a[] IS INITIAL. SELECT * FROM e07t APPENDING TABLE t_e07t FOR ALL ENTRIES IN t_e070a WHERE trkorr = t_e070a-trkorr AND as4text IN s_lib. ENDIF. ELSE. SELECT * FROM e07t APPENDING TABLE t_e07t WHERE trkorr IN s_ord AND as4text IN s_lib. ENDIF. IF NOT t_e07t[] IS INITIAL. SORT t_e07t BY trkorr. DELETE ADJACENT DUPLICATES FROM t_e07t COMPARING trkorr. SELECT * FROM e070 APPENDING TABLE t_e070 FOR ALL ENTRIES IN t_e07t WHERE trkorr = t_e07t-trkorr AND as4user IN s_user AND trstatus IN r_statut AND as4date IN s_date. * Suppression des entres inutiles PERFORM delete_from_e070 TABLES t_e070. ENDIF.

* Slection par objet ELSEIF p_chx3 = 'X'. * Slection des objets SELECT * FROM e071 APPENDING TABLE t_e071 WHERE trkorr IN s_ord AND obj_name IN s_obj AND objfunc <> 'D'.

IF NOT t_e071[] IS INITIAL. Slection des ordres SELECT * FROM e070 APPENDING TABLE t_e070 FOR ALL ENTRIES IN t_e071 WHERE trkorr = t_e071-trkorr AND as4user IN s_user AND trstatus IN r_statut AND as4date IN s_date. Suppression des entres inutiles PERFORM delete_from_e070 TABLES t_e070. IF NOT t_e070[] IS INITIAL. SELECT * FROM e07t APPENDING TABLE t_e07t FOR ALL ENTRIES IN t_e070 WHERE ( trkorr = t_e070-trkorr OR trkorr = t_e070-strkorr ) AND as4text IN s_lib. ENDIF. ENDIF.

* Slection par date ELSEIF p_chx4 = 'X'. * Slection des ordres SELECT * FROM e070 APPENDING TABLE t_e070 WHERE trkorr IN s_ord AND as4date IN s_date AND as4user IN s_user On ne prends pas les tches AND strkorr = space et que les ordres liber AND trstatus IN r_statut_lib. Suppression des entres inutiles PERFORM delete_from_e070 TABLES t_e070. ENDIF.

* * *

* Selection par objet : rechercher tous les objets des OT IF p_selobj = 'X' AND p_chx3 = 'X'. SELECT * FROM e071 INTO TABLE t_e071 FOR ALL ENTRIES IN t_e070 WHERE trkorr = t_e070-trkorr AND objfunc <> 'D'. REFRESH s_obj. ENDIF. * A partir de la liste des OT : IF NOT p_chx3 = 'X' OR p_selobj = 'X'. * S'il s'agit de tche, rcupration des OT correspondant t_e070_bis[] = t_e070[]. DELETE t_e070_bis WHERE strkorr IS INITIAL. IF NOT t_e070_bis[] IS INITIAL. Slection des ordres

SELECT * FROM e070 APPENDING TABLE t_e070 FOR ALL ENTRIES IN t_e070_bis WHERE trkorr = t_e070_bis-strkorr AND trstatus IN r_statut. IF sy-subrc = 0. SORT t_e070 BY trkorr. DELETE ADJACENT DUPLICATES FROM t_e070 COMPARING trkorr. ENDIF. ENDIF. * S'il s'agit d'OT non libers: rcupration de toutes les tches t_e070_bis[] = t_e070[]. DELETE t_e070_bis WHERE NOT strkorr IS INITIAL. "Tches DELETE t_e070_bis WHERE trstatus IN r_statut_lib. IF NOT t_e070_bis[] IS INITIAL. Slection des ordres SELECT * FROM e070 APPENDING TABLE t_e070 FOR ALL ENTRIES IN t_e070_bis WHERE strkorr = t_e070_bis-trkorr. IF sy-subrc = 0. SORT t_e070 BY trkorr. DELETE ADJACENT DUPLICATES FROM t_e070 COMPARING trkorr. ENDIF. ENDIF. Lecture des libells et objets IF NOT t_e070[] IS INITIAL. SELECT * FROM e07t INTO TABLE t_e07t FOR ALL ENTRIES IN t_e070 WHERE trkorr = t_e070-trkorr AND as4text IN s_lib. Slection des objets SELECT * FROM e071 INTO TABLE t_e071 FOR ALL ENTRIES IN t_e070 WHERE trkorr = t_e070-trkorr AND obj_name IN s_obj AND objfunc <> 'D'. ENDIF. ENDIF.

* Suppression des commentaires et types d'objets non * necessaires de la liste d objets DELETE t_e071 WHERE object IN r_type. * Valeurs t_e071_tmp[] = t_e071[]. * On prends en compte que les entres de table DELETE t_e071_tmp WHERE NOT object IN r_typeh. IF NOT t_e071_tmp[] IS INITIAL. SELECT * FROM e071k INTO TABLE t_e071k FOR ALL ENTRIES IN t_e071_tmp WHERE trkorr = t_e071_tmp-trkorr AND pgmid = t_e071_tmp-pgmid AND mastertype = t_e071_tmp-object

AND mastername = t_e071_tmp-obj_name(40). IF NOT p_value IS INITIAL. DELETE t_e071k WHERE tabkey NS p_value. ENDIF. ENDIF. * Projets IF p_proj = 'X'. SELECT * FROM e070a INTO TABLE t_e070a FOR ALL ENTRIES IN t_e070 WHERE trkorr = t_e070-trkorr AND attribute = 'SAP_CTS_PROJECT'. IF NOT t_e070a[] IS INITIAL. t_e070a_bis[] = t_e070a[]. SORT t_e070a BY trkorr. SORT t_e070a_bis BY reference. DELETE ADJACENT DUPLICATES FROM t_e070a_bis COMPARING reference. SELECT * FROM ctsproject INTO TABLE t_project FOR ALL ENTRIES IN t_e070a_bis WHERE trkorr = t_e070a_bis-reference(20). IF sy-subrc = 0. SORT t_project BY trkorr. ENDIF. ENDIF. ENDIF. * Textes des objets CALL FUNCTION 'TR_OBJECT_TABLE' TABLES wt_object_text = t_obj_text. SELECT * FROM dd07t INTO TABLE t_dd07t WHERE domname = 'TRFUNCTION' AND ddlanguage = sy-langu. IF sy-subrc = 0. SORT t_dd07t BY domvalue_l. ENDIF. SORT SORT SORT SORT SORT t_obj_text BY pgmid object. t_e070 BY trkorr. t_e07t BY trkorr langu. t_e071 BY trkorr. t_e071k BY trkorr pgmid object objname tabkey.

IF t_e071[] IS INITIAL. MESSAGE e701(bc) WITH 'Aucune donne'(m16). ENDIF. ENDFORM. " selection

*&---------------------------------------------------------------------* *& Form fill_data *&---------------------------------------------------------------------* * Alimentation de la table d'affichage *----------------------------------------------------------------------* FORM fill_data . * Alimentation de la table de sortie (initial)

LOOP AT t_e070 INTO s_e070. PERFORM fill_edit TABLES t_edit USING s_e070 'X' ''. ENDLOOP. PERFORM colorize_ot TABLES t_edit_ot USING 1. SORT t_edit BY korrnum type objname. SORT t_edit_ot BY korrnum. DELETE ADJACENT DUPLICATES FROM t_edit_ot COMPARING korrnum. ENDFORM. " fill_data

*&---------------------------------------------------------------------* *& Form FILL_EDIT *&---------------------------------------------------------------------* * Mise en forme des donnes *----------------------------------------------------------------------* FORM fill_edit TABLES lt_edit STRUCTURE t_edit "#EC * USING fs_e070 TYPE e070 f_header TYPE c f_node_key TYPE lvc_nkey. DATA : l_cofile_read TYPE flag, ls_edit TYPE ty_edit, ls_edit2 TYPE ty_edit, ls_e070 TYPE e070, l_node_key TYPE lvc_nkey, l_subc TYPE subc, l_trfunction TYPE trfunction. CLEAR: ls_edit, s_edit. MOVE MOVE MOVE MOVE fs_e070-as4user TO ls_edit-user. fs_e070-trkorr(3) TO ls_edit-syst. fs_e070-trkorr TO ls_edit-korrnum. fs_e070-tarsystem TO ls_edit-tarsystem.

IF NOT fs_e070-strkorr IS INITIAL. MOVE fs_e070-strkorr TO ls_edit-korrnum. MOVE fs_e070-trkorr TO ls_edit-tache. CLEAR ls_e070. READ TABLE t_e070 INTO ls_e070 WITH KEY trkorr = fs_e070-strkorr. IF sy-subrc <> 0. READ TABLE t_e070_dbl INTO ls_e070 WITH KEY trkorr = fs_e070-strkorr. ENDIF. l_trfunction = ls_e070-trfunction. ls_edit-user_ot = ls_e070-as4user. ELSE. MOVE fs_e070-trkorr TO ls_edit-korrnum. l_trfunction = fs_e070-trfunction. ls_edit-user_ot = fs_e070-as4user. ENDIF. CLEAR s_username. READ TABLE t_username INTO s_username WITH KEY user = ls_edit-user. IF sy-subrc <> 0. SELECT a~bname b~name_text INTO s_username FROM usr21 AS a INNER JOIN adrp AS b ON a~persnumber = b~persnumber UP TO 1 ROWS

WHERE a~bname = ls_edit-user. ENDSELECT. IF sy-subrc = 0. APPEND s_username TO t_username. ENDIF. ENDIF. ls_edit-username = s_username-username. CLEAR s_dd07t. READ TABLE t_dd07t INTO s_dd07t WITH KEY domvalue_l = l_trfunction BINARY SEARCH. CONCATENATE l_trfunction s_dd07t-ddtext INTO ls_edit-trfunction SEPARATED BY ' - '. READ TABLE t_e07t INTO s_e07t WITH KEY trkorr = fs_e070-trkorr langu = sy-langu BINARY SEARCH. IF NOT sy-subrc = 0. READ TABLE t_e07t INTO s_e07t WITH KEY trkorr = fs_e070-trkorr BINARY SEARCH. ENDIF. IF sy-subrc = 0. MOVE s_e07t-as4text TO ls_edit-text. ELSE. IF NOT s_lib[] IS INITIAL AND f_header = 'X'. EXIT. ENDIF. ENDIF. MOVE fs_e070-as4date TO ls_edit-date. MOVE fs_e070-as4time TO ls_edit-time. * Search project IF p_proj = 'X'. READ TABLE t_e070a INTO s_e070a WITH KEY trkorr = ls_edit-korrnum BINARY SEARCH. IF sy-subrc = 0. READ TABLE t_project INTO s_project WITH KEY trkorr = s_e070a-reference(20) BINARY SEARCH. IF sy-subrc = 0. ls_edit-proj = s_project-externalid. ls_edit-proj_desc = s_project-descriptn. ENDIF. ENDIF. ENDIF. IF fs_e070-trstatus IN r_statut_lib. MOVE 'X' TO ls_edit-liber. * Recherche des environnements IF NOT p_notran IS INITIAL. l_cofile_read = 'X'. ELSE. CLEAR l_cofile_read.

READ TABLE t_edit INTO s_edit WITH KEY korrnum = ls_edit-korrnum. IF sy-subrc = 0. ls_edit-r7 = s_edit-r7. ls_edit-prod = s_edit-prod. ls_edit-transp = s_edit-transp. ls_edit-tr_err = s_edit-tr_err. ls_edit-retcode = s_edit-retcode. l_cofile_read = 'X'. ELSE. READ TABLE t_item INTO s_item WITH KEY korrnum = ls_edit-korrnum. IF sy-subrc = 0. ls_edit-r7 = s_item-r7. ls_edit-prod = s_item-prod. ls_edit-transp = s_item-transp. ls_edit-tr_err = s_item-tr_err. ls_edit-retcode = s_item-retcode. l_cofile_read = 'X'. ENDIF. ENDIF. ENDIF. IF l_cofile_read IS INITIAL. PERFORM read_cofile USING fs_e070-trkorr ls_edit. ENDIF. ENDIF. * Alimentation liste d'OT CLEAR s_edit_ot. IF p_libot IS INITIAL AND NOT ls_edit-tache IS INITIAL. s_edit_ot-korrnum = ls_edit-tache. s_edit_ot-korrnum2 = ls_edit-korrnum. ELSEIF ls_edit-tache IS INITIAL. s_edit_ot-korrnum = ls_edit-korrnum. ENDIF. IF NOT s_edit_ot-korrnum IS INITIAL. s_edit_ot-button = icon_history. s_edit_ot-text = ls_edit-text. s_edit_ot-liber = ls_edit-liber. s_edit_ot-user = ls_edit-user. s_edit_ot-r7 = ls_edit-r7. s_edit_ot-time_r7 = ls_edit-time_r7. s_edit_ot-transp = ls_edit-transp. s_edit_ot-retcode = ls_edit-retcode. IF s_edit_ot-liber IS INITIAL. s_style-style = cl_gui_alv_grid=>mc_style_enabled. ELSE. s_style-style = cl_gui_alv_grid=>mc_style_disabled. ENDIF. s_style-fieldname = 'TEXT'. APPEND s_style TO s_edit_ot-style. APPEND s_edit_ot TO t_edit_ot. ENDIF. * Option : ne pas afficher les OT transports IF p_no_tr = 'X'. CHECK ls_edit-transp IS INITIAL. ENDIF.

"#EC *

"#EC *

* Recherche des objets contenus dans l'ordre/tche READ TABLE t_e071 WITH KEY trkorr = fs_e070-trkorr BINARY SEARCH TRANSPORTING NO FIELDS. IF sy-subrc <> 0. APPEND ls_edit TO lt_edit. EXIT. ENDIF. LOOP AT t_e071 INTO s_e071 FROM sy-tabix. IF NOT s_e071-trkorr = fs_e070-trkorr. EXIT. ENDIF. * Type d'objet CLEAR s_obj_text. READ TABLE t_obj_text INTO s_obj_text WITH KEY pgmid = s_e071-pgmid object = s_e071-object BINARY SEARCH. IF sy-subrc <> 0. READ TABLE t_obj_text INTO s_obj_text WITH KEY object = s_e071-object. ENDIF. MOVE s_obj_text-text TO ls_edit-lib. MOVE s_e071-obj_name TO ls_edit-objname. IF s_e071-pgmid = 'R3TR' OR s_e071-pgmid = 'LIMU'. CASE s_e071-object. WHEN 'REPS' OR 'REPT' OR 'REPO'. MOVE 'PROG' TO ls_edit-type. WHEN 'DOMD'. MOVE 'DOMA' TO ls_edit-type. WHEN 'DTED'. MOVE 'DTEL' TO ls_edit-type. WHEN OTHERS. MOVE s_e071-object TO ls_edit-type. ENDCASE. ELSEIF s_e071-pgmid = 'LANG'. MOVE s_e071-pgmid TO ls_edit-type. CONCATENATE 'Traduction :'(u01) ls_edit-lib INTO ls_edit-lib. ELSE. MOVE s_e071-object TO ls_edit-type. ENDIF. IF ls_edit-type = 'PROG'. CLEAR l_subc. SELECT SINGLE subc INTO l_subc FROM trdir WHERE name = ls_edit-objname. IF l_subc = 'I'. ls_edit-type_af = 'INCL'. ELSEIF l_subc = 'F'. ls_edit-type_af = 'FUGR'. ELSEIF l_subc = 'K'. ls_edit-type_af = 'CLASS'. ELSE. ls_edit-type_af = 'PROG'. ENDIF. ELSE. ls_edit-type_af = ls_edit-type. ENDIF.

ls_edit-pgmid = s_e071-pgmid. ls_edit-object = s_e071-object. ls_edit-objfunc = s_e071-objfunc. * Ajout du noeud IF NOT f_node_key IS INITIAL. PERFORM add_node_item USING f_node_key ls_edit ''. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY pgmid = ls_edit-pgmid object = ls_edit-object objfunc = ls_edit-objfunc node_key = ''. IF sy-subrc = 0. <fs_edit>-node_key = ls_edit-node_key. ENDIF. IF p_user = 'X'. LOOP AT t_edit_tree INTO ls_edit2 WHERE ( korrnum = ls_edit-korrnum OR tache = ls_edit-tache ) AND objname = space AND node_key <> f_node_key. l_node_key = ls_edit2-node_key. PERFORM add_node_item USING l_node_key ls_edit ''. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY pgmid = ls_edit-pgmid object = ls_edit-object objfunc = ls_edit-objfunc node_key = ''. IF sy-subrc = 0. <fs_edit>-node_key = ls_edit-node_key. ENDIF. ENDLOOP. ENDIF. ENDIF. * Valeur IF NOT p_value IS INITIAL. LOOP AT t_e071k INTO s_e071k WHERE trkorr = s_e071-trkorr AND pgmid = s_e071-pgmid AND mastertype = s_e071-object AND mastername = s_e071-obj_name. ls_edit-value = s_e071k-tabkey. APPEND ls_edit TO lt_edit. ENDLOOP. IF sy-subrc <> 0. APPEND ls_edit TO lt_edit. ENDIF. ELSE. APPEND ls_edit TO lt_edit. ENDIF. ENDLOOP. ENDFORM. " FILL_EDIT *&---------------------------------------------------------------------* *& Form read_cofile *&---------------------------------------------------------------------* * Lecture des donnes de transport *----------------------------------------------------------------------*

FORM read_cofile USING DATA : lv_timestamp lv_firstdate lv_lastdate lv_startdate lv_starttime lv_enddate lv_endtime lv_init lv_fonction lv_tms_system lt_tmstpalog ls_tmstpalog

p_trkorr TYPE trkorr p_edit TYPE ty_edit. TYPE tstamp, TYPE tstamp VALUE '99991231235959', TYPE tstamp, TYPE dats, TYPE tims, TYPE dats, TYPE tims, TYPE flag, TYPE trbatfunc, TYPE tmssysnam, TYPE tmstpalogs, TYPE tmstpalog.

CLEAR: lv_init. REFRESH: t_cofile. CALL FUNCTION 'STRF_READ_COFILE' EXPORTING iv_trkorr = p_trkorr TABLES tt_cofi_lines = t_cofile EXCEPTIONS wrong_call = 0 no_info_found = 0 OTHERS = 0. * * * * * * * * * * * * * * * * * * * * Contrle des transports ffectus G Gnration V Gestion des versions R Execution aprs activation A Activation of ABAP Dictionary objects Y Conversion Program Call for Matchcode Generation O Conversion Program Call in Background (SE14 TBATG) X Export Application-Defined Objects D Import Application-Defined Objects B Activation with TACOB N Conversion with TBATG (Upgrade or Transport) Q Perform Actions Before Activation U Evaluation of Conversion Logs S Distributor (Compare Program for Inactive Nametabs) J Activation of Dictionary Obj. with Inact. Nametab w/o Conv. M Activation of ENQU/D, MCOB/ID/OF/OD E Create Versions After Export F Create Versions After Import W Create Backup Versions before Import P Activation of Nametab Entries SORT t_cofile BY tarsystem trdate trtime function. CLEAR: s_transp, t_transp[]. LOOP AT t_cofile INTO s_cofile. IF s_cofile-delflag = space. IF s_cofile-function CA 'GVRHAEDI'. IF lv_init = 'X'. lv_fonction = s_cofile-function. CLEAR lv_init. ENDIF. IF s_cofile-function = '<'. "Selection for import

lv_init = 'X'. ENDIF. IF s_cofile-function = lv_fonction. lv_firstdate = '99991231235959'. CLEAR: lv_lastdate. ENDIF. lv_timestamp(8) = s_cofile-trdate. lv_timestamp+8 = s_cofile-trtime. IF lv_timestamp < lv_firstdate. lv_firstdate = lv_timestamp. ENDIF. IF lv_timestamp > lv_lastdate. lv_lastdate = lv_timestamp. ENDIF. IF p_trsp <> 'X' OR ( s_cofile-tarsystem = p_r7 OR s_cofile-tarsystem = p_prod ). CLEAR s_transp. IF s_cofile-retcode = 0 OR s_cofile-retcode = 4. IF s_cofile-tarsystem = p_r7. MOVE s_cofile-trdate TO w_date. CONCATENATE w_date+6(2) w_date+4(2) w_date(4) INTO p_edit-r7 SEPARATED BY '/'. MOVE s_cofile-trtime TO p_edit-time_r7. ELSEIF s_cofile-tarsystem = p_prod. MOVE s_cofile-trdate TO w_date. CONCATENATE w_date+6(2) w_date+4(2) w_date(4) INTO p_edit-prod SEPARATED BY '/'. MOVE s_cofile-trtime TO p_edit-time_prd. ENDIF. IF NOT p_edit-transp CS s_cofile-tarsystem. CONCATENATE p_edit-transp s_cofile-tarsystem INTO p_edit-transp SEPARATED BY space. ENDIF. Code retour 0 ou 4 suite un retransport : suppression des flags d'erreur DELETE t_transp WHERE tarsystem = s_cofile-tarsystem AND function = s_cofile-function. IF s_cofile-retcode = 4. s_transp-tarsystem = s_cofile-tarsystem. s_transp-function = s_cofile-function. s_transp-retcode = s_cofile-retcode. APPEND s_transp TO t_transp. ENDIF. ELSE. Retcode <> 0 et 4 : Transport en erreur. s_transp-tarsystem = s_cofile-tarsystem. s_transp-function = s_cofile-function. s_transp-retcode = 8. APPEND s_transp TO t_transp. ENDIF. ENDIF. ENDIF. "Re-import

* *

ENDIF. * AT END OF tarsystem. Import steps not specific to transport request IF NOT p_step IS INITIAL. lv_startdate = lv_firstdate(8). lv_starttime = lv_firstdate+8. lv_enddate = lv_lastdate(8). lv_endtime = lv_lastdate+8. lv_endtime = lv_endtime + 21600 MOD 86400. "6 hrs modulo 24 hrs IF lv_endtime LE '060000'. " 6 am ADD 1 TO lv_enddate. ENDIF. lv_tms_system = s_cofile-tarsystem. CALL FUNCTION 'TMS_TM_GET_ALL_LOG' EXPORTING iv_system = lv_tms_system iv_startdate = lv_startdate iv_starttime = lv_starttime iv_enddate = lv_enddate iv_endtime = lv_endtime iv_trsteps = 'QSN6n' IMPORTING et_tmstpalog = lt_tmstpalog EXCEPTIONS OTHERS = 3. IF sy-subrc <> 0. REFRESH lt_tmstpalog. ENDIF. LOOP AT lt_tmstpalog INTO ls_tmstpalog. CLEAR s_transp. IF ls_tmstpalog-retcode = 0 OR ls_tmstpalog-retcode = 4. DELETE t_transp WHERE tarsystem = s_cofile-tarsystem AND trstep = ls_tmstpalog-trstep. IF s_cofile-retcode = 4. s_transp-tarsystem = s_cofile-tarsystem. s_transp-trstep = ls_tmstpalog-trstep. s_transp-retcode = ls_tmstpalog-retcode. APPEND s_transp TO t_transp. ENDIF. ELSE. s_transp-tarsystem = s_cofile-tarsystem. s_transp-trstep = ls_tmstpalog-trstep. s_transp-retcode = 8. APPEND s_transp TO t_transp. ENDIF. ENDLOOP. lv_firstdate = '99991231235959'. CLEAR: lv_lastdate, lv_init, lv_fonction. REFRESH lt_tmstpalog. ENDIF. ENDAT. ENDLOOP. SORT t_transp BY tarsystem retcode. DELETE ADJACENT DUPLICATES FROM t_transp COMPARING tarsystem retcode. LOOP AT t_transp INTO s_transp.

IF s_transp-retcode = 8. CONCATENATE p_edit-tr_err s_transp-tarsystem INTO p_edit-tr_err SEPARATED BY space. ENDIF. * Stockage du Code retour le plus lev IF s_transp-retcode > p_edit-retcode. p_edit-retcode = s_transp-retcode. ENDIF. ENDLOOP. * * * * Verification d'une ventuelle suppression de la liste d'imports Attention: prendre en compte des re-selection pour import aprs suppression IF p_edit-transp IS INITIAL. LOOP AT t_cofile INTO s_cofile WHERE retcode = 0 AND delflag = space. IF s_cofile-function = '>'. MOVE 'Liste de transports raffraichie'(t23) TO p_edit-transp. ENDIF. IF s_cofile-function = '<'. CLEAR p_edit-transp. ENDIF. ENDLOOP. ENDIF. ENDFORM. " read_cofile *&---------------------------------------------------------------------* *& Form FIELDCATALOG *&---------------------------------------------------------------------* * Alimentation de la structure d'affichage *----------------------------------------------------------------------* FORM fieldcatalog USING f_tabname TYPE slis_tabname. FIELD-SYMBOLS <fs_fieldcat> TYPE slis_fieldcat_alv. DATA: ls_fieldcat TYPE slis_fieldcat_alv, lt_fieldcat TYPE slis_t_fieldcat_alv, lt_fieldcat_ot TYPE slis_t_fieldcat_alv, lt_fieldcat_tree TYPE slis_t_fieldcat_alv, lt_fieldcat_lvc TYPE lvc_t_fcat. DEFINE fill_lib. &1-reptext_ddic = &2. &1-seltext_l = &2. &1-seltext_m = &2. &1-seltext_s = &2. END-OF-DEFINITION. * Lecture de la structure de T_EDIT CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-cprog i_internal_tabname = 'T_EDIT' i_inclname = sy-cprog CHANGING ct_fieldcat = lt_fieldcat[] EXCEPTIONS inconsistent_interface = 0 program_error = 0

OTHERS

= 0.

* Ajout des libells et options ALV LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-tabname = f_tabname. CASE <fs_fieldcat>-fieldname. WHEN 'SYST'. fill_lib <fs_fieldcat> 'Systme'(t24). WHEN 'KORRNUM'. fill_lib <fs_fieldcat> 'Ordre'(t25). CLEAR : <fs_fieldcat>-ref_fieldname. <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_ot. <fs_fieldcat>-no_out = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. WHEN 'TACHE'. fill_lib <fs_fieldcat> 'Tche'(t26). CLEAR : <fs_fieldcat>-ref_fieldname. <fs_fieldcat>-no_out = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. WHEN 'TRFUNCTION'. <fs_fieldcat>-outputlen = 5. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'BOX'. ls_fieldcat = <fs_fieldcat>. ls_fieldcat-no_out = 'X'. APPEND ls_fieldcat TO lt_fieldcat_tree. <fs_fieldcat>-checkbox = 'X'. <fs_fieldcat>-edit = 'X'. WHEN 'TEXT'. ls_fieldcat = <fs_fieldcat>. ls_fieldcat-edit = 'X'. APPEND ls_fieldcat TO lt_fieldcat_ot. APPEND <fs_fieldcat> TO lt_fieldcat_tree. ls_fieldcat = <fs_fieldcat>. ls_fieldcat-hotspot = 'X'. fill_lib ls_fieldcat 'Log'(u25). ls_fieldcat-fieldname = 'BUTTON'. ls_fieldcat-icon = 'X'. APPEND ls_fieldcat TO lt_fieldcat_ot. <fs_fieldcat>-no_out = 'X'. WHEN 'USER'. fill_lib <fs_fieldcat> 'Owner'(t27). <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_ot. <fs_fieldcat>-no_out = 'X'. WHEN 'USERNAME'. fill_lib <fs_fieldcat> 'Owner'(t27). <fs_fieldcat>-outputlen = 12. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'OBJNAME'. fill_lib <fs_fieldcat> 'Objet'(t28). ls_fieldcat = <fs_fieldcat>. <fs_fieldcat>-hotspot = 'X'. ls_fieldcat-no_out = 'X'. APPEND ls_fieldcat TO lt_fieldcat_tree.

WHEN 'VALUE'. fill_lib <fs_fieldcat> 'Valeur'(t29). CLEAR : <fs_fieldcat>-ref_fieldname. ls_fieldcat = <fs_fieldcat>. ls_fieldcat-no_out = 'X'. APPEND ls_fieldcat TO lt_fieldcat_tree. WHEN 'TYPE_AF'. fill_lib <fs_fieldcat> 'Type d''objet'(t30). ls_fieldcat = <fs_fieldcat>. ls_fieldcat-no_out = 'X'. APPEND ls_fieldcat TO lt_fieldcat_tree. WHEN 'DATE'. fill_lib <fs_fieldcat> 'Date'(t31). APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'LIB'. fill_lib <fs_fieldcat> 'Libell type'(t32). ls_fieldcat = <fs_fieldcat>. ls_fieldcat-no_out = 'X'. APPEND ls_fieldcat TO lt_fieldcat_tree. WHEN 'LIBER'. fill_lib <fs_fieldcat> 'Libr'(t33). <fs_fieldcat>-outputlen = 2. APPEND <fs_fieldcat> TO lt_fieldcat_ot. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'TARSYSTEM'. fill_lib <fs_fieldcat> 'System Cible'(t03). APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'R7'. fill_lib <fs_fieldcat> 'Transp.R7'(t34). <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'TIME_R7'. fill_lib <fs_fieldcat> 'Heure Transport'(t35). APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'PROD'. fill_lib <fs_fieldcat> 'Transp.Prod'(t36). <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'TIME_PRD'. fill_lib <fs_fieldcat> 'Heure Transport'(t35). APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'TRANSP'. fill_lib <fs_fieldcat> 'Liste des transports'(t38). <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN 'TR_ERR'. fill_lib <fs_fieldcat> 'Transports en erreur'(t39). <fs_fieldcat>-hotspot = 'X'. APPEND <fs_fieldcat> TO lt_fieldcat_tree. <fs_fieldcat>-no_out = 'X'. WHEN OTHERS. <fs_fieldcat>-no_out = 'X'.

ENDCASE. ENDLOOP. * Grille ou arbre ALV (LVC) CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS' EXPORTING it_fieldcat_alv = lt_fieldcat[] IMPORTING et_fieldcat_lvc = lt_fieldcat_lvc[] TABLES it_data = t_edit[] EXCEPTIONS it_data_missing = 1 OTHERS = 2. IF sy-subrc = 0. APPEND LINES OF lt_fieldcat_lvc TO t_fieldcat_lvc. ENDIF. CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS' EXPORTING it_fieldcat_alv = lt_fieldcat_ot[] IMPORTING et_fieldcat_lvc = t_fieldcat_ot[] TABLES it_data = t_edit_ot[] EXCEPTIONS it_data_missing = 0 OTHERS = 0. CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS' EXPORTING it_fieldcat_alv = lt_fieldcat_tree[] IMPORTING et_fieldcat_lvc = t_fieldcat_tree[] TABLES it_data = t_edit[] EXCEPTIONS it_data_missing = 0 OTHERS = 0. ENDFORM. " FIELDCATALOG

*&---------------------------------------------------------------------* *& Form export_alv *&---------------------------------------------------------------------* * Affichage du rapport ALV *----------------------------------------------------------------------* FORM export_alv. DATA : l_sys_edit TYPE t000-ccnocliind. CALL FUNCTION 'TR_SYS_PARAMS' IMPORTING sys_cliinddep_edit = l_sys_edit EXCEPTIONS no_systemname = 0 no_systemtype = 0 OTHERS = 0. IF l_sys_edit = '3'. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING

titel txt1 txt2 w_no_lock ENDIF.

= = = =

'Attention'(m12) 'Mandant non modifiable'(m14) 'Seule la consultation est disponible'(m18). 'X'.

CALL SELECTION-SCREEN 0100. ENDFORM. "export_alv *---------------------------------------------------------------------* * FORM init_0100 *---------------------------------------------------------------------* * Initialisation et affichage de la grille ALV *---------------------------------------------------------------------* FORM init_0100. DATA : l_select_mode TYPE i, "#EC * l_hierarchy_header TYPE treev_hhdr. "#EC * CHECK g_alv_cont IS INITIAL. * Report : Arbre + grilles ALV * Create containers CREATE OBJECT g_alv_cont EXPORTING side = repid = dynnr = no_autodef_progid_dynnr = ratio = CREATE OBJECT g_alv_cont2 EXPORTING side repid dynnr no_autodef_progid_dynnr ratio CREATE OBJECT g_alv_cont3 EXPORTING side = repid dynnr no_autodef_progid_dynnr ratio * *

cl_gui_docking_container=>dock_at_left sy-repid '0100' 'X' 60.

= = = = =

cl_gui_docking_container=>dock_at_top sy-repid '0100' 'X' 25.

cl_gui_docking_container=>dock_at_bottom = sy-repid = '0100' = 'X' = 75.

Create behaviour for Drag&drop PERFORM create_behaviour. Create tree and grids l_select_mode = cl_gui_column_tree=>node_sel_mode_multiple. CREATE OBJECT g_tree EXPORTING parent = g_alv_cont node_selection_mode = l_select_mode item_selection = '' no_toolbar = '' no_html_header = 'X' EXCEPTIONS cntl_error = 1 cntl_system_error = 2

create_error = 3 lifetime_error = 4 illegal_node_selection_mode = 5 failed = 6 illegal_column_name = 7. IF sy-subrc <> 0. MESSAGE e208(00) WITH 'ERROR'(m17). ENDIF. * Create Hierarchy-header l_hierarchy_header-width = 30. l_hierarchy_header-width_pix = ''. Texte de l'entte l_hierarchy_header-heading = 'Gestion des OT. '(t43). l_hierarchy_header-tooltip = 'Gestion des OT. '(t43). s_disvariant-report = 'ZTRANSPORT'. Create empty tree REFRESH t_edit_tree. CALL METHOD g_tree->set_table_for_first_display EXPORTING is_hierarchy_header = l_hierarchy_header i_save = 'X' i_default = 'X' is_variant = s_disvariant CHANGING it_outtab = t_edit_tree it_fieldcatalog = t_fieldcat_tree.

SET HANDLER g_event_receiver->m_user_command4 FOR g_tree. SET HANDLER g_event_receiver->m_double_click2 FOR g_tree. * Drag and drop SET HANDLER g_event_receiver->handle_tree_drag FOR g_tree. SET HANDLER g_event_receiver->handle_tree_drop FOR g_tree. SET HANDLER g_event_receiver->handle_tree_drop_complete FOR g_tree. * Add own functioncodes to the toolbar PERFORM change_toolbar2. PERFORM register_events.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 90 text = 'Construction de l''affichage'(t44). * Construction de l'arborescence PERFORM construct_report. LOOP AT t_key_expand INTO s_key_expand. w_node_key = s_key_expand. CALL METHOD g_tree->expand_node EXPORTING i_node_key = w_node_key. ENDLOOP. CALL METHOD g_tree->set_top_node EXPORTING i_node_key = w_first_key.

Construction de la grille ALV - OT CREATE OBJECT g_alv_grid EXPORTING i_parent = g_alv_cont2. s_layout_lvc-ctab_fname = 'COLOR'. CLEAR s_layout_lvc-grid_title. s_layout_lvc-cwidth_opt = 'X'. s_layout_lvc-no_rowmark = 'X'. s_layout_lvc-stylefname = 'STYLE'. s_disvariant-report = 'ZTRANSPORT2'.

SET HANDLER g_event_receiver->m_hotspot2 FOR g_alv_grid. SET HANDLER g_event_receiver->m_toolbar3 FOR g_alv_grid. SET HANDLER g_event_receiver->m_user_command5 FOR g_alv_grid. SET HANDLER g_event_receiver->m_data_changed FOR g_alv_grid. * Activer "Data_changed" au changement de selection CALL METHOD g_alv_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified. * Affichage de la grille ALV SORT t_edit_ot BY liber korrnum DESCENDING. t_edit_ot_disp[] = t_edit_ot[]. CALL METHOD g_alv_grid->set_table_for_first_display EXPORTING is_layout = s_layout_lvc is_variant = s_disvariant CHANGING it_outtab = t_edit_ot_disp[] it_fieldcatalog = t_fieldcat_ot[]. Construction de la grille ALV - Objets CREATE OBJECT g_alv_grid2 EXPORTING i_parent = g_alv_cont3. Suppressions entres OT et tches (sans objets) DELETE t_edit WHERE type IS INITIAL AND objname IS INITIAL. s_layout_lvc-cwidth_opt = 'X'. s_layout_lvc-no_rowmark = 'X'. CLEAR s_layout_lvc-stylefname. CLEAR s_layout_lvc-grid_title. CLEAR s_layout_lvc-ctab_fname. s_layout_lvc-s_dragdrop-row_ddid = w_handle_alv. s_disvariant-report = 'ZTRANSPORT3'. SET HANDLER g_event_receiver->m_toolbar FOR g_alv_grid2. SET HANDLER g_event_receiver->m_user_command FOR g_alv_grid2. SET HANDLER g_event_receiver->m_hotspot FOR g_alv_grid2. * Drag and drop SET HANDLER g_event_receiver->handle_alv_drag FOR g_alv_grid2. SET HANDLER g_event_receiver->handle_alv_drop_complete FOR g_alv_grid2. * Affichage de la grille ALV t_edit_disp[] = t_edit[].

CALL METHOD g_alv_grid2->set_table_for_first_display EXPORTING is_layout = s_layout_lvc is_variant = s_disvariant i_save = 'X' i_default = 'X' CHANGING it_outtab = t_edit_disp[] it_fieldcatalog = t_fieldcat_lvc[]. * This method must be called to send the data to the frontend CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. ENDFORM. "init_0100 OUTPUT *---------------------------------------------------------------------* * FORM init_0200 *---------------------------------------------------------------------* * Appel du popup ALV *---------------------------------------------------------------------* FORM init_0200. CLEAR w_chg_tmp. IF w_mode = 'D' OR w_mode = 'C'. PERFORM display_doublons TABLES t_doublon. ELSE. PERFORM display_doublons TABLES t_tadir. ENDIF. ENDFORM. "init_0200 OUTPUT *&---------------------------------------------------------------------* *& Form create_behaviour *&---------------------------------------------------------------------* * Create behaviour for Drag&drop *----------------------------------------------------------------------* FORM create_behaviour . DATA : effect TYPE i. effect = cl_dragdrop=>move + cl_dragdrop=>copy. * Arbre CREATE OBJECT g_behaviour_tree. CALL METHOD g_behaviour_tree->add EXPORTING flavor = 'Line'(t45) dragsrc = 'X' droptarget = 'X' effect = effect. CALL METHOD g_behaviour_tree->get_handle IMPORTING handle = w_handle_tree. CREATE OBJECT g_behaviour_tree2. CALL METHOD g_behaviour_tree2->add EXPORTING flavor = 'Line'(t45) dragsrc = 'X' droptarget = ' ' effect = effect. CALL METHOD g_behaviour_tree2->get_handle IMPORTING handle = w_handle_tree2.

* Grille CREATE OBJECT g_behaviour_alv. CALL METHOD g_behaviour_alv->add EXPORTING flavor = 'Line'(t45) dragsrc = 'X' droptarget = ' ' effect = effect. CALL METHOD g_behaviour_alv->get_handle IMPORTING handle = w_handle_alv. ENDFORM. " create_behaviour

*&---------------------------------------------------------------------* *& Form CHANGE_TOOLBAR2 *&---------------------------------------------------------------------* * Ajout d'un bouton d'information - Report *----------------------------------------------------------------------* FORM change_toolbar2. DATA: lg_toolbar TYPE REF TO cl_gui_toolbar, lg_menu TYPE REF TO cl_ctmenu. * get toolbar control CALL METHOD g_tree->get_toolbar_object IMPORTING er_toolbar = lg_toolbar. CHECK NOT lg_toolbar IS INITIAL. * Delete calculation button CALL METHOD lg_toolbar->delete_button EXPORTING fcode = '&CALC'. CALL METHOD lg_toolbar->delete_button EXPORTING fcode = '&EXPAND'. CALL METHOD lg_toolbar->delete_button EXPORTING fcode = '&COLLAPSE'. * add separator to toolbar CALL METHOD lg_toolbar->add_button EXPORTING fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = ''. * add Expand button CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'PLUS' icon = icon_rating_positivepositive butn_type = cntb_btype_button text = '' quickinfo = 'Expand all'(t51).

* add Collapse button CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'MOIN' icon = icon_rating_minusminus butn_type = cntb_btype_button text = '' quickinfo = 'Collapse all'(t52). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'MASK' icon = icon_negative butn_type = cntb_btype_button text = '' quickinfo = 'Masquer'(t53). * add separator to toolbar CALL METHOD lg_toolbar->add_button EXPORTING fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = ''. * add utils button CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'TOOL' icon = icon_tools butn_type = cntb_btype_button text = '' quickinfo = 'Utilitaires standard'(u12). * add separator to toolbar CALL METHOD lg_toolbar->add_button EXPORTING fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = ''. CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'CREA' icon = icon_create butn_type = cntb_btype_button text = '' quickinfo = 'Cration'(t54). * Libration CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'LIB' icon = icon_transport butn_type = cntb_btype_button text = '' quickinfo = 'Liberer l''ordre'(t55).

CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'IMP' icon = icon_import_transport_request butn_type = cntb_btype_button text = '' quickinfo = 'Import'(t56). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'SCC1' icon = icon_ws_transport butn_type = cntb_btype_button text = '' quickinfo = 'Transport inter-mandants'(t57). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'PROT' icon = icon_display_text butn_type = cntb_btype_button text = '' quickinfo = 'Journaux des transports'(t49). * add separator to toolbar CALL METHOD lg_toolbar->add_button EXPORTING fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = ''. CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'CHAO' icon = icon_check butn_type = cntb_btype_dropdown text = '' quickinfo = 'Contrle global'(u02). CREATE OBJECT lg_menu. CALL METHOD lg_menu->add_function EXPORTING fcode = 'CHAO' text = 'Objets (vrification syntaxe)'(u03). CALL METHOD lg_menu->add_function EXPORTING fcode = 'CHCY' text = 'Vrifier cohrence de l''ordre'(u04). CALL METHOD lg_menu->add_function EXPORTING fcode = 'INAC' text = 'Afficher objets inactifs'(u05). CALL METHOD lg_toolbar->set_static_ctxmenu EXPORTING fcode = 'CHAO' ctxmenu = lg_menu.

CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'SORT' icon = icon_transfer butn_type = cntb_btype_button text = '' quickinfo = 'Trier et comprimer'(u06). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'DELE' icon = icon_delete butn_type = cntb_btype_button text = '' quickinfo = 'Suppression de l''ordre'(t59). * add separator to toolbar CALL METHOD lg_toolbar->add_button EXPORTING fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = ''. CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'USR' icon = icon_rename butn_type = cntb_btype_button text = '' quickinfo = 'Change owner'(t60). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'CLAS' icon = icon_change_order butn_type = cntb_btype_button text = '' quickinfo = 'Changer type de tche'(t61). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'JOIN' icon = icon_workflow_join butn_type = cntb_btype_button text = '' quickinfo = 'Fusion des ordres'(t62). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'REPR' icon = icon_include_objects butn_type = cntb_btype_button text = '' quickinfo = 'Reprendre objets'(t01). * add separator to toolbar CALL METHOD lg_toolbar->add_button

EXPORTING fcode icon butn_type text quickinfo

= = = = =

'' '' cntb_btype_sep '' ''.

CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'REFR' icon = icon_refresh butn_type = cntb_btype_button text = '' quickinfo = 'Refresh'(t65). CALL METHOD lg_toolbar->add_button EXPORTING fcode = 'SELA' icon = icon_arrow_right butn_type = cntb_btype_button text = '' quickinfo = 'Slctionner'(t09). ENDFORM. " CHANGE_TOOLBAR2 *&---------------------------------------------------------------------* *& Form REGISTER_EVENTS *&---------------------------------------------------------------------* * Enregistrement des vnements de l'arbre ALV *----------------------------------------------------------------------* FORM register_events. DATA: lt_events TYPE cntl_simple_events, l_event TYPE cntl_simple_event. CALL METHOD g_tree->get_registered_events IMPORTING events = lt_events. * Define the events which will be passed to the backend CLEAR l_event. l_event-eventid = cl_gui_simple_tree=>eventid_node_double_click. l_event-appl_event = 'X'. APPEND l_event TO lt_events. CLEAR l_event. l_event-eventid = cl_gui_column_tree=>eventid_expand_no_children. APPEND l_event TO lt_events. * Register events CALL METHOD g_tree->set_registered_events EXPORTING events = lt_events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3. IF sy-subrc <> 0. ENDIF. ENDFORM. " REGISTER_EVENTS *&---------------------------------------------------------------------*

*& Form CONSTRUCT_REPORT *&---------------------------------------------------------------------* * Construction de l'arborecence - report *----------------------------------------------------------------------* FORM construct_report. DATA: l_node_text TYPE lvc_value, ls_node TYPE lvc_s_layn, l_node_key TYPE lvc_nkey, l_node_key0 TYPE lvc_nkey, l_node_key1 TYPE lvc_nkey, l_node_key2 TYPE lvc_nkey, l_node_key3 TYPE lvc_nkey, ls_edit TYPE ty_edit, ls_edit2 TYPE ty_edit, l_user TYPE syuname, l_trfunction TYPE val_text, l_korrnum TYPE korrnum, l_liber TYPE flag, l_user_wrong TYPE flag, l_nametext TYPE ad_namtext, lt_edit TYPE TABLE OF ty_edit. CLEAR w_first_key. l_liber = 'Z'. REFRESH: t_sort, t_key_expand, t_key_user. w_cpt_open = '0'. w_cpt_release = '0'. w_cpt_transp = '0'. w_cpt_transp2 = '0'. * Entte : sauf tri par projet ou user ou se10 IF p_proj IS INITIAL AND p_user IS INITIAL AND p_se10 IS INITIAL. CLEAR ls_node. ls_node-hidden = ' '. ls_node-disabled = ' '. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR ls_edit. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = '' i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. w_first_key = l_node_key. s_key_expand = l_node_key. APPEND s_key_expand TO t_key_expand. ENDIF. * Tri IF p_se10 = 'X'. SORT t_edit BY trfunction liber ASCENDING korrnum DESCENDING tache objname type value. ELSE.

IF p_user = 'X' AND p_proj = 'X'. SORT t_edit BY proj user_ot liber ASCENDING korrnum DESCENDING tache objname type value. ELSEIF p_user = 'X'. SORT t_edit BY user_ot liber ASCENDING korrnum DESCENDING tache objname type value. ELSE. SORT t_edit BY proj liber ASCENDING korrnum DESCENDING tache objname type value. ENDIF. ENDIF. * Construction de l'arborescence LOOP AT t_edit ASSIGNING <fs_edit>. * Niveau 0 : projet ls_edit = <fs_edit>. AT NEW proj. IF p_proj = 'X'. * Add node CONCATENATE ls_edit-proj ls_edit-proj_desc INTO l_node_text. IF l_node_text IS INITIAL. MOVE 'Without project'(t67) TO l_node_text. ENDIF. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: ls_edit. ls_edit-proj = <fs_edit>-proj. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = '' i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. l_node_key1 = l_node_key. IF w_first_key IS INITIAL. w_first_key = l_node_key. ENDIF. s_key_expand = l_node_key. APPEND s_key_expand TO t_key_expand. CLEAR s_sort. s_sort-user = ls_edit-user. IF ls_edit-proj IS INITIAL. s_sort-proj = 'Without project'(t67). ELSE. s_sort-proj = ls_edit-proj. ENDIF. s_sort-liber = ls_edit-liber. s_sort-node_key = l_node_key. APPEND s_sort TO t_sort. ENDIF. ENDAT. * Niveau 0b : user

IF l_user <> <fs_edit>-user_ot AND p_user = 'X'. l_user = <fs_edit>-user_ot. IF NOT l_user IN s_user. l_user_wrong = 'X'. CONTINUE. ELSE. CLEAR l_user_wrong. ENDIF. * Add node CLEAR l_nametext. SELECT b~name_text INTO l_nametext FROM usr21 AS a INNER JOIN adrp AS b ON a~persnumber = b~persnumber UP TO 1 ROWS WHERE a~bname = l_user. ENDSELECT. CONCATENATE l_user l_nametext INTO l_node_text SEPARATED BY ' - '. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: ls_edit. ls_edit-user = <fs_edit>-user. IF p_proj = 'X'. ls_edit-proj = <fs_edit>-proj. ENDIF. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = l_node_key1 i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. IF w_first_key IS INITIAL. w_first_key = l_node_key. ENDIF. s_key_expand = l_node_key. APPEND s_key_expand TO t_key_expand. s_key_user-user = ls_edit-user. s_key_user-proj = ls_edit-proj. s_key_user-node_key = l_node_key. APPEND s_key_user TO t_key_user. CLEAR s_sort. s_sort-user = ls_edit-user. IF p_proj = 'X'. s_sort-proj = ls_edit-proj. ENDIF. s_sort-liber = ls_edit-liber. s_sort-node_key = l_node_key. APPEND s_sort TO t_sort. ENDIF. IF p_user = 'X'. CHECK l_user_wrong IS INITIAL.

ENDIF. * Tri SE10 : Type d'OT et liberation ls_edit = <fs_edit>. IF ls_edit-trfunction <> l_trfunction AND p_se10 = 'X'. l_trfunction = ls_edit-trfunction. l_liber = 'Z'. Add node MOVE ls_edit-trfunction TO l_node_text. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: ls_edit. ls_edit-trfunction = <fs_edit>-trfunction. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = '' i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. l_node_key1 = l_node_key. IF w_first_key IS INITIAL. w_first_key = l_node_key. ENDIF. s_key_expand = l_node_key. APPEND s_key_expand TO t_key_expand. CLEAR s_sort. s_sort-trfunction = ls_edit-trfunction(1). s_sort-node_key = l_node_key. APPEND s_sort TO t_sort. ENDIF. ls_edit = <fs_edit>. IF ls_edit-liber <> l_liber AND p_se10 = 'X'. l_liber = ls_edit-liber. Add node IF ls_edit-liber IS INITIAL. MOVE 'Modifiable'(u07) TO l_node_text. ELSE. MOVE 'Libr'(u08) TO l_node_text. ENDIF. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: ls_edit. IF <fs_edit>-liber IS INITIAL. ls_edit-liber = '.'. ELSE. ls_edit-liber = <fs_edit>-liber. ENDIF. ls_edit-trfunction = <fs_edit>-trfunction. CALL METHOD g_tree->add_node EXPORTING

i_relat_node_key = l_node_key1 i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. s_key_expand = l_node_key. APPEND s_key_expand TO t_key_expand. CLEAR s_sort. s_sort-trfunction = ls_edit-trfunction(1). s_sort-liber = ls_edit-liber. s_sort-node_key = l_node_key. APPEND s_sort TO t_sort. ENDIF. * Niveau 1 : ordres ls_edit = <fs_edit>. AT NEW korrnum. PERFORM add_node_ot USING l_node_key ls_edit l_node_key2 cl_gui_column_tree=>relat_last_child ''. Blocage des modifications IF ls_edit-liber IS INITIAL AND ls_edit-user = sy-uname"#EC * AND ls_edit-trfunction(1) = 'K'. PERFORM lock USING ls_edit-korrnum. ENDIF. IF ls_edit-liber IS INITIAL. ADD 1 TO w_cpt_open. ELSE. ADD 1 TO w_cpt_release. IF NOT ls_edit-transp = 'Liste de transports raffraichie'(t23). IF NOT ls_edit-transp CS p_r7. ADD 1 TO w_cpt_transp. ENDIF. IF NOT ls_edit-transp CS p_prod. ADD 1 TO w_cpt_transp2. ENDIF. ENDIF. ENDIF. ENDAT. * Niveau 2 : Taches ls_edit = <fs_edit>. AT NEW tache. IF ls_edit-tache <> ls_edit-korrnum AND NOT ls_edit-tache IS INITIAL. PERFORM add_node_task USING l_node_key2 ls_edit l_node_key3 ''. ENDIF. ENDAT. Niveau 3 : objets IF NOT p_arbo IS INITIAL AND NOT <fs_edit>-objname IS INITIAL. IF <fs_edit>-tache <> <fs_edit>-korrnum AND NOT <fs_edit>-tache IS INITIAL. l_node_key0 = l_node_key3. ELSE. l_node_key0 = l_node_key2. ENDIF.

PERFORM add_node_item USING l_node_key0 <fs_edit> ''. ENDIF. ENDLOOP. * Ajout des OT d'autres user (tri par user) SORT t_edit BY korrnum tache. IF p_user = 'X'. lt_edit[] = t_edit[]. SORT lt_edit BY korrnum user. DELETE lt_edit WHERE tache IS INITIAL. DELETE lt_edit WHERE NOT user IN s_user. DELETE ADJACENT DUPLICATES FROM lt_edit COMPARING korrnum user. LOOP AT lt_edit INTO ls_edit. CHECK ls_edit-user <> ls_edit-user_ot. IF ls_edit-korrnum <> l_korrnum. l_korrnum = ls_edit-korrnum. READ TABLE t_edit INTO s_edit WITH KEY korrnum = ls_edit-korrnum BINARY SEARCH. CLEAR: s_edit-objname, s_edit-value, s_edit-type, s_edit-lib, s_edit-tache. IF NOT s_edit-user IN s_user. IF s_edit-liber IS INITIAL. ADD 1 TO w_cpt_open. ELSE. ADD 1 TO w_cpt_release. IF NOT s_edit-transp = 'Liste de transports raffraichie'(t23). IF NOT s_edit-transp CS p_r7. ADD 1 TO w_cpt_transp. ENDIF. IF NOT s_edit-transp CS p_prod. ADD 1 TO w_cpt_transp2. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. IF p_proj IS INITIAL. CLEAR ls_edit-proj. ENDIF. READ TABLE t_key_user INTO s_key_user WITH KEY user = ls_edit-user proj = ls_edit-proj. CHECK sy-subrc = 0. Ajout du noeud OT PERFORM add_node_ot USING s_key_user-node_key s_edit l_node_key2 cl_gui_column_tree=>relat_last_child ''. LOOP AT t_edit INTO ls_edit2. CHECK ls_edit2-korrnum = s_edit-korrnum. CHECK NOT ls_edit2-tache IS INITIAL OR NOT ls_edit2-objname IS INITIAL. ls_edit = ls_edit2. Taches AT NEW tache. IF ls_edit-tache <> ls_edit-korrnum

AND NOT ls_edit-tache IS INITIAL. PERFORM add_node_task USING l_node_key2 ls_edit l_node_key3 ''. ENDIF. ENDAT. * Objets IF NOT p_arbo IS INITIAL AND NOT ls_edit2-objname IS INITIAL. IF ls_edit2-tache <> ls_edit2-korrnum AND NOT ls_edit2-tache IS INITIAL. l_node_key0 = l_node_key3. ELSE. l_node_key0 = l_node_key2. ENDIF. PERFORM add_node_item USING l_node_key0 ls_edit2 ''. ENDIF. ENDLOOP. ENDLOOP. ENDIF.

* Ajout des enttes manquantes IF NOT p_se10 IS INITIAL. PERFORM add_header_node USING 'K'. PERFORM add_header_node USING 'W'. ENDIF. * Add node keys to internal table LOOP AT t_edit_tree ASSIGNING <fs_edit>. <fs_edit>-node_key = sy-tabix + w_first_key - 1. ENDLOOP. ENDFORM. " CONSTRUCT_REPORT

*&---------------------------------------------------------------------* *& Form add_node_ot *&---------------------------------------------------------------------* * Ajout noeud type OT *----------------------------------------------------------------------* FORM add_node_ot USING f_node_key TYPE lvc_nkey fs_edit TYPE ty_edit f_node_key2 TYPE lvc_nkey f_relation TYPE i f_no_drag TYPE flag. DATA : l_node_text TYPE lvc_value, ls_node TYPE lvc_s_layn. * Ajout du noeud CLEAR ls_node. ls_node-hidden = ' '. ls_node-disabled = ' '. ls_node-isfolder = 'X'. IF fs_edit-liber IS INITIAL. ls_node-style = 3. "Ecriture grise ELSEIF NOT fs_edit-tr_err IS INITIAL. ls_node-style = 4. "Ecriture rouge ELSEIF NOT fs_edit-transp IS INITIAL. ls_node-style = 1. "Ecriture noire ELSE. ls_node-style = 2. "Ecriture bleue ENDIF. ls_node-n_image = icon_transport.

ls_node-exp_image = icon_transport. IF fs_edit-liber IS INITIAL AND f_no_drag IS INITIAL. ls_node-dragdropid = w_handle_tree. ENDIF. IF NOT fs_edit-liber IS INITIAL AND f_no_drag IS INITIAL. ls_node-dragdropid = w_handle_tree2. ENDIF. l_node_text = fs_edit-korrnum. CLEAR: fs_edit-objname, fs_edit-value, fs_edit-type, fs_edit-lib, fs_edit-tache. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = f_node_key i_relationship = f_relation i_node_text = l_node_text is_outtab_line = fs_edit is_node_layout = ls_node IMPORTING e_new_node_key = f_node_key2. APPEND f_node_key2 TO t_node_key. ENDFORM. " add_node_ot

*&---------------------------------------------------------------------* *& Form add_node_task *&---------------------------------------------------------------------* * Ajout noeud type tache *----------------------------------------------------------------------* FORM add_node_task USING f_node_key TYPE lvc_nkey fs_edit TYPE ty_edit f_node_key2 TYPE lvc_nkey f_no_drag TYPE flag. DATA : l_node_text TYPE lvc_value, ls_node TYPE lvc_s_layn. * Ajout du noeud CLEAR ls_node. ls_node-hidden = ' '. ls_node-disabled = ' '. ls_node-isfolder = 'X'. ls_node-n_image = icon_task. ls_node-exp_image = icon_task. IF fs_edit-liber IS INITIAL AND f_no_drag IS INITIAL. ls_node-dragdropid = w_handle_tree. ENDIF. IF NOT fs_edit-liber IS INITIAL AND f_no_drag IS INITIAL. ls_node-dragdropid = w_handle_tree2. ENDIF. l_node_text = fs_edit-tache. CLEAR: fs_edit-objname, fs_edit-value, fs_edit-type, fs_edit-lib. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = f_node_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = fs_edit is_node_layout = ls_node

IMPORTING e_new_node_key = f_node_key2. APPEND f_node_key2 TO t_node_key. ENDFORM. " add_node_task

*&---------------------------------------------------------------------* *& Form add_node_item *&---------------------------------------------------------------------* * Ajout noeud type item *----------------------------------------------------------------------* FORM add_node_item USING f_node_key TYPE lvc_nkey fs_edit TYPE ty_edit f_no_drag TYPE flag. DATA : l_node_text TYPE lvc_value, ls_node TYPE lvc_s_layn, ls_edit TYPE ty_edit, l_node_key TYPE lvc_nkey. * Ajout du noeud CLEAR ls_node. ls_node-hidden = ' '. ls_node-disabled = ' '. ls_node-isfolder = ' '. IF f_no_drag IS INITIAL. ls_node-dragdropid = w_handle_tree2. ENDIF. ls_node-n_image = icon_businav_objects. ls_node-exp_image = icon_businav_objects. l_node_text = fs_edit-type. ls_edit-text = fs_edit-objname. ls_edit-objname = fs_edit-objname. ls_edit-value = fs_edit-value. ls_edit-type = fs_edit-type. ls_edit-lib = fs_edit-lib. ls_edit-pgmid = fs_edit-pgmid. ls_edit-object = fs_edit-object. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = f_node_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ls_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. fs_edit-node_key = l_node_key. ENDFORM. " add_node_item

*&---------------------------------------------------------------------* *& Form user_command *&---------------------------------------------------------------------* * Actions de la liste ALV - Historique *---------------------------------------------------------------------* FORM user_command USING f_ucomm TYPE c "#EC CALLED fs_selfield TYPE slis_selfield.

* Bouton Info IF f_ucomm = '&LFO'. PERFORM display_info. CLEAR f_ucomm. ENDIF. * Double click IF f_ucomm = 'GOTO'. PERFORM goto USING fs_selfield-tabname fs_selfield-fieldname fs_selfield-tabindex. ENDIF. ENDFORM. "USER_COMMAND *---------------------------------------------------------------------* * FORM status_0100 *---------------------------------------------------------------------* * Statut-gui simple (return/exit) *---------------------------------------------------------------------* FORM status_0100. SET PF-STATUS 'MAIN100' OF PROGRAM 'BCALV_GRID_01'. w_title = '&1 ordres ouverts et &2 libers (non transports: &3 &4 &5 &6)'(001). REPLACE '&1' WITH w_cpt_open INTO w_title. REPLACE '&2' WITH w_cpt_release INTO w_title. REPLACE '&3' WITH w_cpt_transp INTO w_title. REPLACE '&4' WITH p_r7 INTO w_title. REPLACE '&5' WITH w_cpt_transp2 INTO w_title. REPLACE '&6' WITH p_prod INTO w_title. CONDENSE w_title. SET TITLEBAR '001' OF PROGRAM 'SAPLMGMM' WITH w_title. ENDFORM. "status_0100 OUTPUT *---------------------------------------------------------------------* * FORM user_command_0100 *---------------------------------------------------------------------* * Sortie du dynpro 0100 *---------------------------------------------------------------------* FORM user_command_0100 . IF sy-ucomm = 'EXIT'. IF NOT g_alv_cont IS INITIAL. CALL METHOD g_tree->free. CALL METHOD g_alv_cont->free. ENDIF. SET SCREEN 0. LEAVE SCREEN. ENDIF. ENDFORM. "user_command_0100 INPUT *&---------------------------------------------------------------------* *& Form colorize_ot *&---------------------------------------------------------------------* FORM colorize_ot TABLES ft_data STRUCTURE t_edit_ot USING f_col TYPE i. FIELD-SYMBOLS: <fs_item> TYPE ty_edit_ot. * LOOP AT ft_data ASSIGNING <fs_item>. Transports en warning et erreur IF <fs_item>-retcode <> 0. IF <fs_item>-retcode = 4.

s_color-fname = 'KORRNUM'. s_color-color-col = 7. APPEND s_color TO <fs_item>-color. ELSE. s_color-fname = 'KORRNUM'. s_color-color-col = 6. APPEND s_color TO <fs_item>-color. ENDIF. ENDIF. CHECK <fs_item>-color[] IS INITIAL. * Coloriser les OT non transports IF <fs_item>-transp IS INITIAL. s_color-fname = 'KORRNUM'. s_color-color-col = f_col. APPEND s_color TO <fs_item>-color. ENDIF.

OT transports IF NOT <fs_item>-transp IS INITIAL. s_color-fname = 'KORRNUM'. s_color-color-col = 5. APPEND s_color TO <fs_item>-color. ENDIF. ENDLOOP. ENDFORM. " colorize *&---------------------------------------------------------------------* *& Form display_info *&---------------------------------------------------------------------* * Lgende (Historique) *----------------------------------------------------------------------* FORM display_info . DATA: l_dialogbox_container TYPE REF TO cl_gui_dialogbox_container, l_grid TYPE REF TO cl_gui_alv_grid, lt_fieldcat TYPE lvc_t_fcat, ls_fieldcat TYPE lvc_s_fcat, ls_layout TYPE lvc_s_layo, l_height TYPE i, lt_legend TYPE TABLE OF ty_legend, ls_legend TYPE ty_legend. ls_fieldcat-tabname = ls_fieldcat-fieldname APPEND ls_fieldcat TO ls_fieldcat-fieldname APPEND ls_fieldcat TO l_height = 100. * Affichage d'une ligne par couleur s_color-fname = 'CELL'. s_color-color-col = 1. s_color-color-int = 0. APPEND s_color TO ls_legend-color. ls_legend-lib = 'Ordre non transport'(t74). APPEND ls_legend TO lt_legend. CLEAR ls_legend. s_color-fname = 'CELL'. 'LT_LEGEND'. = 'CELL'. lt_fieldcat. = 'LIB'. lt_fieldcat.

s_color-color-col = 5. s_color-color-int = 0. APPEND s_color TO ls_legend-color. ls_legend-lib = 'Ordre transport'(t76). APPEND ls_legend TO lt_legend. CLEAR ls_legend. s_color-color-col = 7. s_color-color-int = 0. APPEND s_color TO ls_legend-color. ls_legend-lib = 'Warning lors du transport'(t78). APPEND ls_legend TO lt_legend. CLEAR ls_legend. s_color-color-col = 6. s_color-color-int = 0. APPEND s_color TO ls_legend-color. ls_legend-lib = 'Erreur lors du transport'(t79). APPEND ls_legend TO lt_legend. CLEAR ls_legend. * Utilisation d'un container de type dialogbox CREATE OBJECT l_dialogbox_container EXPORTING top = 150 left = 150 lifetime = cntl_lifetime_dynpro caption = 'Lgende'(t20) width = 300 height = l_height. CREATE OBJECT l_grid EXPORTING i_parent = l_dialogbox_container. * Enregistrement de l'venement 'CLOSE'. SET HANDLER g_event_receiver->handle_close FOR l_dialogbox_container. w_mode = 'I'. * Affichage du popup d'information ls_layout-ctab_fname = 'COLOR'. ls_layout-no_headers = 'X'. ls_layout-no_toolbar = 'X'. ls_layout-no_rowmark = 'X'. ls_layout-cwidth_opt = 'X'. ls_layout-sel_mode = 'A'. CALL METHOD l_grid->set_table_for_first_display EXPORTING is_layout = ls_layout CHANGING it_fieldcatalog = lt_fieldcat it_outtab = lt_legend[]. CALL METHOD cl_gui_control=>set_focus EXPORTING control = l_grid. ENDFORM. " display_info

*&---------------------------------------------------------------------* *& Form goto

*&---------------------------------------------------------------------* * Appel de fonctions externes *----------------------------------------------------------------------* FORM goto USING f_tabname TYPE c f_fieldname TYPE c f_tabindex TYPE any. DATA : l_order TYPE trkorr, l_pgmid TYPE pgmid, l_user TYPE sy-uname, l_object TYPE trobjtype, l_objname TYPE trobj_name. * Determination Ordre ou Tache CASE f_tabname. WHEN 'T_EDIT'. READ TABLE t_edit INTO s_edit INDEX f_tabindex. IF sy-subrc = 0. IF f_fieldname = 'TACHE'. l_order = s_edit-tache. ELSE. l_order = s_edit-korrnum. ENDIF. l_pgmid = s_edit-pgmid. l_object = s_edit-object. l_objname = s_edit-objname. ENDIF. WHEN 'T_EDIT_DISP'. READ TABLE t_edit_disp INTO s_edit INDEX f_tabindex. IF sy-subrc = 0. l_pgmid = s_edit-pgmid. l_object = s_edit-object. l_objname = s_edit-objname. IF NOT s_item-tache IS INITIAL. l_order = s_edit-tache. ELSE. l_order = s_edit-korrnum. ENDIF. ENDIF. WHEN 'T_ITEM'. READ TABLE t_item INTO s_item INDEX f_tabindex. IF sy-subrc = 0. IF f_fieldname = 'TACHE'. l_order = s_item-tache. ELSE. l_order = s_item-korrnum. ENDIF. l_pgmid = s_item-pgmid. l_object = s_item-object. l_objname = s_item-objname. ENDIF. WHEN 'T_EDIT_OT_DISP'. READ TABLE t_edit_ot_disp INTO s_edit_ot INDEX f_tabindex. IF sy-subrc = 0. l_order = s_edit_ot-korrnum. l_user = s_edit_ot-user. ENDIF. ENDCASE. * CASE f_fieldname. Affichage de l'OT

WHEN 'KORRNUM' OR 'TACHE'. CHECK NOT l_order IS INITIAL. CALL FUNCTION 'TR_DISPLAY_REQUEST' EXPORTING i_trkorr = l_order. * Affichage du protocole de transport. WHEN 'R7' OR 'PROD' OR 'TRANSP' OR 'TR_ERR'. SUBMIT rddprott AND RETURN WITH pv_korr = l_order. Log de modification OT WHEN 'BUTTON'. SUBMIT rddaclog WITH trkorr = l_order AND RETURN. Propritaire de l'OT WHEN 'USER'. CHECK NOT l_user IS INITIAL. CALL FUNCTION 'SUSR_USER_MAINT_WITH_DIALOG' EXPORTING user_to_display = l_user EXCEPTIONS error_writing_to_db = 0 OTHERS = 0. WHEN 'OBJNAME'. Contenu de table IF l_object IN r_typeh. t_e071k_bis[] = t_e071k[]. DELETE t_e071k_bis WHERE NOT trkorr = l_order. DELETE t_e071k_bis WHERE NOT mastertype = l_object. DELETE t_e071k_bis WHERE NOT mastername = l_objname. IF NOT t_e071k_bis[] IS INITIAL. CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT' EXPORTING i_title = 'Contenu de table'(t80) i_selection = '' i_allow_no_selection = 'X' i_screen_start_column = 5 i_screen_start_line = 5 i_screen_end_column = 150 i_screen_end_line = 25 i_tabname = 'E071K' i_structure_name = 'E071K' TABLES t_outtab = t_e071k_bis EXCEPTIONS program_error = 0 OTHERS = 0. ENDIF. * Autres objets ELSE. CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL' EXPORTING iv_pgmid = l_pgmid iv_object = l_object iv_obj_name = l_objname EXCEPTIONS

jump_not_possible = 0 OTHERS = 0. ENDIF. ENDCASE. ENDFORM. " goto

*&---------------------------------------------------------------------* *& Form save_libelle *&---------------------------------------------------------------------* * Sauvegarde des modification de libell *----------------------------------------------------------------------* FORM save_libelle USING l_check TYPE flag. DATA: l_answer TYPE flag. DATA: ls_edit TYPE ty_edit. CHECK NOT t_e07t_save[] IS INITIAL. * IF NOT l_check IS INITIAL. Popup de confirmation CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Libells modifis'(t81) text_question = 'Voulez-vous les sauvegarder ?'(t82) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) IMPORTING answer = l_answer EXCEPTIONS text_not_found = 0 OTHERS = 0. IF l_answer = 'A'. CLEAR l_check. EXIT. ELSEIF l_answer = '2'. EXIT. ENDIF. ENDIF. LOOP AT t_e07t_save INTO s_e07t. READ TABLE t_edit_ot ASSIGNING <fs_edit_ot2> WITH KEY korrnum = s_e07t-trkorr. IF sy-subrc = 0. <fs_edit_ot2>-text = s_e07t-as4text. ENDIF. * Pour l'OT et les tches le composant (si indiqu en slection) LOOP AT t_edit_tree ASSIGNING <fs_edit> WHERE korrnum = s_e07t-trkorr OR tache = s_e07t-trkorr. Modification affichage w_node_key = <fs_edit>-node_key. ls_edit = <fs_edit>. ls_edit-text = s_e07t-as4text. CALL METHOD g_tree->change_node EXPORTING i_node_key = w_node_key i_outtab_line = ls_edit.

Modification du libell <fs_edit>-text = s_e07t-as4text. IF <fs_edit>-korrnum = <fs_edit>-tache OR <fs_edit>-tache IS INITIAL. s_e07t-trkorr = <fs_edit>-korrnum. ELSE. s_e07t-trkorr = <fs_edit>-tache. ENDIF. CALL FUNCTION 'TRINT_UPDATE_COMM_HEADER' EXPORTING wi_e07t = s_e07t wi_sel_e07t = 'X' EXCEPTIONS e070_update_error = 1 e07t_update_error = 2 e070c_update_error = 3 e070m_update_error = 4 OTHERS = 5. IF sy-subrc <> 0. CONTINUE. ENDIF. READ TABLE t_e07t ASSIGNING <fs_e07t> WITH KEY trkorr = s_e07t-trkorr langu = sy-langu. IF sy-subrc = 0. <fs_e07t>-as4text = s_e07t-as4text. ENDIF. ENDLOOP. ENDLOOP. REFRESH t_e07t_save. CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. "#EC *

ENDFORM.

" save_libelle

*&---------------------------------------------------------------------* *& Form display_doublons *&---------------------------------------------------------------------* * Affichages des objets en double *----------------------------------------------------------------------* FORM display_doublons TABLES lt_display TYPE ty_doublons. DATA: l_dialogbox_container TYPE REF TO cl_gui_dialogbox_container. DATA: lt_fieldcat TYPE slis_t_fieldcat_alv, lt_fieldcat_lvc TYPE lvc_t_fcat, ls_layout TYPE lvc_s_layo, l_caption TYPE char30. FIELD-SYMBOLS: <doublon> TYPE ty_doublon, <fieldcat> TYPE lvc_s_fcat. * Code source, domaines, lt de donnes : tout en R3TR

IF NOT p_fusio IS INITIAL. LOOP AT lt_display ASSIGNING <doublon> WHERE pgmid = 'LIMU'. IF <doublon>-object = 'REPS'. <doublon>-pgmid = 'R3TR'. <doublon>-object = 'PROG'. ELSEIF <doublon>-object = 'DOMD'. <doublon>-pgmid = 'R3TR'. <doublon>-object = 'DOMA'. ELSEIF <doublon>-object = 'DTED'. <doublon>-pgmid = 'R3TR'. <doublon>-object = 'DTEL'. ENDIF. ENDLOOP. ENDIF. SORT lt_display BY trkorr pgmid object obj_name. DELETE ADJACENT DUPLICATES FROM lt_display COMPARING trkorr pgmid object obj_name. * Lecture de la structure de T_EDIT CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-cprog i_internal_tabname = 'T_DOUBLON' i_inclname = sy-cprog CHANGING ct_fieldcat = lt_fieldcat[] EXCEPTIONS inconsistent_interface = 0 program_error = 0 OTHERS = 0. CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS' EXPORTING it_fieldcat_alv = lt_fieldcat[] IMPORTING et_fieldcat_lvc = lt_fieldcat_lvc[] TABLES it_data = lt_display[] EXCEPTIONS it_data_missing = 0 OTHERS = 0. READ TABLE lt_fieldcat_lvc ASSIGNING <fieldcat> WITH KEY fieldname = 'BOX'. IF sy-subrc = 0. IF w_mode = 'C'. <fieldcat>-no_out = 'X'. ELSE. <fieldcat>-col_pos = 0. <fieldcat>-checkbox = 'X'. <fieldcat>-edit = 'X'. ENDIF. ENDIF. IF w_mode = 'D'. l_caption = 'Suppression des doublons'(t83). ELSEIF w_mode = 'C'. l_caption = 'Risques de dpendances'(u10).

ELSE. l_caption = 'Objets temporaires'(t84). ENDIF. * Utilisation d'un container de type dialogbox CREATE OBJECT l_dialogbox_container EXPORTING top = 50 left = 150 lifetime = cntl_lifetime_dynpro caption = l_caption width = 400 height = 400. CREATE OBJECT g_alv_grid_dbl EXPORTING i_parent = l_dialogbox_container. * Enregistrement des venements 'CLOSE', 'TOOLBAR' et 'USER_COMMAND' SET HANDLER g_event_receiver->handle_close FOR l_dialogbox_container. SET HANDLER g_event_receiver->m_toolbar2 FOR g_alv_grid_dbl. SET HANDLER g_event_receiver->m_user_command2 FOR g_alv_grid_dbl. * Affichage du popup d'information CLEAR ls_layout. ls_layout-cwidth_opt = 'X'. CALL METHOD g_alv_grid_dbl->set_table_for_first_display EXPORTING is_layout = ls_layout CHANGING it_fieldcatalog = lt_fieldcat_lvc[] it_outtab = lt_display[]. CALL METHOD cl_gui_control=>set_focus EXPORTING control = g_alv_grid_dbl. ENDFORM. " display_doublons

*&---------------------------------------------------------------------* *& Form suppr_fct *&---------------------------------------------------------------------* * Suppression des fonctions inutiles *----------------------------------------------------------------------* FORM suppr_fct TABLES ft_toolbar TYPE ttb_button. DELETE ft_toolbar WHERE function = '&REFRESH' OR function = '&INFO' OR function = '&&SEP00' OR function = '&CHECK' OR function = '&&SEP01' OR function = '&LOCAL&CUT' OR function = '&LOCAL&COPY' OR function = '&LOCAL&PASTE' OR function = '&LOCAL&UNDO' OR function = '&&SEP02' OR function = '&LOCAL&APPEND' OR function = '&LOCAL&INSERT_ROW' OR function = '&LOCAL&DELETE_ROW' OR function = '&LOCAL&COPY_ROW' OR function = '&MB_SUM' OR function = '&MB_SUBTOT'

ENDFORM.

OR function = '&&SEP05' OR function = '&GRAPH' OR function = '&&SEP07'. " suppr_fct

*&---------------------------------------------------------------------* *& Form delete_object *&---------------------------------------------------------------------* * Suppression d'objets d'un ordre *----------------------------------------------------------------------* FORM delete_object USING fs_e071 TYPE e071. DATA : ls_request TYPE trwbo_request. ls_request-h-trkorr = fs_e071-trkorr. * Change user PERFORM change_user USING fs_e071-trkorr 'X'. CALL FUNCTION 'TR_DELETE_COMM_OBJECT_KEYS' "#EC * EXPORTING is_e071_delete = fs_e071 iv_dialog_flag = ' ' CHANGING cs_request = ls_request EXCEPTIONS e_database_access_error = 1 e_empty_lockkey = 2 e_bad_target_request = 3 e_wrong_source_client = 4 n_no_deletion_of_c_objects = 5 n_no_deletion_of_corr_entry = 6 n_object_entry_doesnt_exist = 7 n_request_already_released = 8 n_request_from_other_system = 9 r_action_aborted_by_user = 10 r_foreign_lock = 11 w_bigger_lock_in_same_order = 12 w_duplicate_entry = 13 w_no_authorization = 14 w_user_not_owner = 15 OTHERS = 16. IF sy-subrc = 0. DELETE t_e071 WHERE trkorr = fs_e071-trkorr AND object = fs_e071-object AND obj_name = fs_e071-obj_name. IF NOT p_arbo IS INITIAL. * Suppression du noeud LOOP AT t_edit INTO s_edit WHERE ( korrnum = fs_e071-trkorr OR tache = fs_e071-trkorr ) AND object = fs_e071-object AND objname = fs_e071-obj_name. CHECK NOT s_edit-node_key IS INITIAL. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = s_edit-node_key. ENDLOOP. ENDIF. DELETE t_edit WHERE korrnum = fs_e071-trkorr AND object = fs_e071-object AND objname = fs_e071-obj_name. DELETE t_edit WHERE tache = fs_e071-trkorr

AND object = fs_e071-object AND objname = fs_e071-obj_name. ENDIF. * Re-set original user PERFORM change_user USING fs_e071-trkorr ' '. ENDFORM. " delete_object

*&---------------------------------------------------------------------* *& Form TRANSLATE_COLOR *&---------------------------------------------------------------------* * Conversions couleurs ALV Grid / ALV Tree *----------------------------------------------------------------------* FORM translate_color USING p_from TYPE i p_int TYPE lvc_int "#EC * p_to TYPE i. * Couleurs dans ALV Tree : * 1 : Ecriture noire * 2 : Ecriture Bleue * 3 : Ecriture grise * 4 : Ecriture rouge * 5 : Fond rouge * 6 : Fond vert * 7 : Fond jaune * 8 : Fond Bleu * 9 : Fond bleu/gris * 10: Fond Orange CASE p_from. WHEN 1. "Bleu : OT non transport p_to = 8. WHEN 3. "Jaune : OT suprieur (historique) p_to = 7. WHEN 4. "Bleu/Vert : OT non transport (historique) p_to = 9. WHEN 5. "Vert : Ordre transport p_to = 6. WHEN 6. "Rouge : Transport en erreur p_to = 5. WHEN 7. "Orange : Transport en warning p_to = 10. ENDCASE. ENDFORM. " TRANSLATE_COLOR *&---------------------------------------------------------------------* *& Form double_objects *&---------------------------------------------------------------------* * Doubler les entres LIMU / R3TR *----------------------------------------------------------------------* FORM double_objects TABLES pt_e071 TYPE ty_e071 "#EC * USING ps_e071 TYPE e071 p_flag TYPE c. CHECK ps_e071-pgmid = 'LIMU' OR ps_e071-pgmid = 'R3TR'. IF ps_e071-object = 'PROG'. ps_e071-pgmid = 'LIMU'. ps_e071-object = 'REPS'. APPEND ps_e071 TO pt_e071. IF p_flag = 'X'. ps_e071-object = 'REPT'.

APPEND ps_e071 TO pt_e071. ps_e071-object = 'REPO'. APPEND ps_e071 TO pt_e071. ENDIF. ELSEIF ps_e071-object = 'REPS'. ps_e071-object = 'PROG'. ps_e071-pgmid = 'R3TR'. APPEND ps_e071 TO pt_e071. ELSEIF ps_e071-object = 'DTEL'. ps_e071-object = 'DTED'. ps_e071-pgmid = 'LIMU'. APPEND ps_e071 TO pt_e071. ELSEIF ps_e071-object = 'DTED'. ps_e071-object = 'DTEL'. ps_e071-pgmid = 'R3TR'. APPEND ps_e071 TO pt_e071. ELSEIF ps_e071-object = 'DOMA'. ps_e071-object = 'DOMD'. ps_e071-pgmid = 'LIMU'. APPEND ps_e071 TO pt_e071. ELSEIF ps_e071-object = 'DOMD'. ps_e071-object = 'DOMA'. ps_e071-pgmid = 'R3TR'. APPEND ps_e071 TO pt_e071. ENDIF. ENDFORM. " double_objects

*&---------------------------------------------------------------------* *& Form change_user *&---------------------------------------------------------------------* * Modification du propritaire d'un ordre *----------------------------------------------------------------------* FORM change_user USING p_trkorr TYPE trkorr p_init TYPE c. DATA: l_user TYPE tr_as4user. IF p_init = 'X'. l_user = sy-uname. SELECT SINGLE as4user FROM e070 INTO w_user WHERE trkorr = p_trkorr. ELSE. l_user = w_user. ENDIF. IF w_user <> sy-uname. CALL FUNCTION 'TRINT_CHANGE_USERNAME' EXPORTING wi_dialog = ' ' wi_trkorr = p_trkorr wi_user = l_user EXCEPTIONS already_released = 0 e070_update_error = 0 file_access_error = 0 not_exist_e070 = 0 user_does_not_exist = 0 unallowed_user = 0 user_not_authorized = 0 wrong_client = 0 "#EC *

OTHERS ENDIF. ENDFORM.

= 0. " change_user

*&---------------------------------------------------------------------* *& Form delete_from_e070 *&---------------------------------------------------------------------* * Suppression des entres des ordres non pertinents *----------------------------------------------------------------------* FORM delete_from_e070 TABLES pt_e070 STRUCTURE e070. * On ne prends pas les tches d'ordres librs DELETE pt_e070 WHERE NOT strkorr = space AND trstatus IN r_statut_lib. * On ne prends pas les types d'OT indiqus en slection. DELETE pt_e070 WHERE trfunction IN r_typeot. * On ne prends pas les ordres standard DELETE pt_e070 WHERE trkorr(3) = 'SAP'. ENDFORM. " delete_from_e070 *&---------------------------------------------------------------------* *& Form repr_join *&---------------------------------------------------------------------* * Reprise d'objets et fusion d'ordres *----------------------------------------------------------------------* FORM repr_join_pack USING f_ucomm TYPE syucomm f_tree TYPE flag. DATA: lt_requests TYPE trwbo_request_headers, ls_requests TYPE trwbo_request_header, l_node_key TYPE lvc_nkey, l_answer TYPE flag, lt_request TYPE strhi_requests_wd, ls_request TYPE strhi_request_wd, lt_e071_bis TYPE TABLE OF e071, lt_e071k_bis TYPE TABLE OF e071k, l_to_order TYPE trparflag, l_function TYPE trfunction, l_error TYPE flag. * Liste par OT non dtaille : reprise de tous les objets de l'OT IF f_tree = 'X'. * Alimentation de la liste d'OT CHECK NOT t_ranges-trkorr[] IS INITIAL. REFRESH lt_requests. CALL FUNCTION 'TRINT_SELECT_REQUESTS' EXPORTING iv_username_pattern = '' IMPORTING et_requests = lt_requests CHANGING cs_ranges = t_ranges EXCEPTIONS action_aborted_by_user = 0 OTHERS = 0. CHECK NOT lt_requests[] IS INITIAL. LOOP AT lt_requests INTO ls_requests . ls_request-h = ls_requests. ls_request-objects_filled = space. APPEND ls_request TO lt_request. ENDLOOP.

ENDIF. REFRESH : t_doublon, t_e071k_bis. * OT Global : objets contenus dans t_e071_bis IF f_ucomm <> 'PACK'. REFRESH : t_e071_bis. ENDIF. * Reprise : Demande de cration d'OT IF ( f_ucomm = 'REPR' OR f_ucomm = 'PACK' ) AND w_target_request IS INITIAL. PERFORM ask_order USING w_target_request f_tree. IF w_target_request IS INITIAL. EXIT. ENDIF. ENDIF. * IF f_ucomm = 'REPR'. Lecture de la liste d'objet IF f_tree = 'X'. SELECT * FROM e071 INTO TABLE t_e071_bis FOR ALL ENTRIES IN lt_requests WHERE trkorr = lt_requests-trkorr AND NOT object IN r_type. ELSE. CHECK NOT t_objects[] IS INITIAL. SELECT * FROM e071 INTO TABLE t_e071_bis FOR ALL ENTRIES IN t_objects WHERE trkorr = t_objects-trkorr AND pgmid = t_objects-pgmid AND object = t_objects-object AND obj_name = t_objects-obj_name AND objfunc = t_objects-objfunc. SELECT * FROM e071k INTO TABLE t_e071k_bis FOR ALL ENTRIES IN t_objects WHERE trkorr = t_objects-trkorr AND pgmid = t_objects-pgmid AND object = t_objects-object AND objname = t_objects-obj_name(30). ENDIF. * * * * * * Recherche des objets dans les OT non librs IF NOT t_e071_bis[] IS INITIAL. SORT t_e071_bis BY pgmid object obj_name. Pour les programmes : doubler les entres R3TR/PROG et LIMU/REPS Pour le DDIC : doubler les entres R3TR/DTEL et LIMU/DTED doubler les entres R3TR/DOMA et LIMU/DOMD t_e071_tmp[] = t_e071_bis[]. IF NOT p_fusio IS INITIAL. LOOP AT t_e071_bis INTO s_e071_bis WHERE object = 'PROG' OR object = 'REPS' OR object = 'DTEL' OR object = 'DTED' OR object = 'DOMA' OR object = 'DOMD'. PERFORM double_objects TABLES t_e071_tmp

USING s_e071_bis ' '. ENDLOOP. ENDIF. SELECT a~pgmid a~object a~obj_name a~trkorr FROM e071 AS a INNER JOIN e070 AS b ON b~trkorr = a~trkorr INTO TABLE t_doublon FOR ALL ENTRIES IN t_e071_tmp WHERE a~pgmid = t_e071_tmp-pgmid AND a~object = t_e071_tmp-object AND a~obj_name = t_e071_tmp-obj_name AND a~objfunc <> 'D' AND NOT b~trstatus IN r_statut_lib. ENDIF. ENDIF. * Reprise des objects IF f_tree = 'X'. CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT' EXPORTING titel = 'Reprise des objects'(t98) textline1 = 'Dans l''cran suivant, slectionner les ordres'(t63) textline2 = 'et appuyer sur le bouton "Merge".'(t66). CALL FUNCTION 'TRINT_DISPLAY_REQUESTS' EXPORTING iv_title = 'Reprise d''objets'(t13) iv_cua_status = 'TDR_MERG' it_requests = lt_request iv_target_request = w_target_request. ELSE. SORT t_e071_bis BY pgmid object obj_name. DELETE ADJACENT DUPLICATES FROM t_e071_bis COMPARING pgmid object obj_name. SORT t_e071k_bis BY pgmid object objname tabkey. DELETE ADJACENT DUPLICATES FROM t_e071k_bis COMPARING pgmid object objname tabkey. * Check target request type SELECT SINGLE trfunction FROM e070 INTO l_function WHERE trkorr = w_target_request. IF NOT sy-subrc = 0. MESSAGE e701(bc) WITH 'Wrong order'(m19). ENDIF. IF NOT l_function CA 'QRS'. "Pas une tche l_to_order = 'X'. ELSE. CLEAR l_to_order. ENDIF. LOOP AT t_e071_bis INTO s_e071_bis. REFRESH : lt_e071_bis, lt_e071k_bis. LOOP AT t_e071k_bis INTO s_e071k WHERE pgmid = s_e071_bis-pgmid AND object = s_e071_bis-object AND objname = s_e071_bis-obj_name(30).

APPEND s_e071k TO lt_e071k_bis. ENDLOOP. APPEND s_e071_bis TO lt_e071_bis. * DO. Ajout des objets l'OT de destination CALL FUNCTION 'TRINT_APPEND_TO_COMM_ARRAYS' EXPORTING wi_suppress_key_check = 'X' wi_trkorr = w_target_request iv_append_at_order = l_to_order iv_append_at_order_with_lock = l_to_order iv_no_owner_check = 'X' TABLES wt_e071 = lt_e071_bis wt_e071k = lt_e071k_bis EXCEPTIONS key_check_keysyntax_error = 1 ob_check_obj_error = 2 tr_lockmod_failed = 3 tr_lock_enqueue_failed = 4 tr_wrong_order_type = 5 tr_order_update_error = 6 file_access_error = 7 ob_no_systemname = 8 OTHERS = 9. IF sy-subrc = 0. DELETE t_doublon WHERE pgmid = s_e071_bis-pgmid AND object = s_e071_bis-object AND obj_name = s_e071_bis-obj_name. EXIT. ELSE. Already in an order IF sy-msgno = '310'. s_e071_bis-trkorr = sy-msgv2. DATA : l_titlebar TYPE char100. CONCATENATE 'Objet'(m22) s_e071_bis-object s_e071_bis-obj_name 'dj dans un OT'(m23) INTO l_titlebar SEPARATED BY space. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = l_titlebar text_question = 'Voulez-vous le supprimer de l''OT ?'(m24) text_button_1 = 'Oui' text_button_2 = 'Non' IMPORTING answer = l_answer EXCEPTIONS text_not_found = 0 OTHERS = 0. IF l_answer = 1. PERFORM delete_object USING s_e071_bis. ELSE. l_error = 'X'. DELETE t_doublon WHERE pgmid = s_e071_bis-pgmid AND object = s_e071_bis-object AND obj_name = s_e071_bis-obj_name. EXIT.

ENDIF. ELSE. l_error = 'X'. DELETE t_doublon WHERE pgmid = s_e071_bis-pgmid AND object = s_e071_bis-object AND obj_name = s_e071_bis-obj_name. * Autre erreur IF sy-ucomm = '5'. MESSAGE i701(bc) WITH 'Changez le type de tche de destination'(m26). ELSE. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. EXIT. ENDIF. ENDIF. ENDDO. ENDLOOP. IF sy-subrc = 0 AND l_error IS INITIAL. MESSAGE i701(bc) WITH 'Done'(m20). ENDIF. ENDIF. * Reprise : Suppression des doublons IF NOT t_doublon[] IS INITIAL. w_request_new = w_target_request. w_mode = 'D'. CALL SELECTION-SCREEN 0200. ENDIF. * Fusion : suppression des OT d'origine. IF f_ucomm = 'JOIN'. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Suppression'(t50) text_question = 'Supprimer les OT d''origine ?'(t58) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) display_cancel_button = ' ' IMPORTING answer = l_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. CHECK sy-subrc = 0. IF l_answer = '1'. SORT lt_requests BY trfunction DESCENDING. LOOP AT lt_requests INTO ls_requests. * Suppression des objets contenus dans l'ordre LOOP AT t_e071 INTO s_e071_bis WHERE trkorr = ls_requests-trkorr AND NOT object IN r_type. PERFORM delete_object USING s_e071_bis. CHECK sy-subrc = 0.

ENDLOOP. * Suppression de l'ordre PERFORM change_user USING ls_requests-trkorr ' '. CALL FUNCTION 'TR_DELETE_COMM' EXPORTING wi_dialog = 'X' wi_trkorr = ls_requests-trkorr EXCEPTIONS OTHERS = 1. IF sy-subrc = 0. LOOP AT t_edit_tree INTO s_edit WHERE korrnum = ls_requests-trkorr OR tache = ls_requests-trkorr. Suppression du noeud CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = s_edit-node_key EXCEPTIONS node_key_not_in_model = 0 OTHERS = 0. ENDLOOP.

"#EC *

DELETE t_e071 WHERE trkorr = ls_requests-trkorr. DELETE t_edit WHERE korrnum = ls_requests-trkorr AND tache IS INITIAL. DELETE t_edit WHERE tache = ls_requests-trkorr. DELETE t_edit_ot WHERE korrnum = ls_requests-trkorr. ENDIF. ENDLOOP. ENDIF. ENDIF. * Blocage des objets de l'ordre de destination IF NOT w_target_request IS INITIAL. CALL FUNCTION 'TR_LOCK_REQUEST' EXPORTING iv_trkorr = w_target_request iv_success_message = '' EXCEPTIONS error_occured = 0 wrong_call = 0 OTHERS = 0. ENDIF. COMMIT WORK. * Mise a jour de l'affichage REFRESH t_e070_bis. IF f_tree = 'X'. SELECT * FROM e070 INTO TABLE t_e070_bis FOR ALL ENTRIES IN lt_requests WHERE trkorr = lt_requests-trkorr. ELSEIF f_ucomm <> 'PACK'. SORT t_objects BY trkorr. DELETE ADJACENT DUPLICATES FROM t_objects COMPARING trkorr. SELECT * FROM e070 INTO TABLE t_e070_bis FOR ALL ENTRIES IN t_objects WHERE trkorr = t_objects-trkorr.

ENDIF. READ TABLE t_e070 INTO s_e070 WITH KEY trkorr = w_target_request. IF sy-subrc = 0. APPEND s_e070 TO t_e070_bis. ENDIF. LOOP AT t_e070_bis INTO s_e070. DELETE t_e071 WHERE trkorr = s_e070-trkorr. IF NOT p_arbo IS INITIAL. * Suppression du noeud LOOP AT t_edit INTO s_edit WHERE korrnum = s_e070-trkorr OR tache = s_e070-trkorr. CHECK NOT s_edit-node_key IS INITIAL. CALL METHOD g_tree->delete_subtree EXPORTING i_node_key = s_edit-node_key EXCEPTIONS node_key_not_in_model = 0 OTHERS = 0. ENDLOOP. ENDIF. DELETE t_edit WHERE korrnum = s_e070-trkorr AND tache IS INITIAL. DELETE t_edit WHERE tache = s_e070-trkorr. DELETE t_edit_ot WHERE korrnum = s_e070-trkorr. ENDLOOP. IF NOT t_e070_bis[] IS INITIAL. SELECT * FROM e071 APPENDING TABLE t_e071 FOR ALL ENTRIES IN t_e070_bis WHERE trkorr = t_e070_bis-trkorr AND obj_name IN s_obj AND NOT object IN r_type AND objfunc <> 'D'. SORT t_e071 BY trkorr. ENDIF. LOOP AT t_e070_bis INTO s_e070. CLEAR l_node_key. IF NOT p_arbo IS INITIAL. READ TABLE t_edit_tree INTO s_edit WITH KEY korrnum = s_e070-trkorr. IF sy-subrc = 0. l_node_key = s_edit-node_key. ELSE. READ TABLE t_edit_tree INTO s_edit WITH KEY tache = s_e070-trkorr. IF sy-subrc = 0. l_node_key = s_edit-node_key. ENDIF. ENDIF. ENDIF. PERFORM fill_edit TABLES t_edit USING s_e070 'X' l_node_key. ENDLOOP. DELETE t_edit WHERE type IS INITIAL AND objname IS INITIAL. SORT t_edit_ot BY korrnum. DELETE ADJACENT DUPLICATES FROM t_edit_ot COMPARING korrnum.

t_edit_ot_disp[] = t_edit_ot[]. DELETE t_edit_ot_disp WHERE NOT korrnum IN r_ordre. t_edit_disp[] = t_edit[]. DELETE t_edit_disp WHERE NOT korrnum IN r_ordre. DELETE t_edit_disp WHERE NOT tache IN r_tache. IF NOT w_sorted IS INITIAL. SORT t_edit_disp BY type objname value. DELETE ADJACENT DUPLICATES FROM t_edit_disp COMPARING type objname value. ENDIF. ENDFORM. " repr_join

*&---------------------------------------------------------------------* *& Form create_order *&---------------------------------------------------------------------* * Creation d'un ordre *----------------------------------------------------------------------* FORM create_order USING f_proj TYPE tr_extpid. DATA: l_trfunction TYPE e070-trfunction, lt_users TYPE trwbo_users, ls_users TYPE trwbo_user, l_node_key TYPE lvc_nkey, l_node_key2 TYPE lvc_nkey, l_node_key3 TYPE lvc_nkey, l_attributes TYPE e070a. CLEAR : s_new_request, t_new_tasks[]. IF NOT f_proj IS INITIAL. l_attributes-attribute = 'SAP_CTS_PROJECT'. l_attributes-reference = f_proj. ENDIF. * Choix du type d'OT CALL FUNCTION 'TR_POPUP_SELECT_REQUEST_TYPE' EXPORTING iv_trfunctions = 'KW' IMPORTING ev_trfunction = l_trfunction EXCEPTIONS action_aborted_by_user = 1 OTHERS = 2. CHECK sy-subrc = 0. CLEAR s_sort. IF NOT p_se10 IS INITIAL. READ TABLE t_sort INTO s_sort WITH KEY trfunction = l_trfunction liber = '.'. IF sy-subrc <> 0. READ TABLE t_sort INTO s_sort WITH KEY trfunction = l_trfunction. ENDIF. ELSEIF NOT p_proj IS INITIAL. IF f_proj IS INITIAL. f_proj = 'Without project'(t67). ENDIF. READ TABLE t_sort INTO s_sort WITH KEY user = sy-uname proj = f_proj liber = space. IF sy-subrc <> 0. READ TABLE t_sort INTO s_sort WITH KEY proj = f_proj

liber = space. ENDIF. ELSE. READ TABLE t_sort INTO s_sort WITH KEY user = sy-uname liber = space. ENDIF. l_node_key = s_sort-node_key. ls_users-user = sy-uname. APPEND ls_users TO lt_users. * Cration d'un OT CALL FUNCTION 'TR_REQUEST_MODIFY' EXPORTING iv_action = 'CREA' iv_new_request_type = l_trfunction iv_new_task_type = 'S' it_users = lt_users is_new_attribute = l_attributes IMPORTING es_new_request = s_new_request et_new_tasks = t_new_tasks EXCEPTIONS cancelled_by_user = 1 no_authorization = 2 invalid_action = 3 invalid_request = 4 invalid_request_type = 5 request_not_created = 6 request_not_deleted = 7 enqueue_failed = 8 db_access_error = 9 OTHERS = 10. IF NOT sy-subrc = 0. CLEAR s_new_request. EXIT. ELSE. COMMIT WORK. ENDIF. * Ajout de l'OT l'arbre SELECT * FROM e07t APPENDING TABLE t_e07t WHERE trkorr = s_new_request-trkorr. IF NOT p_pro IS INITIAL. SELECT * FROM e070a APPENDING TABLE t_e070a WHERE trkorr = s_new_request-trkorr. ENDIF. MOVE-CORRESPONDING s_new_request TO s_e070. APPEND s_e070 TO t_e070. PERFORM fill_edit TABLES t_edit USING s_e070 'X' ''. READ TABLE t_edit INTO s_edit WITH KEY korrnum = s_e070-trkorr. PERFORM add_node_ot USING l_node_key s_edit l_node_key2 cl_gui_column_tree=>relat_first_child ''. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY korrnum = s_edit-korrnum tache = s_edit-tache. IF sy-subrc = 0. <fs_edit>-node_key = l_node_key2. ENDIF.

* Ajout des tches LOOP AT t_new_tasks INTO s_new_tasks. * Mise en forme des donnes SELECT * FROM e07t APPENDING TABLE t_e07t WHERE trkorr = s_new_tasks-trkorr. MOVE-CORRESPONDING s_new_tasks TO s_e070. APPEND s_e070 TO t_e070. PERFORM fill_edit TABLES t_edit USING s_e070 'X' ''. READ TABLE t_edit INTO s_edit WITH KEY tache = s_e070-trkorr. PERFORM add_node_task USING l_node_key2 s_edit l_node_key3 ''. READ TABLE t_edit_tree ASSIGNING <fs_edit> WITH KEY korrnum = s_edit-korrnum tache = s_edit-tache. IF sy-subrc = 0. <fs_edit>-node_key = l_node_key3. ENDIF. ENDLOOP. ADD 1 TO w_cpt_open. DELETE t_edit WHERE type IS INITIAL AND objname IS INITIAL. ENDFORM. " create_order *&---------------------------------------------------------------------* *& Form lock *&---------------------------------------------------------------------* * Blocage des OT *----------------------------------------------------------------------* FORM lock USING f_korrnum TYPE trkorr. CHECK w_no_lock IS INITIAL. CALL FUNCTION 'TR_LOCK_REQUEST' EXPORTING iv_trkorr = f_korrnum iv_success_message = '' IMPORTING es_request = s_lock EXCEPTIONS error_occured = 1 wrong_call = 2 OTHERS = 3. IF sy-subrc = 0. APPEND s_lock TO t_lock. ENDIF. ENDFORM. " lock *&---------------------------------------------------------------------* *& Form unlock *&---------------------------------------------------------------------* * Deblocage des OT *----------------------------------------------------------------------* FORM unlock . LOOP AT t_lock INTO s_lock. CALL FUNCTION 'TRINT_UNLOCK_REQUEST' CHANGING cs_request = s_lock EXCEPTIONS

db_access_error = 0 object_enqueues = 0 no_authority = 0 request_not_changeable = 0 OTHERS = 0. ENDLOOP. ENDFORM. " unlock *&---------------------------------------------------------------------* *& Form refresh *&---------------------------------------------------------------------* * Refresh report display *----------------------------------------------------------------------* FORM refresh USING f_popup TYPE flag. DATA : l_node_key TYPE lvc_nkey, l_answer TYPE flag, l_edit TYPE ty_edit. IF NOT f_popup IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Donnes modifies'(u17) text_question = 'Voulez-vous raffraichir ?'(u18) text_button_1 = 'Oui'(t16) text_button_2 = 'Non'(t17) IMPORTING answer = l_answer EXCEPTIONS text_not_found = 0 OTHERS = 0. CHECK l_answer = '1'. ENDIF. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 1 text = 'Slection des donnes'(t22). PERFORM selection. PERFORM fill_data. * Re-construction de l'arborescence CALL METHOD g_tree->get_top_node IMPORTING e_node_key = l_node_key. READ TABLE t_edit_tree INTO l_edit WITH KEY node_key = l_node_key. CALL METHOD g_tree->delete_all_nodes. REFRESH : t_node_key, t_edit_tree. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 60 text = 'Construction de l''affichage'(t44). PERFORM construct_report. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING

percentage = 90 text = 'Affichage'(t46). CALL METHOD g_tree->set_visible EXPORTING visible = ''. LOOP AT t_key_expand INTO s_key_expand. w_node_key = s_key_expand. CALL METHOD g_tree->expand_node EXPORTING i_node_key = w_node_key. ENDLOOP. READ TABLE t_edit_tree INTO l_edit WITH KEY proj = l_edit-proj korrnum = l_edit-korrnum tache = l_edit-tache. IF sy-subrc = 0. l_node_key = l_edit-node_key. ELSE. l_node_key = w_first_key. ENDIF. CALL METHOD g_tree->set_top_node EXPORTING i_node_key = l_node_key. CALL METHOD g_tree->set_visible EXPORTING visible = 'X'. * Grilles ALV DELETE t_edit WHERE type IS INITIAL AND objname IS INITIAL. t_edit_disp[] = t_edit[]. SORT t_edit_ot BY liber korrnum DESCENDING. t_edit_ot_disp[] = t_edit_ot[]. * Raffraichissement CALL METHOD g_alv_grid->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_alv_grid2->refresh_table_display EXPORTING is_stable = s_stable i_soft_refresh = 'X'. CALL METHOD g_tree->frontend_update. CALL METHOD cl_gui_cfw=>flush. CLEAR w_all_selected. ENDFORM. " refresh

*&---------------------------------------------------------------------* *& Form ask_order *&---------------------------------------------------------------------* * Selection ou creation d'order *----------------------------------------------------------------------* FORM ask_order USING p_request TYPE trkorr p_no_task TYPE flag. DATA: l_answer TYPE flag.

CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = 'Slection de la destination'(t41) text_question = 'Voulez-vous slectionner ou crer un OT ?'(t69) text_button_1 = 'Slctionner'(t09) text_button_2 = 'Crer'(t37) IMPORTING answer = l_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. CHECK sy-subrc = 0 AND l_answer <> 'A'. * IF l_answer = '1'. Slection d'un OT DO. CALL FUNCTION 'TR_POPUP_INPUT_REQUEST' EXPORTING iv_title = 'Slection d''OT'(t11) IMPORTING ev_trkorr = p_request EXCEPTIONS action_aborted_by_user = 1 OTHERS = 2. IF sy-subrc <> 0. CLEAR p_request. EXIT. ENDIF. IF p_request NS '*'. EXIT. ENDIF. ENDDO. ELSEIF l_answer = '2'. * Creation d'un OT PERFORM create_order USING ''.

CHECK NOT s_new_request-trkorr IS INITIAL. IF p_no_task = 'X'. * Reprise d'ordre : Les objets ne peuvent tre repris * que dans un OT, pas dans une tache p_request = s_new_request-trkorr. ELSE. READ TABLE t_new_tasks INTO s_new_tasks INDEX 1. IF sy-subrc = 0. p_request = s_new_tasks-trkorr. ENDIF. ENDIF. ENDIF. ENDFORM. " ask_order

*&---------------------------------------------------------------------* *& Form fill_rs_ordre *&---------------------------------------------------------------------* * Search order to display *----------------------------------------------------------------------* FORM fill_rs_ordre USING p_object TYPE flag.

DATA : ls_edit TYPE ty_edit, l_objname TYPE vrsd_old-objname, l_trstatus TYPE trstatus, lt_versno TYPE TABLE OF vrsn, lt_version_list TYPE TABLE OF vrsd_old, ls_version_list TYPE vrsd_old. CLEAR rs_ordre. rs_ordre-sign = 'I'. rs_ordre-option = 'EQ'. IF NOT s_edit-korrnum IS INITIAL. rs_ordre-low = s_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT s_edit-tache IS INITIAL AND NOT s_edit-tache = s_edit-korrnum. rs_ordre-low = s_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. EXIT. ENDIF. IF NOT s_edit-user IS INITIAL. LOOP AT t_edit_tree INTO ls_edit WHERE user = s_edit-user. CHECK NOT ls_edit-korrnum IS INITIAL. IF NOT p_proj IS INITIAL. IF s_edit-proj = 'Without project'(t67). CLEAR s_edit-proj. ENDIF. CHECK ls_edit-proj = s_edit-proj. ENDIF. rs_ordre-low = ls_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT ls_edit-tache IS INITIAL AND NOT ls_edit-tache = ls_edit-korrnum. rs_ordre-low = ls_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. ENDLOOP. EXIT. ENDIF. IF NOT s_edit-proj IS INITIAL. LOOP AT t_edit_tree INTO ls_edit WHERE proj = s_edit-proj. CHECK NOT ls_edit-korrnum IS INITIAL. rs_ordre-low = ls_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT ls_edit-tache IS INITIAL AND NOT ls_edit-tache = ls_edit-korrnum. rs_ordre-low = ls_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. ENDLOOP. EXIT. ENDIF. IF NOT s_edit-liber IS INITIAL.

IF s_edit-liber = '.'. CLEAR s_edit-liber. ENDIF. LOOP AT t_edit_tree INTO ls_edit WHERE liber = s_edit-liber AND trfunction = s_edit-trfunction. CHECK NOT ls_edit-korrnum IS INITIAL. rs_ordre-low = ls_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT ls_edit-tache IS INITIAL AND NOT ls_edit-tache = ls_edit-korrnum. rs_ordre-low = ls_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. ENDLOOP. EXIT. ENDIF. IF NOT s_edit-trfunction IS INITIAL. LOOP AT t_edit_tree INTO ls_edit WHERE trfunction = s_edit-trfunction. CHECK NOT ls_edit-korrnum IS INITIAL. rs_ordre-low = ls_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT ls_edit-tache IS INITIAL AND NOT ls_edit-tache = ls_edit-korrnum. rs_ordre-low = ls_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. ENDLOOP. EXIT. ENDIF. IF NOT s_edit-objname IS INITIAL. p_object = 'X'. LOOP AT t_edit INTO ls_edit WHERE type = s_edit-type AND objname = s_edit-objname. CHECK NOT ls_edit-korrnum IS INITIAL. rs_ordre-low = ls_edit-korrnum. APPEND rs_ordre TO r_ordre. IF NOT ls_edit-tache IS INITIAL AND NOT ls_edit-tache = ls_edit-korrnum. rs_ordre-low = ls_edit-tache. APPEND rs_ordre TO r_tache. ENDIF. APPEND rs_ordre TO r_ordre2. ENDLOOP. * Recherche de l'historique l_objname = s_edit-objname. CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY' EXPORTING objname = l_objname objtype = s_edit-object TABLES lversno_list = lt_versno version_list = lt_version_list EXCEPTIONS

no_entry = 1 OTHERS = 2. IF sy-subrc = 0. REFRESH t_edit_ot_disp. LOOP AT lt_version_list INTO ls_version_list. CHECK NOT ls_version_list-korrnum IS INITIAL. READ TABLE t_edit_ot INTO s_edit_ot WITH KEY korrnum = ls_version_list-korrnum. IF sy-subrc = 0. APPEND s_edit_ot TO t_edit_ot_disp. CONTINUE. ENDIF. CLEAR s_edit_ot. SELECT SINGLE trstatus FROM e070 INTO l_trstatus WHERE trkorr = ls_version_list-korrnum. IF l_trstatus IN r_statut_lib. MOVE 'X' TO s_edit_ot-liber. ENDIF. SELECT SINGLE as4text FROM e07t INTO s_edit_ot-text WHERE trkorr = ls_version_list-korrnum AND langu = sy-langu. s_edit_ot-korrnum = ls_version_list-korrnum. s_edit_ot-user = ls_version_list-author. CLEAR s_style. s_style-style = cl_gui_alv_grid=>mc_style_disabled. s_style-fieldname = 'TEXT'. APPEND s_style TO s_edit_ot-style. CLEAR ls_edit. PERFORM read_cofile USING s_edit_ot-korrnum ls_edit. s_edit_ot-button = icon_history. s_edit_ot-retcode = ls_edit-retcode. s_edit_ot-transp = ls_edit-transp. s_edit_ot-r7 = ls_edit-r7. s_edit_ot-time_r7 = ls_edit-time_r7. APPEND s_edit_ot TO t_edit_ot_disp. ENDLOOP. PERFORM colorize_ot TABLES t_edit_ot_disp USING 1. ENDIF. EXIT. ENDIF. ENDFORM. " fill_rs_ordre

*&---------------------------------------------------------------------* *& Form add_header_node *&---------------------------------------------------------------------* * Ajout des enttes manquantes (SE10) *----------------------------------------------------------------------* FORM add_header_node USING p_type TYPE trfunction. DATA: l_node_text TYPE lvc_value, ls_node TYPE lvc_s_layn, l_node_key TYPE lvc_nkey, l_node_key0 TYPE lvc_nkey. READ TABLE t_sort INTO s_sort WITH KEY trfunction = p_type. IF sy-subrc = 0. l_node_key = s_sort-node_key. ELSE. * Add node

CLEAR s_dd07t. READ TABLE t_dd07t INTO s_dd07t WITH KEY domvalue_l = p_type BINARY SEARCH. CONCATENATE p_type s_dd07t-ddtext INTO l_node_text SEPARATED BY ' - '. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: s_edit. s_edit-trfunction = l_node_text. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = '' i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = s_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key. APPEND l_node_key TO t_node_key. CLEAR s_sort. s_sort-trfunction = p_type. s_sort-node_key = l_node_key. APPEND s_sort TO t_sort. ENDIF. READ TABLE t_sort INTO s_sort WITH KEY trfunction = p_type liber = '.'. IF NOT sy-subrc = 0. * Add node MOVE 'Modifiable'(u07) TO l_node_text. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: s_edit. s_edit-trfunction = p_type. s_edit-liber = '.'. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = l_node_key i_relationship = cl_gui_column_tree=>relat_first_child i_node_text = l_node_text is_outtab_line = s_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key0. APPEND l_node_key0 TO t_node_key. CLEAR s_sort. s_sort-trfunction = s_edit-trfunction(1). s_sort-liber = s_edit-liber. s_sort-node_key = l_node_key0. APPEND s_sort TO t_sort. ENDIF. READ TABLE t_sort INTO s_sort WITH KEY trfunction = p_type liber = 'X'. IF NOT sy-subrc = 0. * Add node

MOVE 'Libr'(u08) TO l_node_text. CLEAR ls_node. ls_node-isfolder = 'X'. ls_node-n_image = icon_header. ls_node-exp_image = icon_header. CLEAR: s_edit. s_edit-trfunction = p_type. s_edit-liber = 'X'. CALL METHOD g_tree->add_node EXPORTING i_relat_node_key = l_node_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = s_edit is_node_layout = ls_node IMPORTING e_new_node_key = l_node_key0. APPEND l_node_key0 TO t_node_key. CLEAR s_sort. s_sort-trfunction = s_edit-trfunction(1). s_sort-liber = s_edit-liber. s_sort-node_key = l_node_key0. APPEND s_sort TO t_sort. ENDIF. ENDFORM. " add_header_node

Vous aimerez peut-être aussi