Create or Update
Beschreibung
Der Prozess stellt eine generische Schnittstelle zum Anlegen / Aktualisieren von Daten in EVI bereit. Dies gilt übergreifend für alle im System vorhandenen Entitäten.
Eingabeparameter enthalten <Name> <Werte> Paare mit den internen Feldnamen, z. B. "MatchCode.Customer" - "CURSOR AG". Es können beliebig viele Felder übergeben werden. Es muss allerdings sichergestellt sein, dass der Key eineindeutig dem internen Feldernamen entspricht. Felder, bei denen dies nicht der Fall ist, werden ignoriert.
Für die Pflege der Konfigurations-Entität gilt folgende Regel:
Keine Konfiguration: Es erfolgt keinerlei Pflichtfeldprüfung
Der Eintrag SYSTEM zur Entität: Es werden die systemweit definierten Pflichtfelder geprüft (gemäß Feldeigenschaften)
Konfiguration von Feldern unterhalb einer Entität: Es werden genau diese Felder als Pflichtfelder geprüft.
Der Prozess bietet die Möglichkeit, vorhandene Datensätze zu aktualisieren. Die Suche nach vorhandenen Datensätzen erfolgt wie nachfolgend beschrieben.
Wir der Parameter IDENTIFIERS mitgegebn, wird dieser verwendet, um einen oder Mehrere Datensätze zu suchen.
Sofern in der Konfigurations-Entität Felder definiert sind, wird gemäß der Feldreihenfolge geprüft, ob das Feld in den Eingabeparametern vorhanden ist. Ist dies der Fall, werden Datensätze mit diesem Feldwert gesucht.
Findet die Suche keinen Datensatz, wird mit dem nächsten Feld in der Feldliste analog verfahren. Die Prüfung der Feldliste endet, sobald eine Suche mindestens einen Treffer liefert.Ist nichts in der Konfigurations-Entität definiert, wird das Feld "Pk.<Name der Entität> (z. B. "Pk.Customer" oder "Pk.Quote") in den Eingabeparametern gesucht, und es wird genau über diesen Primärschlüssel gesucht.
Liefert die Suche einen Datensatz, wird dieser aktualisiert Wird kein Datensatz über den Primärschlüssel gefunden, wird ein neuer Datensatz angelegt.
Allgemein: Wenn die Suche nach vorhandenen Datensätzen keinen Treffer liefert, wird per Definition ein neuer Datensatz angelegt. Dies gilt unabhängig davon, welches Suchverfahren verwendet wurde.
Anzahl Rückgabeparameter: Standardmäßig erwartet der Prozess genau einen Treffer bei der Suche nach vorhandenen Datensätzen (unabhängig von der verwendeten Suchmethode).
Sollen explizit mehrere Datensätze aktualisiert werden, muss der optionale Eingabeparameter "CRUD_MULTIPLE" mit "true" übergeben werden.
In dieser Konstellation werden alle gefundenen Datensätze aktualisiert.
Code
de.cursor.jevi.common.script.IScriptWorkSpace fncCreateOrUpdate(Map parameter, Map result, Map logMap)
{
if(logMap == null) logMap = SC12EVIBaseUtils.newLogMap();
if(result == null) SC12EVIBaseUtils.addError(logMap, "Parameter \"result\" is null");
if(!parameter.containsKey("fields") && parameter.get("fields") == null) SC12EVIBaseUtils.addError(logMap, "Parameter \"fields\" is not Set");
if(!parameter.containsKey("entityName") && parameter.get("entityName") == null) SC12EVIBaseUtils.addError(logMap, "Parameter \"entityName\" is not Set");
if(SC12EVIBaseUtils.hasError(logMap)) return null;
String entityName = parameter.get("entityName");
Map fields = parameter.get("fields");
List identifiers = ((!parameter.containsKey("identifiers") && parameter.get("identifiers") == null) ? null : parameter.get("identifiers"));
boolean multiple = ((!parameter.containsKey("multiple") && parameter.get("multiple") == null) ? false : parameter.get("multiple"));
boolean mandatory = ((!parameter.containsKey("mandatory") && parameter.get("mandatory") == null) ? true : parameter.get("mandatory"));
Map fieldValues = new HashMap();
List primaries = new ArrayList()
IScriptWorkSpace ws = WorkSpaceScriptUtils.createEmptyWorkSpace(entityName);
primaries = SC12CRUDUtils.getPrimaryKeyList(entityName, mandatory, identifiers, logMap, fields, fieldValues);
if(!SC12EVIBaseUtils.hasError(logMap))
{
ws = SC12CRUDUtils.createRecordsets(fieldValues, entityName, primaries, multiple, logMap, result);
}
if(!SC12EVIBaseUtils.hasError(logMap))
{
result.put("RECORDSET", SC12CRUDUtils.getRecordsets(ws, entityName));
result.put("SUCCESSFUL", "SUCCESS");
result.put("WARNINGS", SC12EVIBaseUtils.getWarnings(logMap));
}
else
{
result.put("RECORDSET", null);
result.put("ACTION", "ERROR");
result.put("SUCCESSFUL", "ERROR");
result.put("ERRORS", SC12EVIBaseUtils.getErrors(logMap));
result.put("WARNINGS", SC12EVIBaseUtils.getWarnings(logMap));
}
return ws;
}
Parameter
parameter
Typ - Map
Wertepaare mit den benötigten Parametern. Benötigte Werte sindFIELDS
Typ - Map
Wertepaare der Form <Interner technischer Feldname = neuer Wert> (z. B. "MatchCode.Customer" = "CURSOR GIESSEN").
Alle Wertepaare werden für spätere Prüfungen / Neuanlagen / Aktualisierungen verwendet.ENTITY
Typ - String
Interner technischer Name der Entität in exakter Groß- / Kleinschreibung (z. B. "Customer", "ContactPerson").CRUD_MULTIPLE
Typ - boolean
Optionaler Parameter, wird dieser mit "true" übergeben, ist die Aktualisierung > 1 Datensätze möglich. Dieser Parameter wird nur berücksichtigt,
wenn kein technischer Primärschlüssel (z. B. "Pk.Customer") als Eingabeparameter angegeben wird.
result
Typ - Map
Hashmap, in der das formatierte Ergebnis zurück gegeben wirdlogMap (optional)
Typ - Map
HashMap, in der das Logging während des Aufrufs geführt wird, falls dieses separat aufbereitet werden soll.
Rückgabe
IScriptWorkSpace
Die Funktion antwortet mit einem IScriptWorkSpace, in dem der Datensatz angelegt wurde, oder der/die Datensätze angepasst worden sind.
Variable Result
Außerdem enthält die Variable Result folgende Elemente:
RECORDSET
Typ - Map
Alle Felder des angelegten / aktualisierten Datensatzes (inklusive TableTail Felder)SUCCESSFUL
Typ - boolean
true / falseACTION
Typ - String
gibt CREATED oder MODIFIED zurückWARNINGS
Typ - Map
Summe aller Warnungen, die während der Bearbeitung entstanden sindERRORS
Typ - Map
Menge der Fehler, die zum Abbruch des Prozess geführt haben