Search the FirstSpirit Knowledge Base
Hallo,
wir haben einen seltsamen Effekt entdeckt, nämlich werden Fremdschlüsselzuordnungen nicht in den Freigabestand übernommen. Wir haben eine Tabelle mit einem N:M Fremdschlüssel auf sich selbst. Vereinfacht etwa so:
Ordnet man hier einen Datensatz zu und gibt den Datensatz frei, ist die Beziehung im Aktuellen Stand gespeichert:
In den freigegebenen Datensätzen bleibt es jedoch leer und bei der Generierung wird null ausgegeben:
Die Eingabekomponente ist eine FS_LIST, etwa so:
<FS_LIST name="csProductFamily" height="130">
<DATASOURCE type="database" maxEntries="1" useLanguages="no">
<ACTIONS>
<ACTION name="ADD"/>
<ACTION name="REMOVE"/>
<ACTION name="GOTO"/>
</ACTIONS>
<COLUMNS>
<COLUMN show="no">#identifier</COLUMN>
</COLUMNS>
<LAYOUT>
<ADD component="toolbar" constraint="top"/>
<ADD component="overview" constraint="center"/>
<ADD component="stackedview" constraint="hide"/>
</LAYOUT>
<table>scheme.products_dummy</table>
</DATASOURCE>
<LANGINFOS>
<LANGINFO lang="*" label="Part of product family" description="Please choose the associated product families."/>
</LANGINFOS>
</FS_LIST>
Aber ich vermute, dass das nicht erheblich ist. Vielmehr schätze ich, dass es sich um ein Aktualisierungsproblem in der Datenbank handelt. Kann es sein, dass hier die Zwischentabelle für die Fremdschlüssel nicht aktualisiert wird?
Wenn man übrigens zwei frisch erstellte Datensätze einander zuordnet, funktioniert die Freigabe wie erwartet. Sind die Datensätze aber schon ein paar Tage alt, tritt der oben beschriebene Effekt auf.
Wir bitte um dringende Hilfe! Danke!
Gruß
Matthias
Nachtrag:
- FS-Version ist übrigens 4.2.476.52922
- in anderen Tabellen sind ähnliche Effekte aufgetreten, wo geänderte Datensätze in der FS_LIST Auswahl nicht aktualisiert angezeigt werden etc.
Ist der referenzierte Datensatz auch freigegeben?
Ja, natürlich! Alle Datensätze sind freigegeben. Ich konnte denselben Effekt auch in einer Version 4.2.468 nachstellen (hatte anfänglich einen Bug in der aktuellen Version vermutet).
Ich lege einen Produktdatensatz an und gebe ihn frei. Dann lege ich einen zweiten Datensatz an und referenziere den ersten als Produktfamilie über o.g. FS_LIST auf dem Fremdschlüssel, der in dieselbe Tabelle zeigt. Das ganze wird über eine zweite Datenquelle abgewickelt (scheme.products_dummy
, siehe oben), da Eigenreferenzen in der FS_LIST nicht erlaubt sind.
Gebe ich nun den zweiten Datensatz frei, ist die Zuordnung im current Stand noch drin, aber im release Stand bleibt das Feld leer. Die Auswahl wird nicht in die Freigabe übernommen.
Einen ähnlichen Effekt haben wir in anderen Datenquellen, wo bereits zugeordnete Datensätze (über Fremdschlüssel) nach einer Änderung nicht aktualisiert werden. Deshalb meine Vermutung, dass die Fremdschlüsseltabellen nicht richtig aktualisiert werden.
Hallo nochmal,
ich habe inzwischen noch etwas herausgefunden. Und zwar zwei Erkenntnisse:
1. wenn ich einem Produkt eine noch nicht freigegebene Produktfamilie zuordne und dann beide freigebe, wird diese Zuordnung in den Freigabestand übernommen. Ordne ich eine bereits freigegebene Familie zu, wird es nicht übernommen.
2. Dieser Effekt verschwindet komischerweise, wenn ich den Fremdschlüssel "umdrehe". Die Grafik oben zeigt ja nur die Hälfte, "productfamily"ist die eine Richtung der N:M Beziehung, die umgekehrte Richtung heißt "familyproduct". Wenn ich das Mapping für die Produktfamilie auf diese zweite Variante setze und dann neue Datensätze anlege, wird alles so freigegeben, wie ich es erwarte, egal ob vorher freigegeben oder nicht.
Wie kann das sein? Ich würde denken, dass es bei einer N:M Beziehung egal ist, in welche Richtung ich mappe, zumal ja beide Enden auf dieselbe Tabelle (products) zeigen.
Bei einer N:M-Beziehung ist diese Beziehung ja nicht "symmetrisch". Soll heißen, wenn A mit B in Beziehung steht, heisst das nicht automatisch, das über die andere Kante B mit A in Beziehung steht.
Darauf ist schon so mancher "reingefallen".
Aha, das war mir in der Tat neu - ich bin kein Informatiker, daher lerne ich gerne noch hinzu 😉
Aber erklärt das wirklich, warum im einen Fall die Freigabe der Beziehung funktioniert, im anderen aber nicht? Die Auswahl ist ja in beiden Fällen im current Stand gespeichert, wird aber nur in einem Fall ins release übernommen. Kann das wirklich sein?
Da es leider sehr dringend ist, habe ich ein Ticket beim Helpdesk aufgemacht (Help-20121004-230) und einen Projektexport (Beispielprojekt) angehängt.