Code:
- * Compileren:
- * CRTBNDRPG PGM(PRDVDAPGM/AV612RGB) SRCFILE(AVENNESRC/QRPGLESRC) DBGVIEW(*LIST)
- H DFTACTGRP(*NO) BNDDIR('JDBC':'PRDVDA')
- H Option(*nodebugio:*srcstmt)
-
- FAVCRMIL1 UF E K disk
- FAVCRMML1 IF E K disk
-
- /copy AVENNESRC/QRPGLESRC,jdbc_h
- /Copy Avennesrc/qrpglesrc,TABPARPR
-
- D AV612RGB PR extpgm('AV612RGB')
- D bedrijf 3S 0 const
- D bestand 10A
- D batch 1A
- D AV612RGB PI
- D bedrijf 3S 0 const
- D bestand 10A
- D batch 1A
-
- D InsertRec PR 1N
- D UpdateRec PR 1N
- D DeleteRec PR 1N
- D CheckFiche PR 1N
- D CheckDatum PR 1N
-
- D conn s like(Connection)
- D ErrMsg s 50A
- D wait s 1A
- D count s 10I 0
- D rs s like(ResultSet)
- D rcDB s 10I 0
-
- D i s 2 0
- D j s 2 0
- D t s 2 0
- D PosW s 4 0
- D PosL s 4 0
- D lijn S 6 0
- D TeVerwTabel S 20A
- D Col S 20A DIM(99)
- D PCol S 20A DIM(99)
- D IndexCa S 2 0
- D IndexPCa S 2 0
- D tijdc s 8
- D stat s 2 0
- D uitvoeren s 1 0
- D teller s 3 0
- D tellerA s 3A
- D DS
- DCHECKEDFICHES DIM(1000)
- D Bedr 3 0 Overlay(CHECKEDFICHES:1) Inz(*Zeros)
- D Klnr 17A Overlay(CHECKEDFICHES:4) Inz(*Blanks)
- D Exts 2 0 Overlay(CHECKEDFICHES:22) Inz(*Zeros)
-
- D DS
- DGEGEVENS DIM(40)
- D VeldAS400 10A Overlay(GEGEVENS:1)
- D Lengte 4A Overlay(GEGEVENS:11)
- D Type 1A Overlay(GEGEVENS:15)
- D CRMTabel 20A Overlay(GEGEVENS:16)
- D VeldCRM 20A Overlay(GEGEVENS:36)
- D Waarde 120A Overlay(GEGEVENS:56)
- D LVrKomma 2 0 Overlay(GEGEVENS:176)
- D LNaKomma 2 0 Overlay(GEGEVENS:178)
- *
- *
- DTabParResult DS
- D OKX0 1
- D TSWR 30
- D RKWR 15S 6
-
- /free
- *inlr = *on;
- //Connectie maken met de MySQL-Server
- conn = JDBC_Connect( 'com.mysql.jdbc.Driver'
- : 'jdbc:mysql://XXX.YYY.ZZZ.AAA/AS400'
- : '******'
- : '******');
- if (conn = *NULL);
- return;
- endif;
-
- //Te gebruiken database instellen
- rcDB = JDBC_ExecUpd( conn : 'Use AS400' );
-
-
- If (bestand <> *Blanks);
- Exsr VerwerkBestand;
- Else;
- If (batch = 'X');
- teller = 0;
- Dow (teller < 10 or Tswr <> *Blanks);
- teller += 10;
- tellerA = %editC(%dec(teller:3:0):'X');
- TabPar(1:'10':'N':'2':'100849':tellerA:TabParResult);
- If (Tswr <> *Blanks);
- bestand = Tswr;
- ExSr VerwerkBestand;
- EndIf;
- EndDo;
- Bestand = *Blanks;
- EndIf;
- EndIf;
-
- jdbc_close(conn);
- return;
-
-
- BegSr VerwerkBestand;
- //Gekozen bestand verwerken
- lijn = 0;
- SetLl (Bedrijf:Bestand) AVCRMIL1;
- ReadE (Bedrijf:Bestand) AVCRMIL1;
- Dow not %eof(AVCRMIL1);
- Chain (BedrCr:FileCr) AVCRMML1;
- If %found(AVCRMML1);
- i = 1;
- PosW = 1;
- PosL = 1;
- lijn += 1;
- VeldAs400 = *Blanks;
- Lengte = *Blanks;
- Type = *Blanks;
- CRMTabel = *Blanks;
- VeldCRM = *Blanks;
- Waarde = *Blanks;
- LVrKomma = *Zeros;
- LNaKOmma = *Zeros;
- //Record uitsplitsen en in een tabel steken.
- //Er zullen maximum 40 rijen zijn.
- Dow (i <= 40);
- If (%len(%trim(FldsCm)) > (i*10) - 9);
- //Velnaam uit AS400
- VeldAs400(i) = %subst(FldsCm:(i*10)-9:10);
- //Lengte van het veld (vb 15,3)
- Lengte(i) = %subst(FldlCm:PosL:4);
- //Type van het veld (A = Alfanumeriek, N = Numeriek en S = Signed)
- Type(i) = %subst(FldtCm:i:1);
- //Tot welke CRM-tabel hoort het veld
- CrmTabel(i) = %subst(TbmsCm:(i*20)-19:20);
- //Wat is de naam van het veld in de CRM-tabel
- VeldCrm(i) = %subst(FlmsCm:(i*20)-19:20);
- //Testen of het veld getallen na de komma heeft.
- If (%dec(%subst(Lengte(i):3:2):2:0) > 0);
- Select;
- When (Type(i) = 'S');
- //Signed ==> 2 karakters meer rekenen dan de lengte,
- // voor , en voor - teken.
- Waarde(i) =%subst(DataCr:
- PosW:
- %dec(%subst(Lengte(i):1:2):2:0)+2);
- posW += %dec(%subst(Lengte(i):1:2):2:0) + 2;
- When (Type(i) = 'N');
- //Numeriek ==> 1 karakter meer rekenen dan de lengte,
- // voor , .
- Waarde(i) =%subst(DataCr:
- PosW:
- %dec(%subst(Lengte(i):1:2):2:0)+1);
- posW += %dec(%subst(Lengte(i):1:2):2:0) + 1;
- EndSl;
- Else;
- //Tekst of geen getallen na de komma ==> gewone lengte gebruiken
- If (VeldCrm(i) = 'Facturatiecondities');
- Waarde(i) = %subst(DataCr:PosW:120);
- posW += 120;
- Else;
- Waarde(i) =%subst(DataCr:
- PosW:
- %dec(%subst(Lengte(i):1:2):2:0));
- posW += %dec(%subst(Lengte(i):1:2):2:0);
- EndIf;
- EndIf;
-
- PosL += 4;
- i += 1;
- Else;
- i = 41;
- EndIf;
- EndDo;
-
- uitvoeren = 1;
- If (Bestand = 'ORPDGR'); //Voor tabel Billing_Accounts
- //Eerst controleren of de datum <= huidige datum.
- If CheckDatum();
- uitvoeren = 1;
- Else;
- uitvoeren = 0;
- EndIf;
- EndIf;
-
- If (uitvoeren = 1);
- Select;
- When (IuadCr = 'A');
- //Toevoegen van een record.
- //Voor de tabellen die uit meerdere bestanden opgevuld worden,
- //moet enkel het hoofdbestand verwerkt worden als toe te voegen
- //record, de rest zijn eigenlijk updates van bestaande records.
- If (bestand = 'OBTFKD' or bestand = 'ORKLEV' or
- bestand = 'AVKDBN' or bestand = 'ORKOMF' or
- bestand = 'ORK5BK' or bestand = 'FINANCIAL' or
- bestand = 'ORPDGR' or bestand = 'ORKPRS' or
- bestand = 'ORKFAK' or bestand = 'AVQSNR' or
- bestand = 'AVRBTS');
- UpdateRec();
- Else;
- If (bestand = 'FICHE');
- //Als een fiche reeds bestaat, dan moet deze eerst verwijderd
- //worden vooraleer de nieuwe toegevoegd kunnen worden.
- CheckFiche();
- EndIf;
- InsertRec();
- EndIf;
- When (IuadCr = 'U');
- //Wijzigen van een record.
- UpdateRec();
- When (IuadCr = 'D');
- //Verwijderen van een record.
- DeleteRec();
- EndSl;
- EndIf;
- EndIf;
- ReadE (Bedrijf:Bestand) AVCRMIL1;
- EndDo;
- EndSr;
-
- /end-free
-
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * InsertRec(): Insert record into RPGTEST table
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- P InsertRec b
- D InsertRec PI 1N
- D rc s 10I 0
- D rs S like(ResultSet)
- D stmt s like(PreparedStatement)
- D num s 30P 9
- D SqlString S 1024A
- D SqlSelect S 1024A
- D SqlWhere S 1024A
- D LevDat s D datfmt(*ISO)
- D VerwTabel S 20A dim(40)
- D Done S 1 0
- D indexArray S 4 0
- D insertTabel S 2 0 dim(40)
- D indexInsert S 2 0
- D checkTabel S 2 0 dim(40)
- D indexCheck S 2 0
- D n S 2 0
- /free
-
- i = 1;
- t = 1;
- Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
- //Testen of tabel reeds verwerkt geweest is
- If (%Lookup(CrmTabel(i):VerwTabel) > 0);
- Done = 1;
- Else;
- Done = 0;
- EndIf;
-
- If (Done = 0);
- TeVerwTabel = CrmTabel(i);
- //Alle kolomnamen ophalen van de SQL-tabel
- Col = *Blanks;
- Exsr ColArray;
- //Alle kolomnamen ophalen van de primaire sleutel van de tabel
- PCol = *Blanks;
- Exsr PColArray;
-
- //Eerst controleren of record reeds bestaat, indien wel ==> rest
- //niet uitvoeren!! Door het toevoegen van unieke id, zou een
- //'A' record met zelfde gegevens gewoon worden toegevoegd!
- If (bestand <> 'FICHE');
- Exsr CheckRec;
- Else;
- ErrMsg = *Blanks;
- EndIf;
-
- If (%trim(ErrMsg) <> 'Bestaat!');
- //SQL code opbouwen
- SqlString = 'Insert Into ' + %trim(CrmTabel(i)) + ' (';
- //Array met kolomnamen overlopen en deze zoeken in de VeldCrm array.
- //Als hij gevonden is, de kolomnaam toevoegen aan de SQL code en
- //de index opslaan zodat de waarde later gemakkelijk opgehaald kan
- //worden.
- j = 1;
- indexInsert = 1;
- Dow (Col(j) <> *Blanks);
- indexArray = %lookup(Col(j):VeldCrm);
- If (indexArray > 0);
- SqlString = %trim(SqlString) + ' ' +
- %trim(VeldCrm(indexArray)) + ',';
- insertTabel(indexInsert) = indexArray;
- indexInsert += 1;
- EndIf;
- j += 1;
- EndDo;
- //Laatse komma wegdoen en een ')' zetten.
- SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
- SqlString = %trim(SqlString) + ')';
-
- //SQL code verder opbouwen met de values.
- //Per veld een ? zetten. Deze ? worden dan later opgevuld door de
- //correcte waarden.
- SqlString = %trim(SqlString) + ' values (';
- Dow (indexInsert > 1);
- SqlString = %trim(SqlString) + '?,';
- indexInsert -= 1;
- EndDo;
- //Opnieuw laatste komma wegdoen en een ')' zetten.
- SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
- SqlString = %trim(SqlString) + ')';
-
- stmt = JDBC_PrepStmt(conn : SqlString);
- If (stmt = *NULL);
- ErrMsg = 'Prepare Statement failed!';
- return *OFF;
- EndIf;
-
- //Opvullen parameters
- //Array overlopen waarin de indexen weggeschreven werden.
- //Met deze index het type (N, A of D) gaan ophalen en de waarde
- //converteren naar het juiste type.
- indexInsert = 1;
- Dow (insertTabel(indexInsert) <> *Zeros);
- n = insertTabel(indexInsert);
- Select;
- When (Type(n) = 'N' or Type(n) = 'S');
- If (Waarde(n) = *Blanks);
- num = 0;
- Else;
- num = %dec(Waarde(n):30:9);
- EndIf;
- JDBC_SetDecimal(stmt:indexInsert:num);
- When (Type(n) = 'A');
- JDBC_SetString(stmt:indexInsert:%trim(Waarde(n)));
- When (Type(n) = 'D');
- If (LVrKomma(n) = 8 and LNaKomma(n) = 0); //Numeriek doorgegeven
- LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
- JDBC_SetDate(stmt:indexInsert:LevDat);
- EndIf;
- //Waarschijnlijk nog testen toevoegen wanneer het een echt
- // 'D' RPG-datatype is.
- EndSl;
- indexInsert += 1;
- EndDo;
-
- //Uitvoeren van de SQL code
- rc = JDBC_ExecPrepUpd( stmt );
- If (rc < 0);
- //Niet gelukt
- If (StatCr = *Blanks);
- stat = 1;
- Else;
- stat = %dec(StatCr:2:0);
- If (stat < 99);
- stat += 1;
- EndIf;
- EndIf;
- StatCr = %char(stat);
- Update Avcrmir;
- ErrMsg = 'Execute Prepared Failed!';
- Return *OFF;
- Else;
- //Record verwerkt ==> Aanpassen van AVCRMI
- // - Datum + tijd interface
- // - Geschrapt op '*' zetten ==> dit record is verwerkt
- IndtCr = %int(%char(%date():*iso0));
- tijdc = %char(%time:*HMS);
- tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) +
- %subst(tijdc:7:2);
- IntdCr = %dec(tijdc:6:0);
- FlagCr = '*';
- Update Avcrmir;
- Endif;
-
- JDBC_FreePrepStmt(stmt);
- //Tabel wegschrijven in reeds verwerkte tabellen array.
- VerwTabel(t) = CrmTabel(i);
- t += 1;
- EndIf;
- EndIf;
- i += 1;
- EndDo;
-
- Return *ON;
-
-
- //Array met de kolomnamen van de SQL tabel opvullen
- BegSr ColArray;
- SqlString = 'Select column_name' +
- ' From INFORMATION_SCHEMA.COLUMNS' +
- ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexCA = 0;
- Dow (jdbc_nextRow(rs));
- indexCA += 1;
- Col(indexCA) = jdbc_getCol(rs: 1);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
-
- //Array met Primary key kolomnamen voor tabel opvullen
- BegSr PColArray;
- SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
- + ' where key_name = ''PRIMARY''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexPCA = 0;
- Dow (jdbc_nextRow(rs));
- indexPCA += 1;
- PCol(indexPCA) = jdbc_getCol(rs: 5);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
-
- //Controleren of record niet reeds bestaat
- BegSr CheckRec;
- SqlSelect = 'Select';
- SqlWhere = 'Where';
- j = 1;
- indexCheck = 1;
- Dow (PCol(j) <> *Blanks);
- indexArray = %lookup(PCol(j):VeldCrm);
- If (indexArray > 0);
- If (j = 2);
- SqlSelect = %trim(SqlSelect) + ' ' + %trim(VeldCrm(indexArray));
- SqlWhere = %trim(SqlWhere) + ' ' +
- %trim(VeldCrm(indexArray)) + '=?';
- Else;
- SqlSelect = %trim(SqlSelect) + ' , ' +
- %trim(VeldCrm(indexArray));
- SqlWhere = %trim(SqlWhere) + ' and ' +
- %trim(VeldCrm(indexArray)) + '=?';
- EndIf;
- checkTabel(indexCheck) = indexArray;
- indexCheck += 1;
- Else;
- //ERROR!!!
- EndIf;
- j += 1;
- EndDo;
- //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
- SqlWhere = %trim(SqlWhere) +
- ' and Deleted IS NULL or Deleted <> ''X''';
-
- SqlString = %trim(SqlSelect) + ' From ' + %trim(CrmTabel(i));
- SqlString = %trim(SqlString) + ' ' + %trim(SqlWhere);
-
- stmt = JDBC_PrepStmt(conn : SqlString);
- If (stmt = *NULL);
- ErrMsg = 'Prepare Statement failed!';
- return *OFF;
- EndIf;
-
- //Opvullen parameters
- //Array overlopen waarin de indexen weggeschreven werden.
- //Met deze index het type (N, A of D) gaan ophalen en de waarde
- //converteren naar het juiste type.
- indexCheck = 1;
- Dow (checkTabel(indexCheck) <> *Zeros);
- n = checkTabel(indexCheck);
- Select;
- When (Type(n) = 'N' or Type(n) = 'S');
- If (Waarde(n) = *Blanks);
- num = 0;
- Else;
- num = %dec(Waarde(n):30:9);
- EndIf;
- JDBC_SetDecimal(stmt:indexCheck:num);
- When (Type(n) = 'A');
- JDBC_SetString(stmt:indexCheck:%trim(Waarde(n)));
- When (Type(n) = 'D');
- If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
- LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
- JDBC_SetDate(stmt:indexCheck:LevDat);
- EndIf;
- //Waarschijnlijk nog testen toevoegen wanneer het een echt
- // 'D' RPG-datatype is.
- EndSl;
- indexCheck += 1;
- EndDo;
-
- rs = jdbc_ExecPrepQry(stmt);
- If jdbc_nextRow(rs);
- //Al records aanwezig ==> Deleten.
- ErrMsg = 'Bestaat!';
- Else;
- ErrMsg = 'Bestaat nog niet!';
- //Return *OFF;
- EndIf;
- JDBC_FreeResult(rs);
- JDBC_FreePrepStmt(stmt);
- EndSr;
- /end-free
- P E
-
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * UpdateRec(): Update record in RPGTEST table
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- P UpdateRec b
- D UpdateRec PI 1N
- D rc s 10I 0
- D stmt s like(PreparedStatement)
- D num s 30P 9
- D SqlString S 1024A
- D LevDat s D datfmt(*ISO)
- D VerwTabel S 20A dim(40)
- D Done S 1 0
- D indexArray S 4 0
- D updateTabel S 2 0 dim(40)
- D indexUpdate S 2 0
- D n S 2 0
- D datum S 8 0
- /free
- i = 1;
- t = 1;
- Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
- If (%Trim(waarde(2)) = '987654');
- Done = 0;
- ENDIF;
- //Testen of tabel reeds verwerkt geweest is
- If (%Lookup(CrmTabel(i):VerwTabel) > 0);
- Done = 1;
- Else;
- Done = 0;
- EndIf;
-
- If (Done = 0);
- TeVerwTabel = CrmTabel(i);
- //Alle kolomnamen ophalen van de tabel
- Col = *Blanks;
- Exsr ColArray;
- //Alle kolomnamen ophalen van de primaire sleutel van de tabel
- PCol = *Blanks;
- Exsr PColArray;
-
- //SQL code opbouwen
- SqlString = 'Update ' + %trim(CrmTabel(i)) + ' set ';
- //Array met kolomnamen overlopen (uitgezonderd de primaire sleutel)
- //en deze zoeken in de VeldCrm array.
- //Als hij gevonden is, de kolomnaam toevoegen aan de SQL code en
- //de index opslaan zodat de waarde later gemakkelijk opgehaald kan
- //worden.
- If (Bestand = 'OBTFKD');
- //OBTFKD ==> A.d.h.v. de CODE bepalen welk veld er in de MySQL-
- // tabel gëupdate moet worden
- j = 1;
- indexUpdate = 1;
- indexArray = %lookup('CODE':VeldAs400);
- If (indexArray > 0);
- Select;
- When Waarde(indexArray) = 'T';
- SqlString = %trim(SqlString) + ' Telefoon=?,';
- When Waarde(indexArray) = 'E';
- SqlString = %trim(SqlString) + ' Email=?,';
- When Waarde(indexArray) = 'G';
- SqlString = %trim(SqlString) + ' Gsm=?,';
- When Waarde(indexArray) = 'F';
- SqlString = %trim(SqlString) + ' Fax=?,';
- When Waarde(indexArray) = 'W';
- SqlString = %trim(SqlString) + ' Website=?,';
- When Waarde(indexArray) = 'L';
- SqlString = %trim(SqlString) + ' GPS=?,';
- EndSl;
- updateTabel(indexUpdate) = indexArray + 1;
- indexUpdate += 1;
- EndIf;
- Else;
- j = 1;
- indexUpdate = 1;
- Dow (Col(j) <> *Blanks);
- If (%lookup(Col(j):PCol) = 0);
- indexArray = %lookup(Col(j):VeldCrm);
- If (indexArray > 0);
- SqlString = %trim(SqlString) + ' ' +
- %trim(VeldCrm(indexArray)) + '=?,';
- updateTabel(indexUpdate) = indexArray;
- indexUpdate += 1;
- EndIf;
- EndIf;
- j += 1;
- EndDo;
- EndIf;
- //Laatse komma wegdoen
- SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
- //Where stuk invullen met primaire sleutelvelden
- SqlString = %trim(SqlString) + ' Where ';
- j = 1;
- Dow (PCol(j) <> *Blanks);
- indexArray = %lookup(PCol(j):VeldCrm);
- If (indexArray > 0);
- If (j = 2);
- SqlString = %trim(SqlString) + ' ' +
- %trim(VeldCrm(indexArray)) + '=?';
- Else;
- SqlString = %trim(SqlString) + ' and ' +
- %trim(VeldCrm(indexArray)) + '=?';
- EndIf;
- updateTabel(indexUpdate) = indexArray;
- indexUpdate += 1;
- Else;
- //ERROR!!!
- EndIf;
- j += 1;
- EndDo;
- //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
- Sqlstring = %trim(Sqlstring) +
- ' and Deleted IS NULL or Deleted <> ''X''';
-
- stmt = JDBC_PrepStmt(conn : SqlString);
- If (stmt = *NULL);
- ErrMsg = 'Prepare Statement failed!';
- return *OFF;
- EndIf;
-
- //Opvullen parameters
- //Array overlopen waarin de indexen weggeschreven werden.
- //Met deze index het type (N, A of D) gaan ophalen en de waarde
- //converteren naar het juiste type.
- indexUpdate = 1;
- Dow (updateTabel(indexUpdate) <> *Zeros);
- n = updateTabel(indexUpdate);
- Select;
- When (Type(n) = 'N' or Type(n) = 'S');
- If (Waarde(n) = *Blanks);
- num = 0;
- Else;
- num = %dec(Waarde(n):30:9);
- EndIf;
- JDBC_SetDecimal(stmt:indexUpdate:num);
- When (Type(n) = 'A');
- JDBC_SetString(stmt:indexUpdate:%trim(Waarde(n)));
- When (Type(n) = 'D');
- If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
- LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
- JDBC_SetDate(stmt:indexUpdate:LevDat);
- EndIf;
- //Waarschijnlijk nog testen toevoegen wanneer het een echt
- // 'D' RPG-datatype is.
- EndSl;
- indexUpdate += 1;
- EndDo;
-
- rc = JDBC_ExecPrepUpd( stmt );
- if (rc <= 0);
- If (StatCr = *Blanks);
- stat = 1;
- Else;
- stat = %dec(StatCr:2:0);
- If (stat < 99);
- stat += 1;
- EndIf;
- EndIf;
- StatCr = %char(stat);
- Update Avcrmir;
- ErrMsg = 'Execute Prepared Failed!';
- Return *OFF;
- Else;
- //Record verwerkt ==> Aanpassen van AVCRMI
- IndtCr = %int(%char(%date():*iso0));
- tijdc = %char(%time:*HMS);
- tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) + %subst(tijdc:7:2);
- IntdCr = %dec(tijdc:6:0);
- FlagCr = '*';
- Update Avcrmir;
- endif;
-
- JDBC_FreePrepStmt(stmt);
- //Tabel wegschrijven in reeds verwerkte tabellen array.
- VerwTabel(t) = CrmTabel(i);
- t += 1;
- EndIf;
- i += 1;
- EndDo;
-
- return *ON;
-
- //Array met kolomnamen voor tabel opvullen
- BegSr ColArray;
- SqlString = 'Select column_name ' +
- ' From INFORMATION_SCHEMA.COLUMNS' +
- ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexCA = 0;
- Dow (jdbc_nextRow(rs));
- indexCA += 1;
- Col(indexCA) = jdbc_getCol(rs: 1);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
-
- //Array met Primary key kolomnamen voor tabel opvullen
- BegSr PColArray;
- SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
- + ' where key_name = ''PRIMARY''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexPCA = 0;
- Dow (jdbc_nextRow(rs));
- indexPCA += 1;
- //PCol(indexPCA) = jdbc_getCol(rs: 1);
- PCol(indexPCA) = jdbc_getCol(rs: 5);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
- /end-free
- P E
-
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * DeleteRec(): Delete record
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- P DeleteRec b
- D DeleteRec PI 1N
- D rc s 10I 0
- D stmt s like(PreparedStatement)
- D num s 30P 9
- D SqlString S 1024A
- D LevDat s D datfmt(*ISO)
- D VerwTabel S 20A dim(40)
- D Done S 1 0
- D indexArray S 4 0
- D deleteTabel S 2 0 dim(40)
- D indexDelete S 2 0
- D n S 2 0
- D datum S 8 0
- /free
- i = 1;
- t = 1;
- Dow (CrmTabel(i) <> *Blanks and CrmTabel(i) <> '?');
- //Testen of tabel reeds verwerkt geweest is
- If (%Lookup(CrmTabel(i):VerwTabel) > 0);
- Done = 1;
- Else;
- Done = 0;
- EndIf;
-
- If (Done = 0);
- TeVerwTabel = CrmTabel(i);
- //Alle kolomnamen ophalen van de tabel
- Col = *Blanks;
- Exsr ColArray;
- //Alle kolomnamen ophalen van de primaire sleutel van de tabel
- PCol = *Blanks;
- Exsr PColArray;
-
- //SQL code opbouwen
- SqlString = 'Update ' + %trim(CrmTabel(i)) + ' set';
- indexDelete = 1;
- Select;
- When Bestand = 'OBTFKD';
- indexArray = %lookup('CODE':VeldAs400);
- If (indexArray > 0);
- Select;
- When Waarde(indexArray) = 'T';
- SqlString = %trim(SqlString) + ' Telefoon= ''''';
- When Waarde(indexArray) = 'E';
- SqlString = %trim(SqlString) + ' Email= ''''';
- When Waarde(indexArray) = 'G';
- SqlString = %trim(SqlString) + ' Gsm= ''''';
- When Waarde(indexArray) = 'F';
- SqlString = %trim(SqlString) + ' Fax= ''''';
- When Waarde(indexArray) = 'W';
- SqlString = %trim(SqlString) + ' Website= ''''';
- When Waarde(indexArray) = 'L';
- SqlString = %trim(SqlString) + ' GPS= ''''';
- EndSl;
- EndIf;
- When Bestand = 'ORKLEV' or Bestand = 'AVKDBN' or
- Bestand = 'ORKOMF' or Bestand = 'ORK5BK' or
- Bestand = 'FINANCIAL' or Bestand = 'ORPDGR' or
- Bestand = 'ORKPRS' or Bestand = 'ORKFAK';
- j = 1;
- Dow (Col(j) <> *Blanks);
- If (%lookup(Col(j):PCol) = 0);
- indexArray = %lookup(Col(j):VeldCrm);
- If (indexArray > 0);
- SqlString = %trim(SqlString) + ' ' +
- %trim(VeldCrm(indexArray)) + '=?,';
- deleteTabel(indexDelete) = indexArray;
- indexDelete += 1;
- EndIf;
- EndIf;
- j += 1;
- EndDo;
- SqlString = %subst(SqlString:1:%len(%trim(SqlString))-1);
- Other;
- SqlString = %trim(SqlString) + ' Deleted = ''X''';
- EndSl;
-
- //Where stuk invullen met primaire sleutelvelden
- SqlString = %trim(SqlString) + ' Where ';
- j = 1;
- Dow (PCol(j) <> *Blanks);
- indexArray = %lookup(PCol(j):VeldCrm);
- If (indexArray > 0);
- If (j = 2);
- SqlString = %trim(SqlString) + ' ' +
- %trim(VeldCrm(indexArray)) + '=?';
- Else;
- SqlString = %trim(SqlString) + ' and ' +
- %trim(VeldCrm(indexArray)) + '=?';
- EndIf;
- deleteTabel(indexDelete) = indexArray;
- indexDelete += 1;
- Else;
- //ERROR!!!
- EndIf;
- j += 1;
- EndDo;
- //Keys kunnen er meerdere keren inzitten, maar slechts 1 keer met deleted <> 'X'
- Sqlstring = %trim(Sqlstring) +
- ' and Deleted IS NULL or Deleted <> ''X''';
-
- stmt = JDBC_PrepStmt(conn : SqlString);
- If (stmt = *NULL);
- ErrMsg = 'Prepare Statement failed!';
- return *OFF;
- EndIf;
-
- //Opvullen parameters
- //Array overlopen waarin de indexen weggeschreven werden.
- //Met deze index het type (N, A of D) gaan ophalen en de waarde
- //converteren naar het juiste type.
- indexDelete = 1;
- Dow (deleteTabel(indexDelete) <> *Zeros);
- n = deleteTabel(indexDelete);
- Select;
- When (Type(n) = 'N' or Type(n) = 'S');
- //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
- If (%lookup(VeldCRM(n):PCol) = 0);
- num = 0;
- Else;
- If (Waarde(n) = *Blanks);
- num = 0;
- Else;
- num = %dec(Waarde(n):30:9);
- EndIf;
- EndIf;
- JDBC_SetDecimal(stmt:indexDelete:num);
- When (Type(n) = 'A');
- //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
- If (%lookup(VeldCRM(n):PCol) = 0);
- JDBC_SetString(stmt:indexDelete:'');
- Else;
- JDBC_SetString(stmt:indexDelete:%trim(Waarde(n)));
- EndIf;
- When (Type(n) = 'D');
- If (LVrKomma(n) = 8 and LNaKomma(n) = 0);
- //Primaire sleutels moeten een waarde hebben, de rest op 0 zetten
- If (%lookup(VeldCRM(n):PCol) = 0);
- LevDat = *Loval;
- Else;
- LevDat = %date(%dec(%trim(Waarde(n)):8:0):*Iso);
- EndIf;
- JDBC_SetDate(stmt:indexDelete:LevDat);
- EndIf;
- //Waarschijnlijk nog testen toevoegen wanneer het een echt
- // 'D' RPG-datatype is.
- EndSl;
- indexDelete += 1;
- EndDo;
-
- rc = JDBC_ExecPrepUpd( stmt );
- if (rc <= 0);
- If (StatCr = *Blanks);
- stat = 1;
- Else;
- stat = %dec(StatCr:2:0);
- If (stat < 99);
- stat += 1;
- EndIf;
- EndIf;
- StatCr = %char(stat);
- Update Avcrmir;
- ErrMsg = 'Execute Prepared Failed!';
- Return *OFF;
- Else;
- //Record verwerkt ==> Aanpassen van AVCRMI
- IndtCr = %int(%char(%date():*iso0));
- tijdc = %char(%time:*HMS);
- tijdc = %subst(tijdc:1:2) + %subst(tijdc:4:2) + %subst(tijdc:7:2);
- IntdCr = %dec(tijdc:6:0);
- FlagCr = '*';
- Update Avcrmir;
- endif;
-
- JDBC_FreePrepStmt(stmt);
- //Tabel wegschrijven in reeds verwerkte tabellen array.
- VerwTabel(t) = CrmTabel(i);
- t += 1;
- EndIf;
- i += 1;
- EndDo;
-
- return *ON;
-
- //Array met kolomnamen voor tabel opvullen
- BegSr ColArray;
- SqlString = 'Select column_name' +
- ' From INFORMATION_SCHEMA.COLUMNS' +
- ' Where TABLE_NAME = ''' + %Trim(TeVerwTabel) + '''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexCA = 0;
- Dow (jdbc_nextRow(rs));
- indexCA += 1;
- Col(indexCA) = jdbc_getCol(rs: 1);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
-
- //Array met Primary key kolomnamen voor tabel opvullen
- BegSr PColArray;
- SqlString = 'Show keys from ' + %Trim(TeVerwTabel)
- + ' where key_name = ''PRIMARY''';
-
- rs = jdbc_ExecQry( conn : SqlString);
- indexPCA = 0;
- Dow (jdbc_nextRow(rs));
- indexPCA += 1;
- //PCol(indexPCA) = jdbc_getCol(rs: 1);
- PCol(indexPCA) = jdbc_getCol(rs: 5);
- Enddo;
- JDBC_FreeResult(rs);
- EndSr;
- /end-free
- P E
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * CheckFiche(): Checken als fiche al bestaat. Ja ==> verwijderen. +
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- P CheckFiche b
- D CheckFiche PI 1N
- D rc s 10I 0
- D stmt s like(PreparedStatement)
- D rs S like(ResultSet)
- D indexArray S 4 0
- D SqlString S 1024A
- D Bedrijf s 3 0
- D Bestelklant S 17A
- D Extensie S 2 0
- D Reeds S 1 0
- /free
- indexArray = %lookup('Bedrijf':VeldCrm);
- Bedrijf = %dec(Waarde(indexArray):3:0);
- indexArray = %lookup('Bestelklant':VeldCrm);
- Bestelklant = Waarde(indexArray);
- indexArray = %lookup('Bestelklant_Ext':VeldCrm);
- Extensie = %dec(Waarde(indexArray):2:0);
-
- //Eerst opzoeken of reeds verwerkt is
- Reeds = 0;
- indexArray = %lookup(Bedrijf:Bedr);
- If (indexArray > 0);
- Reeds = 1;
- indexArray = %lookup(Bestelklant:Klnr);
- If (indexArray > 0);
- Reeds = 1;
- indexArray = %lookup(Extensie:Exts);
- If (indexArray > 0);
- Reeds = 1;
- Else;
- Reeds = 0;
- EndIf;
- Else;
- Reeds = 0;
- EndIf;
- Else;
- Reeds = 0;
- EndIf;
-
- If (Reeds = 0);
- SqlString = 'Select * From Conditions Where Bedrijf = ' +
- %char(bedrijf) +
- ' and Bestelklant = ''' + %trim(Bestelklant) +
- ''' and Bestelklant_Ext = ' + %char(Extensie);
-
- rs = jdbc_ExecQry( conn : SqlString);
- If jdbc_nextRow(rs);
- //Al records aanwezig ==> Deleten.
- jdbc_FreeResult(rs);
- indexArray = %lookup(*Zeros:Bedr);
- Bedr(indexArray) = Bedrijf;
- Klnr(indexArray) = Bestelklant;
- Exts(indexArray) = Extensie;
- SqlString = 'Update Conditions Set Deleted = ''X''' +
- ' Where Bedrijf = ' + %char(bedrijf) +
- ' and Bestelklant = ''' + %trim(Bestelklant) +
- ''' and Bestelklant_Ext = ' + %char(Extensie);
- stmt = JDBC_PrepStmt(conn: SqlString);
- If (Stmt <> *NULL);
- rc = jdbc_ExecPrepUpd(stmt);
- EndIf;
- JDBC_freePrepStmt(stmt);
- EndIf;
- JDBC_FreeResult(rs);
- EndIf;
- Return *On;
- /end-free
- P E
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * CheckDatum(): Checken als DTVN <= huidige datum +
- *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- P CheckDatum b
- D CheckDatum PI 1N
- D indexArray S 4 0
- D datum s 8 0
- D datumnu s 8 0
- /free
- indexArray = %lookup('DTVN':VeldAs400);
- datum = %dec(Waarde(indexArray):8:0);
- datumnu = %int(%char(%date():*Iso0));
- If (datumnu >= datum);
- Return *On;
- Else;
- Return *Off;
- EndIf;
- /end-free
- P E
-
|
|