27. September 2007 16:16
Offtopic:
Ich glaube das wird ein sehr langer Beitrag. :)
Einmal: Ich musste mich leider neu anmelden. Hatte bei meinem alten Account die E-Mail Adresse geändert und diese ist aber zur Zeit noch falsch eingestellt so dass ich keine E-Mails von außen bekommen kann. Somit auch nicht die Reaktivierungsmail von diesem Forum. Und als Gast konnte ich im Problemforum leider auch nichts schreiben da ich anscheinend zu blöd für den Anti-Robot Code bin *seufz*
[Edit by Timo: Problem wird gerade behoben.]
/Offtopic
So jetzt zu meinem bzw. unserem Problem. Wie einige wenige von euch ja schon mitbekommen haben, habe ich ein größeres Projekt mit einem XML-Port.
Im Grunde geht es darum mit Hilfe des XMLPorts Daten aus einigen Tabellen auszulesen, diese in eine XML-Datei zu schreiben um diese wiederum auf unseren CommerceServer auzuspielen.
Damit der CommerceServer die Daten ordentlich einspielt sollte die XML-Datei so aussehen wenn sie fertig ist (unwichtige Attribute, also die keine Probleme machen, lasse ich mal weg):
- Code:
<MSCommerceCatalogCollection2>
<Catalog>
<Category name="1">
<DisplayName Value="1"/>
</Category>
<Category name="2">
<DisplayName Value="2"/>
</Category>
<Category name="4">
<DisplayName Value="4"/>
</Category>
<Category name="4">
<DisplayName Value="4"/>
</Category>
<Category name="77_1">
<DisplayName Value="Wundversorgung"/>
<ParentCategory>1</ParentCategory>
</Category>
<Category name="77_2">
<DisplayName Value="Wundversorgung"/>
<ParentCategory>2</ParentCategory>
</Category>
<Category name="77_4">
<DisplayName Value="Wundversorgung"/>
<ParentCategory>4</ParentCategory>
</Category>
<Category name="21_4">
<DisplayName Value="Fell/Haut"/>
<ParentCategory>4</ParentCategory>
</Category>
<Category name="15_77_1">
<DisplayName Value="Alfavet"/>
<ParentCategory>77_1</ParentCategory>
</Category>
<Category name="15_77_2">
<DisplayName Value="Alfavet"/>
<ParentCategory>77_2</ParentCategory>
</Category>
<Category name="15_77_4">
<DisplayName Value="Alfavet"/>
<ParentCategory>77_4</ParentCategory>
</Category>
<Category name="15_21_4">
<DisplayName Value="Alfavet"/>
<ParentCategory>21_1</ParentCategory>
</Category>
<Product ProductID="120000031">
<DisplayName/>
<Description/>
<ParentCategory>1</ParentCategory>
<ParentCategory>2</ParentCategory>
<ParentCategory>4</ParentCategory>
<ParentCategory>4</ParentCategory>
<ParentCategory>77_1</ParentCategory>
<ParentCategory>77_2</ParentCategory>
<ParentCategory>77_4</ParentCategory>
<ParentCategory>21_4</ParentCategory>
<ParentCategory>15_77_1</ParentCategory>
<ParentCategory>15_77_2</ParentCategory>
<ParentCategory>15_77_4</ParentCategory>
<ParentCategory>15_21_4</ParentCategory>
</Product>
</Catalog>
</MSCommerceCatalogCollection2>
Kleine Erläuterung:
ProductID ist die Artikelnummer (ID 120000031). Dieser Artikel ist einmal in der Gruppe Wundversorgung (ID 77) mit der Untergruppe Alfavet (ID 15) und einmal in der Gruppe Fell/Haut (ID 21) mit der Untergruppe Alfavet (ID 15).
In der ersten Konstellation ist er im Katalog Hund (ID 1), Katze (ID 2) und Pferd (ID 4). In der zweiten Konstellation ist der Artikel nur im Katalog Pferd (ID 4).
Der Artikel soll halt nur einmal aufgelistet werden und alle Kategorien in denen er ist sollen um ihm herum nacheinander aufgelistet werden. Aber das schaffen wir nicht.
Die Tabellen sehen wie folgt aus:
Tabelle Item
- Feld ArtNr (Schlüssel) -> Code
(Weitere Felder)
Tabelle Gruppe
- Feld GruppeID (Schlüssel) -> Integer
- Feld Gruppe -> Text
Tabelle UnterGruppe
- Feld UnterGruppenID (Schlüssel) -> Integer
- Feld UGruppe -> Text
Tabelle Cataloge
- Feld CatalogNr (Schlüssel) -> Integer
- Feld Catalog -> Text
Tabelle Gruppe_UGruppe (JoinTabelle)
- Feld GruppenID (Schlüssel) -> Integer
- Feld GruppeID (TableRelation zur Tabelle Gruppe) -> Integer
- Feld UnterGruppenID (TableRelation zur Tabelle UnterGruppe) -> Integer
Tabelle Cataloge_Gruppen (JoinTabelle)
- Feld CatalogGruppenNr (Schlüssel) -> Integer
- Feld CatalogNr (TableRelation zur Tabelle Cataloge) -> Integer
- Feld GruppenID (TableRelation zur Tabelle Gruppe_UGruppe) -> Integer
Tabelle Artikel_Gruppen (JoinTabelle)
- Feld Nr (Schlüssel) -> Integer
- Feld CatalogGruppenNr (TableRelation zur Tabelle Cataloge_Gruppen) -> Integer
- Feld ArtNr (TableRelation zur Tabelle Item) -> Code
Der XMLPort ist ähnlich aufgebaut wie die XML-Datei oben. Über dem Product sind halt 3x Category und unter dem Product 3x ParentCategory.
Zwischenzeitlich hatten wir es so gelöst das unsere Haupttabelle die Artikel_Gruppen war. Er wiederholt dann auch die Kategorien.. jedoch so oft wie Daten in der Tabelle sind. Wir wollen aber das er nur so oft wiederholt wie Daten für den Artikel in der Tabelle sind.
Setzen wir die Haupttabelle auf Item geht er alle Artikel durch.. und das sind ziemlich viele. Und das soll er ja auch nicht.
Mit Einrückung der Elemente funktioniert es leider auch nicht. SourceTableView funktioniert in dem Fall auch nicht. Und auch die LinkTable mit dem LinkField hat uns nicht weiter gebracht.
Der Code für die erste Kategorie (welche die Kataloge aufzählen soll in denen der Artikel vorhanden ist) sieht derzeit so aus:
- Code:
Artikel_Gruppen.SETRANGE(Artikel_Gruppen.ArtNr,"<Item>"."No.");
IF Artikel_Gruppen.FIND('-') THEN BEGIN
Cataloge_Gruppen.SETRANGE(Cataloge_Gruppen.CatalogGruppenNr,Artikel_Gruppen.CatalogGruppenNr);
IF Cataloge_Gruppen.FIND('-') THEN
"<cat1name>" := FORMAT(Cataloge_Gruppen.CatalogNr);
END;
Alle Tabellen die wir brauchten haben wir als Globale Variabeln als Records definiert.
(Im oberen Beispiel also Artikel_Gruppen und Cataloge_Gruppen)
Ich hoffe ich habe jetzt nichts vergessen und ich habe auch alles einigermaßen verständlich erklärt. Über Hilfe würden wir uns total freuen. Verzweifeln mitlerweile zu dritt an dem Projekt.