Code:
double timebegin,timeend;
struct timeval tp;
struct timezone tz;
RFC_RC WIN_DLL_EXPORT_FLAGS cll_z_za0007_send(RFC_HANDLE hRfc) {
/* RFC variables */
unsigned crow;
static RFC_RC RfcRc;
char s[1024];
int i, k = 0, loc = 0, col, x, quan;
char key[41], plant[5], csmat[11], cemat[11], cquan[4];
unsigned long nsmat = 0, nemat = 0, nquan = 0;
struct lead
{
unsigned long sapno;
int deltime;
};
struct lead leadrec[1000];
struct lead *leadacc;
char delsap = 'S';
char charsapno[19], chardeltime[4];
int lrec = 0;
/* char p[4097]; */
char p[10000];
int nLine=0;
/* param variables */
MSGNO iMsgno;//import par~var
MSGV1 iMsgv1;
SYST_MSGTY eZconfirm;
ITAB_H thItab = ITAB_NULL;
char xException[256];
/* table row variables */
ZA0007 *tItab;
/* init tables ------------------------------*/
if (thItab==ITAB_NULL) {
thItab = ItCreate("ITAB",sizeof( ZA0007),0,0);
if (thItab==ITAB_NULL) rfc_error("ItCreate ITAB"); }
else {
if (ItFree(thItab) != 0) rfc_error("ItFree ITAB"); }
/* input export parameters --------------------*/
TRC((rlog.trc, "exporting parameters..."));
SETCHAR(eZconfirm,"");
SETCHAR(eZconfirm,"N");
/* input table rows */
memcpy(iMsgno.Msgno,"000",3);
/*iMsgno.Msgno[3]='\x0';it*/
PRT((rlog.prt, ">>ZSAART:%s ZZSYS:%s", eZsaart.Zsaart, eZzsys.Zzsys ));/* del eZsaart.Zsaart*/
TRC((rlog.trc, "ZSAART:%s ZZSYS:%s", eZsaart.Zsaart, eZzsys.Zzsys ));/* del eZsaart.Zsaart*/
/* call RFC function */
sprintf((char *)function_name, "z_za0007_send");
while ( !strncmp(iMsgno.Msgno, "000", 3) ){
/* del RfcRc = z_za0007_send1(hRfc */
alarm(300);
RfcRc = z_za0007_send(hRfc
,&eZconfirm
,&eZsaart
,&eZzsys
,&iMsgno
,&iMsgv1
,thItab
,xException) ;
switch (RfcRc) {
case RFC_OK :
/* display importing parameters */
TRC((rlog.trc, "importing..."));
/*GETCHAR(iMsgno.Msgno,s);*/
TRC((rlog.trc, "MSGNO:%s", iMsgno.Msgno));
/*GETCHAR(iMsgv1.Msgv1,s);it*/
TRC((rlog.trc, "MSGV1:%s",iMsgv1.Msgv1));
if(ItFill(thItab) == 0) {
PRT((rlog.prt, "<<%s",s));
/*TRC((rlog.trc, "<<%s",s));*/
}else{
gettimeofday(&tp,&tz);
timebegin=tp.tv_sec+(double)tp.tv_usec/1000000;
PRT((rlog.prt, "Total %d Record(s)",ItFill(thItab) ));
TRC((rlog.trc, "Total %d Record(s)",ItFill(thItab) ));
}
/* display tables */
nLine=0;
for (crow = 1;crow <= ItFill(thItab); crow++) {
PRT((rlog.prt, "<<crow: %d, ItFill(thItab):%d", crow, ItFill(thItab) ));
tItab = ItGetLine(thItab,crow);
if (tItab == NULL) rfc_error("ItGetLine ITAB");
/*GETNUM(tItab->Zkommid,s);
PRT((rlog.prt, "<<Zkommid:%s", s));
sprintf(s,"%d of %d lines",crow,ItFill(thItab));*/
if (!strcmp(eZsaart.Zsaart, "H013"))
{
strncpy(key, tItab->Zvkey, sizeof(tItab->Zvkey));
key[sizeof(tItab->Zvkey)] = '\0';
/* PRT((rlog.prt, "<<Key:%s", key)); */
col = 1;
quan = 0;
loc = 0;
for (i = 0; i < 41; i++)
{
if (key[i] == ';')
{
if (col == 1)
{
x = 0;
if (loc == i)
{
plant[x] = '\0';
}
{
for (k = loc; k < i; k++)
{
plant[x] = key[k];
x++;
}
plant[x] = '\0';
}
loc = i + 1;
col++;
}
else if (col == 2)
{
x = 0;
if (loc == i)
{
nsmat = 0;
}
{
for (k = loc; k < i; k++)
{
csmat[x] = key[k];
x++;
}
csmat[x] = '\0';
nsmat = atol(csmat);
}
loc = i + 1;
col++;
}
else if (col == 3)
{
x = 0;
if (loc == i)
{
nemat = 0;
}
{
for (k = loc; k < i; k++)
{
cemat[x] = key[k];
x++;
}
cemat[x] = '\0';
nemat = atol(cemat);
}
loc = i + 1;
col++;
}
else if (col == 4)
{
x = 0;
if (loc == i)
{
}
{
for (k = loc; k < i; k++)
{
cquan[x] = key[k];
x++;
}
cquan[x] = '\0';
nquan = atol(cquan);
}
loc = i + 1;
col++;
break;
}
}
}
if (plant[0] == '\0')
PRT((rlog.prt, "<<Oview<<No plantinfkey available"))
if (nsmat == 0)
PRT((rlog.prt, "<<Oview<<No firstmatkey available"))
if (nemat == 0)
PRT((rlog.prt, "<<Oview<<No lastmatkey available"))
if (nquan == 0)
PRT((rlog.prt, "<<Oview<<No quankey available"))
PRT((rlog.prt, "<<plant: %s", plant));
PRT((rlog.prt, "<<nsmat: %lu", nsmat));
PRT((rlog.prt, "<<nemat: %lu", nemat));
PRT((rlog.prt, "<<nquan: %lu", nquan));
tItab->Zvardata[tItab->Zdataln] = '\0';
sprintf(p, "%s;", tItab->Zvardata);
PRT((rlog.prt, "<<%s", p));
leadacc = leadrec;
lrec = 0;
loc = 5;
for (i = 5; i < tItab->Zdataln + 1; i++)
{
if (p[i] == ';')
{
if (delsap == 'S')
{
x = 0;
for (k = loc; k < i; k++)
{
635:if isdigit(p[k])
{
charsapno[x] = p[k];
}
else
{
charsapno[0] = '0';
x = 0;
k = i;
}
x++;
}
charsapno[x] = '\0';
loc = i + 1;
leadacc->sapno = atol(charsapno);
delsap = 'D';
}
652: else
{
x = 0;
for (k = loc; k < i; k++)
{
if (x < 3)
{
chardeltime[x] = p[k];
}
else
{
chardeltime[0] = '0';
x = 0;
k = i;
}
x++;
}
chardeltime[x] = '\0';
loc = i + 1;
leadacc->deltime = atoi(chardeltime);
leadacc++;
lrec++;
delsap = 'S';
}
}
}
leadacc = leadrec;
for (k = 1; k <= lrec; k++)
{
if (k == 1 && leadacc->sapno != nsmat)
PRT((rlog.prt, "<<Oview<<firstmatkey != firstmatset: %lu != %lu", nsmat, leadacc->sapno))
if (k == lrec && leadacc->sapno != nemat)
PRT((rlog.prt, "<<Oview<<lastmatkey != lastmatset: %lu != %lu", nemat, leadacc->sapno))
if (lrec != nquan)
PRT((rlog.prt, "<<Oview<<numkey != numset: %lu != %i", nquan, lrec))
write_ams2_lt(leadacc->sapno, plant, leadacc->deltime);
PRT((rlog.prt, "<<sap_no[%u] = %lu --- leadtime[%u] = %d", k, leadacc->sapno, k, leadacc->deltime));
leadacc++;
}
}
692:else
{
tItab->Zvardata[tItab->Zdataln]='\0';
sprintf(p, "%s%s;", PRE_R3LOV, tItab->Zvardata);
write_ams2(p, strlen(p));
PRT((rlog.prt, "<<%s", p));
}
700:nLine++;
701:PRT((rlog.prt, "<<loop end crow: %d, nLine:%d", crow, nLine));
}
if(ItFill(thItab) != 0) {
gettimeofday(&tp,&tz);
706:timeend=tp.tv_sec+(double)tp.tv_usec/1000000;
707:PRT((rlog.prt, "%d Record(s) processed in %ld [seconds]",nLine, timeend-timebegin));
708:TRC((rlog.trc, "%d Record(s) processed in %lf [seconds]",nLine, timeend-timebegin ));
}
710:SETCHAR(eZconfirm,"Y"); /*"Y"*/
711:TRC((rlog.trc, "ZCONFIRM:'%s' confirmation sent",eZconfirm));
break;
case RFC_EXCEPTION :
/* exception raised */
fprintf(stderr, "%s raised.",xException);
717:ERR((rlog.err, "%s raised.",xException));
718:rfc_error("rfc exception.");
case RFC_SYS_EXCEPTION :
rfc_error("system exception raised");
case RFC_FAILURE :
rfc_error("failure");
default :
rfc_error("other failure");
}
}
/* delete tables */
if (ItDelete(thItab) != 0)
rfc_error("ItDelete ITAB");
return RfcRc;
}
/*** rfc_error() ******/
void rfc_error(char *operation) {
RFC_ERROR_INFO RfcErrorInfo;
ERR((rlog.err, "RFC error."));
ERR((rlog.err, "operation:%s.", operation));
memset(&RfcErrorInfo,0,sizeof(RfcErrorInfo));
RfcLastError(&RfcErrorInfo);
ERR((rlog.err, "key:%s", RfcErrorInfo.key));
ERR((rlog.err, "status:%s", RfcErrorInfo.status));
ERR((rlog.err, "message:%s", RfcErrorInfo.message));
ERR((rlog.err, "internal status:%s", RfcErrorInfo.intstat));
RfcClose (RFC_HANDLE_NULL);
if( clean_up() == 0)
TRC((rlog.trc, "DISCONNECTED from ORACLE..."));
TRC((rlog.trc, "END UP with exception. see %s file", err));
if (outfile!=NULL) fclose(outfile);
if(rlog.prt!=NULL) fclose(rlog.prt);
if(rlog.err!=NULL) fclose(rlog.err);
if(rlog.trc!=NULL) fclose(rlog.trc);
exit(1);
}
Please help me to resolve this.