[GELÖST] Problem mit SysLookupMultiSelectControl

28. August 2012 12:09

Hallo,
ich bin noch recht neu hier und wende mich an euch, weil ich seit zwei Wochen an einer winzigkleinen Stelle nicht weiterkomme.
Habe schon alles mögliche probiert, aber Google kennt's nicht, die Microsoft Database ist zu ungenau und ich selber finde selbst
beim Debuggen nicht so ganz raus, wo das Problem liegt.

In groben Zügen ist mein Problem folgendes:
Ich habe eine Tabelle ("TestTable") mit einem String-Feld ("TestField"), in dass ich ein paar beliebige Werte eintrage.
Ich habe eine Query ("TestQuery") für genau dieses Feld.
In einer zweiten Tabelle ("TestTable2") soll das Ergebnis des ganzen am Ende in einem Feld ("MultiSelectTestField") gespeichert werden.
Nun entwickle ich eine Form, der ich die Tabelle als Datasource hinzufüge.
Im Design der Form erstelle ich ein StringEdit-Feld ("TestEditField") und setze dessen AutoDeclaration auf Yes.
In die classDeclaration() der Form füge ich folgende Zeile ein:

SysLookupMultiSelectCtrl msCtrl_TestField;

In die init() der Form füge ich folgende Zeile ein:

msCtrl_TestField = SysLookupMultiSelectCtrl::construct(element, TestEditField, queryStr(TestQuery));

Soviel zum Aufbau.

Wenn ich die Form jetzt öffne und das StringEdit-Feld NICHT über DataSource/DataField mit der Tabelle verknüpft habe,
passiert genau das, was passieren soll: Ich kann an dem StringEdit-Feld einen LookupButton drücken, daraufhin öffnet sich
ein kleines Grid unter dem Feld, meiner Query entsprechend, ich kann einige der gewünschten Werte abhaken und dann einen
"Ok" Button klicken und sämtliche markierten Werte werden, mit Semikolon separiert, in das TestEditFeld geschrieben.

Aber ich will diese semikolon-separierten Werte ja auch in der Tabelle speichern - also ändere ich die Eigenschaften des
StringEdit-Felds der Form nach DataSource=TestTable und DataField=TestField.
Wenn ich jetzt jedoch die Form öffne, und über den Lookup-Button in dem Grid verschiedene Zeilen markiere,
passiert GAR NICHTS wenn ich den Ok-Button drücke.

Es scheint so, als würde die SysLookupMultiSelectControl-Klasse ihren Endwert irgendwie nicht in mein String-Feld speichern
können - aber in das normale String-Feld der FORM kann sie es. Woran kann das liegen?


Wäre euch wirklich zu ewigem Dank verpflichtet,
wenn ihr mir helfen könntet.

Schon im Voraus vielen Dank für das Lesen bis hierhin,
André
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von AndreEckner am 17. September 2012 10:52, insgesamt 1-mal geändert.

Re: Problem mit SysLookupMultiSelectControl

28. August 2012 20:24

Hi,

wenn ich jetzt nichts übersehen habe, hast du die "Task" Methode nicht überschrieben, richtig?
Ich bin mir nicht 100%ig sicher, aber es kann sein, dass du noch die task Methode entsprechend überschreiben musst.

Hast du dir schon mal das Tutorial hierzu in AX angesehen? Sollte im AOT unter dem Namen "tutorial_LookupMultiSelectGrid" zu finden sein.

Schau dir auch mal diese Blogartikel zu dem Thema an:
http://dynamicsaxgyan.wordpress.com/2011/06/08/syslookupmultiselectctrl-in-dynamics-ax-6-0-ax-2012-x/
http://dynamicsaxgyan.wordpress.com/2011/06/08/on-dialogs-syslookupmultiselectctrl-in-dynamics-ax-6-0/

Hoffe das hilft dir weiter....

Re: Problem mit SysLookupMultiSelectControl

29. August 2012 09:24

Danke für deine schnelle Antwort!

Nein, von einer task()-Methode weiß ich bisher nichts - und auch das Tutorial kenne ich nicht,
ich hatte bisher nur das allgemeine Form-Controls Tutorials.

Werde mir gleich mal alles von dir empfohlene Durchlesen und mich dann zurückmelden.

Vielen Dank nochmal,
André

Re: Problem mit SysLookupMultiSelectControl

29. August 2012 10:35

Okay, habe mir alles mal durchgeschaut: die task()-Methode habe ich ergänzt, die scheint aber auch nicht zu helfen...

Das Problem ist, dass sich sämtliche Tutorials darauf beschränken, das FormControl Feld zu befüllen.
Aber genau DAS klappt bei mir ja eigentlich problemlos.

Ich schaffe es nur nach wie vor nicht, dass die ausgewählten Werte eben auch in einem Tabellenfeld gespeichert werden,
wenn man es mit der FormControl verknüpft.

Gibt es weitere Ideen, wie man das hinbekommt?

LÖSUNG SysLookupMultiSelectControl

12. September 2012 08:46

Problem ENDLICH gelöst !

Workaround:


In der DATASOURCE der Form (also der Datasource "TestTable2") die Methode active() überschreiben mit:

public int active()
{
int ret;
;
ret = super();
TestEditField.text(TestTable2.MultiSelectTestField);

return ret;
}

In der Form die modified()-Methode des StringEdit-Feldes "TestEditField" überschreiben mit:

public boolean modified()
{
boolean ret;
;
ret = super();
TestTable2.MultiSelectTestField = TestEditField.valueStr();
return ret;
}