Pomoc wyszukiwania dla PCHOBJID w raporcie z PNP
February 3, 2010, SAP.
SpotkaÅ‚am siÄ™ ostatnio z problemem w programie w SAP HR, konkretniej w HR-PA. PiszÄ™ aplikacjÄ™, która w zaÅ‚ożeniu opiera siÄ™ na bazie PNP, ale pewna jej funkcjonalność korzysta ze struktury organizacyjnej, czyli z bazy PCH. Wygenerowanie pól ekranu selekcji, takiego jak w programie opartym na bazie PCH nie stanowi wiÄ™kszego problemu. KÅ‚opot pojawia siÄ™ dopiero, kiedy chcemy dodać pomoc wyszukiwania do pola ID obiektu – standardowÄ… dla ekranu selekcji raportu ze struktury.

Po krótkim google’owaniu odpowiedź znajduje siÄ™ np. w tym poÅ›cie. Krótko mówiÄ…c należy użyć makra rhxmacro dodajÄ…c poniższe cztery linijki:
Na poczÄ…tku programu…
INCLUDE rhxmacro.
…w sekcji INITIALIZATION…
rhx-f4-objid-data.
…i jeszcze…
AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_obj_o-low.
rhx-f4-objid-low pchplvar pchotype so_obj_o ” ”.
Wszystko byÅ‚oby piÄ™knie, gdyby nie to, że w makrze rhxmacro jest błąd powodujÄ…cy niekompilowanie siÄ™ kodu (ach, ten SAP..). Ostatnia zmiana wprowadzana przez SAPa jest z marca 2009 roku i wyglÄ…da na to, że ktoÅ› wprowadzaÅ‚ zmiany do makra, ale pracy nie skoÅ„czyÅ‚. Potem prawdopodobnie z którÄ…Å› z not ‘poprawka’ poszÅ‚a do użytkowników. Błąd powodujÄ…cy niekompilowanie siÄ™ kodu makra jest bardzo prosty – aby go naprawić należy usunąć jednÄ… linijkÄ™, która próbuje wyczyÅ›cić nieistniejÄ…cÄ… zmiennÄ… (usuniÄ™tÄ… w trakcie ‘poprawiania’ makra).
Zatem finalnie, aby móc cieszyć się pięknym search helpem należy utworzyć nowe klienckie makro (niestety) będące poprawioną (już definitywnie) i okrojoną do naszych potrzeb wersją rhxmacro. Kod poniżej.
*INCLUDE ZRHXMACRO
DEFINE RHX-F4-OBJID-DATA.
TABLES PLOGI.
DATA : %F4_REPID LIKE SY-REPID.
DATA : %F4_DYNNR LIKE SY-DYNNR.
DATA : %F4_LINES TYPE I.
DATA : %F4_SUBRC LIKE SY-SUBRC. “XMK E-MSG
DATA : %F4_T77EO LIKE T77EO.   “XMK #431960
DATA : BEGIN OF %F4_MACO_TAB OCCURS 1,
PLVAR LIKE PLOG-PLVAR,
OTYPE LIKE PLOG-OTYPE,
OBJID LIKE OBJEC-REALO,
ENDÂ Â OF %F4_MACO_TAB.
DATA : %F4_PCHOBJID_LINES TYPE I.
DATA : %F4_PLVAR LIKE WPLOG-PLVAR.
DATA : %F4_OTYPE LIKE WPLOG-OTYPE.
DATA : %F4_OLD_OTYPE LIKE WPLOG-OTYPE.
DATA : %F4_SEL_OBJECTSÂ Â Â LIKE OBJECÂ Â OCCURS 10 WITH HEADER LINE.
DATA : %F4_MARKED_OBJECTS LIKE HRSOBID OCCURS 10 WITH HEADER LINE.
END-OF-DEFINITION.
DEFINE RHX-F4-OBJID-LOW.
SET EXTENDED CHECK OFF.
%F4_REPID = SY-REPID.
%F4_DYNNR = SY-DYNNR.
DESCRIBE TABLE &3 LINES %F4_LINES.
IF &4 EQ SPACE.
PERFORM CHECK_PLVAR_F4(RHXCHK00) USING &1 %F4_SUBRC.
CHECK %F4_SUBRC = 0.
ENDIF.
IF &5 EQ SPACE.
IF &2 IS INITIAL.
CALL FUNCTION ‘ASK_OTYPE’
EXPORTING
D_OTYPEÂ Â Â Â Â Â Â Â = &2
IMPORTING
OTYPEÂ Â Â Â Â Â Â Â Â Â = &2
EXCEPTIONS
NO_OTYPE_SETÂ Â Â = 2
WRONG_OTYPE_SET = 4.
ENDIF.
ENDIF.
IF SY-DYNNR EQ ’1000′.
%F4_OLD_OTYPE = &2.
CLEAR:Â Â %F4_MARKED_OBJECTS.
REFRESH: %F4_MARKED_OBJECTS.
%F4_MARKED_OBJECTS-PLVAR = &1.
%F4_MARKED_OBJECTS-OTYPE = &2.
CLEAR %F4_T77EO.
SELECT SINGLE * FROM T77EO INTO %F4_T77EO.
LOOP AT &3 WHERE SIGN = ‘I’.
CASE &3-OPTION.
WHEN ‘EQ’.
%F4_MARKED_OBJECTS-SOBID = &3-LOW.
APPEND %F4_MARKED_OBJECTS.
WHEN ‘BT’.
IF %F4_T77EO IS INITIAL.
SELECT * FROM PLOGI
WHERE OBJID >= &3-LOWÂ AND
OBJID <= &3-HIGH AND
OTYPE EQ &2Â Â Â Â Â AND
PLVAR EQ &1.
%F4_MARKED_OBJECTS-SOBID = PLOGI-OBJID.
APPEND %F4_MARKED_OBJECTS.
ENDSELECT.
ENDIF.
ENDCASE.
ENDLOOP.
CALL FUNCTION ‘RH_OBJID_REQUEST’
EXPORTING
PLVARÂ Â Â Â Â Â Â Â Â Â Â Â = &1
OTYPEÂ Â Â Â Â Â Â Â Â Â Â Â = &2
DYNPRO_REPIDÂ Â Â Â Â = %F4_REPID
DYNPRO_DYNNRÂ Â Â Â Â = %F4_DYNNR
DYNPRO_PLVARFIELD = &4
DYNPRO_OTYPEFIELD = &5
SET_MODEÂ Â Â Â Â Â Â Â Â = ‘X’
IMPORTING
SEL_PLVARÂ Â Â Â Â Â Â Â = %F4_PLVAR
SEL_OTYPEÂ Â Â Â Â Â Â Â = %F4_OTYPE
TABLES
SEL_OBJECTSÂ Â Â Â Â Â = %F4_SEL_OBJECTS
MARKED_OBJECTSÂ Â Â = %F4_MARKED_OBJECTS
EXCEPTIONS
CANCELLEDÂ Â Â Â Â Â Â Â = 1
WRONG_CONDITIONÂ Â = 2
NOTHING_FOUNDÂ Â Â Â = 3
ILLEGAL_MODEÂ Â Â Â Â = 4
INTERNAL_ERRORÂ Â Â = 5
OTHERSÂ Â Â Â Â Â Â Â Â Â Â = 6.
IF &5 NE SPACE AND
%F4_OLD_OTYPE NE %F4_OTYPE.
REFRESH &3.
ENDIF.
IF SY-SUBRC EQ 0.
REFRESH: &3.
CLEAR:Â Â &3.
LOOP AT %F4_SEL_OBJECTS.
&3-LOWÂ Â Â = %F4_SEL_OBJECTS-REALO.
&3-OPTION = ‘EQ’.
&3-SIGN = ‘I’.
APPEND &3.
ENDLOOP.
CLEAR:Â Â %F4_SEL_OBJECTS.
REFRESH: %F4_SEL_OBJECTS.
else.                                            “Note1265523
clear: %f4_sel_objects, %f4_sel_objects[].
clear: %f4_marked_objects, %f4_marked_objects[].
clear: &3-low, &3[].
ENDIF.
ELSE.
PERFORM OBJID_REQUEST_PLVAR_OTYPE
USING SPACE &1Â Â &2
%F4_REPIDÂ %F4_DYNNR
SPACEÂ Â Â Â Â SPACE
%F4_PLVARÂ %F4_OTYPE
&3-LOW.
IF &4 NE SPACE.
&1 = %F4_PLVAR.
ENDIF.
IF &5 NE SPACE.
&2 = %F4_OTYPE.
ENDIF.
EXIT.
ENDIF.
DESCRIBE TABLE &3 LINES %F4_PCHOBJID_LINES.
IF %F4_PCHOBJID_LINES GT %F4_LINES.
IF %F4_LINES EQ 0.
MESSAGE S026(PP).
ELSE.
MESSAGE S027(PP).
ENDIF.
ELSE.
ENDIF.
******CLEAR : SUBRC. <— to linijka, którÄ… należy usunąć z oryginalnego makra
READ TABLE &3 INDEX 1.
IF SY-SUBRC GT 0.
CLEAR &3.
ENDIF.
IF &4 NE SPACE.
&1 = %F4_PLVAR.
ENDIF.
IF &5 NE SPACE.
&2 = %F4_OTYPE.
ENDIF.
SET SCREEN SY-DYNNR.
LEAVE SCREEN.
SET EXTENDED CHECK ON.
END-OF-DEFINITION.
Swoją drogą to nadaje się do zgłoszenia developerom z SAPa.
small business grants on November 13, 2010
Valuable info. Lucky me I found your site by accident, I bookmarked it.