How-To: neuen Mitarbeiter per ABAP anlegen

Posten Sie hier Tutorials & Cookbooks.
1 Beitrag • Seite 1 von 1
1 Beitrag Seite 1 von 1

How-To: neuen Mitarbeiter per ABAP anlegen

Beitrag von PeterPaletti (Specialist / 367 / 33 / 100 ) »
Das Ziel ist es, in SAP-HR initial einen Mitarbeiter nur mit Namen und Adresse über ein ABAP -Programm neu anzulegen. Dafür bieten sich auf meinem System die Bausteine HR_MAINTAIN_MASTERDATA, HR_PAD_HIRE_EMPLOYEE, HR_INFOTYPE_OPERATION sowie die Klasse CL_HRPAD00_C_EMPLO an.

Das Problem: die meisten Funktionen lassen die Transaktion PA40 komplett dunkel ablaufen und gehen alle Bilder und Infotypen durch, die im HR-Customizing hinterlegt sind. Ich möchte aber nur einige, wenige Infotypen (0000, 0001, 00002 und 00006) verwenden und mit Daten versorgen. Und das geht am besten mit dem Baustein HR_INFOTYPE_OPERATION.

Ich hatte irgendwo im Netz gelesen, mit HR_INFOTYPE_OPERATION könne man keine neuen Mitarbeiter anlegen, sondern nur bestehende ändern. Die frohe Botschaft: man kann sehr wohl. Allerdings ist die Verwendung an einigen Stellen etwas gewöhnungsbedürftig:

1. Es muss zunächst für Infotyp 0000 eine leere Personalnummer übergeben werden, damit der Baustein eine neue Nummer generiert und diese zurückliefert. Mit dieser neuen Personalnummer können die Aufrufe für die anderen Infotypen versorgt werden.
2. Der Baustein spielt PA40 für die eingegebenen Infotypen dunkel ab. Für Infotyp 0000 wird dabei auch die organisatorische Zuordnung abgefragt. Das sind Daten, die erst mit Infotyp 0001 kommen und hier gar nicht versorgt werden können. Die Versorgung geschieht daher über den Umweg von Set-Get-Parametern.

Genug der Vorrede, hier ein beispielhafter Quellcode:

Code: Alles auswählen.

DATA: ls_p0000 TYPE p0000.
DATA: ls_p0001 TYPE p0001.
DATA: ls_p0002 TYPE p0002.
DATA: ls_p0006 TYPE p0006.
DATA: ls_return TYPE bapireturn1.
DATA: l_pernr TYPE p0000-pernr.
DATA: l_key TYPE bapipakey.

START-OF-SELECTION.

  CLEAR l_pernr.  “Personalnummer leer damit neue Nummer generiert wird

  ls_p0000-pernr = l_pernr.
  ls_p0000-infty = '0000'.
  ls_p0000-endda = '99991231'.
  ls_p0000-begda = sy-datum
  ls_p0000-massn = '01'. “Einstellung

* Hier schon einige Daten für die organisatorische Zuordnung 
* vorbelegen
  ls_p0001-werks = '<Personalbereich>'. 
  ls_p0001-persk = '<Mitarbeiterkreis>'.
  ls_p0001-persg = '<Mitarbeitergruppe>'. 

* Set-Get-Parameter für organisatorische Zuordnung verwenden,
* weil diese schon bei Infotyp 0000 dunkel abgefragt werden. 
  SET PARAMETER ID 'PBR' FIELD ls_p0001-werks.
  SET PARAMETER ID 'PRG' FIELD ls_p0001-persg.
  SET PARAMETER ID 'PKR' FIELD ls_p0001-persk.
  SET PARAMETER ID 'SUB' FIELD ls_p0000-massn.

  CALL FUNCTION 'HR_INFOTYPE_OPERATION'
    EXPORTING
      infty         = '0000'
      number        = l_pernr
*     SUBTYPE       =
*     OBJECTID      =
*     LOCKINDICATOR =
      validityend   = ls_p0000-endda
      validitybegin = ls_p0000-begda
*     RECORDNUMBER  =
      record        = ls_p0000
      operation     = 'INS'
*     TCLAS         = 'A'
      dialog_mode   = '0'
*     NOCOMMIT      = ''
*     VIEW_IDENTIFIER        =
*     SECONDARY_RECORD       =
    IMPORTING
      return        = ls_return
      key           = l_key.
  IF ls_return-type CA 'AEX'.
    MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
    WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4.
    RETURN.
  ENDIF.

  l_pernr = l_key-employeeno. “Neue Personalnummer übernehmen

  ls_p0001-pernr = l_pernr.
  ls_p0001-infty = '0001'.
  ls_p0001-endda = '99991231'.
  ls_p0001-begda = sy-datum  
  ls_p0001-btrtl = '<Personalteilbereich>'.
  ls_p0001-bukrs = '<Buchungskreis>'.

  CALL FUNCTION 'HR_INFOTYPE_OPERATION'
    EXPORTING
      infty         = '0001'
      number        = l_pernr
*     SUBTYPE       =
*     OBJECTID      =
*     LOCKINDICATOR =
      validityend   = ls_p0001-endda
      validitybegin = ls_p0001-begda
*     RECORDNUMBER  =
      record        = ls_p0001
      operation     = 'INS'
*     TCLAS         = 'A'
      dialog_mode   = '0'
*     NOCOMMIT      =
*     VIEW_IDENTIFIER        =
*     SECONDARY_RECORD       =
    IMPORTING
      return        = ls_return
*   KEY
    .
  IF ls_return-type CA 'AEX'.
    MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
    WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4.
    RETURN.
  ENDIF.


  ls_p0002-pernr = l_pernr.
  ls_p0002-infty = '0002'.
  ls_p0002-endda = '99991231'.
  ls_p0002-begda = sy-datum.
  ls_p0002-anred = '<Anrede>'.
  ls_p0002-vorna = '<Vorname>'.
  ls_p0002-nachn = '<Nachname>'.
  ls_p0002-gbdat = '<Geburtsdatum>'.
  ls_p0002-natio = '<Nationalität>'.

  CALL FUNCTION 'HR_INFOTYPE_OPERATION'
    EXPORTING
      infty         = '0002'
      number        = l_pernr
*     SUBTYPE       =
*     OBJECTID      =
*     LOCKINDICATOR =
      validityend   = ls_p0002-endda
      validitybegin = ls_p0002-begda
*     RECORDNUMBER  =
      record        = ls_p0002
      operation     = 'INS'
*     TCLAS         = 'A'
      dialog_mode   = '0'
*     NOCOMMIT      =
*     VIEW_IDENTIFIER        =
*     SECONDARY_RECORD       =
    IMPORTING
      return        = ls_return
*   KEY
    .

  IF ls_return-type CA 'AEX'.
    MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
    WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4.
    RETURN.
  ENDIF.

  ls_p0006-pernr = l_pernr.
  ls_p0006-infty = '0006'.
  ls_p0006-endda = '99991231'.
  ls_p0006-begda = sy-datum.
  ls_p0006-ort01 = '<Wohnort>'.
  ls_p0006-land1 = '<Land>'.

  CALL FUNCTION 'HR_INFOTYPE_OPERATION'
    EXPORTING
      infty         = '0006'
      number        = l_pernr
*     SUBTYPE       =
*     OBJECTID      =
*     LOCKINDICATOR =
      validityend   = ls_p0006-endda
      validitybegin = ls_p0006-begda
*     RECORDNUMBER  =
      record        = ls_p0006
      operation     = 'INS'
*     TCLAS         = 'A'
      dialog_mode   = '0'
*     NOCOMMIT      =
*     VIEW_IDENTIFIER        =
*     SECONDARY_RECORD       =
    IMPORTING
      return        = ls_return
*   KEY
    .

  IF ls_return-type CA 'AEX'.
    MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
    WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4.
    RETURN.
  ENDIF.

WRITE: / l_pernr, ‘angelegt’.
Die in spitzen Klammern '<>' eingerahmten Literale sind selbstverständlich durch passende Werte zu ersetzen.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Seite 1 von 1

Vergleichbare Themen

0
Antw.
19
Views
0
Antw.
24
Views
2
Antw.
5115
Views
5
Antw.
14649
Views
Kundeneigene ABAP-Muster Vorlage im ABAP-Editor anlegen
von Stentor » 19.07.2005 11:10 • Verfasst in Basis
1
Antw.
2292
Views
Retoure per ABAP mit Referenz anlegen
von Matthias_L. » 28.06.2006 16:57 • Verfasst in Sales and Distribution

Über diesen Beitrag

PeterPaletti

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

RFC vs. ODATA
vor einer Stunde von Sebastian82 1 / 16

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.