Lade...
 

MorphIT Direktlinks

Direktlinks in MorphIT

189315

MorphIT bietet die Möglichkeit, über URL-Parameter vor dem initialen laden der Oberfläche eine Message mit Parametern in ClassiX auszulösen um automatisch Befehle zur Initialisierung abzusetzen und so ClassiX in einen definierten Zustand zu bringen, ehe die Oberfläche angezeigt wird. Diese Message wird sowohl beim initialen Verbindungsaufbau ausgelöst, als auch bei jedem erfolgreichen Reconnect (falls die Verbindung zu ClassiX abgebrochen sein sollte). Ein Refresh (F5) sorgt ebenfalls dafür, dass die Message wieder ausgelöst wird. Wird ClassiX über den MorphIT-Launcher gestartet, dann ist sichergestellt, dass jede ClassiX-Instanz die Nachricht genau einmal beim initialen Laden der Oberfläche auslöst, denn nach einem Verbindungsabbruch/Refresh wird dem MorphIT-Client eine neue ClassiX-Instanz zugewiesen.

Vorsicht: Die Message wird beim ersten load_view ausgelöst und somit auch vor jedem eventuellen Login. Der Login muss trotzdem vor jeder Navigation ausgeführt werden. In dem Fall muss sich der InstantView-Code also merken, dass ein entsprechender Status angefordert wurde, der nach einem LOGGED_IN geöffnet wird. Hierzu wird die Message LOGIN_EXEC benutzt, welche das Ausführen einer Aktion nach erfolgreichem Login ermöglicht.

Linkstruktur

Ein Direktlink wird wie folgt aufgebaut:

<morphitURL>/?auto=<eventName>[&<parameter1>=<wert1>]...[&<parameterN>=<wertN>]

Die morphitURL ist dabei die reguläre URL unter der MorphIT von dem aufrufenden Client aus erreichbar ist. (Bsp.: https://morphithost)

eventName ist das Event, welches in ClassiX ausgelöst werden soll. Dazu wird das Event in Großbuchstaben umgewandelt und ein _AUTO angehängt, sodass aus ?auto=display_order die Message DISPLAY_ORDER_AUTO wird. Das Modul, welches diese Nachricht empfängt, muss zu dem Zeitpunkt entweder bereits geladen sein, oder die Nachricht muss in der Extern-Anweisung im triggeredBy aufgeführt sein.

Für die Ausführung der Message können zusätzlich beliebige Query-Parameter angegeben werden, die beim Ausführen der Message als JSON-Objekt auf dem Stack liegen.

Parameter

Die Auto-Message wird immer mit genau einem Parameter aufgerufen. Als Parameter wird ein JSON-Objekt übergeben, das der obigen Syntax folgend die folgende Struktur hat:

{
  "auto":<eventName>,
  "path":<requestPath>
  "params": {
    <parameter1>:<wert1>,
    ...
    <parameterN>:<wertN>
  }
}

requestPath ist dabei der Pfad des HTTP-Aufrufs (meistens "/" oder "/index.html"). Dieser Parameter spielt momentan keine Rolle.

Beispiele

Beliebige Message aufrufen

Zunächst ein einfaches Beispiel für ein Auto-Handler, der eine als Parameter angegebene Message einfach ausführt.

Msg(TEST_AUTO)
TEST_AUTO: Copy(params.message) String("SendMsg(%s)") Execute

Über die URL /?auto=test&message=MY_MESSAGE kann somit die Message MY_MESSAGE beim Verbindungsaufbau ausgelöst werden.

 

Auftrag bearbeiten (mit Login)

Das folgende Beispiel zeigt schematisch einen Auto-Handler, der direkt nach dem Login zur Auftragsmaske springt, um einen neuen Auftrag anzulegen, oder einen bestehenden zu editieren. Der eigentliche Auto-Handler schreibt dabei lediglich die Auto-Parameter in die Variablen orderid und orderview, die dann im LOGGED_IN ausgewertet werden und bestimmen, ob die Auftragsmaske geöffnet wird (und wenn ja, mit welchem Auftrag).

.cxp:

Var(orderid, orderview) //<- to keep track of whether we are opening the order view or not
Msg(EDIT_ORDER_AUTO)
EDIT_ORDER_AUTO: { LocalVar(json) -> json
                    "params.order" json Call(HasTyped) if {
                      json Copy(params.order) -> orderid
                    }
                    TRUE -> orderview //Activate navigation to order view
                    //Now, we have noted, that we want to open the order view and we have to wait for the user to log in
                  }

//User has logged in, check whether a view is set and open it
LOGGED_IN: orderview if { //should navigate to order view?
             orderid if {
               LocalVar(orders)
               orderid "uniqueID = %s" Find(CX_SALES_ORDER) Dup -> orders
               Cardinality if {
                 0 orders GetElement //Put selected order on stack for EDIT_ORDER
               } else { //Not found
                 NULL
               }
             } else { //No orderid given
               NULL
             }
             PostMsg(EDIT_ORDER)
           }

Mit diesem Auto-Handler kann jetzt über die URL /?auto=edit_order ein neuer Auftrag angelegt werden und mit der URL /?auto=edit_order&order=000001 der erste Auftrag (falls vorhanden) editiert werden.

 

Bei statischem MorphIT

Wenn Direktlinks im statischen MorphIT-Modus verwendet werden sollen, muss zunächst wie hier beschrieben die Message VALIDATE_AUTO_POST definiert werden. 

Für Direktlinks auf spezifische statische Views (keine Aktion in ClassiX) gibt es die Alias-Views.

InstantView