Code: Alles auswählen.
attributes_wa-attr_tab = 'EMPLOYEE'.
attributes_wa-attr_field = 'DEPARTMENT'.
attributes_wa-value = p0001-orgeh.
append attributes_wa to attributes.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report Z_HR_LDAP *
*& *
*&---------------------------------------------------------------------*
*& Dieser REport dient zur Extraktion beliebiger Mitarbeiter in die *
*& korrespondierenden Benutzer des Active Directories. Die Identi- *
*& fikation der Benutzer erfolgt dabei anhand der im HR-System *
*& gespeicherten Personalnummern und dienen als LDAP-Suchfilter. *
*& Im Zuge dieses Reports werden ausgewählte Daten extrahiert und *
*& an die LDAP-Schnittstelle übergeben. Dazu dient der Aufruf des *
*& Funktionsbausteins "SPLDAP_RECEIVE_ATTRIBUTES". *
*& *
*& JEDE ÄNDERUNG ZIEHT EINE ANPASSUNG DES ATTRIBUT-MAPPINGS NACH SICH *
*&---------------------------------------------------------------------*
REPORT Z_HR_LDAP .
DATA: PLVAR LIKE OBJEC-PLVAR,
OBJID LIKE HROBJECT-OBJID,
KEYDA LIKE PLOG-BEGDA,
P_OBJECTS LIKE HROBJECT OCCURS 0,
P_OBJECTS_WA LIKE HROBJECT,
S_OBJECTS LIKE HROBJECT OCCURS 0,
S_OBJECTS_WA LIKE HROBJECT,
I1001_ITAB LIKE P1001 OCCURS 0 WITH HEADER LINE,
I1001_ITAB2 LIKE P1001 OCCURS 0 WITH HEADER LINE,
LDAPDESTINATION LIKE LDA_TYPES-LDAPDESTINATION,
LDAPSERVER LIKE LDA_TYPES-LDAPSERVER,
ldapinitialrun like lda_types-flag,
LOGSYS LIKE TBDLS-LOGSYS,
ERRORS LIKE BAPIRET2 OCCURS 0,
ERRORS_WA LIKE BAPIRET2,
total_attrs_l TYPE lda_att_lt,
total_attrs_x TYPE lda_att_xt.
* Struktur für kurze LDAP-Attribute
* Die Feldnamen müssen zur Basis-Struktur LDA-ATTR_S passen
*(für RFC-Aufruf)
TYPES: BEGIN OF TS_LDAP_ATTR_S,
PERNR LIKE LDA_TYPES-PERNR,
ATTR_TAB LIKE LDA_TYPES-ATTR_TABNAME,
ATTR_FIELD LIKE LDA_TYPES-ATTR_FIELDNAME,
VALUE LIKE LDA_TYPES-VALUE_S,
END OF TS_LDAP_ATTR_S.
data: attributes type ts_ldap_attr_s occurs 0,
attributes_wa type ts_ldap_attr_s.
* Verwendete Tabellen
tables: pernr, rfcdes, t527x.
* Infotypen aus denen Informationen extrahiert werden
infotypes: 0001, 0002, 0006, 0017, 0105, 1000.
* 0001: Organisatorische Zuordnung
* 0002: Daten zur Person
* 0006: Anschriften
* 0017: Reiseprivilegien
* 0105: Kommunikation (Zugehöriger SAP-Benutzer)
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: Testlauf default 'X' AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK B1.
* Eingebaefelder für die Angabe des Servers an den die extrahierten
* Daten gesendet werden sollen sowie verwendete RFC-Verbindung
Parameters: LDAPSRV Default 'bitte eingeben' LIKE LDA_TYPES-LDAPSERVER,
LDAPCON Default 'bitte eingeben' LIKE rfcdes-rfcdest.
* ---------------------------------------------------------------------
at selection-screen.
clear: p_objects[], s_objects[], attributes[].
* aktuelle PLanvariante holen
CALL FUNCTION 'RH_GET_PLVAR'
IMPORTING
PLVAR = PLVAR
EXCEPTIONS
no_plvar = 1
OTHERS = 2.
if sy-subrc <> 0.
MESSAGE E015(HRLDAP).
endif.
KEYDA = sy-datum.
* --------------------------------------------------------------------
* Füllen der internen Tabellen (infotypes: ...) zum Zeitpunkt get pernr
get pernr.
* Das Makro rp_provide-from-last liest den letzten in dem
* Auswahlzeitraum gültigen Satz, keyda = festgesetztes Startdatum und
* Enddatum
rp-provide-from-last p0001 '' keyda keyda.
rp-provide-from-last p0002 '' keyda keyda.
rp-provide-from-last p0006 '' keyda keyda.
rp-provide-from-last p0017 '' keyda keyda.
rp-provide-from-last p0105 '' keyda keyda.
rp-provide-from-last p1000 '' keyda keyda.
ATTRIBUTES_WA-PERNR = p0001-pernr.
*---------------------------------------------------------------------------------*
* *
* Abschnitt Datenextraktion für Identifikaton der Benutzer *
* *
*---------------------------------------------------------------------------------*
* Extraktion der Personalnummer für den Suchfilter
attributes_wa-attr_tab = 'EMPLOYEE'.
attributes_wa-attr_field = 'PERNR'.
SHIFT p0001-pernr LEFT DELETING LEADING '0'.
attributes_wa-value = p0001-pernr.
append attributes_wa to attributes.
*sapUsername
attributes_wa-attr_tab = 'EMPLOYEE'.
attributes_wa-attr_field = 'SAPUSERNAME'.
if p0105-uname NE ' '.
attributes_wa-value = p0105-usrid.
append attributes_wa to attributes.
else.
attributes_wa-value = 0.
append attributes_wa to attributes.
endif.
*Organisationseinheit
select single orgtx from t527x into attributes_wa-value
where sprsl = sy-langu
and orgeh = p0001-orgeh
and begda <= sy-datum
and endda >= sy-datum.
append attributes_wa to attributes.
if sy-subrc <> 0.
endif.
end-of-selection.
*##################################################################################
* Bestimmen des derzeitigen logischen Systems
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
OWN_LOGICAL_SYSTEM = LOGSYS
EXCEPTIONS
OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
* TODO: Komprimierung sy-mandt: 3 -> 2 Stellen !!!
CONCATENATE SY-SYSID SY-MANDT INTO LOGSYS.
ENDIF.
loop at attributes into attributes_wa.
write: / ATTRIBUTES_WA-PERNR , attributes_wa-attr_tab.
write: attributes_wa-attr_field ,attributes_wa-value.
endloop.
IF Testlauf = 'X'.
EXIT.
ENDIF.
*#################################################################################
* Extrahierte Attribute an den LDAP-fähigen Verzeichnisserver übergeben
* dazu: Übergabe der extrahierten Attribute als Wertemenge an den
* Funktionsbaustein SPLDAP_RECEIVE_ATTRIBUTES
CALL FUNCTION 'SPLDAP_RECEIVE_ATTRIBUTES'
* DESTINATION LDAPDEST
EXPORTING
LOGSYS = LOGSYS
SERVERID = LDAPSRV
ATTRIBUTES_S = attributes[]
INITIAL_RUN = LDAPINITIALRUN
ATTRIBUTES_L = TOTAL_ATTRS_L[]
ATTRIBUTES_X = TOTAL_ATTRS_X[]
IMPORTING
RETURN = ERRORS[].
IF NOT ERRORS[] IS INITIAL.
READ TABLE ERRORS INDEX 1 INTO ERRORS_WA.
MESSAGE ID ERRORS_WA-ID TYPE ERRORS_WA-TYPE
NUMBER ERRORS_WA-NUMBER
WITH ERRORS_WA-MESSAGE_V1 ERRORS_WA-MESSAGE_V2
ERRORS_WA-MESSAGE_V3 ERRORS_WA-MESSAGE_V4.
ENDIF. .