In vielen Fällen ist es notwendig, Daten eines Objekts nach dem Sichern nochmals zu verändern.
Gründe hierfür können sein:
- Es gibt keinen entsprechenden Userexit, um Daten des Objekts vor dem Sichern zu manipulieren.
- Es stehen erst nach dem Sichern die entsprechenden Felder zur Verfügung, mit deren Hilfe man Daten des Objekts manipulieren möchte.
[av_heading heading=’Szenario‘ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-7mi5d8t‘][/av_heading]
Beim Sichern des Fertigungsauftrags soll der Kurztext des Arbeitsvorgangs geändert werden.
Es gibt zwar im Fertigungsauftrag sowohl den zentralen Userexit EXIT_SAPLCOBT_001 als auch den BADI WORKORDER_UPDATE beim Sichern, aber es lassen sich hier keine Daten des Fertigungsauftrags ändern.
[av_heading heading=’Ändern von Daten eines Objekts mit qRFC‘ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-7a7danh‘][/av_heading]
Das Problem besteht darin, dass man den Fertigungsauftrag nicht ändern kann, bevor er gespeichert ist und die Sperre aufgehoben wurde.
Es bieten sich folgende Möglichkeiten an, einen Fertigungsauftrag nach dem Sichern nochmals zu ändern.
- Im Userexit EXIT_SAPLCOBT_001 wird ein Funktionsbaustein eingefügt, der IN BACKGROUND TASK, d.h. nach COMMIT WORK aufgerufen wird. Im Funktionsbaustein fügt man den WAIT-Befehl ein, um das dortige Coding nach z.B. 5 sec Wartezeit zu durchlaufen. Alternativ kann man zu Beginn des Funktionsbausteins in einer DO-Schleife in Verbindung mit dem WAIT-Befehl das Sperrobjekt zum Fertigungsauftrag abfragen. Wenn die Sperre aufgehoben wurde, wird das Coding des Funktionsbausteins durchlaufen.
- Im Userexit EXIT_SAPLCOBT_001 wird ein Report eingefügt, der als Job nach z.B. 5 sec Wartezeit gestartet wird.
SAP bietet jedoch zusätzlich zu den genannten Methoden mit dem queued Remote Function Call (qRFC) eine elegante Möglichkeit, den Fertigungsauftrag nachträglich in einer Queue zu ändern und eventuelle Fehler transparent zu machen.
Im Folgenden werden die Arbeitsschritte aufgezeigt, wie man einen Funktionsbaustein via qRFC im Userexit EXIT_SAPLCOBT_001 aufruft.
[av_heading heading=’Anlegen eines RFC-fähigen Funktionsbausteins‘ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-6kterwt‘][/av_heading]
Zunächst wird ein RFC-fähiger Funktionsbaustein angelegt.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC1.png‘ attachment=’15774′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-2ay0q5′][/av_image]
FUNCTION z_pp_change_avfc_qrfc.
*“———————————————————————-
*“*“Lokale Schnittstelle:
*“ TABLES
*“ HEADER_TABLE STRUCTURE CAUFVDB OPTIONAL
*“ OPERATION_TABLE STRUCTURE AFVGB OPTIONAL
*“———————————————————————-
* Deklarationen —————————————————— *
DATA: ls_header TYPE caufvdb,
ls_operation TYPE afvgb,
lv_tabix TYPE i,
lt_opr_change TYPE cose_t_opr_change,
ls_opr_change TYPE cose_s_opr_change,
lv_order_number TYPE aufnr.
DATA: lt_return TYPE TABLE OF bapiret2.
DATA: ls_return TYPE bapiret2.
* Update the oparation table AFVC ———————————— *
LOOP AT header_table INTO ls_header.
lv_order_number = ls_header-aufnr.
LOOP AT operation_table INTO ls_operation
WHERE aufpl = ls_header-aufpl.
ls_operation-ltxa1 = ‚123456‘.
MOVE-CORRESPONDING ls_operation TO ls_opr_change.
ls_opr_change-ltxa1_x = ‚X‘.
APPEND ls_opr_change TO lt_opr_change.
* Fertigungsauftrag: Vorgänge ändern ——————————— *
CALL FUNCTION ‚CO_SE_PRODORD_OPR_CHANGE‘
EXPORTING
iv_order_number = lv_order_number
it_opr_change = lt_opr_change
iv_refresh = ‚X‘
iv_order_post = ‚X‘
iv_commit = ‚X‘
IMPORTING
es_return = ls_return.
IF ls_return-type = ‚E‘.
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.
ENDIF.
[av_heading heading=’Einfügen des Funktionsbausteins im Userexit EXIT_SAPLCOBT_001’tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-5yk9wb1′][/av_heading]
Der Funktionsbaustein wird im Userexit EXIT_SAPLCOBT_001 mit dem Attribut IN BACKGROUND TASK eingefügt. Er soll nur ein einziges mal beim initialen Anlegen des Fertigungsauftrags aufgerufen werden.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC2.png‘ attachment=’15775′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-54801vx‘][/av_image]
[av_heading heading=’Triggern des Funktionsbausteins als qRFC in der Eingangsqueue‘ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-4pb7mvh‘][/av_heading]
Der Funktionsbaustein soll als qRFC in der Eingangsqueue der Transaktion SMQ2 ausgeführt werden. Dazu ist es notwendig, dass vor dem Funktionsbaustein IN BACKGROUND TASK der Funktionsbaustein TRFC_SET_QIN_PROPERTIES aufgrufen wird. Dem Funktionsbaustein TRFC_SET_QIN_PROPERTIES ist ein eindeutiger Queue-Name mitzugeben. Der Queue-Name sollte mit einem “Z” beginnen und zur eindeutigen Identifizierung die Fertigungsauftragsnummer enthalten. Ein Name könnte z.B. “ZPP_FAUF_0000100373” sein.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC3.png‘ attachment=’15776′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-46qb4q5′][/av_image]
DATA: lv_queue_name TYPE trfcqin-qname.
READ TABLE header_table_old INDEX 1.
IF sy-subrc NE 0.
CONCATENATE ‚ZPP_FAUF_‘
header_table-aufnr
INTO lv_queue_name.
CALL FUNCTION ‚TRFC_SET_QIN_PROPERTIES‘
EXPORTING
qin_name = lv_queue_name
EXCEPTIONS
invalid_queue_name = 1
OTHERS = 2.
CALL FUNCTION ‚Z_PP_CHANGE_AVFC_QRFC‘
IN BACKGROUND TASK DESTINATION ‚NONE‘
TABLES
header_table = header_table
operation_table = operation_table.
Beim Sichern des Fertigungsauftrags wird nun nach COMMIT WORK der Funktionsbaustein Z_PP_CHANGE_AVFC_QRFC in der Queue ZPP_FAUF_<AUFNR> abgearbeitet. Wenn der Fertigungsauftrag noch gesperrt ist, wird die Verarbeitung abgebrochen und eine Fehlermeldung in die Queue gestellt. Der Queue-Scheduler ruft nun periodisch je nach Einstellung die Queue nun so lange auf, bis der Funktionsbaustein der Queue erfolgreich verarbeitet wurde. Je nach Einstellung erfolgt die Abarbeitung der Queue n mal.
[av_heading heading=’Anzeigen der Queue in der Eingangsqueue-Verarbeitung SMQ2′ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-3sf4qz1′][/av_heading]
Wenn man jetzt einen Fertigungsauftrag initial anleget und sichert, wird ein Queue-Eintrag zur aktuellen Fertigungsauftragsnummer in Transaktion SMQ2 erzeugt.
In Transaktion SMQs ist der Eintrag sichtbar.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC4.png‘ attachment=’15777′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-3je8i5p‘][/av_image]
Durch Doppelklick auf den Queue-Eintrag kommt man in die Sicht, um die Queue zu registrieren und anzustarten.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC5.png‘ attachment=’15778′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-33fa79p‘][/av_image]
Die Queue erhält den Status RUNNING und der Funktionsbaustein Z_PP_CHANGE_AVFC_QRFC wird jetzt aufgerufen und verarbeitet.
Wenn alles ok ist, dann verschwindet der Queue-Eintrag. In einer Endlosschleife bleibt der Status auf RUNNING, im Fehlerfall wird eine Fehlermeldung ausgegeben.
[av_heading heading=’Registrierung der Queue im QIN-Scheduler ‚ tag=’h3′ style=“ size=“ subheading_active=“ subheading_size=’15‘ padding=’0′ color=“ custom_font=“ av_uid=’av-2ltbubx‘][/av_heading]
Der soeben gezeigte Weg erfordert, dass die Queue immer manuell gegistriert und angestartet werden muss. Zur automatischen Queue-Verarbeitung registriert man die Queue im QIN-Scheduler. Der QIN-Scheduler plant dann die Verarbeitung der Queue nach dem Sichern eines Fertigungsauftrags automatisch ein.
Nun geht man in die Transaktion SMQ2 und registriert die Queue.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC6.png‘ attachment=’15779′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-22154i5′][/av_image]
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC7.png‘ attachment=’15780′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-1siv0tp‘][/av_image]
Im QIN-Scheduler wird jetzt der Präfix des Queue-Namens eingetragen.
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC8.png‘ attachment=’15781′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-1b29kbx‘][/av_image]
[av_image src=’http://solidforms.de/solid_wp_2014/wp-content/uploads/2015/10/SAP_qRFC9.png‘ attachment=’15782′ attachment_size=’full‘ align=’center‘ animation=’no-animation‘ link=“ target=“ styling=“ caption=“ font_size=“ appearance=“ av_uid=’av-loymct‘][/av_image]
Weitere Informationen
Spezialthemen zu SAP Formularen
SAP Formulare zum Festpreis
SAP Formularentwicklung
