Подниму старую чужую тему.
Итак: Есть внешняя система, написанная на яве. Есть сап. Необходимо щелчком по ссылке в ява-программе открыть сап на нужной транзцакции с нужным документом. Пока всё уткнулось в то, что сап вернул ошибку Screen output without connection to user. RFC ФМ выглядит примерно так:
Code:
FUNCTION ZFM_RFC_DISPLAY_TST.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(I_BNAME) LIKE SUID_ST_BNAME-BNAME
*" EXPORTING
*" VALUE(FUNCTION_CODE) LIKE SY-SLSET
*"----------------------------------------------------------------------
*data: CONVE LIKE DDSCR-CONVEXIT.
*DATA: BEGIN OF MEMORY_VALUES OCCURS 0,
* FIELDNAME LIKE BDCDATA-FNAM,
* FIELDVALUE LIKE BDCDATA-FVAL,
* END OF MEMORY_VALUES.
CLEAR: CONVE.
CLEAR: MEMORY_VALUES. REFRESH MEMORY_VALUES.
PERFORM SET_GUI_FOCUS. "P30K076104
CALL FUNCTION 'RFC_SET_EXPORT_PARAMETERS'
TABLES MEMORY_VALUES = MEMORY_VALUES.
IF NOT I_BNAME IS INITIAL. "3.1H
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = I_BNAME
IMPORTING
OUTPUT = I_BNAME.
ENDIF.
SET PARAMETER ID 'XUS' FIELD I_BNAME.
IF NOT I_BNAME IS INITIAL.
CALL TRANSACTION 'SU01' AND SKIP FIRST SCREEN.
ELSE.
CALL TRANSACTION 'SU01'.
ENDIF.
ENDFUNCTION.
*--------------------------------------------------------------------*
* FORM IMPORT_PARAMETERS_FROM_MEMORY *
*--------------------------------------------------------------------*
* Die Routine importiert die von der gerufenen Transak- *
* tion gesetzten Parameter, wertet diese aus und füllt *
* globale Parameter sowie den FUNCTION_CODE. *
*--------------------------------------------------------------------*
* --> I_FCODE (Funktionscode) *
*--------------------------------------------------------------------*
FORM IMPORT_PARAMETERS_FROM_MEMORY USING I_FCODE.
CLEAR: INSERT_DOKAR, INSERT_DOKNR, INSERT_DOKTL, INSERT_DOKVR,
INSERT_DPATH, I_FCODE, INSERT_MATNR, INSERT_AENNR,
INSERT_EQUNR. "P30K050855
CLEAR: MEMORY_VALUES. REFRESH MEMORY_VALUES.
CALL FUNCTION 'RFC_GET_IMPORT_PARAMETERS'
TABLES MEMORY_VALUES = MEMORY_VALUES.
LOOP AT MEMORY_VALUES.
CASE MEMORY_VALUES-FIELDNAME.
WHEN 'DRAW-DOKAR'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_DOKAR.
WHEN 'DRAW-DOKNR'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_DOKNR.
WHEN 'DRAW-DOKTL'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_DOKTL.
WHEN 'DRAW-DOKVR'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_DOKVR.
WHEN 'COMMANDLINE'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_DPATH.
WHEN 'MOD_FLAG'.
IF MEMORY_VALUES-FIELDVALUE <> SPACE.
* Nur wenn nicht bereits mit Check out or insert info belegt.
IF I_FCODE = SPACE. "P30K013764
MOVE FC_UPDATE TO I_FCODE. "P30K013764
ENDIF. "P30K013764
ENDIF.
WHEN 'MARA-MATNR'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_MATNR.
WHEN 'AENR-AENNR'.
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_AENNR.
WHEN 'EQUI-EQUNR'. "P30K050855
MOVE: MEMORY_VALUES-FIELDVALUE TO INSERT_EQUNR. "P30K050855
* AZ: Dokument einfügen, AE: Dokument ausgecheckt, UPDA: Angelegt
WHEN 'FCODE'.
CASE MEMORY_VALUES-FIELDVALUE(2).
* document inserted
WHEN 'AZ'.
MOVE FC_DOC_INSERT TO I_FCODE.
IMPORT RMCLS-KLART
RMCLS-CLASS
RMCLS-KEY_DATE
LANGUAGE "4.0
H_OBTAB
STR_OBJEKTE
H_CLS_CHARAC
FROM MEMORY ID 'CAD_CLS_RFC'.
* document checked out
WHEN 'AE'.
MOVE FC_DOC_CHECKOUT TO I_FCODE.
IMPORT RMCLS-KLART
RMCLS-CLASS
RMCLS-KEY_DATE
LANGUAGE "4.0
H_OBTAB
STR_OBJEKTE
H_CLS_CHARAC
FROM MEMORY ID 'CAD_CLS_RFC'.
* document updated/created
WHEN 'UP'.
MOVE FC_DOC_UPDATE TO I_FCODE.
* document view
WHEN 'AV'.
MOVE FC_DOC_VIEW TO I_FCODE.
IMPORT RMCLS-KLART
RMCLS-CLASS
RMCLS-KEY_DATE
LANGUAGE
H_OBTAB
STR_OBJEKTE
H_CLS_CHARAC
FROM MEMORY ID 'CAD_CLS_RFC'.
WHEN OTHERS.
CLEAR I_FCODE.
ENDCASE.
ENDCASE.
ENDLOOP.
CLEAR: DRAW_RFC.
data: l_exit.
CALL FUNCTION 'CAD_CHECK_FUNCTION_EXIT'
IMPORTING
F_EXIT = l_exit.
* refresh memory values for dialog-RFC interface
free memory id 'CAD_RFC1'.
free memory id 'CAD_RFC2'.
ENDFORM.
FORM set_gui_focus.
CALL FUNCTION 'SAPGUI_SET_PROPERTY' "30F
DESTINATION 'SAPGUI' "30F
EXPORTING property = 'ACTIVATE' "30F
value = 'X' "30F
EXCEPTIONS system_failure = 1 "30F
communication_failure = 2 "30F
OTHERS = 3. "30F
ENDFORM. "SET_GUI_FOCUS