Event für OnOpenPage und globale Variable

30. April 2018 11:23

Ich möchte die indiv. Triggerfunktionen, die auf einer Page programmiert sind, neu mittels Events lösen. Als Beispiel habe ich den OnOpenPage-Trigger. Dort wird eine Variable TRUE oder FALSE gesetzt, abhängig einer Einstellung, was das Ein/Ausblenden von Feldern oder Inforegistern ermöglicht.

Wie ich das sehe, geht das eigentlich gar nicht, da die dazu nötige, globale Variable ja in der Page liegen muss und diese in der Event-Funktion nicht sichtbar ist. Oder habe ich etwas übersehen?
Zuletzt geändert von rotsch am 30. April 2018 13:13, insgesamt 1-mal geändert.

Re: Event für OnOpenPage und globae Variable

30. April 2018 12:34

Hi,
schau mal hier https://docs.microsoft.com/de-de/dynamics365/business-central/dev-itpro/developer/devenv-event-types#SystemEvents.

Da gibt es dieses Event an das man sich dranhängen kann...

Unbenannt001.png


Es sollte eigentlich möglich sein deine Variable hier zu setzen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Event für OnOpenPage und globale Variable

30. April 2018 12:42

Hi,

Danke für die Antwort. Vielleicht war ich etwas zu ungenau in der Formulierung. Wie man den Event findet und aktiviert ist mir schon klar. Aber der Event ist ja dann ausserhalb der Page und ich habe da nur den Verweis auf den Record. Ich möchte nun wissen ob es möglich ist, über einen Event zu steuern, dass z.B. ein bestimmtes Feld ausgeblendet wird durch das Setzen einer entsprechenden Variablen

Beispiel:
Im Standard ist auf Page 5050 in OnOpenPage dieser Code hinterlegt
Code:
CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled;


Nun möchte ich diese Zeile aus der Page entfernen und die Variable CRMIntegrationEnabled in einem Event setzen. Die Page muss aber trotzdem auf Werte aus CRMIntegrationEnabled reagieren
Zuletzt geändert von rotsch am 30. April 2018 13:14, insgesamt 1-mal geändert.

Re: Event für OnOpenPage und globae Variable

30. April 2018 13:02

rotsch hat geschrieben:Wie ich das sehe, geht das eigentlich gar nicht, da die dazu nötige, globale Variable ja in der Page liegen muss und diese in der Event-Funktion nicht sichtbar ist. Oder habe ich etwas übersehen?
Sehe ich genauso.

Code:
OnOpenPageEvent(VAR Rec : Record)
hat eben nur Rec als Parameter.
Du kannst dir natürlich selber einen Publisher mit CRMIntegrationEnabled als Parameter erstellen und diesen in OnOpenPage-Trigger aufrufen lassen... Um eine Anpassung der Page (in welchem Maße auch immer) kommst du jedenfalls nicht herum.

Re: Event für OnOpenPage und globale Variable

30. April 2018 13:13

Dann ist alles klar soweit, besten Dank!

Re: Event für OnOpenPage und globale Variable

30. April 2018 16:28

DIe Bool-Variable brauchst du nicht, allerdings im Visible Property einen Funktionsaufruf, also eine globale CU.

Re: Event für OnOpenPage und globale Variable

30. April 2018 16:47

Danke für Anwort. Klar, die Variable brauche ich so nicht. Mir ging es vor allem darum zu erfahren, ob man solche Anpassungen auch ohne direkten Eingriff in die Page durchführen kann, und das geht eben leider nicht. Schön wäre, wenn man ähnlich wie den OnAfterValidate-Events (wo dann die Felder sichtbar werden) z.B. die Auswahl der Globals sehen und diese dann im Event verändern könnte.

Re: Event für OnOpenPage und globale Variable

30. April 2018 18:15

Vielleicht geht es mit Extensions 2.0 und VSCode (irgendwann mal)?

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 09:51

m_schneider hat geschrieben:Vielleicht geht es mit Extensions 2.0 und VSCode (irgendwann mal)?


öhmmm....geht doch jetzt schon - hab's grad ausprobiert.
war zwar nur zu blöd, die Codeunit in der Visible-Eigenschaft zu verwenden (mach ich nie, sondern verwende immer glob. Variablen), aber egal.

Demnach brauchst du die Page nicht anpassen, wenn du eine Extension 2.0 baust.

sorry für den "dreckigen" Code - probiere grad bisl aus

Code:
// Welcome to your new AL extension.
// Remember that object names and IDs should be unique across all extensions.
// AL snippets start with t*, like tpageext - give them a try and happy coding!

pageextension 50100 CustomerCardExt extends "Customer Card"
{
    layout
    {
        modify("Address")
        {
            Visible = myVisible;
        }
    }

    trigger OnOpenPage();
    begin
         myVisible := myCodenUnit.setVisibleFalse();
    end;
   
    var
        myCodenUnit: Codeunit MyCodeunit;
        myVisible: Boolean;

}

codeunit 50100 MyCodeunit
{
    procedure setVisibleFalse() : Boolean;
    begin
        EXIT(false);
    end;
       
   
}

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:11

Hallo,

@SWeikelt:

wo du gerade am probieren bist: Wer gewinnt denn, wenn eine andere Extension die gleiche Idee hatte?

Gruß Fiddi

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:21

@fiddi,

du willst mich ärgern, was :twisted:
Probiere ich dann mal aus und schreib das Ergebnis

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:26

fiddi hat geschrieben:Wer gewinnt denn, wenn eine andere Extension die gleiche Idee hatte?


Werden Wetten angenommen? :mrgreen:
Ich sag mal, die letzte Extension gewinnt, weil einfach alles, was schon da ist, überklatscht wird.

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:27

Hallo,

ich will dich nicht ärgern.
Das war jetzt wirklich rein aus Interesse. Auch um zu wissen, was einem später vielleicht mal blüht, wenn man mit mehreren Extensions in einem System klar kommen muss, die sich überschneiden.

Gruß Fiddi

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:31

Ich sag mal, die letzte Extension gewinnt, weil einfach alles, was schon da ist, überklatscht wird.


was ist denn die letzte Extension, die zuletzt geladene, oder die zuletzt installierte? 8-)

Da sind wir dann wieder bei dem Problem der Überschneidungen. Evtl. müsste man ja eine Funktion bauen, die alle betreffenden Extensions berücksichtigt.

Gruß Fiddi

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 10:34

rotsch hat geschrieben:...Ich sag mal, die letzte Extension gewinnt, weil einfach alles, was schon da ist, überklatscht wird.

Das Problem ist, dass die Ausführungsreihenfolge der Extension nicht klar ist, weshalb wahrscheinlich mal die eine und mal die andere gewinnt.
Ach ja und die Profil und Benutzeranpassung gibt es ja auch noch

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 11:38

also bisher kann ich nicht zu 100% sagen, welche Extension verwendet wird.
Ich habe die erste, die die Sichtbarkeit vom Adressfeld ausblendet und die zweite, die diese wieder auf TRUE setzt.
Bisher war es so, dass die Sichtbarkeit dann durch die erste gesteuert wird.
OK - dann deinstallieren, die erste Extension auf einen höheren Nummernbereich setzen und sehen was passiert -> das gleiche Verhalten.

Die Versuche müssten natürlich ausgebaut werden, da ggf. die Sichtbarkeitssteuerung an dieser stelle nicht ganz so der Bringer ist.
Oder auch nicht auszuschließen, dass ich etwas falsch mache :lol:

Weiß jemand, wie ich aus VS-Code die Extension rausbekomme, sodass ich die auf nen anderen Server (ohne VS-Code zu verwenden) implementieren kann? - ich google derzeit noch.

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 12:22

Ich vermute einfach mal, dass es sich da genauso verhält, wie mit den "klassischen" Event-Subscribern.
Offiziell gibt es keine definierte Ausführungsreihenfolge.
Ein ehem. Kollege hatte es aber mal ausprobiert und festgestellt, dass die Objekt-ID der abonnierenden Codeunit die Reihenfolge bestimmt.
Somit werden Standard-Codeunits (<50.000) zuerst ausgeführt, danach folgen die Customer-Codeunits (50.000 - 99.999), danach die Add-On-Codeunits (>=1.000.000).
In dem Fall verliert also immer der NAV-Standard und es gewinnt immer das Add-On mit der höchsten ID.
Die kundenspezifische Anpassung kann somit nur den NAV-Standard aushebeln, jedoch niemals ein zertifiziertes Add-On.

Die Lösung könnte so einfach sein, indem Microsoft in der Tabelle Ereignis-Abonnement ein Feld "Reihenfolge" hinzufügen würde, welches vom Endanwender geändert werden könnte.
Ich glaube, der Wunsch ist so alt, wie es Events in NAV gibt.

Re: Event für OnOpenPage und globale Variable

2. Mai 2018 14:41

sweikelt hat geschrieben:Weiß jemand, wie ich aus VS-Code die Extension rausbekomme, sodass ich die auf nen anderen Server (ohne VS-Code zu verwenden) implementieren kann? - ich google derzeit noch.

Es muss zumindest immer eine *.app-Datei vorliegen (<publisher>_<name>_<version>.app erzeugt aus den entsprechenden Angaben in der app.json), die entsteht beim erfolgreichen Kompilieren (Strg+Umschalt+B) im Projektordner, wenn diese Meldung erscheint:
Success: The package is created.
Für richtige Cloudentwicklung und -bereitstellung gibt aber noch viel mehr zu tun.
Checklist for Submitting Your App