5. April 2017 17:30
Es geht um NAV 2013 R2.
Ich würde gern in einer FactBox die Anzahl der in der Haupt Page (ListPage) markierten Datensätze ausgeben. Leider finde ich keinen passenden Trigger.
Hab's mit OnAfterGetCurrRecord, OnAfterGetRecord, OnFindRecord probiert.
Der Code wäre in etwa folgender:
CurrPage.SETSELECTIONFILTER(TestTable);
Anzahl := TestTable.COUNT;
FactBoxTestPage.SetAnzahl(TestTable);
Ich habe versucht die Anzahl in die FactBox zu übergeben oder die gefilterte Tabelle (im Code oben zweite Variante, 'SetAnzahl" ist eine function in der FactBox Page die die Variable zuweist). Ich habe in der Fact Box jeweils das Problem dass der angezeigte Wert immer 0 ist, eine Message die die Datensätze per COUNT ausgibt immer der Anzahl aller Datensätze entspricht.
Hat jemand eine schlaue Idee?
Zuletzt geändert von enh am 11. April 2017 00:27, insgesamt 1-mal geändert.
6. April 2017 13:18
Ich denke, du müsstest eher eine Funktion in die Page bauen, die du von der FacBox aus aufrufst.
Also
- Code:
GetSelectionCount() : Integer
CurrPage.SETSELECTIONFILTER(TestTable);
exit(TestTable.COUNT);
6. April 2017 13:49
Vielen Dank schon mal! Manchmal steht mal einfach da und kommt nicht drauf die Logik einfach mal umzudrehen. Allerdings ist mir nicht klar in welchem Trigger der FactBox Page ich die Funktion aufrufen müsste.
7. April 2017 10:43
enh hat geschrieben:Vielen Dank schon mal! Manchmal steht mal einfach da und kommt nicht drauf die Logik einfach mal umzudrehen. Allerdings ist mir nicht klar in welchem Trigger der FactBox Page ich die Funktion aufrufen müsste.
An der Stelle wo du die Anzahl benötigst. Ich dachte du hast da eine Programmierung die die Anzahl benötigt.
Wenn du allerdings die Anzahl BEIM Selektieren aktualisieren willst, dann war deine Überlegung schon richtig. Du solltest dafür den OnAfterGetCurrRecord Trigger nutzen.
Aber folgendermaßen sollte es gehen. Möglicherweise hast du "By Reference" vergessen. Außerdem rufst du die FaxtBox über eine Variable auf, statt über Currpage.
In der Listpage:
- Code:
OnAfterGetCurrRecord()
CurrPage.SETSELECTIONFILTER(SelRec);
CurrPage.FactBoxTestPage.PAGE.SetAnzahl(SelRec,SelRec.count);
In der Factbox:
- Code:
SetAnzahl(VAR RecWithSelectionFilter : Record "Sales Header";SelectionCountAsInteger : Integer)
message('Anzahl über Parameter 1, Rec.Count: %1 \Anzahl über Parameter 2, Integer: %2',RecWithSelectionFilter.COUNT,SelectionCountAsInteger);
7. April 2017 15:24
Vielen Dank, du hast mir mit einer Kleinigkeit enorm auf die Sprünge geholen. Ich hatte versucht in der Fact Box Page zu zählen statt die Zahl zu übergeben. Manchmal ist man auf einem falschen Trip und kommt von selbst nicht drauf.
Ich will die Anzahl nur anzeigen. Mein Problem ist jetzt dass ich zwar die Zahl in der Fact Box Page habe, mit MESSAGE sehe ich dass sie richtig ankommt. Aber auch ein CurrPage.UPDATE ändert die Anzeige nicht, in der Fact Box steht immer 0.
Welche Eigenschaften braucht die Fact Box Page denn? Hab's mit CardPart und ListPart versucht. Die Haupt Page ist vom PageType List.
Da das CurrPage.UPDATE in der function in der Fact Box Page nichts bewirkt - wie aktualisiere ich eine Fact Box Page aus der Haupt Page heraus?
P.S.: "By Reference" hab ich noch nie genutzt, ist das nicht was neueres? Wie würde ich das in NAV 2013 R2 nutzen?
10. April 2017 14:02
enh hat geschrieben:Ich will die Anzahl nur anzeigen. Mein Problem ist jetzt dass ich zwar die Zahl in der Fact Box Page habe, mit MESSAGE sehe ich dass sie richtig ankommt. Aber auch ein CurrPage.UPDATE ändert die Anzeige nicht, in der Fact Box steht immer 0.
Du musst eine globale Variable anlegen, welche du in der FactBox darstellst. Für diese Variable machst du dann in der von mir beschriebenen Funktion eine Zuweisung. Also
- Code:
SetAnzahl(VAR RecWithSelectionFilter : Record "Sales Header";SelectionCountAsInteger : Integer)
message('Anzahl über Parameter 1, Rec.Count: %1 \Anzahl über Parameter 2, Integer: %2',RecWithSelectionFilter.COUNT,SelectionCountAsInteger);
GlobalSelectionCount := RecWithSelectionFilter.COUNT;
//oder GlobalSelectionCount := SelectionCountAsInteger;
CurrPage.Update(false);
enh hat geschrieben:"By Reference" hab ich noch nie genutzt, ist das nicht was neueres? Wie würde ich das in NAV 2013 R2 nutzen?
By Reference übergibt den Zeiger der Variable im Arbeitsspeicher, anstatt einen neuen Bereich im Arbeitsspeicher anzulegen (Eine Kopie). Das hat den Vorteil (ggf. auch den Nachteil), dass alle Änderungen an der Variable in der Funktion auch die ursprüngliche Variable betreffen.
10. April 2017 15:21
Danke nochmal. Aber genauso hab ich's gemacht, erst mit Übergabe der Tabelle und COUNT in der Fact Box Page, dann mit Übergabe des Integer Werts. Jeweils keine Änderung, die Fact Box zeigt immer 0 an. Mein Problem ist dass die Fact Box Page nicht aktualisiert wird.
(und zu "By Reference": Wie würde ich das in NAV 2013 R2 nutzen? Ich finde nirgendwo ein Property oder ähnliches.)
10. April 2017 15:29
enh hat geschrieben:(und zu "By Reference": Wie würde ich das in NAV 2013 R2 nutzen? Ich finde nirgendwo ein Property oder ähnliches.)
In der Funktion Haken bei "Var" setzen:
How to: Add a Function to a Codeunit.
Das gilt für alle noch kursierenden Versionen.
10. April 2017 15:43
OK, das kenne ich, nur die Bezeichnung "By Reference" hierfür war mir nicht bekannt...
10. April 2017 16:17
Das mit dem "By Reference" habe ich mit angegeben, weil ich mir nicht sicher bin, ob ohne auch der selectionfilter mitgegeben wird.
Bei mir geht es übrigens so wie ich es beschrieben habe (Außer Strg+A um alle zu selectieren, das frisst er nicht). Vielleicht fehlt dir das CurrPage.update(false) am Ende der Funktion, wo das globale Integer zugewiesen wird oder du rufst die Funktion nicht über CurrPage.page.... auf. Meine FactBox ist eine ListPart. Grundsätzlich würde ich aber von den übermäßigen Pageupdates abraten, oder du bastelst da noch eine Abfrage rein, welche überprüft ob sich die Anzahl überhaupt geändert hat und nur bei Änderung ein CurrPage.update macht.
10. April 2017 16:34
Das Übergeben funktioniert auch ohne "Var", eine Message bringt mir auch die richtige Zahl raus. Von daher müsste ich eigentlich alles richtig haben... Also muss ich nochmal suchen was es noch sein könnte. Trotzdem vielen Dank!
10. April 2017 16:44
Hallo,
evtl. ist da auch eine Frage von CurrPage.Update oder not CurrPage.Update.
An der falschen Stelle aufgerufen. (z.B. im OnAfterGetRecord), kann es dazu führen, das die mühevoll ermittelten Werte wieder platt gemacht werden.
Gruß Fiddi
10. April 2017 16:54
Also ich habe jetzt alle Varianten ausprobiert, mit und ohne Update, nix funktioniert.
Nochmal mein Code:
Main Page:
OnAfterGetCurrRecord()
CurrPage.SETSELECTIONFILTER(TestTable);
FactBoxPage.SetAnzahl(TestTable.COUNT);
function in der Fact Box Page:
SetAnzahl(AnzahlP : Integer)
AnzahlG := AnzahlP;
CurrPage.UPDATE;
10. April 2017 16:58
Hallo,
hast du auch das Update in deiner Funktion weggelassen?
Gruß Fiddi
10. April 2017 16:59
Jetzt hab ich's. Dumm wenn man undokumentierten Code braucht...
Es funktioniert so:
CurrPage.FactBox.PAGE.SetAnzahl(TestTable.COUNT);
10. April 2017 17:21
vandyke hat geschrieben:Außerdem rufst du die FaxtBox über eine Variable auf, statt über Currpage.
vandyke hat geschrieben:Vielleicht fehlt dir [...] oder du rufst die Funktion nicht über CurrPage.page.... auf.
tztztz...
Dann kannst du ja jetzt das [gelöst] davor setzen. ;)
11. April 2017 00:28
Das war zu klein und versteckt...
11. April 2017 08:26
enh hat geschrieben:Jetzt hab ich's. Dumm wenn man undokumentierten Code braucht...
Es funktioniert so:
CurrPage.FactBox.PAGE.SetAnzahl(TestTable.COUNT);
Noch ein Tipp von mir: Prüfe vor dem Aufruf, ob die Page Visible ist. In der Vergangenheit kam es immer zu einem Absturz, wenn man eine Funktion einer nicht sichtbaren Page aufgerufen hat.
18. April 2017 20:45
Danke für den Tip, werde ich mir merken.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.