[Gelöst] Lookup auf mehrere Felder?

6. März 2008 11:14

Hallo.

ich habe ein wohl etwas trivialeres Problem, finde aber trotz einigem Kopfzerbrechen einfach keine Lösung - ich habe auch schon die Suchfunktion genutzt, bin aber auf kein Lösung gestoßen.

Ich möchte in der Tabelle Item ein Prüffeld (Bool) einbauen, welches automatisch auf TRUE gesetzt wird, sobald alle anderen definierten Bool-Felder der Tabelle Item TRUE sind.

Wird eines der definierten Bool-Felder auf FALSE gesetzt, soll auch das Prüffeld wieder auf FALSE sein.


Da ich auf das Prüffeld filtern möchte, kommt eine Funktion innerhalb der Artikelkarte oder -übersicht nicht in Frage.


Schon jetzt vielen Dank für einen Gedankenanstoß :)

Viele Grüße
Zuletzt geändert von cb am 6. März 2008 13:47, insgesamt 1-mal geändert.

6. März 2008 11:53

Hi,

wenn ich die Anforderung richtig verstanden habe, wuerde ich das so machen:

Das neue Bool Feld auf der Item Tabelle als FlowField mit so einer CalcFormula einrichten.
Code:
Exist(Item WHERE (No.=FIELD(FILTER(No.)),BoolFeld1=CONST(Yes),BoolFeld2=CONST(Yes)))


Wenn du im C/Side auf das Feld filtern oder sonst wie zugreifen willst, darfst du ein Item.CALCFIELDS(NameBoolFeld); nicht vergessen.

Ich hoffe, das ist in etwa das was du gemeint hast. :wink:

Gruesse
feri

6. März 2008 13:46

Hey feri,

das ist genau die richtige Lösung :)

Vielen Dank! Problem ist nur, dass ich anscheinend auf zu viele Bool-Felder prüfe und somit mein Navision abschmiert :roll:

Ich werde das Ganze jetzt mal mit einem Indicator realisieren, der die Menge der entsprechend gesetzten Felder anzeigt - sieht zudem noch schöner aus :)

Also nochmals vielen Dank für die schnelle Hilfe!

Viele Grüße

7. März 2008 05:24

ich würde dafür ein ganz normales BoolFeld nehmen, in dessen OnValidateTriger der Tabelle dann einfach den Wert als Ergebnis einer UND-Verknüpfung aller zu testenden Boolfelder setzen. und im OnValidate jedes Testfelds ein Validate dieses Ergebnisfeldes anstossen.

Also wenn du 3 zu prüfenden Felder hast die wir jetzt mal TestBool1, TestBool2 und TestBool3 nennen und das Ergebnis, welches wir PrüfBool nennen, dann kommt in jedem OnValidate-Trigger des TestBool1, TestBool2 und TestBool3-Feldes in der Tabelle Item folgender Code
Code:
VALIDATE(PrüfBool);
und im OnValidate von Prüfbool:
Code:
PrüfBool:=TestBool1 AND TestBool2 AND TestBool3;
und dieses Feld Prüfbool sinnvollerweise schreibschützen. (editable=no)

Wenn bereits sehr viele Datensätze mit bereits angeklickten Testbool-Feldern existieren, macht es Sinn einmal mit einer Schleife über alle Itemdatensätze zu laufen, den Item.Validate(Prüfbool) aufzurufen und mit modify zu speichern um die Startwerte zu setzen. Du musst nun nur noch dafür sorgen, dass die Testboolfelder immer nur mit Validate gesetzt werden und nicht von irgendwo per normaler Zuweisung (Testbool:=false).