Schleifenproblem - Datensätze werden mehrfach erstellt
Hallo zusammen,
ich habe ein Problem in einer Java Klasse.
Hallo zusammen,
ich muss vorweg nehmen das ich mich in Java kaum auskenne. Trotzdem habe ich die Aufgabe nun mal am Hals.
Ich habe eine Java Klasse die Datensätze in einem Objekt auf einer Plattform erstellt.
Das Problem ist, dass die Datensätze in dem Object Org_DUNS_Relation mehrfach angelegt werden und ich finde den Fehler nicht.
Vielleicht kann mir jemand von euch weiterhelfen. Ich konnte das Problem auf folgende Codezeilen eingrenzen.
Ich hoffe ich habe ausreichend Informationen mitgegeben.
Wäe super wenn mir jemand einen Tipp geben könnte, bin für jede Hilfe dankbar.
Grüße
freshToto
[Edit Biber] Codeformatierung. [/Edit]
ich habe ein Problem in einer Java Klasse.
Hallo zusammen,
ich muss vorweg nehmen das ich mich in Java kaum auskenne. Trotzdem habe ich die Aufgabe nun mal am Hals.
Ich habe eine Java Klasse die Datensätze in einem Objekt auf einer Plattform erstellt.
Das Problem ist, dass die Datensätze in dem Object Org_DUNS_Relation mehrfach angelegt werden und ich finde den Fehler nicht.
Vielleicht kann mir jemand von euch weiterhelfen. Ich konnte das Problem auf folgende Codezeilen eingrenzen.
private static void createorg_duns_rel(HashMap<String, Account> accounts) {
Org_DUNS_Relation__c records = new Org_DUNS_Relation__c[accounts
.size()];
Set set = accounts.entrySet();
Iterator i = set.iterator();
int zaehler = 0;
// Display elements
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
Account acc = (Account) me.getValue();
System.out.println("Bearbeite gerade Account: " + acc.getName());
// Entsprechendes DUNS Objekt holen
QueryResult queryResults;
try {
queryResults = connection
.query("SELECT Name, ID FROM Duns__c where name ='"
+ acc.getC_duns_number__c() + "'");
if (queryResults.getSize() > 0) {
for (int z = 0; z < queryResults.getRecords().length; z++) {
DUNS__c duns = (DUNS__c) queryResults.getRecords()[z];
Org_DUNS_Relation__c record = new Org_DUNS_Relation__c();
record.setAccount__c(acc.getId());
record.setDUNS__c(duns.getId());
records[zaehler] = record;
System.out.println("Record zugef?gt: "
+ records[zaehler].getDUNS__c() + ", "
+ records[zaehler].getAccount__c());
}
zaehler = zaehler + 1;
}
// create the records in Salesforce.com
System.out.println("Es werden " + records.length
+ " Relationen erzeugt.");
for(int z=0;z<records.length;z++){
Org_DUNS_Relation__c zwischenlager = new Org_DUNS_Relation__c[1];
zwischenlager = records[z];
SaveResult saveResults = connection.create(zwischenlager);
// check the returned results for any errors
for (int k = 0; k < saveResults.length; k++) {
if (saveResults[k].isSuccess()) {
System.out.println(k
+ ". Successfully created record - Id: "
+ saveResults[k].getId());
} else {
Error errors = saveResults[k].getErrors();
for (int h = 0; h < errors.length; h++) {
System.out.println("ERROR creating record: "
+ errors[h].getMessage());
}
}
}
}
} catch (ConnectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ich hoffe ich habe ausreichend Informationen mitgegeben.
Wäe super wenn mir jemand einen Tipp geben könnte, bin für jede Hilfe dankbar.
Grüße
freshToto
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183975
Url: https://administrator.de/forum/schleifenproblem-datensaetze-werden-mehrfach-erstellt-183975.html
Ausgedruckt am: 09.05.2025 um 02:05 Uhr
7 Kommentare
Neuester Kommentar
Eben! Das sollte aber spätestens nach Zeile 15 (vor Beginn 'try') passieren - sonst inkrementiert der in der While-Schleife fröhlich vor sich hin ....
Viel Erfolg und freundliche Grüße von der Insel - Mario
Der zaehler hat eh ein Problem.
Verwendet wird er in Zeile 26
innerhalb der for Schleife. Das ist ja OK.
Aber inkrementiert wird er in Zeile 31, AUßERHALB der for Schleife, d.h. die For Schleife schreibt alle Durchläufe in daselbe Array Element und überschreibt was dort steht.
Sicher nicht sinnvoll?
Funktioniert, solange nur ein Record drin ist, aber dann kann man auf die For Schleife verzichten.
Und hinterher geht man den kompletten Array durch, der, so wie oben programmiert, immer weiter wächst.
=> Also entweder gibts pro Account nur ein record, dann kann man sich den Array records und die for Schleife sparen, oder es kann mehrere geben, dann muß aber der Array und der Zähler bei jedem Durchlauf zurückgesetzt werden.
Und dann muß man die Fehlerbehandlung anpasssen, weil ansonsten möglicherweise das Zurücksetzen nicht ausgeführt wird.
Verwendet wird er in Zeile 26
records[zaehler] = record;
Aber inkrementiert wird er in Zeile 31, AUßERHALB der for Schleife, d.h. die For Schleife schreibt alle Durchläufe in daselbe Array Element und überschreibt was dort steht.
Sicher nicht sinnvoll?
Funktioniert, solange nur ein Record drin ist, aber dann kann man auf die For Schleife verzichten.
Und hinterher geht man den kompletten Array durch, der, so wie oben programmiert, immer weiter wächst.
=> Also entweder gibts pro Account nur ein record, dann kann man sich den Array records und die for Schleife sparen, oder es kann mehrere geben, dann muß aber der Array und der Zähler bei jedem Durchlauf zurückgesetzt werden.
Und dann muß man die Fehlerbehandlung anpasssen, weil ansonsten möglicherweise das Zurücksetzen nicht ausgeführt wird.
[OT]
macht denen nichts, die tragen eh' alle einen Friesennerz...
[/OT]
macht denen nichts, die tragen eh' alle einen Friesennerz...
[/OT]