on 03-03-2016 8:14 PM
We currently use the Unicode version of the NWRFC libraries for calls to rfcexec and startrfc. (i.e. SERVER_EXEC). However, the pending changes to the BSI programs will require us to use the EBCDIC libraries for their RFC calls. If I understand OSS note 1097797 correctly, we can have both at the same time. From that note, “In this case, you may have installed two variants of the SDK on your server in parallel; the EBCDIC/UNICODE (ILE) variant in its function as SDK and the UNICODE (PASE) variant as supplement to the SAP kernel.” I am not completely clear how I will do that. Can anyone explain further? Do I need to add the new library (in my case R3720NWRFC) to the library list of the job description for user TF10 (the BSI user on the system i). Something else? Something additional? Does anyone actually have BSI10, Cyclic J, New RFC Wrapper actually working?
Hello Rick,
first of all the correct number of the SAP Note is 1097997.
If I understand you right, you are currently using the PASE UNICODE NWRFCSDK to use the programs startrfc and rfcexec.
Now you want to install an additional ILE EBCDIC NWRFCSDK beside.
Just follow the description in the section 'Installation of the EBCDIC ILE version'.
Please avoid collisions with already existing libraries or ifs directories. In this case use your own names.
Before you start any program using the EBCDIC NWRFCSDK please ensure that the current library and the current ifs directory appropriately. If you want you can add it to the job description of the user running the job. I would prefer to write a small CL that does the CD and the CHGCURLIB and then calls the NWRFC program.
Best regards
Joachim
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Joachim - thank you for correcting the note number. The only time the NWRFC EBCDIC modules are being called is through the BSI tax interface so a frontend CL is probably not in the cards. I believe I have followed the instructions for installing same correctly. However, when I run RPUTLTU0 to test the Tax Locator or RPUBTCU0 to test Tax Factory , I get "Communication error, CPIC return code 020, SAP return code 223" in SM21 which doesn't tell me much. However, when I look at the joblog on the 400 side, I am getting a decimal data error (MCH1202) to module SAPFUNC. to procedure bsi2sapAMOUNT. At this point, I am thinking about copying all of the service programs and programs from the NWRFC library into the BSI library (TF10), but I'm not super confident that will help. Also, adding the library to the job description of the user is probably a non-starter as well, since the programs actually run under the instance ADM profile. Altering that library list might just be asking for more trouble. I was hoping someone had already been through the installation of the BSI cyclic J with the new RFC wrapper and might have seen this already.
After getting my intelligence insulted by SAP for the last few months, I have returned in the hopes you can help me out. I've elected to try the frontend CL route as you suggested. However, when I use that CL program in the program for the RFC destination, it dumps on the 400 with " Program QP0ZPCPN attempted to call program TF10RFC with 13 parameters. Program TF10RFC expects a minimum of 0 and a maximum of 0". Do you (or anyone) know what those 13 parameters might be? Or is there a way to code around that? Thanks - Rick
Pretty basic stuff - error handlers and three lines "work" - Here you go.
PGM
/* SYNOPSIS: */
/* Change current directory to /R3720NWRFC
/* Change current library to R3720NWRFC */
/* Call program TF10 */
/* to make it work. */
/* For retrieving attributes of this job: */
DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&NBR) TYPE(*CHAR) LEN(6)
DCL VAR(&LOGLVL) TYPE(*CHAR) LEN(1)
DCL VAR(&LOGSEVN) TYPE(*DEC) LEN(2 0)
DCL VAR(&LOGTYPE) TYPE(*CHAR) LEN(10)
DCL VAR(&LOGCLPGM) TYPE(*CHAR) LEN(10)
DCL VAR(&INQMSGRPY) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTQLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&ACGCDE) TYPE(*CHAR) LEN(15)
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&SWS) TYPE(*CHAR) LEN(8)
DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
DCL VAR(&RTNCDEN) TYPE(*DEC) LEN(5 0)
DCL VAR(&ENDSTS) TYPE(*CHAR) LEN(1)
DCL VAR(&RUNPTYN) TYPE(*DEC) LEN(2 0)
DCL VAR(&TIMESLICEN) TYPE(*DEC) LEN(7 0)
DCL VAR(&PURGE) TYPE(*CHAR) LEN(10)
DCL VAR(&DFTWAITN) TYPE(*DEC) LEN(7 0)
DCL VAR(&USRLIBL) TYPE(*CHAR) LEN(275)
DCL VAR(&SBMMSGQ) TYPE(*CHAR) LEN(10)
DCL VAR(&SBMMSGQLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PRTTXT) TYPE(*CHAR) LEN(30)
DCL VAR(&DDMCNV) TYPE(*CHAR) LEN(5)
DCL VAR(&BRKMSG) TYPE(*CHAR) LEN(7)
DCL VAR(&DATFMT) TYPE(*CHAR) LEN(4)
DCL VAR(&DATSEP) TYPE(*CHAR) LEN(1)
DCL VAR(&CURLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PRTDEV) TYPE(*CHAR) LEN(10)
DCL VAR(&SYSLIBL) TYPE(*CHAR) LEN(165)
DCL VAR(&CURUSER) TYPE(*CHAR) LEN(10)
DCL VAR(&SUBTYPE) TYPE(*CHAR) LEN(1)
DCL VAR(&PRTKEYFMT) TYPE(*CHAR) LEN(10)
DCL VAR(&TIMSEP) TYPE(*CHAR) LEN(1)
DCL VAR(&TSEPOOL) TYPE(*CHAR) LEN(10)
DCL VAR(&DEVRCYACN) TYPE(*CHAR) LEN(13)
DCL VAR(&STSMSG) TYPE(*CHAR) LEN(7)
DCL VAR(&CCSIDN) TYPE(*DEC) LEN(5 0)
/* Program variables */
/* NON - Standard error routine */
DCL VAR(&ERRORSW ) TYPE(*LGL )
DCL VAR(&EMSGID) TYPE(*CHAR) LEN(7)
DCL VAR(&EMSGDTA) TYPE(*CHAR) LEN(100)
DCL VAR(&EMSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&EMSGFLIB) TYPE(*CHAR) LEN(10)
MONMSG MSGID(CPD0000 CPF0000 UEX0000 Y2U0000 +
RPG0000 MCH0000 SAP0000) EXEC(GOTO +
CMDLBL(STDERR1))
/* Retrieve attributes of this job (for debug analysis - visible in CL dump) */
RTVJOBA JOB(&JOB) USER(&USER) NBR(&NBR) +
LOGLVL(&LOGLVL) LOGSEV(&LOGSEVN) +
LOGTYPE(&LOGTYPE) LOGCLPGM(&LOGCLPGM) +
INQMSGRPY(&INQMSGRPY) OUTQ(&OUTQ) +
OUTQLIB(&OUTQLIB) ACGCDE(&ACGCDE) +
DATE(&DATE) SWS(&SWS) TYPE(&TYPE) +
RTNCDE(&RTNCDEN) ENDSTS(&ENDSTS) +
RUNPTY(&RUNPTYN) TIMESLICE(&TIMESLICEN) +
PURGE(&PURGE) DFTWAIT(&DFTWAITN) +
USRLIBL(&USRLIBL) SBMMSGQ(&SBMMSGQ) +
SBMMSGQLIB(&SBMMSGQLIB) PRTTXT(&PRTTXT) +
DDMCNV(&DDMCNV) BRKMSG(&BRKMSG) +
DATFMT(&DATFMT) DATSEP(&DATSEP) +
CURLIB(&CURLIB) PRTDEV(&PRTDEV) +
SYSLIBL(&SYSLIBL) CURUSER(&CURUSER) +
SUBTYPE(&SUBTYPE) PRTKEYFMT(&PRTKEYFMT) +
TIMSEP(&TIMSEP) TSEPOOL(&TSEPOOL) +
DEVRCYACN(&DEVRCYACN) STSMSG(&STSMSG) +
CCSID(&CCSIDN)
CD DIR('/R3720NWRFC')
CHGCURLIB CURLIB(R3720NWRFC)
CALL PGM(TF10)
RCLRSC
RETURN /* Normal end of program */
/********** ***********/
STDERR1: /* Standard error handling routine */
IF COND(&ERRORSW) THEN(SNDPGMMSG MSGID(CPF9999) +
MSGF(QCPFMSG) MSGTYPE(*ESCAPE)) /* Fn chk */
CHGVAR VAR(&ERRORSW) VALUE('1') /* Set to fail if +
another error occurs */
/* Send messages back to caller */
STDERR2: RCVMSG MSGTYPE(*DIAG) MSGDTA(&EMSGDTA) +
MSGID(&EMSGID) MSGF(&EMSGF) +
SNDMSGFLIB(&EMSGFLIB)
IF COND(&EMSGID *EQ ' ') THEN(GOTO +
CMDLBL(STDERR3))
SNDPGMMSG MSGID(&EMSGID) MSGF(&EMSGFLIB/&EMSGF) +
MSGDTA(&EMSGDTA) TOPGMQ(*EXT) MSGTYPE(*DIAG)
GOTO CMDLBL(STDERR2) /* Loop back for addl +
diagnostics */
STDERR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&EMSGDTA) +
MSGID(&EMSGID) MSGF(&EMSGF) +
SNDMSGFLIB(&EMSGFLIB)
SNDPGMMSG MSGID(&EMSGID) MSGF(&EMSGFLIB/&EMSGF) +
MSGDTA(&EMSGDTA) TOPGMQ(*EXT) MSGTYPE(*COMP)
RETURN /* Error end of program */
ENDPGM
Hi Rick,
I seemed to missunderstood the problem.
Is TF10RFC the CL wrapper?
If so the call of the wrapper produces the error and not the call of TF10 by the wrapper. This was my missunderstanding.
OK the CL wrapper consumes no argument and CL programs are not variable with their arguments as C programs are. The C program gets its argv vector and can do what it wants including ignoring it. A CL program cannot. So the CL program is registered in the system and called with 13 arguments, which should be propagated to TF10.
OK now I'm realizing that my idea of a CL wrapper was not a good solution.
Could you please provide the information in detail how your BSI cyclic is registered in the system. Maybe I could find a solution here.
Sorry for the inconveniences.
Best regards
Joachim
User | Count |
---|---|
84 | |
24 | |
12 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.