‎2007 Mar 12 3:55 PM
Hi everyone
I've modified the IW_C_CREATE_TRANSPORT_REQUEST Functional module so that it calls the GUI_EXEC FM which calles my java script which saves the transport ID with a filename specified. The code seems to work when i test it within SAP, but when i come to use STARTRFC to call the function, the added code dosen't seem to be executing, the transport still gets created but my javascript is not being called?
Anyone know why?
Thanks - Peter
Code following
FUNCTION IW_C_CREATE_TRANSPORT_REQUEST.
*"----
-
""Local interface:
*" IMPORTING
*" VALUE(DESCRIPTION) LIKE E07T-AS4TEXT
*" VALUE(TRANSPORT_KIND) LIKE E070-TRFUNCTION DEFAULT 'K'
*" VALUE(LANGU) LIKE SY-LANGU DEFAULT 'EN'
*" VALUE(CQ_ID) LIKE E070-TRKORR DEFAULT 'FileName'
*" EXPORTING
*" VALUE(COMMFILE) LIKE E070-TRKORR
*" VALUE(PROG_PATH) LIKE E070-TRKORR
*" VALUE(CLASSNAME) LIKE E07T-AS4TEXT
*" EXCEPTIONS
*" LANGUAGE_MISSING
*" NUMBER_RANGE_FULL
*" UNALLOWED_TRFUNCTION
*" NO_AUTHORIZATION
*" CREATE_TRANSPORT_ERROR
*"----
-
CLEAR COMMFILE.
CASE TRANSPORT_KIND.
WHEN 'P'.
Stücklisten für Releasewechsel
IF NOT LANGU IS INITIAL.
PERFORM CREATE_RELEASE_REQUEST
USING LANGU
DESCRIPTION
TRANSPORT_KIND
CHANGING COMMFILE.
ELSE.
keine Sprache angegeben und Transportart Stücklisten
RAISE LANGUAGE_MISSING.
ENDIF.
WHEN OTHERS.
Alle anderen Transporte
PERFORM CREATE_REQUEST
USING DESCRIPTION
TRANSPORT_KIND
CHANGING COMMFILE.
ENDCASE.
*{ INSERT SM1K900042 1
WRITE 'Entering My Pogram'.
PROG_PATH = 'java.exe'.
CLASSNAME = '-cp c: writeToFile'.
CONDENSE CLASSNAME.
CONDENSE PROG_PATH.
CONCATENATE CLASSNAME CQ_ID COMMFILE INTO CLASSNAME SEPARATED BY ' '.
CALL FUNCTION 'GUI_EXEC'
EXPORTING
PARAMETER = CLASSNAME
COMMAND = PROG_PATH.
WRITE 'Our path is'.
WRITE PROG_PATH.
WRITE CLASSNAME.
*} INSERT
ENDFUNCTION.
*************************FORMS****************************************
*----
*
FORM CREATE_RELEASE_REQUEST *
*----
*
Transportauftrag für Stücklisten erstellen *
*----
*
FORM CREATE_RELEASE_REQUEST
USING P_LANGU LIKE SY-LANGU
P_TRANSPORT_DESCRIPT LIKE E07T-AS4TEXT
P_TRANS_KIND LIKE E070-TRFUNCTION
CHANGING P_COMMFILE LIKE E070-TRKORR.
DATA: SUBRC LIKE SY-SUBRC,
H_TMP_LANG(2) TYPE C,
H_NUMBER(3) TYPE C,
NUMBER(4) TYPE C.
Anwednungslog öffnen
PERFORM OPEN_LOG
USING P_TRANSPORT_DESCRIPT.
*Nummer ziehen
PERFORM GET_NUMBER USING P_LANGU
CHANGING H_NUMBER
SUBRC.
IF SUBRC = 12.
Fehler beim erstellen des Transportauftrags
RAISE CREATE_TRANSPORT_ERROR.
ELSEIF SUBRC = 11.
Nummernkreis voll
RAISE NUMBER_RANGE_FULL.
ELSE.
WRITE P_LANGU TO H_TMP_LANG.
P_COMMFILE = 'SAPKXXXLYY'.
REPLACE 'XXX' WITH H_NUMBER INTO P_COMMFILE.
REPLACE 'YY' WITH H_TMP_LANG INTO P_COMMFILE.
CALL FUNCTION 'SUBST_CREATE_COMMANDFILE'
EXPORTING
IV_KORRNAME = P_COMMFILE
IV_KORRTYPE = P_TRANS_KIND
IV_KORRTEXT = P_TRANSPORT_DESCRIPT
EXCEPTIONS
NAME_COLLISION = 1
CREATE_HEADER_FAILED = 2
UPDATE_HEADER_FAILED = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
CLEAR P_COMMFILE.
Fehler beim Erstellen des Transportauftrags
RAISE CREATE_TRANSPORT_ERROR.
ELSE.
Transportauftrag erstellt
Log schreiben
PERFORM WRITE_LOGFILE
USING P_COMMFILE.
ENDIF.
ENDIF.
ENDFORM. "CREATE_RELEASE_REQUEST
*----
*
FORM CREATE_REQUEST *
*----
*
Transportauftrag erstellen *
*----
*
FORM CREATE_REQUEST
USING P_TRANSPORT_DESCRIPT LIKE E07T-AS4TEXT
P_TRANS_KIND LIKE E070-TRFUNCTION
CHANGING P_COMMFILE LIKE E070-TRKORR.
CALL FUNCTION 'TRINT_INSERT_NEW_COMM'
EXPORTING
WI_KURZTEXT = P_TRANSPORT_DESCRIPT
WI_TRFUNCTION = P_TRANS_KIND
IMPORTING
WE_TRKORR = P_COMMFILE
EXCEPTIONS
NUMBER_RANGE_FULL = 1
INVALID_INPUT = 2
NO_AUTHORIZATION = 3
OTHERS = 4.
CASE SY-SUBRC.
WHEN 0.
Auftrag erstellt
Anwednungslog öffnen
PERFORM OPEN_LOG
USING P_TRANSPORT_DESCRIPT.
Log schreiben
PERFORM WRITE_LOGFILE
USING P_COMMFILE.
WHEN 1. "Nummernkreis für Aufträge voll
CLEAR P_COMMFILE.
RAISE NUMBER_RANGE_FULL.
p_error_msg-no = '735'.
WHEN 2. "Unbekannter Auftragstyp
CLEAR P_COMMFILE.
RAISE UNALLOWED_TRFUNCTION.
p_error_msg-no = '353'.
WHEN 3. "keine Berechtigung
CLEAR P_COMMFILE.
RAISE NO_AUTHORIZATION.
p_error_msg-no = '328'.
WHEN 4. "Allgemeiner Fehler
CLEAR P_COMMFILE.
RAISE CREATE_TRANSPORT_ERROR.
p_error_msg-no = '353'.
ENDCASE.
ENDFORM. "create_request
*----
*
FORM OPEN_LOG *
*----
*
Anwedungslog öffnen *
*----
*
FORM OPEN_LOG
USING P_TRANSPORT_DESCRIPT LIKE E07T-AS4TEXT.
*init application log
PERFORM LOG_INIT USING C_APPL_LOG_TRANSPORT.
*log header
PERFORM LOG_HEADER
USING C_APPL_LOG_TRANSPORT P_TRANSPORT_DESCRIPT.
ENDFORM. "OPEN_LOG
*----
*
FORM WRITE_LOGFILE *
*----
*
Logfile in den Anwendungslog schreiben *
*----
*
-> P_TRANSPORT_DESCRIPT *
*----
*
FORM WRITE_LOGFILE
USING P_COMMFILE LIKE E070-TRKORR.
DATA: H_ERROR_MSG LIKE IWERRORMSG.
*log message transport created
CLEAR H_ERROR_MSG.
MOVE '42' TO H_ERROR_MSG-ID.
MOVE 'I' TO H_ERROR_MSG-TYPE.
MOVE '733' TO H_ERROR_MSG-NO.
MOVE P_COMMFILE TO H_ERROR_MSG-V1.
PERFORM LOG_MSG
USING C_APPL_LOG_TRANSPORT '2' H_ERROR_MSG.
*log save
PERFORM LOG_SAVE
USING C_APPL_LOG_TRANSPORT.
ENDFORM. "WRITE_LOGFILE
*----
*
FORM GET_NUMBER *
*----
*
........ *
*----
*
--> LANGU *
--> NUMBER *
*----
*
FORM GET_NUMBER
USING LANGU LIKE SY-LANGU
CHANGING NUMBER TYPE C
SUBRC LIKE SY-SUBRC.
CONSTANTS: OBJECT LIKE INRI-OBJECT VALUE 'SIWBTRANSP'.
DATA: NR_RANGE LIKE INRI-NRRANGENR,
RETURNCODE LIKE INRI-RETURNCODE,
ERROR_MSG LIKE IWERRORMSG.
CLEAR SUBRC.
NR_RANGE = '01'.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
NR_RANGE_NR = NR_RANGE
OBJECT = OBJECT
SUBOBJECT = LANGU
IMPORTING
NUMBER = NUMBER
RETURNCODE = RETURNCODE
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
NUMBER_RANGE_NOT_INTERN = 2
OBJECT_NOT_FOUND = 3
QUANTITY_IS_0 = 4
QUANTITY_IS_NOT_1 = 5
INTERVAL_OVERFLOW = 6
OTHERS = 7.
CASE SY-SUBRC.
WHEN 00.
WHEN 01.
PERFORM NUMBER_RANGE_INTERVAL_INSERT
USING NR_RANGE LANGU
CHANGING NUMBER
RETURNCODE.
WHEN OTHERS.
SUBRC = 12.
PERFORM FILL_ERROR_MSG
USING C_MESSAGE_ERROR 736 SY-SUBRC SPACE SPACE SPACE
CHANGING ERROR_MSG.
PERFORM LOG_MSG USING C_APPL_LOG_TRANSPORT 1 ERROR_MSG.
ENDCASE.
CASE RETURNCODE.
WHEN ' '.
WHEN '1'. "Nummer im kritischen Bereich
PERFORM FILL_ERROR_MSG
USING C_MESSAGE_INFO 734 SPACE SPACE SPACE SPACE
CHANGING ERROR_MSG.
PERFORM LOG_MSG USING C_APPL_LOG_TRANSPORT 2 ERROR_MSG.
WHEN '2'. "letzte Nummer vergeben
PERFORM FILL_ERROR_MSG
USING C_MESSAGE_INFO 735 SPACE SPACE SPACE SPACE
CHANGING ERROR_MSG.
PERFORM LOG_MSG USING C_APPL_LOG_TRANSPORT 1 ERROR_MSG.
SUBRC = 11.
ENDCASE.
ENDFORM. "number_get
Message was edited by:
Peter Lai
‎2007 Mar 12 3:57 PM
I have modified FM's myself that are called via an RFC. They code changes where not recognised until the calling application was re-started.
I suspect that the code is being buffered for the particular application.
‎2007 Mar 12 4:42 PM
Hi i've tried restarting and starting the server, but it didn't help, would it have anything to do with the fact i'm callin sap which is calling JAVA from a .exe program. The .exe program is having problems connecting to the JAVA program as there is no link?
I did a trace as well and this is what it came up with:
Error in program 'startrfc': ======> Exception condition "NO_BATCH" raised.
>>>> [1] <unknown> : EXT <ac: 7> L DDSLOCTE01 >>> CLOSE abrfcrcv.c 429 (23850562)
-{F0776FA3-F1A7-4662-BF7A-D1352735C394}
*> RfcReceive
handle = 1
Data conversion On
Error in program 'startrfc': <* RfcReceive [1] : returns 3:RFC_SYS_EXCEPTION
Error in program 'startrfc': <* RfcCallReceive [1] : returns 3:RFC_SYS_EXCEPTION
>>>> [1] <unknown> : EXT <ac: 8> L DDSLOCTE01 >>> FREE abrfcio.c 3517 (23850562)
-{F0776FA3-F1A7-4662-BF7A-D1352735C394}
Trace file opened at 20070312 164006 GMT Standard T, SAP-REL 640,0,119 RFC-VER 3 818122 MT-SL
*> RfcClose called by external program ...
handle = 1
*> rfcClose called by RFC-Library in file: abrfc.c, line: 532
handle = 1
Trace file opened at 20070312 164006 GMT Standard T, SAP-REL 640,0,119 RFC-VER 3 818122 MT-SL
<* rfcClose
>* RfcClose
Any help or ideas what it could be would be great