Es wird (in einen Report) der PA2001 ausgewertet, momentan werden Daten händisch gelöscht bei denen keine AU vorhanden ist. Jetzt möchte ich in den PA2001 ein neues Feld(bool?) hinzufügen, wobei vermerkt werden kann das eine AU vorliegt.
2023 ist Release Date für HCM auf S/4HANA on prem.DeathAndPain hat geschrieben: ↑24.01.2020 11:41..., und die SAP das Modul mittlerweile auslaufen lässt, um es durch Success Factors zu ersetzen,...
Code: Alles auswählen.
FORM popup_confirm_certificate.
TABLES: p2001.
DATA: lv_answer TYPE char1,
ls_p9201 TYPE p9201,
gt_return TYPE bapireturn1,
gt_return_e TYPE bapireturn1,
gt_return_d TYPE bapireturn1,
gt_key TYPE bapipakey.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Liegt eine Arbeitsunfähigkeitsbescheinigung vor?'
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF lv_answer = 1.
* MOVE-CORRESPONDING p2001 TO ls_p9201.
ls_p9201-aedtm = sy-datum.
ls_p9201-uname = sy-uname.
ls_p9201-begda = p2001-begda.
ls_p9201-endda = p2001-endda.
ls_p9201-infty = '9201'.
ls_p9201-awart = p2001-subty.
SELECT SINGLE ATEXT FROM T554T INTO ls_p9201-awart_long WHERE awart = p2001-subty.
CLEAR ls_p9201-subty.
ls_p9201-certification = abap_true.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '9201'
number = p2001-pernr
* validityend = p2001-begda " Gültigkeitsbegin
* validitybegin = p2001-endda " Gültigkeitsende
record = ls_p9201
operation = 'MOD'
IMPORTING
return = gt_return
key = gt_key.
BREAK-POINT.
ENDIF.
ENDFORM.
Code: Alles auswählen.
TABLES p2001.
Code: Alles auswählen.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '9201'
number = p2001-pernr
* validityend = p2001-begda " Gültigkeitsbegin
* validitybegin = p2001-endda " Gültigkeitsende
record = ls_p9201
operation = 'MOD'
IMPORTING
return = gt_return
key = gt_key.
Code: Alles auswählen.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Liegt eine Arbeitsunfähigkeitsbescheinigung vor?'
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
Code: Alles auswählen.
BREAK-POINT
Code: Alles auswählen.
DATA: lv_answer TYPE char1,
ls_p9201 TYPE p9201,
gt_return TYPE bapireturn1,
gt_return_e TYPE bapireturn1,
gt_return_d TYPE bapireturn1,
gt_key TYPE bapipakey.
Dadurch das der Report nur Forms und Endforms hat und die Dynmische Maßnahme nur dieses eine Form aus den Report aufruft, habe ich gedacht es innerhalb zu deklarieren.Warum deklarierst du ein Schnittstellenarbeitsbereich lokal in einer Prozedur?
Nein, p2001-pernr ist nicht leer. Dadurch das ich in PA30 die abwesenheit(it2001) mit dem subty 0201 neu anlege, habe ich P2001 befüllt..Ist p2001-pernr leer? Höchstwahrscheinlich.
Ich habe es einfach nur generieren lassen und habe weiter geschrieben.Wenn hier kein Errorhandling implementiert wurde, würde ich die Ausnahme auch nicht abfangen.
Ich habe diese Ausnahme nie abgefangen, da diese gar nicht im Funktionsbaustein geworfen wird. Das Abfangen der Ausnahmen und die IF-Bedingung kannst du dir direkt sparen.
Dies ist lange kein fertiges sowie Produktives Coding.Diese Anweisung hat nichts im produktiven Code verloren.
Code: Alles auswählen.
DATA: lv_answer TYPE char1,
ls_p9201 TYPE p9201,
ls_return TYPE bapireturn1,
ls_key TYPE bapipakey.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Liegt eine Arbeitsunfähigkeitsbescheinigung vor?'
IMPORTING
answer = lv_answer.
IF lv_answer = 1.
ls_p9201-aedtm = sy-datum.
ls_p9201-uname = sy-uname.
ls_p9201-begda = p2001-begda.
ls_p9201-endda = p2001-endda.
ls_p9201-infty = '9201'.
ls_p9201-awart = p2001-subty.
SELECT SINGLE atext FROM t554t INTO ls_p9201-awart_long WHERE awart = p2001-subty.
ls_p9201-certification = abap_true.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
infty = '9201'
number = p2001-pernr
record = ls_p9201
operation = 'MOD'
IMPORTING
return = ls_return
key = ls_key.
ENDIF.
Wir reden hier von einer Dynamischen Maßnahme. Da muss man das so machen. Ich bin nicht sicher, wie firm Du im Modul HCM bist, aber die Funktionsweise von Dynamischen Maßnahmen muss man kennen, um sinnvoll auf NLengners Frage antworten zu können.jocoder hat geschrieben:Warum deklarierst du ein Schnittstellenarbeitsbereich lokal in einer Prozedur? Diese sind dazu gedacht, Daten über alle Programme der internen Sitzung auszutauschen.
Hat in einer Prozedur nichts verloren.
Du verwendest zudem die Personalnummer aus diesem Schnittstellenarbeitsbereich, ohne dieser einen Wert zuzuweisen.
Du solltest Dich bemühen, das sauber aufzubauen. Coding für Dynamische Maßnahmen ist kein Report! Du solltest auch nicht den Programmtyp "Report" nehmen, sondern "Subroutinenpool". Sorry, aber das regt mich immer auf, wenn die Leute, für alles, was sie machen, sei es ein Report, ein Modulpool oder ein Haufen Unterprogramme, immer den Programmtyp "Report" nehmen und sich dann wundern, dass ihr Ergebnis logische Brüche hat.NLengner hat geschrieben:Dadurch das der Report nur Forms und Endforms hat
Wie du richtig sagst, funktioniert es nicht. Allerdings liegt es nicht am Dialog zum Benutzer, da ich es debuggt habe und das Programm normal weiter läuft wie gewollt. Ich hab es ohne den Dialog mal versucht habe, der HR_INFOTYPE_OPERATION macht kein COMMIT WORK. Die Struktur die ich mitgebe ist gefüllt und die Return Parameter des FuBa's sind auch leer.wobei zu prüfen wäre, ob das überhaupt funktioniert, ohne im Anschluss den Ablauf der Dynamischen Maßnahme zu zerhauen. Dialoge in Dynamischen Maßnahmen sind eigentlich nicht vorgesehen. Es kann Dir auch passieren, dass hinterher z.B. der FB HR_INFOTYPE_OPERATION für den Infotyp nicht mehr funktioniert, da dieser durch die regulären Dialoge läuft und kein zusätzliches Popup mittendrin erwartet
Code: Alles auswählen.
DATA: lv_answer TYPE char1.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Liegt eine Arbeitsunfähigkeitsbescheinigung vor?'
IMPORTING
answer = lv_answer.
IF lv_answer = 1.
SUBMIT z_submit_rp_infty_operation WITH p_pernr = p2001-pernr
WITH p_begda = p2001-begda
WITH p_endda = p2001-endda
WITH p_subty = p2001-subty
AND RETURN.
ENDIF.
Das kann schon sein, aber hast Du mal versucht, den Infotyp, in den Du diesen Dialog eingebaut hast, selber mal per HR_INFOTYPE_OPERATION anzulegen? Ich könnte mir gut vorstellen, dass das nicht mehr geht, da der HR_INFOTYPE_OPERATION im Hintergrund den Standarddialog durchläuft und durch Deinen Zusatzdialog dann auf die Nase fällt. Der Preis, den Du für Deine Lösung bezahlst, wäre dann also der, dass sich Dein Infotyp programmgesteuert nicht mehr anlegen und/oder verändern lässt. Funktional bist Du damit schon ziemlich dicht an einer Modifikation.Wie du richtig sagst, funktioniert es nicht. Allerdings liegt es nicht am Dialog zum Benutzer, da ich es debuggt habe und das Programm normal weiter läuft wie gewollt.
Wie gesagt, Du kannst während der Verarbeitung eines Infotyps keinen anderen Infotyp anlegen oder ändern, weder in einer Formroutine einer Dynamischen Maßnahme, noch in einem User Exit oder BADI. Nur mit den regulären Funktionalitäten der Dynamischen Maßnahme selbst ist dies möglich.Hat jemand eine bessere Idee, vielleicht ein weg damit der HR_INFOTYPE_OPERATION in der Dynamischen Maßnahme, also im PERFORM, läuft?