Unter „Aktionen” kannst du beliebig viele Aktionen anlegen, die dann entweder als Eintrag im Kontext- oder Drei Punkte-Menü erscheinen, automatisch ausgeführt werden oder dem Benutzer auf der Oberfläche angezeigt werden.

Die Inhalte auf dieser Seite stellen den Stand zur Version 1.22 dar. Ab der Version 1.23 findest du die Möglichkeiten zur Individualisierung hier.

Grundlagen

Die Logik, die beim Auslösen der Aktion in Elements durchlaufen werden muss, befindet sich ausschließlich im Sage Application Server. Bitte wende dich an deinen ERP-Partner, damit er diese Logik in den Sage Application Server einbinden kann.

HINWEIS

Unterstützte Entwicklungen der Sage 100

Elements greift unter bestimmten Bedingungen auf bereits implementierte Entwicklungen (DCMs) der Sage 100 zu. Das erleichtert dir die Implementierung und Anpassung, wenn du unabhängig vom genutzten Tool die gleichen Regeln und Prozesse in der Sage 100 anwenden möchtest.

Elements nutzt die nachfolgend aufgelisteten DCMs erst nach der Übergabe der Bestellung / des Angebots aus Elements an die Sage 100. Während der Bearbeitung einer Bestellung oder eines Angebots in Elements werden keine DCMs genutzt.

HINWEIS

Folgende DCMs der Sage 100 werden im Rahmen der Kundenanlage auch von Elements genutzt:

  • Adressen.CreateItem
  • AdressenItem.TrySave
  • Kontokorrent.CreateItem
  • KontokorrentItem.TrySave

Im Rahmen der Beleganlage (Bestellung, Angebot) werden folgende DCMs genutzt:

  • Beleg.Initialize
  • Beleg.SetKonto
  • Beleg.SetZkd (nur bei gespeicherten ZKDs – nicht bei „Individuell“)
  • Position.Initialize
  • Position.SetArtikel
  • Position.RefreshBasismenge
  • Beleg.SetProjekt
  • Beleg.Calculate(true) (mit Positionen)
  • Beleg.Validate
  • Beleg.Save

Wird ein Beleg in einen anderen Beleg übernommen (Angebot in Bestellung, Bestellung in Stornobeleg, etc.) so werden diese DCMs genutzt:

  • Beleg.Transform
  • Beleg.AddBelegPositionen
  • Position.RefreshBasismenge
  • Position.Calculate
  • Beleg.FillZkdCollection
  • Beleg.RefreshMehrwertsteuer
  • Beleg.Calculate(true) (mit Positionen)
  • Beleg.Validate
  • Beleg.Save
  • Beleg.ReweUebergabe

Aktuell werden grundsätzlich keine Proxy-DCMs und MS Access-CMs unterstützt.

HINWEIS

Einstellungen für alle Aktionen

Folgende Angaben musst du bei allen Aktionen vornehmen:

Aktiv

Sobald du eine Aktion aktivierst, wird diese in Elements sichtbar.

Bezeichnung

Benenne die Aktion so, dass der Benutzer weiß, welchen Schritt er damit auslöst. Dies ist insbesondere wichtig, wenn er über ein Kontext- oder Drei Punkte-Menü darauf zugreifen kann. Mit Hilfe einer eindeutigen und selbsterklärenden Bezeichnung weiß der Benutzer, welches Ergebnis er durch das Anklicken des Eintrags erwarten kann.

Nenne deine Aktion lieber „Rücklieferschein erstellen” als „Rücklieferschein”.

TIPP

Aktionstyp

Du kannst eine Aktion genau einem Aktionstyp zuordnen. Der Aktionstyp legt fest, welche Einstiegspunkte für die automatische Ausführung zur Verfügung stehen und ob die Aktion auch im Kontext- oder Drei Punkte-Menü der Entität zur Verfügung steht.

Nach dem Speichern kannst du den Aktionstyp nicht mehr ändern.

HINWEIS

 

Entität

Je nach Aktion kannst du auswählen, in welcher Entität diese aktiviert wird. Möchtest du eine Aktion in verschiedenen Entitäten mit einer anderen Logik versehen, so kannst du diese einfach ein weiteres Mal anlegen und die Aktionen jeweils anderen Entitäten zuordnen.

Endpunkttyp

Lege den Endpunkttyp der Aktion fest. Aktuell kann lediglich eine Aktion auf dem Sage Appserver ausgelöst werden. Eine Erweiterung auf andere Aktionstypen ist angedacht.

Für den Endpunkttyp Sage Appserver sind zwei weitere Felder Pflicht:

Aktion
Gib hier bitte den Namen der Klasse ein, die die Implementierung der Aktion beinhaltet, inklusive kompletten Namespace. (z.B. „Custom.Action.TestAction“)

DLL_Datei
Trage bitte den Namen der dll-Datei ein, die auf dem von Elements genutzten Application Server im Shared-Verzeichnis der Sage100 liegt. (z.B. „Custom.Action.dll“)

Einschränkung der Aktionen auf Benutzer- oder Business-Login-Gruppen

Du kannst bei jeder Aktion festlegen, ob diese allen Benutzer- oder Business-Login-Gruppen zur Verfügung steht oder nicht. Selbstverständlich kannst du das auch auf Gruppen eingrenzen. Wenn du in einer der Karten „Gültig für“ den Eintrag „Alle Benutzergruppen“ oder „Alle Business-Login-Gruppen“ aktivierst, haben alle Benutzer und Business-Logins Zugriff auf die Aktion. Das bedeutet, dass sie alle die Aktion manuell ausführen können oder diese automatisch ausgeführt wird.

Deaktivierst du die Funktion, so wird dir eine Tabelle angezeigt. Dort kannst du dann individuell entscheiden, welche Benutzer- oder Business-Login-Gruppe diese Aktion manuell ausführen darf bzw. diese automatisch ausgeführt wird.

Wenn du eine Aktion anlegst, so wird diese automatisch allen Benutzergruppen freigegeben. Für Business-Login-Gruppen musst du die Freigabe bitte selbst vornehmen. Hier wird standardisiert keine Freigabe erteilt.

Ist ein Benutzer oder ein Business-Login Mitglied in mehreren Gruppen, so musst du allen Gruppen die Berechtigung entziehen, in denen der Benutzer oder ein Business-Login Mitglied ist.

HINWEIS

Die unter der Aktion angegebene Klasse muss eine Methode mit folgender Signatur aufweisen:

public Dictionary<string,object> Execute(Dictionary<string, object> parameter)

Allgemeine Eingabeparameter

Alle Parameter für die Aktion werden im Methoden-Parameter übergeben. Folgende Parameter stehen immer zur Verfügung:

KeyDatentypValue
ClientSagede.OfficeLine.Engine.Mandantdas Mandanten-Objekt
CultureIdstringdie ID der beim Elements-Benutzer hinterlegten Lokalisierung / Oberflächensprache
ElementsClientId stringdie Client-Id des Elements-Clients
LocationKeystringder technische Schlüssel des Standortes, den der Elements-Benutzer aktuell verwendet
ManuallyTriggeredEntityDictionary<string, object>der EntityIdentifier für die auslösende SubEntität
TriggeredBystringder Trigger, welcher die Aktion ausgelöst hat
UserDictionary<string, object>die Benutzerdaten des angemeldeten Benutzers (crm) oder Business-Logins (reseller)

Der EntityIdentifier wiederum beinhaltet folgende Elemente:

KeyDatentypValue
Entity­Typestringder Typ der auslösenden Sub-Entität, z. B. Position
EntityKeystringder Elements-Key für diesen Datensatz

Diese Daten werden für den angemeldeten Benutzer oder Business-Login übergeben:

KeyDatentypValueHinweis
Namestringder Name
FirstNamestringder Vorname
UserAccountTypestringder Kontotyp (crm | reseller)
EMailstringdie E-Mailadresse
CustomerNumberstringdie Kundennummer des zugehörigen Kundennur bei Business-Logins (reseller)
UserGroupsstring[]ein Array der technischen Schlüssel der zugeordneten Benutzergruppen (bei Benutzern) oder der zugeordneten Business-Login-Gruppen (bei Business-Logins)
ErpRepresentativestringder technische Schlüssel des hinterlegten ERP Vertretersnur bei Benutzern (crm)
ErpUserstringder Name des hinterlegten ERP-Benutzersnur bei Benutzern (crm)

In einigen Aktionen stehen auch Positionsdaten zur Verfügung. Das sind immer folgende Daten:

KeyDatentypValue
EntityKeystringder Elements-Key für diesen Datensatz
ItemNumberstringdie Artikelnummer
VariationIdintdie interne Variantennummer (AuspraegungID)
Quantitydecimaldie Menge
QuantityTypeshortdie Mengenart
QuantityUnitstringdie Mengeneinheit
UnitPricedecimalder Einzelpreis
DiscountValuedecimalder Rabattsatz (in Prozent)
IsManualPricebooldas Kennzeichen, ob der Einzelpreis manuell verändert worden ist (EinzelpreisManuell)

Wenn in einer Aktion zusätzliche Daten übergeben werden, ist das in der Aktion selbst beschrieben.

HINWEIS

Entity-Spezifische Eingabeparameter

Folgende Parameter stehen nur in ausgewählten Entitäten zur Verfügung:

KeyDatentypValue
ExternalEntityReferencestringDie Elements-Referenznummer für diese Entität
Das Format ist abhängig von der Konfiguration in den Elements-Einstellungen
(z.B. DFFC4C71-63E5-4625-83DC-FD937DB3F7C1)

Die Elements-Referenz zur Position, bei ans ERP übergebenen Positionen die BelPosId
CustomDictionary<string,object>Das Custom-Feld einer Entität
Als Key dient der Sage-Identifier des Feldes (Klassenname.Datenbankspalte)
(z.B. VKBeleg.USER_Zahlungsreferenz)

Das Custom-Feld einer Position in einer Entität
(z.B. VKBelegPositionen.USER_extern)
FilesDictionary<string,object>[]das Array von Datei-Definitionen mit der Möglichkeit zum Downloaden via URL

Das können die Inhalte der Files sein:

KeyDatentypValue
FileNamestringder Dateiname zur Anzeige und zur Ermittlung des Dateityps
PermanentUrlstringURL zum Download der Datei, die beim externen Aufruf eine Autorisierung benötigt und permanent gültig ist

Wir empfehlen diese, wenn ein Benutzer oder Business-Login im Browser die Datei herunterladen möchte.
TemporaryUrlstringURL zum Download der Datei, die keine Autorisierung benötigt und ab Start der Aktion für 15 Minuten gültig ist

Wir empfehlen diese zum Abruf einer Datei im Rahmen einer Aktion.

Dateibeispiel

public Dictionary<string, object> Execute(Dictionary<string, object> parameter)
{
    return new Dictionary<string, object>()
    {
        {
            "Files",
            new [] {
                new Dictionary<string, object>
                {
                    {"FileName", "datei1.jpg" },
                    {"PermanentUrl", "https://url-to-elements.cloud/PermanentUrl" },
                    {"TemporaryUrl", "https://url-to-elements.cloud/TemporaryUrl" }
                },
                new Dictionary<string, object>
                {
                    {"FileName", "datei2.pdf" },
                    {"PermanentUrl", "https://url-to-elements.cloud/PermanentUrl" },
                    {"TemporaryUrl", "https://url-to-elements.cloud/TemporaryUrl" }
                },
            }           
        }
    };
}

Diese Entitäten enthalten die oben genannten Parameter:

  • Bestellung
  • Bestellposition
  • Angebot
  • Angebotsposition
  • Warenkorb
  • Warenkorbposition

In Elements werden folgende Klassennamen für die Übergabe der Custom-Felder genutzt:

EntitätKlassennameDatenbank-Tabelle
AngebotVKBelegKHKVKBelege
AngebotspositionVKBelegPositionKHKVKBelegePositionen
ArtikelArtikelKHKArtikel
BestellungVKBelegKHKVKBelege
BestellpositionVKBelegPositionKHKVKBelegePositionen
KundeAdresseKHKAdressen
KundeKontokorrentKHKKontokorrent
WarenkorbVKBelegKHKVKBelege
WarenkorbpositionenVKBelegPositionKHKVKBelegePositionen

Allgemeine Ausgabeparameter

Folgende Ausgabeparameter werden immer interpretiert:

KeyDatentypValue
Messagestring, string[]die anzuzeigende Meldung bzw. Meldungen für mehrere Zeilen
MessageTypestringder Typ der Meldung. Dieser wird ignoriert, wenn der Parameter Message nicht angegeben ist. Folgende Werte werden unterstützt:
Information: Meldung wird als Information dargestellt
Warning: Meldung wird als Warnung dargestellt
Error: Meldung wird als Fehler dargestellt
Ist kein Wert oder ein ungültiger Wert angegeben, so wird Information verwendet.
MessageCaptionstringeine Überschrift für die Message
ModalSizeClassstringdie Größe des anzuzeigenden Dialoges, die auch für die HTML-Prompts als Größe verwendet wird

erlaubte Werte:
– „s“ – Small
– „m“ – Medium
– „l“ – Large
– „xl“ – Extra Large
– „flex“ – Flex
HtmlDictionary<string,object>enthält die Daten für das Anzeigen einer HTML-Meldung als Modalen Dialog
FilesDictionary<string,object>[]ein Array von Datei-Definitionen

Das können die Inhalte der HTML-Meldung sein:

KeyDatentypValue
Contentstringdie HTML Meldung
Height (optional)intdie Höhe des Bereichs, in welchem die Meldung angezeigt wird
Width (optional)intdie Weite des Bereichs, in welchem die Meldung angezeigt wird

Das können die Inhalte der Dateien sein:

KeyDatentypValue
FileNamestringder Dateiname zur Anzeige und zur Ermittlung des Dateityps
Contentstringder Base64 kodierte Dateiinhalt

Zudem hast du die Möglichkeit, einen Dialog zu öffnen, das der Benutzer dann bearbeiten kann. Dazu musst du keine eigene HTML-Seite hosten. (s. Individuelle Dialog-Formulare)

Damit deine HTML-Meldung sich der Optik von Elements angleicht, kannst du auf eine öffentlich zur Verfügung stehende CSS zugreifen. Du findest diese unter https://elements.4sellers.cloud/api/asset/{{client-id}}/style.css. Die interne {{client-id}} kannst du von deinem Ansprechpartner bei 4SELLERS erfahren.

HINWEIS

Alle zusätzlichen Einträge im Ergebnis werden ignoriert.

Entity-Spezifische Ausgabeparameter

Folgende Ausgabeparameter stehen nur in spezifischen Entität/Aktionen zur Verfügung:

KeyDatentypValueEinschränkungen
CustomDictionary<string,object>Das Custom-Feld (einer Position) einer Entität
Als Key dient der Sage-Identifier des Feldes (Klassenname.Datenbankspalte)
(z.B. VKBeleg.USER_Zahlungsreferenz)
Potentiell unterstützt werden alle Entitäten, welche Custom-Felder als Eingabeparameter unterstützen.

Aktuell wird nicht jeder Auslöser unterstützt,
da reine Lese-Zugriffe keine Daten manipulieren und somit eine Rückgabe nicht gespeichert wird.
z.B. Auslöser dynamicColumnInitialization oder manually

Beispiel

using System.Collections.Generic;
namespace Custom.TestAssembly
{
    public class ExampleAction
    {
        public Dictionary<string,object> Execute(Dictionary<string, object> parameter)
        {
            var client = parameter.TryGetValue("Client", out var clientObj) ? clientObj as Mandant : null;
            var documentId = parameter.TryGetValue("DocumentId", out var documentIdObj) && int.TryParse(documentIdObj?.ToString(), out var documentIdParsed) ? documentIdParsed : (int?)null;
            var automatic = parameter.TryGetValue("Automatic", out var automaticObj) && automaticObj != null ? (bool)automaticObj : false;
            var cultureId = parameter.TryGetValue("CultureId", out var cultureIdObj) && cultureIdObj != null ? cultureIdObj?.ToString() : "de-DE (Fallback)";
            var erpUser = parameter.TryGetValue("ErpUser", out var erpUserObj) ? erpUserObj as string : null;
            var locationKey = parameter.TryGetValue("LocationKey", out var locationKeyObj) ? locationKeyObj as string : null;
                       
            var result = new Dictionary<string, object>();
            result.Add("Message", new string[] {
                $"Standort: {locationKey}",
                $"Automatisch: {automatic}",
                $"Lokalisierung: {cultureId}",
                $"ERP-Benutzer: {erpUser}"
            });
            result.Add("MessageType", "Information");
            result.Add("PrintDocumentId", documentId);
            return result;
        }
    }
}

Auslöser

Bei jeder Aktion kannst du in der Karte „Ausführung bei“ Optionen wählen, die als Auslöser für die Aktion zur Verfügung stehen.
Folgende Werte können über den Eingabeparameter „TriggeredBy“ übergeben werden.
Nicht jede Aktion unterstützt jeden Auslöser. Welche Auslöser unterstützt werden, ist bei der jeweiligen Aktion vermerkt.

TriggeredBy IdentifiziererAusführung beiGenutzt in Aktion(en)
accountChangeÄndern des KundenKunde ändern
addingPositionHinzufügen einer PositionPosition-Hinzufügen
addressChangeAdressänderungAdressprüfung
afterCommitnach Übergabe an das ERPEinfache Belegaktion
applicationStartStart der AnwendungBenutzer
beforeCommitvor Übergabe an das ERPBeleg speichern
Bezahlung
Inkassoart-Prüfung
Position-Hinzufügen
customerSaveSpeichern eines KundenKunde speichern
deliveryCountryChangeÄnderung des LieferlandesPosition-Hinzufügen
documentSaveSpeichern eines BelegsBeleg speichern
dynamicColumnInitializationautomatisch in dynamischer Spalte (= Schnellansicht)Artikel-Aktion
Beleg-Aktion
Kunden-Aktion
Warenkorb-Aktion
fieldChangeÄnderung eines FeldwertesBesteuerungsart
Erweiterte Position-Neuberechnung
Kunde ändern
Position-Hinzufügen
Position-Neuberechnung
Warenkorb-Aktion
manuallymanuelle Bestätigung über ein Kontextmenü, Drei Punkte-Menü oder einen ButtonArtikel-Aktion
Beleg-Aktion
Einfache Belegaktion
Erweiterte Position-Neuberechnung
Kunden-Aktion
Position-Neuberechnung
Warenkorb-Aktion
priceCalculationErmittlung von PreisenErweiterte Position-Neuberechnung
Position-Neuberechnung
taxationCalculationErmittlung der BesteuerungsartBesteuerungsart
transformationAfterConfirmWeiterverarbeitung, nach BestätigungWarenkorb-Aktion
transformationBeforeConfirmWeiterverarbeitung, vor BestätigungWarenkorb-Aktion
webhookAufruf eines WebhooksBezahlung

Grund für das Auslösen der Aktion

Jede Aktion enthält den Eingabeparameter „SourceEvent“. Daraus kannst du entnehmen, welcher Auslöser bzw. welche Feldänderung die Aktion ausgelöst hat.

Der Wert der Eigenschaft setzt sich wie folgt zusammen:

  • {Entität}: Hier kannst du sehen, in welcher Entität die Aktion ausgelöst worden ist.
    • Angebot: {offer}
    • Angebotsposition: {offerLine}
    • Bestellung: {order}
    • Bestellposition: {orderLine}
    • Warenkorb: {shoppingCart}
    • Warenkorbposition: {shoppingCartPosition}
  • {Feldname}: Hier kannst du sehen, durch welche Feldänderung die Aktion ausgelöst worden ist.
  • {Auslöser}: Hier kannst du sehen, welcher Auslöser für die Aktivierung der Aktion verantwortlich war.
{Auslöser}Event in Elements
accountGroupChangedKundengruppe ändern
AccountChangedKunde auswählen oder ändern
additionDeletedZuschlag löschen
additionModifiedZuschlagsbetrag ändern
additionTypeChangedZuschlagsart ändern
countryCodeChangedLand der (Liefer-)Anschrift ändern
currencyCodeChangedWährung ändern
customerCardStatusChangedKundenkartenguthaben aktivieren oder deaktivieren
discountListChangedRabattliste auswählen oder ändern
discountValueChangedRabatt ändern
dispatchChangedVersandart ändern
documentDateChangedBelegdatum ändern
documentDisocuntModifiedRabatt bearbeiten & löschen
grossIndicatorChangedBruttopreise aktivieren oder deaktivieren
itemAlternativeChangedKennzeichen „Alternative“ ändern
lineAddedArtikel hinzufügen
lineDeletedArtikel löschen
manualPriceResetKenzeichen „manuell geändert“ zurücksetzen
newEntityCreatedNeue Entität anlegen
paymentConditionChangedZahlart ändern
priceListChangedPreisliste auswählen oder ändern
quantityChangedMenge ändern
quantityTypeChangedMengenart ändern
resetManualTaxationBesteuerungsart zurücksetzen
taxationChangedBesteuerungsart ändern
unitPriceChangedEinzelpreis ändern
voucherModifiedGutschein hinzufügen / löschen
zipCodeChangedPLZ der (Liefer-)Anschrift ändern

Diese Events gibt es ausschließlich im Warenkorb:

{Auslöser}Event in Elements
recalculateAllübernehmen / neu berechnen
useCurrentConditionsAktuelle Konditionen verwenden

Individuelle Dialog-Formulare

Elements bietet mit den Prompts die Möglichkeit für bestimmte, manuell ausgelöste Aktionen weitere Parameter per Dialog von einer Benutzerin oder einem Benutzer für die Ausführung der Aktion zu erfragen.

Diese Parameter werden dann mit in die Aktionsausführung gegeben und können dort verarbeitet werden.

Möchtest du Parameter von einer Benutzerin oder einem Benutzer abfragen, so gib an einer beliebigen Stelle im Code einen Response mit einem Prompt-Ausgabeparameter (siehe unten) zurück. In diesem Prompt wird unter anderem die HTML-Darstellung des anzuzeigenden Dialogs in einem JSON-Objekt mit den gewünschten Parametern definiert.

Elements reagiert auf den Prompt-Ausgabeparameter und zeigt einen Dialog an und sendet zum Abschluss an eine window.postMessage. Die Aktion wird daraufhin erneut aufgerufen, jedoch werden die Daten des Prompts als Eingabeparameter mit übergeben.

Mit diesem Aufruf kannst du das Prompt-Fenster schließen und es findet kein weiterer Aktionsaufruf statt:

window.parent.postMessage({message: 'entityActionPromptAbort'})
HINWEIS

Mit den übergebenen Prompt-Daten ist es nun möglich, in der Aktionsausführung die Stelle zu überspringen, die zuvor die Daten per Ausgabeparameter angefordert hat. Dazu dient der Name des Prompt, der hier zur Identifizierung genutzt werden kann. Im weiteren Aktionsverlauf können die Parameter dann genutzt und verarbeitet werden.

So lassen sich auch beliebig viele Dialoge auf Wizard-Art dynamisch hintereinander anzeigen.

Folgende, funktions-spezifische Eingabeparameter werden übergeben:

KeyDatentypValue
PromptDictionary<string,object>enthält die Daten eines HTML-Dialogs, der weitere Parameter anhand der Eingabe des Benutzers abgeholt hat
PreviousPromptsDictionary<string, object>[]Enthält die Daten von vorherigen HTML-Dialogen dieser Aktion

Diese Inhalte sind jeweils im Dictionary enthalten:

KeyDatentypValue
Namestringder Name des Prompts
DataDictionary<string, object>die Daten des HTML-Dialogs

Nachfolgende, funktions-spezifische Ausgabeparameter werden in Elements verarbeitet:

KeyDatentypValue
PromptDictionary<string,object>enthält die Daten für einen HTML-Dialog, der angezeigt werden soll, um weitere Parameter abzufragen

Diese Inhalte werden im Dictionary erwartet:

KeyDatentypValue
Htmlstringder HTML-Code, der im iFrame angezeigt wird
Namestringder Name des Prompts
using System.Collections.Generic;
 
namespace Custom.TestAssembly
{
    public class ExampleAction
    {
        public Dictionary<string,object> Execute(Dictionary<string, object> parameter)
        {
            var client = parameter.TryGetValue("Client", out var clientObj) ? clientObj as Mandant : null;
            var documentId = parameter.TryGetValue("DocumentId", out var documentIdObj) && int.TryParse(documentIdObj?.ToString(), out var documentIdParsed) ? documentIdParsed : (int?)null;
            var cultureId = parameter.TryGetValue("CultureId", out var cultureIdObj) && cultureIdObj != null ? cultureIdObj?.ToString() : "de-DE (Fallback)";
            var erpUser = parameter.TryGetValue("ErpUser", out var erpUserObj) ? erpUserObj as string : null;
            var locationKey = parameter.TryGetValue("LocationKey", out var locationKeyObj) ? locationKeyObj as string : null;
                        
            var result = new Dictionary<string, object>();
            result.Add("Message", new string[] {
                $"Standort: {locationKey}",
                $"Lokalisierung: {cultureId}",
                $"ERP-Benutzer: {erpUser}"
            });
            result.Add("MessageType", "Information");
            result.Add("PrintDocumentId", documentId);
 
            return result;
        }
    }
}
BEISPIEL
using System.Collections.Generic;
using System.Linq;
 
namespace Custom.TestAssembly.HtmlPromptAction
{
    internal class Example
    {
        private const string PreviousPrompts = "PreviousPrompts";
 
        public Dictionary<string, object> Execute(Dictionary<string, object> parameter)
        {
 
            if (!parameter.ContainsKey(PreviousPrompts)
                || (parameter[PreviousPrompts] is List<Dictionary<string, object>> previousPrompts
                && (previousPrompts == null ||
                !previousPrompts.Any(prompt => prompt["Name"].ToString() == "HtmlPromptAction"))))
            {
 
                return new Dictionary<string, object>
                {
                    {
                        "Prompt", new Dictionary<string, object>()
                        {
                            {"Name", "HtmlPromptAction"},
                            {"Html", @"<!DOCTYPE html>
    <html>
      <head>
        <link rel='stylesheet' href='https://edev.4sellers.de/api/asset/64331/style.css' />
      </head>
      <body>
        <script>
            function onClickHandler() {
                var firstName = document.getElementById('fname').value;
                var lastName = document.getElementById('lname').value;
 
                window.parent.postMessage({message: 'entityActionPromptData', value: { fname: firstName, lname: lastName } }, '*');
            }
 
            function abort() {
                window.parent.postMessage({
                    message: 'entityActionPromptAbort'
                });
            }       
        </script>
          <h2>HTML Forms</h2>
          <form>
            <div class='form-group'>
              <label for='fname'>First name:</label><br>
              <input class='form-control' type='text' id='fname' name='fname' value='John'><br>
            </div>
            <div class='form-group'>
              <label for='lname'>Last name:</label><br>
              <input class='form-control' type='text' id='lname' name='lname' value='Doe'><br><br>
            </div>
              <button class='btn btn-primary' onclick='onClickHandler()'>Submit</button>
              <button class='btn btn-primary' onclick='abort()'>Abort</button>
          </form>
      </body>
    </html>"
                            }
                        }
                    }
                };
            }
 
            var promptData = (Dictionary<string, object>) parameter["Prompt"];
            var message = new List<string>();
            if(promptData != null)
            {
                message.Add("Hello World");
                message.Add($"Name: {promptData["Name"]}");
 
                var data = (Dictionary<string, object>) promptData["Data"];
 
                if(data != null)
                {
                    foreach(var kvp in data)
                    {
                        message.Add($"{kvp.Key}: {kvp.Value}");
                    }
                }
            }
 
 
            return new Dictionary<string, object>
                {
                    { "Message", message.ToArray() },
                    { "MessageType", "Information" },
                };
        }
    }
}
BEISPIEL für Prompt-Aktionen mit einem Prompt
using Custom.TestAssembly.Extensions;
using System.Collections.Generic;
using System.Linq;
 
namespace Custom.TestAssembly.HtmlPromptAction
{
    internal class Example
    {
        private const string PreviousPrompts = "PreviousPrompts";
 
        public Dictionary<string, object> Execute(Dictionary<string, object> parameter)
        {
 
            if (!parameter.ContainsKey(PreviousPrompts)
                || (parameter[PreviousPrompts] is List<Dictionary<string, object>> previousPrompts
                && (previousPrompts == null ||
                !previousPrompts.Any(prompt => prompt["Name"].ToString() == "HtmlPromptAction"))))
            {
 
                return new Dictionary<string, object>
                {
                    {
                        "Prompt", new Dictionary<string, object>()
                        {
                            {"Name", "HtmlPromptAction"},
                            {"Html", @"<!DOCTYPE html>
    <html>
      <head>
        <link rel='stylesheet' href='https://edev.4sellers.de/api/asset/64331/style.css' />
      </head>
      <body>
        <script>
          function onClickHandler() {
            var firstName = document.getElementById('fname').value;
            var lastName = document.getElementById('lname').value;
 
            window.parent.postMessage({message: 'entityActionPromptData', value: { fname: firstName, lname: lastName } }, '*');
          }
 
            function abort() {
                window.parent.postMessage({
                    message: 'entityActionPromptAbort'
                });
            }
        </script>
          <h2>HTML Forms</h2>
          <form>
            <div class='form-group'>
              <label for='fname'>First name:</label><br>
              <input class='form-control' type='text' id='fname' name='fname' value='John'><br>
            </div>
            <div class='form-group'>
              <label for='lname'>Last name:</label><br>
              <input class='form-control' type='text' id='lname' name='lname' value='Doe'><br><br>
            </div>
              <button class='btn btn-primary' onclick='onClickHandler()'>Submit</button>
              <button class='btn btn-primary' onclick='abort()'>Abort</button>           
          </form>
      </body>
    </html>"
                            }
                        }
                    }
                };
            }
 
            if (!parameter.ContainsKey(PreviousPrompts)
                || (parameter[PreviousPrompts] is Dictionary<string, object>[] previousPrompts1
                && (previousPrompts1 == null ||
                !previousPrompts1.Any(prompt => prompt["Name"].ToString() == "HtmlPromptAction-Mail"))))
            {
 
                return new Dictionary<string, object>
                {
                    {
                        "Prompt", new Dictionary<string, object>()
                        {
                            {"Name", "HtmlPromptAction-Mail"},
                            {"Html", @"<!DOCTYPE html>
    <html>
      <head>
        <link rel='stylesheet' href='https://edev.4sellers.de/api/asset/64331/style.css' />
      </head>
      <body>
        <script>
            function onClickHandler() {
                var birthdate = document.getElementById('birthdate').value;
                var mail = document.getElementById('mail').value;
 
                window.parent.postMessage({message: 'entityActionPromptData', value: { 'birthdate': birthdate, 'mail': mail } }, '*');
            }
 
            function abort() {
                window.parent.postMessage({
                    message: 'entityActionPromptAbort'
                });
            }             
        </script>
          <h2>HTML Forms</h2>
          <form>
            <div class='form-group'>
              <label for='birthdate'>Birthdate</label><br>
              <input type='date' id='birthdate' name='birthdate' value='01011994'><br>
            </div>
 
            <div class='form-group'>
              <label for='mail'>Mail</label><br>
              <input type='text' id='mail' name='mail' value='random@mail.address'><br><br>
            </div>
              <button class='btn btn-primary' onclick='onClickHandler()'>Submit</button>
              <button class='btn btn-primary' onclick='abort()'>Abort</button>            
           </form>
      </body>
    </html>"
                            }
                        }
                    }
                };
            }
 
            var prompts = (Dictionary<string, object>[]) parameter["PreviousPrompts"];
            var message = new List<string>();
            if (prompts != null)
            {
                message.Add("Hello World");
 
                foreach (var prompt in prompts)
                {
                    message.Add($"Name: {prompt["Name"]}");
 
                    var data = (Dictionary<string, object>)prompt["Data"];
 
                    if (data != null)
                    {
                        foreach (var kvp in data)
                        {
                            message.Add($"{kvp.Key}: {kvp.Value}");
                        }
                    }
                }
            }
 
 
            return new Dictionary<string, object>
                {
                    { "Message", message.ToArray() },
                    { "MessageType", "Information" },
                }.ProcessDevTags(parameter);
        }
    }
}
BEISPIEL für Prompt-Aktionen mit mehr als einem Prompt

Übersicht über die unterschiedlichen Aktionstypen

Adressprüfung

Diese Aktion ermöglicht es, bei jeder Änderung einer Adresse eine externe Adressvalidierung durchzuführen und dem Benutzer ggf. eine Korrektur vorzuschlagen. Das ist bei der Adresse im Kundenstamm sowie bei der Adresse oder der abweichenden Lieferadresse in Angeboten oder in Bestellungen möglich.

Folgende Angaben musst du – abweichend von den allgemeinen Angaben – vornehmen:

Wähle bitte den Aktionstyp „Adressprüfung“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Adressprüfung ausgelöst wird. Hierbei steht dir nur die Option „Adressänderung“ zur Verfügung.

Wenn du „Adressänderung“ (TriggeredBy = „addressChange“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer

  • den Fokus auf einem der Adressfelder („Straße“, „PLZ“, „Ort“, „Land“) hatte und
  • der Inhalt eines der Adressfelder geändert wurde und
  • alle Adressfelder einen Inhalt haben und
  • der Fokus nicht mehr auf einem der Adressfelder ist.

Die Aktion wird zudem für Adressen in Deutschland nicht angestoßen, wenn die Leitcodierung für Deutschland in Elements aktiviert ist.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Kunde (customer)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben.

KeyDatentypValue
StreetAndHouseNumberstringStraße und Hausnummer
ZipCodestringPostleitzahl
CitystringStadt/Ort
CountryCodestringLändercode, z.B. DE

Es werden keine Positionsdaten übergeben.

Ausgabeparameter

Die Aktion erwartet entweder keine Rückmeldung (bei korrekter Adresse), eine Meldung mit Hinweis, Warnung oder Fehler (durch Fehler bei Adressvalidierung) oder die korrigierte Adresse.

Die Rückgabe von Dateien wird nicht unterstützt.

HINWEIS

Sobald die Prüfung innerhalb der Aktion eine korrigierte Adresse ermittelt, wird diese dem Benutzer in einer Lightbox mit der geprüften Adresse angezeigt. Der Benutzer kann dann entscheiden, ob er die korrigierte Adresse übernehmen oder ignorieren möchte.

Das sollten die übermittelten Werte sein:

KeyDatentypValue
StreetAndHouseNumberstringStraße und Hausnummer
ZipCodestringPostleitzahl
CitystringStadt/Ort
CountryCodestringLändercode, z.B. DE

Unvollständig zurückgegebene Adressen werden für die Anzeige um die Eingabeparameter ergänzt, so dass sichergestellt ist, dass vollständige Adressen verglichen werden.

Tritt ein Fehler auf, weil beispielsweise die API nicht erreichbar ist, dann sollten keine Adressdaten zurückgegeben werden. Message und MessageType werden dann analog zu den anderen Aktionen verarbeitet bzw. dargestellt.

HINWEIS

Artikel-Aktion

Diese Aktion kannst du in Abhängigkeit eines Artikels bzw. einer Position einsetzen. Sie lässt sich entweder über das Kontextmenü des Artikels/der Position aufrufen oder wird automatisch in den Details der Warenkorbposition oder in der Artikelübersicht eines Artikels angezeigt, der in der Artikelliste aktiviert ist.

Immer, wenn der Benutzer einen Artikel ansieht – sei es in der Artikelliste oder im Warenkorb – soll ein Preisvergleich eingeblendet werden. Dabei werden aktuelle Marktdaten über eine von der Aktion angefragten Schnittstelle im HTML-Format eingeblendet.

BEISPIEL

Immer, wenn der Benutzer einen Artikel ansieht – sei es in der Artikelliste oder im Warenkorb – sollen ihm alternative Artikel angezeigt werden, die er stattdessen anbieten kann. Dazu kannst du gemäß deiner eigenen Logik Artikel ermitteln, die du innerhalb der Aktion als Liste übergibst. Der Benutzer sieht dann die „alternativen“ Artikel und kann diese direkt in den Warenkorb übernehmen.

BEISPIEL

Wenn der Benutzer einen Artikel in einer Bestellung oder einem Angebot hinzufügt, möchte er wissen, ob und welchen preislichen Spielraum er noch hat. Diese Informationen stellst Du ihm anhand einer von dir hinterlegten Logik zur Verfügung. Er muss nur das Kontextmenü des Artikels auswählen und ihm werden die Informationen in einer Box im HTML-Format angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Artikel-Aktion“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Artikel-Aktion ausgelöst wird.

Wenn du „Manuelle Ausführung“ (TriggeredBy = „manually“) aktivierst, kann die Aktion vom Benutzer über das Kontextmenü angestoßen werden.

Aktivierst du „Automatisch in dynamischer Spalte“ (TriggeredBy = „dynamicColumnInitialization“) aktivierst, so wird die Aktion immer ausgeführt, wenn die Artikelübersicht in einer Artikelliste oder die Artikeldetails im Warenkorb angezeigt werden.

Beide Auslöser können in folgenden Entitäten angewendet werden:

  • Artikel (item)
  • Warenkorbposition (shoppingCartPosition)

In diesen Entitäten kann nur der Auslöser „Manuelle Ausführung“ angewendet werden, da die Infoleiste nicht zur Verfügung steht:

  • Angebotsposition (offerLine)
  • Bestellposition (orderLine)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Paramater übergeben:

KeyDatentypValue
PriceListIdintdie ID der Preisliste, die aktuell zugewiesen ist
DiscountListIdintdie ID der Rabattliste, die aktuell zugewiesen ist
CurrencyCodestringdie Währung, die aktuell zugewiesen ist
CurrencyCodeExchangeRatedecimalder aktuell verwendete Umrechnungsfaktor
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)
DocumentDatedatetimedas Belegdatum
PositionDictionary<string,object>Position / Artikel

Es werden die allgemeinen Positionsdaten übergeben.

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Zudem kannst du dem Benutzer bei der automatischen Ausführung in der dynamischen Spalte auch eine Liste an Artikeln anzeigen. Diese wird im Stil der anderen, mit dem Artikel in Beziehung stehenden Artikel angezeigt.

Und das sind die Inhalte, die du dafür mitgeben musst:

KeyDatentypValue
PositionGroupsDictionary<string,object>[]eine Liste von Positionsgruppen

Das sind die Ausgabeparameter pro Positionsgruppe:

KeyDatentypValue
Captionstringeine Überschrift für die Liste der Positionen
PositionsDictionary<string,object>[]Positionen

Das sind die Ausgabeparameter pro Position:

KeyDatentypValue
ItemNumberstringdie Artikelnummer
VariationIdintdie interne Variantennummer (AuspraegungID)
Messagestringeine Meldung pro Position
SortOrderintSortierung der Position

Bei der Darstellung wird je nach Kontext unterschieden wie mit den Rückgabewerten umgegangen wird:

(a) Bei manueller Ausführung werden die zurückgegebenen Positionen verworfen und ausschließlich Messages angezeigt.

(b) Bei Einbettung in der dynamischen Spalte werden HTML Messages in einem iFrame dargestellt und nicht als Dialog.

HINWEIS

Beleg-Aktion

Es kann sein, dass es im Rahmen einer Bestellung zu Besonderheiten kommt, über die der Benutzer möglichst prominent informiert werden sollte, wenn er die Bestellung aufruft. Oder es gibt Informationen zum Kunden, die ein Benutzer unbedingt erhalten muss, sobald er eine Bestellung oder einen Kunden aufruft. Dafür kannst du die Beleg-Aktion in Elements nutzen.

Ein Kunde ruft an und ist ungehalten, da er noch auf Ware aus einer Bestellung wartet. Der Benutzer sucht nach der Bestellung und sieht sofort in der Schnellansicht der Bestellung, dass der Hauptlieferant aktuell Lieferschwierigkeiten hat. Diese Information wurde zentral für alle betreffenden Artikel zur Verfügung gestellt und wird dem Benutzer nun angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Beleg-Aktion“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Automatisch in dynamischer Spalte(TriggeredBy = „dynamicColumnInitialization“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine Bestellung oder ein Angebot aufruft und sich dessen Schnellansicht ansieht.

Zudem kannst du es den Benutzern ermöglichen, die Aktion selbst auszulösen, indem du „Manuelle Ausführung“ (TriggeredBy = „manually“) aktivierst. Dann kann der Benutzer die Aktion im Kontext- oder Dreipunktemenü auswählen.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
DocumentIdstringdie interne ID des Belegs
FilesDictionary<string, object>[]das Array von Datei-Definitionen (s. Entity-Spezifische Eingabeparameter)

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Zusätzlich können in dieser Aktion noch folgende Parameter übergeben werden.

KeyDatentypValue
PrintDocumentIdint
int[]
die ID des Beleges oder die IDs der Belege, der/die in Elements ausgedruckt werden soll/en; es öffnet sich die in Elements bekannte PDF-Vorschau

Bei der Darstellung wird je nach Kontext unterschieden wie mit den Rückgabewerten umgegangen wird:

(a) Bei manueller Ausführung werden die zurückgegebenen Positionen verworfen und ausschließlich Messages angezeigt.

(b) Bei Einbettung in der dynamischen Spalte werden HTML Messages in einem iFrame dargestellt und nicht als Dialog.

HINWEIS

Beleg speichern

Mit Hilfe dieser Aktion kann in den Speicherprozess eines Angebots oder einer Bestellung – egal ob bei Neuanlage oder Bearbeitung eines bestehenden Belegs – eingegriffen werden.

Unter bestimmten Bedingungen möchtest du, dass beim Speichern einer neuen Bestellung in Elements anstelle einer „Auftragsbestätigung“ eine „Bestellanfrage“ angelegt wird. Diesen Beleg hast du individuell in deinem ERP-System angelegt, um Bestellungen der Kundengruppe „B2B-Kunden“ separat freizugeben. Du kannst nun vor dem Speichern der Bestellung anhand der Kundengruppe diesen speziellen Belegtyp an Elements übergeben. Somit wird eine „Bestellanfrage“ im ERP-System angelegt.

BEISPIEL

Du möchtest sicherstellen, dass die angelegten Bestellungen immer Angaben enthalten, die in deinem ERP-System aber nicht als Pflichtfelder definiert werden können. Sobald der Benutzer nun eine Bestellung an das ERP-System übergibt, prüfst du die entsprechenden Felder auf den Inhalt. Ist dieser nicht oder falsch angegeben korrigierst du ihn entweder automatisiert oder weist den Benutzer mit Hilfe einer Meldung darauf hin, dass dieses Feld einen Inhalt benötigt.

BEISPIEL

Mit Hilfe dieser Aktion kannst du nun also anhand der Belegdaten beim Speichern eines Belegs eine Reaktion basierend auf individuellen Regelwerken anstoßen.

Wähle bitte den Aktionstyp „Beleg speichern“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „vor Übergabe an das ERP“ (TriggeredBy = „documentSave“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine in der Aktion hinterlegte Entität an das ERP-System übergeben möchte.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer): Die Aktion wird ausgelöst, wenn der Benutzer auf „Angebot verbindlich bestätigen“ klickt.
  • Bestellung (order): Die Aktion wird ausgelöst, wenn der Benutzer auf „Bestellung verbindlich bestätigen“ klickt.

Die Aktion wird auch ausgeführt, wenn eine bereits im ERP-System angelegte Bestellung (oder Angebot) nochmals verbindlich bestätigt wird.

HINWEIS

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
SageBelegSagede.OfficeLine.Wawi.BelegEngine.Belegdas Sage-Objekt, welches gespeichert werden soll
CustomDictionary<string, object>die Custom-Felder, die für den Beleg definiert sind
FilesDictionary<string, object>[]das Array von Datei-Definitionen (s. Entity-Spezifische Eingabeparameter)

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

KeyDatentypValue
SageBelegSagede.OfficeLine.Wawi.BelegEngine.Belegdas Sage-Objekt, welches gespeichert werden soll
CancelSavebooldas Kennzeichen. ob das Speichern abgebrochen werden soll
CustomDictionary<string, object>die Custom-Felder, die für den Beleg definiert sind (s. Entity-Spezifische Ausgabeparameter)

Der Aufbau der Custom-Felder entspricht folgendem Schema:

{
  "order/offer": {
    "Tabellename.Spaltenname": "Wert"
  }
  "orderLine/offerLine": {
    "orderLineId1/offerLineId1": {
      "Tabellenname.Spaltenname": "Wert"
    }
  }
}

Benutzer

Meldet sich ein Benutzer oder ein Kunde in Elements an, kann es hilfreich sein, ihm individuelle Informationen anzuzeigen.

Ein Kunde meldet sich im B2B-Portal an. Im ERP-System ist definiert, dass dieser Kunde aktuell eine Liefersperre hat. Das wird dem Kunden anhand einer Meldung unmittelbar nach seiner Anmeldung angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Benutzer“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Anmeldung(TriggeredBy = „applicationStart“) aktivierst, wird die Aktion immer ausgeführt, wenn sich ein Benutzer in Elements anmeldet. Sie wird auch ausgelöst, wenn der Benutzer Elements in einem Browser-Tab neu startet oder aktualisiert.

In dieser Aktion kannst du keine Entität auswählen. Ist diese Aktion aktiviert, wird sie bei jeder Anmeldung ausgeführt und die Rückgabe entscheidet darüber, ob der Benutzer oder Kunde eine Meldung erhält oder nicht.

HINWEIS

Eingabeparameter

Es werden die für den angemeldeten Benutzer oder Business-Login vorhanden Daten übergeben (s. Allgemeine Eingabeparameter).

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Die Rückgabe von Dateien wird nicht unterstützt.

HINWEIS

Besteuerungsart

In Elements wird die Besteuerung in Angebote, Bestellungen und Warenkörben automatisiert ermittelt. Alternativ kann der Benutzer – außer im Warenkorb – die Besteuerungsart manuell festlegen. Es kann aber auch notwendig sein, die Besteuerungsart aufgrund individueller Vorgaben festzulegen.

Für Lieferungen nach Großbritannien hat die Buchhaltung eine eigene Besteuerungsart angelegt, die im Rechnungswesen genutzt wird. Wird eine Bestellung nach Großbritannien geliefert, so muss zwingend diese Besteuerungsart hinterlegt werden. Egal, was der Anwender macht, die Besteuerungsart wird immer überschrieben.

BEISPIEL

Wähle bitte den Aktionstyp „Besteuerungsart“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Ermittlung der Besteuerungsart(TriggeredBy = „taxationCalculation“) aktivierst, wird die Aktion immer ausgeführt, wenn in einem Angebot, einer Bestellung oder einem Warenkorb eine dieser Kriterien zutrifft:

  • Der Kunde wird hinzugefügt oder ausgetauscht.
  • Das (Liefer-)Land wird geändert.
  • Das Kennzeichen „Bruttopreise“ wird geändert. Das ist im Warenkorb nicht möglich.
  • Die Preisliste wird geändert. Das ist im Warenkorb nicht möglich.
  • Die Zahlungs- oder Versandart wird geändert.
  • Die Besteuerungsart wird manuell geändert.
  • Die Besteuerungsart wird auf die automatische Ermittlung durch Elements zurückgesetzt.

Zudem kannst du den Auslöser „Änderung Feldinhalt“ (TriggeredBy = „fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)
InvoiceAddressName1stringder Name1 der Rechnungsadresse
InvoiceAddressName2stringder Name2 der Rechnungsadresse
InvoiceAddressAdditionstringder Adresszusatz der Rechnungsadresse
InvoiceAddressStreetAndHouseNumberstringdie Straße und Hausnummer der Rechnungsadresse
InvoiceAddressZipCodestringdie Postleitzahl der Rechnungsadresse
InvoiceAddressDeliveryAddressCitystringdie Stadt/Ort der Rechnungsadresse
InvoiceAddressCountryCodestringder Ländercode der Rechnungsadresse, z.B. DE
IsManualTaxationbooldas Kennzeichen für manuelle Besteuerung (ja/nein)
DeliveryAddressName1stringder Name1 der Lieferadresse
DeliveryAddressName2stringder Name2 der Lieferadresse
DeliveryAddressAdditionstringder Adresszusatz der Lieferadresse
DeliveryAddressStreetAndHouseNumberstringdie Straße und Hausnummer der Lieferadresse
DeliveryAddressZipCodestringdie Postleitzahl der Lieferadresse
DeliveryAddressDeliveryAddressCitystringdie Stadt/Ort der Lieferadresse
DeliveryAddressCountryCodestringder Ländercode der Lieferadresse, z.B. DE
DocumentDatedatetimedas Belegdatum
TaxClassIdshortdie Besteuerungsart
IsManualTaxationbooldas Kennzeichen für manuelle Besteuerung (ja/nein)
EuCountryCodeIdstringdas EU-Land
(nur bei offer und order)
EuVatId stringdie USt-IdNr
(nur bei offer und order)

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

KeyDatentypValue
TaxClassIdshortdie Besteuerungsart, die auf den Beleg übernommen wird
(fehlt der Eintrag bzw. wird NULL übergeben, so wird die Besteuerungsart beibehalten)
EuCountryCodeIdstringdas EU-Land, das auf den Beleg übernommen wird
(fehlt der Eintrag bzw. wird NULL übergeben, so wird die Besteuerungsart beibehalten)
EuVatId stringdie USt-IdNr., die auf den Beleg übernommen wird
(fehlt der Eintrag bzw. wird NULL übergeben, so wird die Besteuerungsart beibehalten)

Wird der Wert NULL übergeben oder ist der Ausgabeparameter nicht enthalten, so bleibt die Besteuerungsart unverändert.

HINWEIS

Wird die Besteuerungsart überschrieben, so wird diese nicht als „manuell gesetzt“ markiert. So kann bei jedem Auslöseprozess entweder die selbst ermittelte Besteuerungsart gesetzt oder auf die von Elements ermittelte Besteuerungsart zurückgegriffen werden.

HINWEIS

Bezahlung

Diese Aktion ermöglicht es, basierend auf der ausgewählten Zahlungsart in einem Angebot oder einer Bestellung eine externe Zahlungsabwicklung anzufragen und das Ergebnis der Anfrage zu verarbeiten. Während der Verarbeitung kann der Benutzer nicht in Elements arbeiten. Vielmehr muss er auf das Ergebnis der Aktion warten.

Der Benutzer wählt die Elements-Zahlungsart „Kreditkarte“ aus. Bei der Übergabe an das ERP-System wird in einem neuen Browser-Tab die Kreditkartenabwicklung aufgerufen. Diese muss der Benutzer durchlaufen. Sobald er dies erfolgreich gemacht hat, wird die Bestellung im ERP-System angelegt und die Transaktionsnummer wird in einem Feld in der Bestellung hinterlegt.

BEISPIEL

Wähle bitte den Aktionstyp „Bezahlung“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „vor Übergabe an das ERP“ aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine in der Aktion hinterlegte Entität an das ERP-System übergeben möchte (TriggeredBy = „beforeCommit“). Dann wird auch das Kennzeichen für die automatische Ausführung übergeben.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer): Die Aktion wird ausgelöst, wenn der Benutzer auf „Angebot verbindlich bestätigen“ klickt.
  • Bestellung (order): Die Aktion wird ausgelöst, wenn der Benutzer auf „Bestellung verbindlich bestätigen“ klickt.

Die Aktion wird nur ausgeführt, wenn eine Bestellung oder ein Angebot neu in Elements angelegt wird. Zudem wird sie ausschließlich für konfigurierte Elements-Zahlarten (s. Administration / Zuordnungen / Bezahlung) ausgeführt.

HINWEIS

Die Aktion wird in zwei Schritten durchlaufen. Dabei werden jeweils Daten übergeben und Rückmeldungen verarbeitet.

Zahlungsprozess – Initialisierung

In einem ersten Schritt wird der Bezahlvorgang eingeleitet.

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
WebhookUrlstringfür diesen Prozess frisch generierte Rücksprung-URL für Zahlungsanbieter
ExternalEntityReferencestringdie Elements Referenznummer des Belegs
PaymentProcessStatusstringder Status des Prozesses (new | inProcess | finished | canceled | failed)
CurrencyCodestringdie Währung
GrossAmountdecimalder Gesamtbetrag der Entität

Es werden keine Positionsdaten übergeben.

Ausgabeparameter

Neben einem Sperrkennzeichen zum Abbruch des Prozesses, wird ein Token für den Folgeaufruf sowie eine URL zum Aufruf der Seite des Zahlungsanbieters für die Abwicklung der Bezahlung erwartet.

KeyDatentypValue
PreventsCommitbooldas Kennzeichen, ob die Übergabe an das ERP abgebrochen werden soll
PaymentProcessTokenstringder Token für Folgeaufruf (falls vorhanden)
PaymentProcessProviderUrlstringdie URL zum Aufruf der Seite des Zahlungsanbieters für die Abwicklung der Bezahlung

Zahlungsprozess – Abschluss

Im zweiten Schritt wird der Bezahlvorgang abgeschlossen. Der Schritt wird durch einen Webhook-Aufruf ausgelöst.

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
PaymentProcessTokenstringder Token aus Initialaufruf (falls vorhanden)
PaymentProcessStatusstringder Status des Prozesses (new | inProcess | finished | canceled | failed)
PaymentProcessWebhookResult_HttpHeaderDictionary<string,string>HttpHeader des Webhook-Aufrufs
PaymentProcessWebhookResult_HttpQueryDictionary<string,string>HttpQuery-Parameter des Webhook-Aufrufs
HttpBodystringder serialisierte Body des Webhook-Aufrufs

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Die Rückgabe von Dateien wird nicht unterstützt.

HINWEIS
KeyDatentypValue
PreventsCommitbooldas Kennzeichen, ob die Übergabe an das ERP abgebrochen werden soll
ExternalPaymentReferencestringdie Externe Zahlungsreferenz / TransactionID des Zahlungsanbieters (falls vorhanden)

Der Benutzer hat die Zahlungsart „Rechnung“ ausgewählt. Es muss keine externe Abwicklung durchlaufen werden.

BEISPIEL

Neben den allgemeinen Rückmeldungen kannst du die externe Zahlungsreferenz übergeben. Diese kann dann weiterverarbeitet werden, damit zum Beispiel die Buchhaltung neben der Elements Referenznummer die Referenznummer des Zahlungsanbieters einsehen kann.

Alternativ kannst du auch ein Sperrkennzeichen mitgeben. Sobald die Aktion feststellt, dass die Bestellung oder das Angebot nicht weiterverarbeitet werden kann, kann ein Sperrkennzeichen mitgeschickt werden. Dann ist es dem Benutzer nicht mehr möglich, die Bestellung oder das Angebot im ERP-System zu speichern.

Der Benutzer hat die Zahlungsart „Kreditkarte“ ausgewählt und die Abwicklung durchlaufen. Dabei ist es zu einem Problem gekommen. Die Bestellung kann somit auch nicht an das ERP-System übergeben werden. Es wird eine Fehlermeldung eingeblendet.

BEISPIEL

Schicke bei einer Sperrung bitte auch immer eine Fehlermeldung mit, damit der Benutzer auch reagieren und die Bestellung oder das Angebot anpassen kann.

TIPP

Einfache Belegaktion

Mit dieser Aktion bist du in der Lage Ihre Angebote, Bestellungen oder andere darin enthaltene Belege in andere Belege zu transformieren oder basierend auf einem Angebot oder einer Bestellung dem Benutzer weiterführende Informationen anzuzeigen.

Du möchtest, dass unter bestimmten Bedingungen eine Sofortrechnung – also die Kombination aus Lieferschein und Rechnung – aus Elements heraus erstellt werden kann, da ihr ein Ladengeschäft habt. Der Benutzer wählt im Kontextmenü der Bestellung einfach den Eintrag „Mitnahmedokumente erstellen” und es wird eine Sofortrechnung erzeugt und in Elements als Druckvorschau angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Einfache Belegaktion“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „nach Übergabe an das ERP“ (TriggeredBy = „afterCommit“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine in der Aktion hinterlegte Entität an das ERP-System übergeben möchte. Dann wird auch das Kennzeichen für die automatische Ausführung übergeben.

Bei gewissen Konstellationen soll geprüft werden, ob ein Lieferdokument erzeugt werden kann. Das ist aber von verschiedenen Faktoren abhängig und diese Faktoren wiederum wirken sich darauf aus, ob und welcher Beleg erzeugt werden muss. Der Benutzer soll diese Prüfung aber nicht jedes Mal manuell über das Kontext- oder Drei Punkte-Menü anstoßen, sondern von dieser Prüfung nur das Ergebnis erhalten. Die Aktion wird also jedes Mal, wenn eine Bestellung an das ERP-System übergeben wird, durchlaufen. Der Benutzer bekommt davon entweder gar nichts mit, da kein Faktor für die Erstellung eines Lieferdokuments spricht. Alternativ wird dem Benutzer eine Fehlermeldung angezeigt, wenn zur Erstellung des Lieferdokuments mindestens ein Faktor nicht erfüllt ist. Im Idealfall wird dem Benutzer in der Druckvorschau das erstellte Lieferdokument angezeigt.

BEISPIEL

Diese Aktion kann wirklich nur ausgelöst werden, wenn der Benutzer den Beleg an das ERP-System übergibt, indem er auf die entsprechende Schaltfläche klickt. Solltest du die automatische Beleganlage über den Warenkorb aktiviert haben, so wird die Aktion nicht ausgelöst.

HINWEIS

Wenn du möchtest, dass der Benutzer diese Aktion manuell mittels des Kontext- oder Drei Punkte-Menüs in der Entität ausführen kann, aktiviere die „Manuelle Ausführung“ (TriggeredBy = „manually“).

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer): Die Aktion wird ausgelöst, wenn der Benutzer auf „Angebot verbindlich bestätigen“ klickt.
  • Bestellung (order): Die Aktion wird ausgelöst, wenn der Benutzer auf „Bestellung verbindlich bestätigen“ klickt.

Eingabeparameter

Zusätzlich zu den allgemeinen Daten wird die interne Belegnummer übergeben.

KeyDatentypValue
DocumentIdintdie interne ID des Belegs

Es werden keine Positionsdaten übergeben.

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet. Zusätzlich können in dieser Aktion noch folgende Parameter übergeben werden.

KeyDatentypValue
PrintDocumentIdintdie ID des Beleges, der in Elements ausgedruckt werden soll; es öffnet sich die in Elements bekannte PDF-Vorschau

Du lässt bei jeder Übergabe einer Bestellung an das ERP-System prüfen, ob eine Sofortrechnung erstellt werden soll. Das ist bei einer Versandart, die eine Lieferung mit sich bringt, aber gar nicht notwendig. Dann wird die Funktion durchlaufen, gibt aber kein Ergebnis an Elements zurück.

BEISPIEL

Du lässt bei jeder Übergabe einer Bestellung an das ERP-System prüfen, ob eine Sofortrechnung erstellt werden soll. Die Ware soll zwar mitgenommen werden, allerdings soll diese bar bezahlt werden und es gibt aber noch keinen Zahlungseingang auf die Bestellung. Dann wird der Benutzer darüber informiert, dass noch kein Zahlungseingang vorhanden ist und daher die Sofortrechnung nicht erstellt werden kann.

BEISPIEL

Du lässt bei jeder Übergabe einer Bestellung an das ERP-System prüfen, ob eine Sofortrechnung erstellt werden soll. Die Ware soll mitgenommen und bar bezahlt werden. Bei der Prüfung ist ein Zahlungseingang auf die Bestellung festgestellt worden und die Ware ist am Standort verfügbar. Daher wurde die Sofortrechnung erstellt und die Druckvorschau wird dem Benutzer angezeigt.

BEISPIEL

Erweiterte Position-Neuberechnung

Diese Aktion ermöglicht es, bei der Berechnung einer Position im Angebot, in der Bestellung oder im Warenkorb individuelle Konditionen in die Preisermittlung einfließen zu lassen.

Du möchtest, dass Kunden nur Artikel mit einer Mindestbestellmenge bestellen können. Sobald ein Kunde eine zu geringe Menge eingibt, wird diese auf die Mindestbestellmenge korrigiert und an der Position wird ein Hinweis angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Erweiterte Position-Neuberechnung“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn Du „Ermittlung von Preisen“ (TriggeredBy = „priceCalculation“) aktivierst, wird die Aktion immer ausgeführt, wenn eine Änderung innerhalb der Entität zur Neuberechnung von Preisen führt. Welche Änderungen diese Neuberechnung veranlassen können, kannst du in der Hilfe unter <Bestellungen/Angebote > Bestellung/Angebot bearbeiten> einsehen.

Zudem kannst du es den Benutzern ermöglichen, die Aktion selbst auszulösen, indem du „Manuelle Ausführung“ (TriggeredBy = manually“) aktivierst. Dann kann der Benutzer die Aktion im Kontext- oder Dreipunktemenü der übergeordneten Entität auswählen.

Auch aus dem Kontext- oder Dreipunktmenü einer Position kannst du die Aktion auslösen, indem du „Manuelle Ausführung bei Position“ (TriggeredBy = „manually“) aktivierst.

Du kannst auch den Auslöser „Änderung Feldinhalt“ (TriggeredBy = fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
PriceListIdintdie ID der Preisliste, die aktuell zugewiesen ist
DiscountListIdintdie ID der Rabattliste, die aktuell zugewiesen ist
CurrencyCodestringdie Währung, die aktuell zugewiesen ist
CurrencyCodeExchangeRatedecimalder aktuell verwendete Umrechnungsfaktor
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)
DocumentDatedatetimedas Belegdatum
UserAccountTypestringder Typ des angemeldeten Benutzers
AccountType „crm“ (Benutzer)
AccountType „reseller“ (Business-Login)
UserAccountMailstringdie E-Mail-Adresse des angemeldeten Benutzers
TaxClassIdshortdie Besteuerungsart
ShoppingCartTypestringder Typ des Warenkorbes (nur im Falle eines Warenkorbs – andernfalls ist der Parameter leer)
PositionsDictionary<string,object>[]Position / Artikel

Neben den allgemeinen Positionsdaten werden zusätzlich diese Daten übergeben:

KeyDatentypValue
LineTypestringder Positionstyp (wird nicht im Warenkorb unterstützt)
Description1stringdie Bezeichnung1 der Position
Description2stringdie Bezeichnung2 der Position
LongTextstringder Langtext der Position
DimensionTextstringder Dimensionstext der Position
AccessoryTextstringder Zubehörtext der Position
ExternalEntityReferencestringdie Elements-Referenz für die Position
CustomDictionary<string, object>die Custom-Felder, die für die Position definiert sind (s. Entity-Spezifische Eingabeparameter)

Das Kennzeichen, ob der Einzelpreis manuell verändert worden ist, kann genutzt werden, um Positionen mit einem individuellen Preis/Rabatt von der Neuberechnung auszuschließen.

TIPP

Als Positionstyp erwartet die Aktion folgende Daten:

KeyValue
pageBreakSeitenumbruch
groupStart einer Gruppe
itemArtikel-Position
subTotalZwischensummen-Zeile (beendet die Gruppe)
textTextposition
alternativeAlternativ-Artikel

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet, allerdings pro Position:

KeyDatentypValue
PositionsDictionary<string,object>[]die Positionsdaten

Das sind die Ausgabeparameter der Position:

KeyDatentypValue
EntityKeystringder Elements-Key für diesen Datensatz
UnitPricedecimalder Einzelpreis
DiscountValuedecimalder Rabattsatz (in Prozent)
IsManualPricebooldas Kennzeichen, ob der Einzelpreis manuell verändert worden ist (EinzelpreisManuell)
Quantitydecimaldie Menge
QuantityUnitstringdie Mengeneinheit
LineTypestringder Positionstyp (Werte siehe oben)
Description1stringdie Bezeichnung1 der Position
Description2stringdie Bezeichnung2 der Position
LongTextstringder Langtext der Position
DimensionTextstringder Dimensionstext der Position
AccessoryTextstringder Zubehörtext der Position

Anhand der übergebenen Mengeneinheit wird die Mengenart ermittelt. Dabei wird wie folgt priorisiert: Verpackungseinheit vor Verkaufseinheit vor Basismengeneinheit.

HINWEIS

Sobald die Aktion also eine Änderung an den Positionskonditionen feststellt, kannst du diese an Elements übermitteln.

Das Kennzeichen, ob der Einzelpreis manuell verändert worden ist, kann genutzt werden, um Positionen von einer späteren Neuberechnung aufgrund einer Änderung an der Entität auszuschließen.

TIPP

Der Benutzer ändert die Menge eines Artikels. Da der Artikel nur in 5er-Schritten bestellt werden kann, wird die Menge automatisch auf den nächsten Schritt angepasst.

BEISPIEL

HTML-Aktion

Diese Aktion kannst du nutzen, um in der Administration zusätzliche Informationen einzubinden (s. „Inhalte > Zusätzliche Informationen“), die du allen oder ausgewählten Benutzern und Business-Logins zur Verfügung stellst.

Wenn sich deine Kunden im B2B-Portal anmelden, soll automatisch ein Arbeitsbereich aufgerufen werden, in dem individuelle Informationen auf einer Seite dargestellt werden, die auf den Kunden zugeschnitten sind.

Diese Informationen ermittelst du im Rahmen einer HTML-Aktion, die du wiederum als zusätzlichen Inhalt definiert und nur für die betreffende Business-Login-Gruppe freigegeben hast.

BEISPIEL

Auslöser

Die HTML-Aktion selbst verfügt über keinen Auslöser. Sie wird ausgelöst, wenn ein definierter Inhalt aufgerufen oder aktualisiert wird, dem die HTML-Aktion selbst zugeordnet ist.

Eingabeparameter

In der Aktion werden die allgemeinen Eingabeparameter übergeben.

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet. Zudem kann HTML-Content – auch in Form eines individuellen HTML-Dialogs – übergeben werden.

Inkassoart-Prüfung

Diese Aktion ermöglicht es, basierend auf der ausgewählten Zahlungsart in einem Angebot oder einer Bestellung eine Prüfung zu initiieren und dem Benutzer eine Information anzuzeigen. Mit Hilfe des Ergebnisses der Aktion kann die Übergabe eines Angebots oder einer Bestellung an das ERP-System unterbunden werden.

Der Benutzer wählt die Elements-Zahlungsart „Rechnung“ aus. Diese ist wiederum mit der Inkassoart „Kunde“ verknüpft und im Hintergrund wird eine Bonitätsprüfung ausgeführt. Diese meldet, dass anhand der vorliegenden Kriterien die Zahlung auf Rechnung nicht möglich ist. Der Benutzer bekommt einen Hinweis angezeigt und muss eine andere Zahlungsart auswählen.

BEISPIEL

Kunden, die seit zwei Jahren nicht mehr bestellt haben, dürfen nur bis zu einem Auftragswert von 100,- EUR auf Rechnung zahlen. Sobald der Auftragswert darüber liegt, wird dem Benutzer eine Warnung angezeigt und er kann die Bestellung nicht mehr an das ERP-System übergeben.

BEISPIEL

Jeder Zahlungsart in Elements ist eine Zahlungskondition im ERP-System zugewiesen. Idealerweise ist diese wiederum einer Inkassoart zugewiesen. Wenn nun der Benutzer eine Zahlungsart auswählt, sollte somit eine Inkassoart mit der Zahlungsart verknüpft sein. Diese Inkassoart kann die Aktion auslösen.

TIPP

Wähle bitte den Aktionstyp „Inkassoart-Prüfung“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „vor Übergabe an das ERP“ aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine in der Aktion hinterlegte Entität an das ERP-System übergeben möchte (TriggeredBy = „beforeCommit“). Dann wird auch das Kennzeichen für die automatische Ausführung übergeben.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer): Die Aktion wird ausgelöst, wenn der Benutzer auf „Angebot verbindlich bestätigen“ klickt.
  • Bestellung (order): Die Aktion wird ausgelöst, wenn der Benutzer auf „Bestellung verbindlich bestätigen“ klickt.

Die Aktion wird nur ausgeführt, wenn eine Bestellung oder ein Angebot neu in Elements angelegt wird. Zudem wird sie nur ausgeführt, wenn die angegebenen Inkassoarten über eine ERP-Zahlungskondition mit einer Elements-Zahlungsart (s. Administration / Zuordnungen / Bezahlung) verknüpft sind.

HINWEIS

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben.

Es wird immer die Rechnungsadresse übergeben. Bei einem abweichenden Rechnungsempfänger wird dessen Rechnungsadresse übergeben.

HINWEIS
KeyDatentypValue
Name1stringder Name 1
Name2stringder Name 2
Additionstringder Zusatz
StreetAndHouseNumberstringdie Straße und Hausnummer
ZipCodestringdie Postleitzahl
Citystringdie Stadt / der Ort
CountryCodestringder Ländercode, z.B. DE
NetAmountdecimalder Nettobetrag
GrossAmountdecimalder Bruttobetrag
CurrencyCodestringdie Währung

Es werden keine Positionsdaten übergeben.

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Die Rückgabe von Dateien wird nicht unterstützt.

HINWEIS
KeyDatentypValue
PreventsCommitbooldas Kennzeichen, ob die Übergabe an das ERP abgebrochen werden soll

Der Benutzer hat die Zahlungsart „Rechnung“ ausgewählt und der Kunde hat die benötigte Bonität. Es wird keine Rückmeldung angezeigt.

BEISPIEL

Neben den allgemeinen Rückmeldungen kannst du auch ein Sperrkennzeichen mitgeben. Sobald die Aktion feststellt, dass die Bestellung oder das Angebot nicht weiterverarbeitet werden kann, kann ein Sperrkennzeichen mitgeschickt werden. Dann ist es dem Benutzer nicht mehr möglich, die Bestellung oder das Angebot im ERP-System zu speichern.

Der Benutzer hat die Zahlungsart „Rechnung“ ausgewählt und der Kunde hat nicht die benötigte Bonität. Die Bestellung kann somit auch nicht an das ERP-System übergeben werden. Es wird eine Fehlermeldung eingeblendet.

BEISPIEL

Schicke bei einer Sperrung bitte auch immer eine Fehlermeldung mit, damit der Benutzer auch reagieren und die Bestellung oder das Angebot anpassen kann.

TIPP

Kunde ändern

Diese Aktion ist am besten an zwei Beispiel beschrieben.

Ein Benutzer fügt einer Bestellungen einen Kunden hinzu, der allerdings eine Amazon-E-Mail-Adresse in den Kundendaten hat. Auf diesen Kunden darf allerdings keine Bestellung in Elements angelegt werden. Sobald der Benutzer nun also den Kunden per Suche hinzufügt, wird die Kundennummer entfernt und dem Benutzer wird ein Hinweis angezeigt, dass er den Kunden bitte neu anlegen soll, da er auf diesen Kunden keine Bestellung anlegen kann.

BEISPIEL

Ein Benutzer fügt einen Kunden zu einem Angebot hinzu. Allerdings gab es bei diesem Kunden eine Umstrukturierung und alle neuen Belege sollen auf eine andere Kundennummer ausgestellt werden. Sobald der Benutzer nun also die „alte“ Kundennummer hinzufügt, wird automatisch die „neue“ Kundennummer hinzugefügt und dem Benutzer wird ein Hinweis mit einer Erklärung angezeigt.

BEISPIEL

Mit Hilfe dieser Aktion kannst du – basierend auf Kunden- aber auch auf Belegdaten – beim Hinzufügen eines Kunden eine Reaktion anhand individueller Regelwerke anstoßen.

Wähle bitte den Aktionstyp „Kunde ändern“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Ändern des Kunden(TriggeredBy = „accountChange“) aktivierst, wird die Aktion immer ausgeführt, wenn in einem Angebot, einer Bestellung oder einem Warenkorb ein Kunden aus den ERP-Daten hinzugefügt wird.

Zudem kannst du den Auslöser „Änderung Feldinhalt“ (TriggeredBy = „fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
PriceListIdintdie ID der Preisliste, die aktuell zugewiesen ist
DiscountListIdintdie ID der Rabattliste, die aktuell zugewiesen ist
CurrencyCodestringdie Währung, die aktuell zugewiesen ist
CurrencyCodeExchangeRatedecimalder aktuell verwendete Umrechungsfaktor
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer nach der Änderung (KHKKontokorrent.Kto)
DocumentDatedatetimedas Belegdatum

Neben den allgemeinen Positionsdaten werden zusätzlich diese Daten übergeben:

KeyDatentypValue
CustomDictionary<string, object>die Custom-Felder, die für die Position definiert sind (s. Entity-Spezifische Eingabeparameter)

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

KeyDatentypValue
AccountIdstringdie Kundennummer, die übernommen wird (KHKKontokorrent.Kto)

Wird der Wert NULL übergeben so wird der Kunde entfernt.

Ist der Wert leer, so bleibt die Kundennummer unverändert in der Bestellung, im Angebot oder Warenkorb enthalten.

HINWEIS

Kunde speichern

Mit Hilfe dieser Aktion kann in den Speicherprozess des Kunden – egal ob bei Neuanlage oder Bearbeitung eines bestehenden Kunden – eingegriffen werden.

Ein Benutzer legt einen Kunden an und vergisst die Angabe eines wichtigen Wertes. Beim Speichern wird das festgestellt und das Speichern wird verhindert. Zudem wird dem Benutzer angezeigt, welche Angabe er noch vornehmen muss.

BEISPIEL

Ein Benutzer bearbeitet einen Kunden und ändert einen Wert. Beim Speichern wird festgestellt, dass genau dieser Wert abhängig von anderen Angaben in den Kundendaten einen anderen als den vom Benutzer eingegebenen Wert haben muss. Der Wert wird automatisch korrigiert und dem Benutzer wird eine Information angezeigt.

BEISPIEL

Mit Hilfe dieser Aktion kannst du nun also anhand von Kunden- aber auch Belegdaten beim Hinzufügen eines Kunden eine Reaktion basierend auf individuellen Regelwerken anstoßen.

Wähle bitte den Aktionstyp „Kunde speichern“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Speichern eines Kunden(TriggeredBy = „customerSave“) aktivierst, wird die Aktion immer ausgeführt, wenn ein Kundendatensatz im ERP-System gespeichert wird.

Der Kunde wird auch gespeichert, wenn ein Angebot oder eine Bestellung an das ERP-System übergeben wird.

HINWEIS

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
SageAdressenItemSagede.OfficeLine.Data.Entities.Main.AdressenItemdas Sage-Objekt (Adresse), die gespeichert werden soll
SageKontokorrentItemSagede.OfficeLine.Data.Entities.Main.KontokorrentItemdas Sage-Objekt (Kunde), die gespeichert werden soll
CustomDictionary<string, object>die Custom-Felder, die für den Kunden definiert sind (s. Entity-Spezifische Eingabeparameter)

Wird ein Kunde neu angelegt, ist noch keine ID (AdressenItem.Adresse, KontokorrentItem.Kto) oder eine entsprechende Referenz (AdressenItem.Adresse) gesetzt.

HINWEIS

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

KeyDatentypValue
SageAdressenItemSagede.OfficeLine.Data.Entities.Main.AdressenItemdas Sage-Objekt (Adresse), die gespeichert werden soll
SageKontokorrentItemSagede.OfficeLine.Data.Entities.Main.KontokorrentItemdas Sage-Objekt (Kunde), die gespeichert werden soll
CancelSavebooldas Kennzeichen, ob das Speichern abgebrochen werden soll
CustomDictionary<string, object>die Custom-Felder, die für den Kunden definiert sind (s. Entity-Spezifische Ausgabeparameter)

Der Aufbau der Custom-Felder entspricht folgendem Schema:

{
  "customer": {
    "Tabellenname.Spaltenname": "Wert"
  }
}

Kunden-Aktion

Nicht immer ist es möglich, alle Informationen zu einem Kunden im ERP-System vorzuhalten oder zu verwalten. Dann behilft man sich mit externen Tools, z. B. CRM-Systemen. Oder es gibt Informationen, die ein Benutzer unbedingt erhalten muss, wenn er einen Kunden aufruft. Dann ist die Kunden-Aktion in Elements genau die richtige Option.

Im Unternehmen wird ein externes CRM-System genutzt, um die Kommunikation mit den Kunden zu dokumentieren. Ruft ein Benutzer nun den Kunden auf, so soll er wichtige Informationen aus dem CRM-System sehen können. Diese werden ihm in der Schnellansicht des Kunden angezeigt, sobald er diesen aufgerufen hat.

BEISPIEL

Der Kundenservice muss häufig mit Kunden kommunizieren, die über eBay bestellt haben. Sobald der Benutzer nun einen Kunden aufruft, kann er mit einem Klick auf die Option „Streitfallmanagement“ im Kontext- oder Dreipunktmenü des Kunden prüfen, ob es aktuell einen offenen Streitfall auf eBay gibt. Ist dies nicht der Fall, so erhält er die Meldung „alles in Ordnung“, andernfalls werden ihm Details zum Streitfall angezeigt.

BEISPIEL

Wähle bitte den Aktionstyp „Kunden-Aktion“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Automatisch in dynamischer Spalte(TriggeredBy = „dynamicColumnInitialization“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer einen Kunden aufruft und sich dessen Schnellansicht ansieht.

Zudem kannst du es den Benutzern ermöglichen, die Aktion selbst auszulösen, indem du „Manuelle Ausführung“ (TriggeredBy = „manually“) aktivierst. Dann kann der Benutzer die Aktion im Kontext- oder Dreipunktemenü auswählen.

Die Aktion kann in der Entität Kunde (customer) ausgelöst werden.

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet.

Position-Hinzufügen

Diese Aktion ermöglicht es, nach dem Hinzufügen einer Position oder dem Ändern des Lieferlandes im Angebot, in der Bestellung oder im Warenkorb Hinweise oder Fehlermeldungen in Elements anzeigen zu lassen. Damit kann sogar verhindert werden, dass ein Angebot oder eine Bestellung an das ERP-System übergeben wird.

Bestimmte Artikel können aufgrund behördlicher Regelungen nicht in ein Land geliefert werden. Sobald der Benutzer das Land als Lieferland angibt und einer der betreffenden Artikel in der Bestellung enthalten ist, wird der Benutzer darüber informiert und kann die Bestellung nicht mehr an das ERP-System übergeben.

BEISPIEL

Wähle bitte den Aktionstyp „Position-Hinzufügen“ aus.

Auslöser

Wenn du in der Karte „Ausführung bei“ die Option „Hinzufügen einer Position(TriggeredBy = „addingPosition“) aktivierst, wird immer beim Hinzufügen einer neuen Position die Aktion angestoßen.

Aktivierst du „Änderung des Lieferlandes(TriggeredBy = „deliveryCountryChange“), so wird immer bei der Änderung des Lieferlandes die Aktion angestoßen. Das kann passieren, wenn das Land in der Anschrift oder der abweichenden Lieferadresse geändert oder ein neuer Kunde hinzugefügt wird und sich dadurch das Land ändert.

Wenn du „vor Übergabe an das ERP(TriggeredBy = „beforeCommit“) aktivierst, wird die Aktion immer ausgeführt, wenn der Benutzer eine in der Aktion hinterlegte Entität an das ERP-System übergeben möchte. In diesem Fall ist das „Bestellung verbindlich bestätigen“ oder „Angebot verbindlich bestätigen“. Dann wird auch das Kennzeichen für die automatische Ausführung übergeben.

Zudem kannst du den Auslöser „Änderung Feldinhalt“ (TriggeredBy = „fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
EntityTypestringder Typ der Entität, z.B. order für Bestellung
DeliveryAddressCountryCodestringder Ländercode des Lieferlandes (z.B. DE)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto), falls diese bereits in der Entität gesetzt ist
PositionsDictionary<string,object>[]die Positionsdaten

Neben den allgemeinen Positionsdaten werden zusätzlich diese Daten übergeben:

KeyDatentypValue
ExternalEntityReferencestringdie Elements-Referenz für die Position
CustomDictionary<string, object>die Custom-Felder, die für die Position definiert sind (s. Entity-Spezifische Eingabeparameter)

Bitte beachte, dass hier nicht der Elements-Versandtyp berücksichtigt wird. Es kann also nicht zwischen einer Lieferung und einer Mitnahme oder Abholung unterschieden werden.

HINWEIS

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet, allerdings für die entsprechend hinzugefügte Position:

KeyDatentypValue
PreventsCommitbooldas Kennzeichen, ob die Übergabe an das ERP abgebrochen werden soll
PositionsDictionary<string,object>[]die Positionsdaten

Das sind die Ausgabeparameter der Position:

KeyDatentypValue
EntityKeystringder Elements-Key für diesen Datensatz
Messagestringeine Meldung pro Position (nur wenn diese nicht verkaufsfähig ist)
IsSaleablebooldas Kennzeichen für die Verkaufsfähigkeit des Artikels

Der Benutzer fügt der Bestellung eine Position hinzu. Die Aktion wird durchlaufen und stellt keine Kriterien fest, die diese Änderung beanstanden.

BEISPIEL

Der Benutzer fügt einer Bestellung, die in die Schweiz geliefert werden soll, eine Position hinzu. Dieser Artikel soll allerdings nur unter bestimmten Bedingungen in die Schweiz geliefert werden. Also erhält der Benutzer einen Hinweis an der Position, dass er den Kunden auf eine Besonderheit hinweisen soll. Die Bestellung kann dennoch an das ERP-System übergeben werden.

BEISPIEL

Neben den allgemeinen Rückmeldungen kannst du auch ein Sperrkennzeichen mitgeben. Sobald die Aktion feststellt, dass die Bestellung oder das Angebot nicht weiterverarbeitet werden kann, kann ein Sperrkennzeichen mitgeschickt werden. Dann ist es dem Benutzer nicht mehr möglich, die Bestellung oder das Angebot im ERP-System zu speichern.

Der Benutzer fügt einer Bestellung, die in die Schweiz geliefert werden soll, eine Position hinzu. Dieser Artikel darf allerdings nicht in die Schweiz geliefert werden. Also erhält der Benutzer eine Fehlermeldung an der Position, die ihn darauf hinweist, dass dieser Artikel nicht in die Schweiz geliefert werden kann. Er kann die Bestellung somit auch nicht an das ERP-System übergeben.

BEISPIEL

Schicke bei einer Sperrung bitte auch immer eine Fehlermeldung mit, damit der Benutzer auch reagieren und die Bestellung oder das Angebot anpassen kann.

TIPP

Position-Neuberechnung

Diese Aktion ermöglicht es, bei der Berechnung einer Position im Angebot, in der Bestellung oder im Warenkorb individuelle Konditionen in die Preisermittlung einfließen zu lassen.

Du möchtest, dass alle Artikel derselben Artikelgruppe einen Rabatt von 5 % erhalten, sobald drei Artikel dieser Artikelgruppe in einer Bestellung enthalten sind. Sobald einer dieser Artikel wieder entfernt wird, wird der Rabatt ebenfalls entfernt.

BEISPIEL

Wähle bitte den Aktionstyp „Position-Neuberechnung“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn Du „Ermittlung von Preisen“ (TriggeredBy = „priceCalculation“) aktivierst, wird die Aktion immer ausgeführt, wenn eine Änderung innerhalb der Entität zur Neuberechnung von Preisen führt. Welche Änderungen diese Neuberechnung veranlassen können, kannst du in der Hilfe unter <Bestellungen/Angebote > Bestellung/Angebot bearbeiten> einsehen.

Zudem kannst du es den Benutzern ermöglichen, die Aktion selbst auszulösen, indem du „Manuelle Ausführung“ (TriggeredBy = „manually“) aktivierst. Dann kann der Benutzer die Aktion im Kontext- oder Dreipunktemenü der übergeordneten Entität auswählen.

Du kannst auch den Auslöser „Änderung Feldinhalt“ (TriggeredBy = „fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Angebot (offer)
  • Bestellung (order)
  • Warenkorb (shoppingCart)

Eingabeparameter

Neben den allgemeinen werden zusätzlich diese Daten übergeben:

KeyDatentypValue
PriceListIdintdie ID der Preisliste, die aktuell zugewiesen ist
DiscountListIdintdie ID der Rabattliste, die aktuell zugewiesen ist
CurrencyCodestringdie Währung, die aktuell zugewiesen ist
CurrencyCodeExchangeRatedecimalder aktuell verwendete Umrechnungsfaktor
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)
DocumentDatedatetimedas Belegdatum
TaxClassIdshortdie Besteuerungsart
PositionsDictionary<string,object>[]Position / Artikel

Neben den allgemeinen Positionsdaten werden zusätzlich diese Daten übergeben:

KeyDatentypValue
ExternalEntityReferencestringdie Elements-Referenz für die Position
CustomDictionary<string, object>die Custom-Felder, die für die Position definiert sind (s. Entity-Spezifische Eingabeparameter)

Das Kennzeichen, ob der Einzelpreis manuell verändert worden ist, kann genutzt werden, um Positionen mit einem individuellen Preis/Rabatt von der Neuberechnung auszuschließen.

TIPP

Ausgabeparameter

Es werden die allgemeinen Rückmeldungen erwartet, allerdings pro Position:

KeyDatentypValue
PositionsDictionary<string,object>[]die Positionsdaten

Das sind die Ausgabeparameter der Position:

KeyDatentypValue
EntityKeystringder Elements-Key für diesen Datensatz
UnitPricedecimalder Einzelpreis
DiscountValuedecimalder Rabattsatz (in Prozent)
IsManualPricebooldas Kennzeichen, ob der Einzelpreis manuell verändert worden ist (EinzelpreisManuell)

Sobald die Aktion also eine Änderung an den Positionskonditionen feststellt, kannst du diese an Elements übermitteln.

Das Kennzeichen, ob der Einzelpreis manuell verändert worden ist, kann genutzt werden, um Positionen von einer späteren Neuberechnung aufgrund einer Änderung an der Entität auszuschließen.

TIPP

Der Benutzer ändert den Preis eines Artikels. Diese Änderung wird durch die Aktion überprüft und stellt keine Bedingung für eine Änderung der Preise dar.

BEISPIEL

Der Benutzer ändert einen Preis und dieser ist zu gering. Der Benutzer bekommt eine Fehlermeldung angezeigt und muss den Preis wieder korrigieren. Alternativ kann die Aktion auch den korrekten Preis übergeben.

BEISPIEL

Warenkorb-Aktion

Diese Aktion kannst du nutzen, um im Kontext des Warenkorbs Prüfungen durchzuführen oder auch dem Benutzer Informationen anzuzeigen. Dabei kannst du auch verhindern, dass ein Warenkorb übergeben wird.

Der Benutzer hat einen Warenkorb befüllt, aber der Wert des Warenkorbs überschreitet einen gewissen Betrag. Die Aktion wird beim Klick auf „Bestellung“ ausgeführt und stellt fest, dass der Warenkorb nicht übergeben werden kann. Dem Benutzer wird eine Meldung im HTML-Format eingeblendet, die ihn auf den Grund hinweist.

BEISPIEL

Der Benutzer möchte weitere Informationen zum Warenkorb hinterlegen. Dazu kann er im Menü des Warenkorbs die entsprechende Aktion aufrufen. Ihm wird ein Webformular angezeigt, in dem er die fehlenden Daten eintragen kann. Diese werden mit der internen Referenznummer von Elements verknüpft.

BEISPIEL

Wähle hier bitte den Aktionstyp „Warenkorb-Aktion“ aus.

Auslöser

In der Karte „Ausführung bei“ kannst du festlegen, wann die Aktion ausgelöst wird.

Wenn du „Manuelle Ausführung“ (TriggeredBy = „manually“) aktivierst, kann die Aktion über das Drei Punkte-Menü des Warenkorbs angestoßen werden.

Aktivierst du „Weiterverarbeitung, vor Bestätigung“ (TriggeredBy = „transformationBeforeConfirm“) so kannst du automatisch die Aktion ausführen, wenn der Benutzer im Warenkorb auf die Schaltfläche „Preisanfrage“ oder „Bestellung“ klickt. Die Aktion wird also ausgeführt, bevor der Benutzer die Zusammenfassung der Preisanfrage oder Bestellung sieht.

Aktivierst du „Weiterverarbeitung, nach Bestätigung“ (TriggeredBy = „transformationAfterConfirm“) so kannst du automatisch die Aktion ausführen, wenn der Benutzer die Übergabe des Warenkorbs als Preisanfrage oder Bestellung abschließt. Die Aktion wird ausgeführt nachdem der Benutzer die Zusammenfassung der Preisanfrage oder Bestellung gesehen und diese bestätigt hat.

Bitte beachte, dass in einem Warenkorb oder Webshop-Warenkorb lediglich der Auslöser „Weiterverarbeitung, nach Bestätigung“ funktioniert, da dort keine Bestätigung vorgesehen ist.

Richte für diese Warenkörbe bitte lediglich eine Aktion für d Auslöser ein, wenn du dies benötigst.

HINWEIS

Zudem kannst du das Ergebnis der Aktion im Detailbereich des Warenkorbes automatisch anzeigen, wenn du „automatisch in dynamischer Spalte“ (TriggeredBy = „dynamicColumnInitialization“) aktivierst.

Du kannst auch den Auslöser „Änderung Feldinhalt“ (TriggeredBy = „fieldChange“) aktivieren. Die Aktion wird dann ausgeführt, wenn Änderungen an den in der aufgeführten Tabelle hinterlegten Feldern festgestellt werden.

Die Aktion kann in diesen Entitäten ausgelöst werden:

  • Bestellanfrage (orderRequest): Das ist ein Warenkorb, den ein Business-Login als Bestellung übergeben hat. Dieser ist als Bestellanfrage gekennzeichnet und nur im Elements Commerce Cockpit verfügbar.
  • Business-Login-Warenkorb (reseller): Das ist ein Warenkorb, den ein Business-Login aktuell bearbeitet.
  • Preisanfrage (priceInquiry): Das ist ein Warenkorb, den ein Business-Login als Preisanfrage übergeben hat. Dieser ist als Preisanfrage gekennzeichnet und nur im Elements Commerce Cockpit verfügbar.
  • Warenkorb (default): Das ist der Warenkorb, den ein Benutzer in Elements anlegen kann. Dieser ist nur im Elements Commerce Cockpit verfügbar.
  • Webshop Warenkorb (externalBasket): Das ist der Warenkorb im Elements Commerce Cockpit, der mit einem Warenkorb eines 4SELLERS Webshops (bei aktivierter Schnittstelle) verknüpft ist.

Eingabeparameter

Neben den allgemeinen Daten werden zusätzlich folgende Daten übergeben:

KeyDatentypValue
TargetTypestringdas Ziel der Entität
• Warenkorbtyp (s. Auslöser)
• Bestellung (order)
• Angebot (offer)
ShoppingCartTypestringder Warenkorbtyp
PriceListIdintdie ID der Preisliste, die aktuell zugewiesen ist
DiscountListIdintdie ID der Rabattliste, die aktuell zugewiesen ist
CurrencyCodestringdie Währung, die aktuell zugewiesen ist
CurrencyCodeExchangeRatedecimalder aktuell verwendete Umrechnungsfaktor
HasGrossPricesbooldas Preiskennzeichen (brutto/netto)
AccountIdstringdie Kundennummer (KHKKontokorrent.Kto)
DocumentDatedatetimedas Belegdatum
FilesDictionary<string, object>[]das Array von Datei-Definitionen (Details s. Entity-Spezifische Eingabeparameter)
PositionsDictionary<string,object>[]Position / Artikel

Neben den allgemeinen Positionsdaten werden zusätzlich diese Daten übergeben:

KeyDatentypValue
ExternalEntityReferencestringdie Elements-Referenz für die Position
CustomDictionary<string, object>die Custom-Felder, die für die Position definiert sind (s. Entity-Spezifische Eingabeparameter)

Ausgabeparameter

Neben den allgemeinen Rückmeldungen kannst du auch ein Sperrkennzeichen mitgeben. Sobald die Aktion feststellt, dass der Warenkorb nicht weiterverarbeitet werden kann, kann ein Sperrkennzeichen mitgeschickt werden. Dann ist es dem Benutzer nicht mehr möglich, den Warenkorb zu übergeben.

KeyDatentypValue
PreventsTransformbooldas Kennzeichen, ob die Transformation des Warenkorbs in den TargetType abgebrochen werden soll

Schicke bei einer Sperrung bitte auch immer eine Fehlermeldung mit, damit der Benutzer auch reagieren und den Warenkorb anpassen kann.

TIPP

Bei der Darstellung wird – je nach Kontext – unterschieden, wie mit der Rückgabe umgegangen wird.

(a) Bei manueller Ausführung wird das PreventsTransform-Kennzeichen verworfen und ausschließlich Messages angezeigt.

(b) Bei der Weiterverarbeitung werden Messages wie gewohnt in einer Lightbox dargestellt, die Weiterverarbeitung allerdings abhängig vom PreventsTransform-Kennzeichen abgebrochen.

HINWEIS

Aktionen im Einsatz – Best Practices

Übersetzbarkeit von Texten

Die vom ausführenden Elements-Benutzer ausgewählte Oberflächensprache ist immer in den Parametern der Aktion enthalten („CultureId“). Mögliche Werte sind momentan:

  • Deutsch „de-DE“
  • Englisch „en-GB“
  • Französisch „fr-FR“
  • Niederländisch „nl-NL“
  • Schwedisch „sv-SE“
  • Spanisch „es-ES“

Die Assembly der Aktion benötigt eine Ressourcen-Datei (resx-Format) für die zu übersetzenden Texte. Hier wird eine Datei (z. B. „Resources.resx“) angelegt, die sprach-unabhängige Texte enthält. Diese wird als Fallback für nicht gefundene sprach-spezifische Dateien verwendet. Für jede gewünschte Sprache kann dann eine eigene Datei angelegt werden, z. B. „Resources.fr-fr.resx“. Darin sind dann die Texte in der jeweiligen Sprache übersetzt. Weitere Informationen zu Ressourcen-Dateien findet man im Internet.

Im Quellcode kann dann über eine statische Klasse (z. B. „Resources“, je nach Dateiname) auf die einzelnen Texte zugegriffen werden. Damit die Texte in der korrekten Sprache ermittelt werden, muss zunächst die Sprache für die Texte festgelegt werden.

var cultureId = parameter.TryGetValue("CultureId", out var cultureIdObj) && cultureIdObj != null ? cultureIdObj?.ToString() : "de-DE";           
Resources.Culture = new CultureInfo(cultureId);
var result = new Dictionary<string, object>();
result.Add("Message", Resources.MyTextKey);
return result;

Bei der Installation der Assembly ist zu beachten, dass zusätzlich sprach-abhängige Assemblies erstellt werden. Diese finden sich im Build-Ausgabeverzeichnis in Ordnern mit dem jeweiligen Sprachkürzel:

Diese Ordner müssen bei der Installation mit in das Shared-Verzeichnis der Safe 100 (Office-Line) kopiert werden, ansonsten fehlen die Übersetzungen und man erhält lediglich die Fallback-Texte.

Demo Buchen
Melden Sie sich jetzt für eine kostenfreie Web-Präsentation an und lernen Sie Elements aus erster Hand kennen!
Reibungsloser Workflow durch intelligente Datenverknüpfungen am Point-Of-Sale.
Bieten Sie Ihren Kunden ein umfangreiches Shopping-Erlebnis mit Ihrem Elements B2B-Shop.
Smarte und aufeinander abgestimmte Features ermöglichen eine grenzenlose Skalierung Ihres Geschäfts.
Diese Kunden bauen bereits auf Elements:

*“ zeigt erforderliche Felder an

Dieses Feld dient zur Validierung und sollte nicht verändert werden.
Partner werden
Erweitern Sie ihr Portfolio um ein innovatives, zukunftsorientiertes Produkt und werden Sie teil unseres Eco-Systems.
Direkte und persönliche Betreuung durch einen unserer Partner-Manager
Weitgehende Unterstützung in Ihren Werbemaßnahmen durch Werbematerial und Events
Together we are strong - Partner-Events, Webinare & vieles mehr
Diese und weitere Partner zählen bereits auf uns:

Partner Werden

Kontakt aufnehmen
Sie möchten mehr erfahren und mit uns sprechen?
Wir freuen uns auf den Kontakt und helfen Ihnen bei aufkommenden Fragen gerne weiter!
Diese Kunden bauen bereits auf Elements:

*“ zeigt erforderliche Felder an

Dieses Feld dient zur Validierung und sollte nicht verändert werden.
Webinar anmelden
Sie möchten sich für ein Webinar anmelden?
Wir freuen uns auf die Anmeldung und helfen Ihnen bei aufkommenden Fragen gerne weiter!

*“ zeigt erforderliche Felder an

Webinar*
Dieses Feld dient zur Validierung und sollte nicht verändert werden.