Estimated reading time: 9 min
Objektselektionen
Programmierte Verknüpfung für HRUS_D2:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
* Klasse ZCL_HR_EXT_RELAT_AZ10 METHOD do_selection. *=========================================================== * simulate the relationship US - P from HRUS_D2 *=========================================================== TYPES: BEGIN OF ty_0105, pernr TYPE pernr_d, usrid TYPE xubname, END OF ty_0105. DATA: lt_p0105 TYPE TABLE OF ty_0105. DATA: lt_p0105_2 TYPE TABLE OF ty_0105. DATA: ls_p0105 TYPE ty_0105. DATA: ls_result TYPE p1001, ls_result_ext TYPE hri1001, lv_varyf TYPE varyf, lv_sobid TYPE sobid, lv_subty TYPE subty, lt_object TYPE STANDARD TABLE OF hrobject, ls_object TYPE hrobject, lv_use_ext TYPE flag, lv_istat TYPE istat_d. DATA: BEGIN OF ls_pernrs, pernr TYPE hrobjid, END OF ls_pernrs. DATA: lt_pernrs LIKE STANDARD TABLE OF ls_pernrs WITH DEFAULT KEY. FIELD-SYMBOLS: <ls_hrobject> TYPE hrobject, <ls_hrealo> TYPE hrealo, <ls_p0105> TYPE ty_0105. DATA: ls_substitute TYPE swragent, lt_substitutions TYPE swlttwfs. DATA: lt_hrusd2 TYPE TABLE OF hrus_d2, ls_hrusd2 TYPE hrus_d2. DATA: lv_plvar TYPE plvar. *----------------------------------------------------------- * check client *----------------------------------------------------------- IF iv_sel_mandt <> sy-mandt. RAISE EXCEPTION TYPE cx_hrbas_ext_relat EXPORTING textid = cx_hrbas_ext_relat=>cx_hrbas_ext_relat_client_spec relation = gs_t77ev_string extrelat = gs_t77ev. ENDIF. CALL FUNCTION 'RH_GET_ACTIVE_WF_PLVAR' IMPORTING act_plvar = lv_plvar EXCEPTIONS OTHERS = 0. * build up object list CLEAR: lt_object[]. IF it_sel_objects IS SUPPLIED. LOOP AT it_sel_objects ASSIGNING <ls_hrobject>. ls_object-plvar = <ls_hrobject>-plvar. ls_object-otype = <ls_hrobject>-otype. ls_object-objid = <ls_hrobject>-objid. APPEND ls_object TO lt_object. ENDLOOP. CLEAR: lv_use_ext. ENDIF. IF it_sel_objects_ext IS SUPPLIED. LOOP AT it_sel_objects_ext ASSIGNING <ls_hrealo>. ls_object-plvar = <ls_hrealo>-plvar. ls_object-otype = <ls_hrealo>-otype. ls_object-objid = <ls_hrealo>-realo. APPEND ls_object TO lt_object. ENDLOOP. lv_use_ext = 'X'. ENDIF. * determine subtype of user CALL FUNCTION 'RH_GET_HR_USER_SUBTY' EXPORTING mandt = sy-mandt IMPORTING hr_subty = lv_subty EXCEPTIONS OTHERS = 0. LOOP AT lt_object INTO ls_object WHERE otype = 'P'. ls_pernrs-pernr = ls_object-objid. APPEND ls_pernrs TO lt_pernrs. ENDLOOP. SELECT * FROM pa0105 INTO CORRESPONDING FIELDS OF TABLE lt_p0105 FOR ALL ENTRIES IN lt_pernrs "SRON2018879 WHERE pernr = lt_pernrs-pernr AND subty = lv_subty AND begda <= iv_sel_endda AND endda >= iv_sel_begda. * read HRUS_D2 SELECT * FROM hrus_d2 INTO TABLE lt_hrusd2 FOR ALL ENTRIES IN lt_p0105 WHERE us_name = lt_p0105-usrid AND ( reppr = 'ALL' OR reppr = 'PERSONAL' ) and begda <= iv_sel_endda AND endda >= iv_sel_begda. LOOP AT lt_hrusd2 INTO ls_hrusd2. IF ls_hrusd2-active IS INITIAL. ls_substitute-otype = 'US'. ls_substitute-objid = ls_hrusd2-rep_name. CALL METHOD cl_swl_substitution=>get_adopted_substitutions EXPORTING i_substitute = ls_substitute IMPORTING et_substitutions = lt_substitutions. READ TABLE lt_substitutions WITH KEY objid = ls_hrusd2-us_name TRANSPORTING NO FIELDS. IF sy-subrc <> 0. DELETE lt_hrusd2. ENDIF. ENDIF. ENDLOOP. LOOP AT lt_hrusd2 INTO ls_hrusd2. SELECT * FROM pa0105 INTO CORRESPONDING FIELDS OF ls_p0105 WHERE usrid = ls_hrusd2-rep_name AND subty = lv_subty AND begda <= iv_sel_endda AND endda >= iv_sel_begda. APPEND ls_p0105 TO lt_p0105_2. ENDSELECT. ENDLOOP. *----------------------------------------------------------- * compose external relationsip *----------------------------------------------------------- LOOP AT lt_hrusd2 INTO ls_hrusd2. READ TABLE lt_p0105_2 WITH KEY usrid = ls_hrusd2-rep_name INTO ls_p0105. IF sy-subrc EQ 0. lv_sobid = ls_p0105-pernr. CONCATENATE 'P ' lv_sobid INTO lv_varyf RESPECTING BLANKS. READ TABLE lt_p0105 WITH KEY usrid = ls_hrusd2-us_name INTO ls_p0105. IF sy-subrc = 0. IF iv_sel_istat IS INITIAL. lv_istat = '1'. ELSE. lv_istat = iv_sel_istat. ENDIF. ls_result-mandt = iv_sel_mandt. ls_result-plvar = lv_plvar. ls_result-otype = 'P'. ls_result-objid = ls_p0105-pernr. ls_result-infty = '1001'. ls_result-rsign = 'A'. ls_result-relat = 'Z10'. ls_result-istat = lv_istat. ls_result-priox = 'X'. ls_result-begda = ls_hrusd2-begda. ls_result-endda = ls_hrusd2-endda. ls_result-varyf = lv_varyf. ls_result-reasn = space. ls_result-histo = space. ls_result-sclas = 'P'. ls_result-sobid = lv_sobid. IF lv_use_ext = 'X'. MOVE-CORRESPONDING ls_result TO ls_result_ext. APPEND ls_result_ext TO et_i1001. ELSE. APPEND ls_result TO et_p1001. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDMETHOD. "do_selection |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
* Klasse ZCL_HR_EXT_RELAT_BZ10 METHOD do_selection. *=========================================================== * simulate the relationship P - P from HRUS_D2 *=========================================================== TYPES: BEGIN OF ty_0105, pernr TYPE pernr_d, usrid TYPE xubname, END OF ty_0105. DATA: lt_p0105 TYPE TABLE OF ty_0105. DATA: lt_p0105_2 TYPE TABLE OF ty_0105. DATA: ls_p0105 TYPE ty_0105. DATA: ls_result TYPE p1001, ls_result_ext TYPE hri1001, lv_varyf TYPE varyf, lv_sobid TYPE sobid, lv_subty TYPE subty, lt_object TYPE STANDARD TABLE OF hrobject, ls_object TYPE hrobject, lv_use_ext TYPE flag, lv_istat TYPE istat_d. DATA: BEGIN OF ls_pernrs, pernr TYPE hrobjid, END OF ls_pernrs. DATA: lt_pernrs LIKE STANDARD TABLE OF ls_pernrs WITH DEFAULT KEY. FIELD-SYMBOLS: <ls_hrobject> TYPE hrobject, <ls_hrealo> TYPE hrealo, <ls_p0105> TYPE ty_0105. DATA: ls_substitute TYPE swragent, lt_substitutions TYPE swlttwfs. DATA: lt_hrusd2 TYPE TABLE OF hrus_d2, ls_hrusd2 TYPE hrus_d2. DATA: lv_plvar TYPE plvar. *----------------------------------------------------------- * check client *----------------------------------------------------------- IF iv_sel_mandt <> sy-mandt. RAISE EXCEPTION TYPE cx_hrbas_ext_relat EXPORTING textid = cx_hrbas_ext_relat=>cx_hrbas_ext_relat_client_spec relation = gs_t77ev_string extrelat = gs_t77ev. ENDIF. CALL FUNCTION 'RH_GET_ACTIVE_WF_PLVAR' IMPORTING act_plvar = lv_plvar EXCEPTIONS OTHERS = 0. * build up object list CLEAR: lt_object[]. IF it_sel_objects IS SUPPLIED. LOOP AT it_sel_objects ASSIGNING <ls_hrobject>. ls_object-plvar = <ls_hrobject>-plvar. ls_object-otype = <ls_hrobject>-otype. ls_object-objid = <ls_hrobject>-objid. APPEND ls_object TO lt_object. ENDLOOP. CLEAR: lv_use_ext. ENDIF. IF it_sel_objects_ext IS SUPPLIED. LOOP AT it_sel_objects_ext ASSIGNING <ls_hrealo>. ls_object-plvar = <ls_hrealo>-plvar. ls_object-otype = <ls_hrealo>-otype. ls_object-objid = <ls_hrealo>-realo. APPEND ls_object TO lt_object. ENDLOOP. lv_use_ext = 'X'. ENDIF. * determine subtype of user CALL FUNCTION 'RH_GET_HR_USER_SUBTY' EXPORTING mandt = sy-mandt IMPORTING hr_subty = lv_subty EXCEPTIONS OTHERS = 0. LOOP AT lt_object INTO ls_object WHERE otype = 'P'. ls_pernrs-pernr = ls_object-objid. APPEND ls_pernrs TO lt_pernrs. ENDLOOP. SELECT * FROM pa0105 INTO CORRESPONDING FIELDS OF TABLE lt_p0105 FOR ALL ENTRIES IN lt_pernrs "SRON2018879 WHERE pernr = lt_pernrs-pernr AND subty = lv_subty AND begda <= iv_sel_endda AND endda >= iv_sel_begda. * read HRUS_D2 SELECT * FROM hrus_d2 INTO TABLE lt_hrusd2 FOR ALL ENTRIES IN lt_p0105 WHERE rep_name = lt_p0105-usrid AND ( reppr = 'ALL' OR reppr = 'PERSONAL' ) AND begda <= iv_sel_endda AND endda >= iv_sel_begda. LOOP AT lt_hrusd2 INTO ls_hrusd2. IF ls_hrusd2-active IS INITIAL. ls_substitute-otype = 'US'. ls_substitute-objid = ls_hrusd2-rep_name. CALL METHOD cl_swl_substitution=>get_adopted_substitutions EXPORTING i_substitute = ls_substitute IMPORTING et_substitutions = lt_substitutions. READ TABLE lt_substitutions WITH KEY objid = ls_hrusd2-us_name TRANSPORTING NO FIELDS. IF sy-subrc <> 0. DELETE lt_hrusd2. ENDIF. ENDIF. ENDLOOP. LOOP AT lt_hrusd2 INTO ls_hrusd2. SELECT * FROM pa0105 INTO CORRESPONDING FIELDS OF ls_p0105 WHERE usrid = ls_hrusd2-us_name AND subty = lv_subty AND begda <= iv_sel_endda AND endda >= iv_sel_begda. APPEND ls_p0105 TO lt_p0105_2. ENDSELECT. ENDLOOP. *----------------------------------------------------------- * compose external relationsip *----------------------------------------------------------- LOOP AT lt_hrusd2 INTO ls_hrusd2. READ TABLE lt_p0105_2 WITH KEY usrid = ls_hrusd2-us_name INTO ls_p0105. IF sy-subrc EQ 0. lv_sobid = ls_p0105-pernr. CONCATENATE 'P ' lv_sobid INTO lv_varyf RESPECTING BLANKS. READ TABLE lt_p0105 WITH KEY usrid = ls_hrusd2-rep_name INTO ls_p0105. IF sy-subrc = 0. IF iv_sel_istat IS INITIAL. lv_istat = '1'. ELSE. lv_istat = iv_sel_istat. ENDIF. ls_result-mandt = iv_sel_mandt. ls_result-plvar = lv_plvar. ls_result-otype = 'P'. ls_result-objid = ls_p0105-pernr. ls_result-infty = '1001'. ls_result-rsign = 'B'. ls_result-relat = 'Z10'. ls_result-istat = lv_istat. ls_result-priox = 'X'. ls_result-begda = ls_hrusd2-begda. ls_result-endda = ls_hrusd2-endda. ls_result-varyf = lv_varyf. ls_result-reasn = space. ls_result-histo = space. ls_result-sclas = 'P'. ls_result-sobid = lv_sobid. IF lv_use_ext = 'X'. MOVE-CORRESPONDING ls_result TO ls_result_ext. APPEND ls_result_ext TO et_i1001. ELSE. APPEND ls_result TO et_p1001. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDMETHOD. "do_selection |
Auswertungswege


Datenprovider
(Kopie von MSS_BIZ_NOD)


|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
FUNCTION z_hr_msssub_pathroots. *"-------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" REFERENCE(USER) LIKE SY-UNAME *" REFERENCE(BEGDA) LIKE OBJEC-BEGDA *" REFERENCE(ENDDA) LIKE OBJEC-ENDDA *" REFERENCE(EVALPATH) LIKE GDSTR-WEGID OPTIONAL *" REFERENCE(DEPTH) LIKE GDSTR-DEPTH DEFAULT 0 *" TABLES *" PARAMVALUES STRUCTURE HRWPC_S_OADP_PARAMVALUE OPTIONAL *" PATHROOTS STRUCTURE HRROOTOB *"-------------------------------------------------------------------- DATA: lv_wegid TYPE wegid, lv_plvar TYPE plvar. DATA: lt_objec TYPE TABLE OF objec WITH HEADER LINE, ls_root LIKE LINE OF pathroots. IF evalpath IS INITIAL. lv_wegid = 'ZSUBSTB'. ELSE. lv_wegid = evalpath. ENDIF. CALL FUNCTION 'RH_GET_ACTIVE_WF_PLVAR' IMPORTING act_plvar = lv_plvar EXCEPTIONS OTHERS = 0. CALL FUNCTION 'RH_STRUC_GET' EXPORTING act_otype = 'US' act_objid = user act_wegid = lv_wegid * ACT_INT_FLAG = act_plvar = lv_plvar * ACT_BEGDA = SY-DATUM * ACT_ENDDA = SY-DATUM act_tdepth = depth * ACT_TFLAG = 'X' * ACT_VFLAG = 'X' authority_check = ' ' * TEXT_BUFFER_FILL = * BUFFER_MODE = * IMPORTING * ACT_PLVAR = TABLES * RESULT_TAB = result_objec = lt_objec * RESULT_STRUC = EXCEPTIONS no_plvar_found = 1 no_entry_found = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. LOOP AT lt_objec. CHECK lt_objec-otype = 'P'. MOVE-CORRESPONDING lt_objec TO ls_root. APPEND ls_root TO pathroots. ENDLOOP. ENDFUNCTION. |
Automatische Rollenvergabe
Ereignisauslösung bei Anlegen/Löschen von Vertretern

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
METHOD if_ex_wf_substitute~maintain_substitute. DATA lt_cont TYPE TABLE OF swcont. DATA lv_key TYPE sweinstcou-objkey. CASE subst_profile. WHEN 'ALL' OR 'PERSONAL'. lv_key = substituted_object. CALL FUNCTION 'SWC_ELEMENT_SET' EXPORTING element = 'Substitute' field = substitute-objid TABLES container = lt_cont EXCEPTIONS OTHERS = 0. CALL FUNCTION 'SWE_EVENT_CREATE' EXPORTING objtype = 'ZHR_SUBST' objkey = lv_key event = 'Created' TABLES event_container = lt_cont EXCEPTIONS OTHERS = 0. WHEN OTHERS. ENDCASE. ENDMETHOD. METHOD if_ex_wf_substitute~delete_substitute. DATA lt_cont TYPE TABLE OF swcont. DATA lv_key TYPE sweinstcou-objkey. DATA lv_profile TYPE hrus_d2-reppr. DATA ls_subst LIKE LINE OF substitutes. LOOP AT substitutes INTO ls_subst. SELECT reppr FROM hrus_d2 INTO lv_profile WHERE us_name = substituted_object-objid AND rep_name = ls_subst-objid AND begda LE sy-datum AND endda GE sy-datum. CASE lv_profile. WHEN 'ALL' OR 'PERSONAL'. lv_key = substituted_object. CALL FUNCTION 'SWC_ELEMENT_SET' EXPORTING element = 'Substitute' field = ls_subst-objid TABLES container = lt_cont EXCEPTIONS OTHERS = 0. CALL FUNCTION 'SWE_EVENT_CREATE' EXPORTING objtype = 'ZHR_SUBST' objkey = lv_key event = 'Deleted' TABLES event_container = lt_cont EXCEPTIONS OTHERS = 0. WHEN OTHERS. ENDCASE. ENDSELECT. ENDLOOP. ENDMETHOD. |
BOR-Objekt


Workflow

![]()


|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
METHOD assign_role_to_user. DATA: lt_hrusd2 TYPE TABLE OF hrus_d2, ls_hrusd2 LIKE LINE OF lt_hrusd2. DATA: lt_roles TYPE TABLE OF bapiagr, ls_roles LIKE LINE OF lt_roles, lt_my_roles TYPE TABLE OF bapiagr. DATA: lv_begda TYPE begda VALUE '99991231', lv_endda TYPE endda VALUE '19000101'. DATA: lt_return TYPE TABLE OF bapiret2. DATA: lv_isok TYPE xfeld. * Prüfen HRUS_D2 (auf alle Vertretungen) SELECT * FROM hrus_d2 INTO TABLE lt_hrusd2 WHERE rep_name = substitute AND begda LE sy-datum AND endda GE sy-datum AND ( reppr = 'ALL' OR reppr = 'PERSONAL' ). * BEGDA/ENDDA ermitteln LOOP AT lt_hrusd2 INTO ls_hrusd2. IF lv_begda GT ls_hrusd2-begda. lv_begda = ls_hrusd2-begda. ENDIF. IF lv_endda LT ls_hrusd2-endda. lv_endda = ls_hrusd2-endda. ENDIF. ENDLOOP. * Rollen ermitteln ls_roles-agr_name = c_role. ls_roles-from_dat = lv_begda. ls_roles-to_dat = lv_endda. APPEND ls_roles TO lt_roles. * Rollen schon vorhanden? CALL FUNCTION 'BAPI_USER_GET_DETAIL' EXPORTING username = substitute cache_results = ' ' TABLES activitygroups = lt_my_roles return = lt_return. LOOP AT lt_my_roles INTO ls_roles WHERE agr_name = c_role. IF ls_roles-from_dat LE lv_begda AND ls_roles-to_dat EQ lv_endda. lv_isok = 'X'. ENDIF. ENDLOOP. * Rollen zuordnen CHECK lv_isok IS INITIAL. APPEND LINES OF lt_my_roles TO lt_roles. CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN' EXPORTING username = substitute TABLES activitygroups = lt_roles return = lt_return. ENDMETHOD. |

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
METHOD delimit_role_assignment. * HRUS_D2 lesen (weitere aktive Vertretungen?) DATA: lt_hrusd2 TYPE TABLE OF hrus_d2, ls_hrusd2 LIKE LINE OF lt_hrusd2. DATA: lt_roles TYPE TABLE OF bapiagr, ls_roles LIKE LINE OF lt_roles, lt_my_roles TYPE TABLE OF bapiagr. DATA: lv_begda TYPE begda VALUE '99991231', lv_endda TYPE endda VALUE '19000101'. DATA: lt_return TYPE TABLE OF bapiret2. DATA: lv_isok TYPE xfeld. * Prüfen HRUS_D2 (auf alle Vertretungen) SELECT * FROM hrus_d2 INTO TABLE lt_hrusd2 WHERE rep_name = substitute AND begda LE sy-datum AND endda GE sy-datum AND ( reppr = 'ALL' OR reppr = 'PERSONAL' ). * keine CHECK sy-subrc NE 0. * Rollen vorhanden? CALL FUNCTION 'BAPI_USER_GET_DETAIL' EXPORTING username = substitute cache_results = ' ' TABLES activitygroups = lt_my_roles return = lt_return. LOOP AT lt_my_roles INTO ls_roles WHERE agr_name = c_role. IF ls_roles-from_dat LE sy-datum AND ls_roles-to_dat GE sy-datum. ls_roles-to_dat = sy-datum - 1. IF ls_roles-from_dat GT ls_roles-to_dat. DELETE lt_my_roles. ELSE. MODIFY lt_my_roles FROM ls_roles. ENDIF. ENDIF. ENDLOOP. if sy-subrc ne 0. lv_isok = 'X'. endif. * Rollen abgrenzen CHECK lv_isok IS INITIAL. CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN' EXPORTING username = substitute TABLES activitygroups = lt_my_roles return = lt_return. ENDMETHOD. |
Views: 80
