Hinweis:
Dieser Command kann nur im Job Server-Umfeld mit webserviceTrigger verwendet werden.
Speichert den Inhalt einer JSON-Struktur als Map in einem Parameter. Die JSON-Struktur wird als POST-Daten an den Job Server übertragen.
Die folgenden Varianten für die Nutzung des Commands sind möglich:
Die folgende Variante des Commands schreibt den Inhalt der JSON-Struktur in den Parameter, dessen Namen in den Modellvariablen definiert ist. Der Parameter muss in der Projektkomponente der obersten Ebene enthalten sein.
| Argument | Typ | Beschreibung |
|---|---|---|
| jsonData | Object | Projekt oder Projektkomponente. |
Die folgende Variante des Commands schreibt den Inhalt der JSON-Struktur in den Parameter, dessen Namen in den Modellvariablen definiert ist. Der Parameter muss in der angegebenen Projektkomponente enthalten sein.
| Argument | Typ | Beschreibung |
|---|---|---|
| jsonData | Object | Projekt oder Projektkomponente. |
| componentPath | String | Pfad zur Projektkomponente. |
Die folgende Variante des Commands schreibt den Inhalt der JSON-Struktur in den Parameter, dessen Namen übergeben wird. Der Parameter muss in der angegebenen Projektkomponente enthalten sein.
| Argument | Typ | Beschreibung |
|---|---|---|
| jsonData | Object | Map oder Array |
| componentPath | String | Pfad zur Projektkomponente. |
| parameterName | String | Name des Parameters. |
Die folgende Variante des Commands schreibt den Inhalt der JSON-Struktur in den Parameter, dessen Namen in den Modellvariablen definiert ist. Der Parameter muss in der angegebenen Projektkomponente enthalten sein.
| Argument | Typ | Beschreibung |
|---|---|---|
| jsonData | Object | Map oder Array |
| obj | Object | Projekt oder Projektkomponente. |
Die folgende Variante des Commands schreibt den Inhalt der JSON-Struktur in den Parameter, dessen Name übergeben wird. Der Parameter muss in der angegebenen Projektkomponente enthalten sein.
| Argument | Typ | Beschreibung |
|---|---|---|
| jsonData | Object | Map oder Array |
| obj | Object | Projekt oder Projektkomponente. |
| parameterName | String | Name des Parameters. |
Beispiel-Anwendung
Eine Job Server/Worker-Umgebung
Für das Beispiel wurde EEC mit der Option Stand-Alone installiert und anschließend die optionalen Funktionen für Job Server und Job Server Worker (siehe Job Server mit Job Server Worker-Installation).
Führen Sie folgende Arbeiten im Dateisystem durch:
- Erstellen Sie den Ordner <installation folder>\model.
- Kopieren Sie die Datei <installation folder>\install\Tutorial/Mechatronic.eox in den Ordner <installation folder>/model.
- Benennen Sie die Datei <installation folder>/model\Mechatronik.eox um in <installation folder>\model\model.eox.
- Erstellen Sie den Ordner <installation folder>\resources\JobServer\jmx.
- Erstellen Sie den Ordner c:\JobServer\output.
Tragen Sie in der Initialisierungsdatei (ec.ini) folgende Anpassungen ein:
-Dorg.foederal.sn.connectionURL=proxy://initial=eox:///./model/model.eox?mode=rw
-Dde.eplan.eec.jobserver.port=8686
-Dde.eplan.eec.jobserver.aliasurl=http://localhost:8686
-Dde.eplan.eec.jobserver.private.aliasurl=http://localhost:8686
-Dde.eplan.eec.jobserver.worker.port=8989
-Dde.eplan.eec.jobserver.worker.autostart=true
-Dde.eplan.eec.jobserver.worker.jobdefinitionsfolder=resources\\Jobserver\\jmx
Die Erweiterung des modularen Baukastens um eine Action
- Starten Sie EEC.
- Wechseln Sie von der Job Server-Perspektive zur Engineering-Perspektive.
- Wechseln Sie zur Datenbasis eox:///./model/model.eox?mode=rw.
- Erstellen Sie eine neue Action mit dem Namen WriteJsonToParameterAction.
- Fügen Sie der Action eine neue Methode hinzu.
- Ändern Sie den Namen der Methode von Neuer Name zu run.
- Wählen Sie als Sprache der Methode java aus.
- Fügen Sie ein Argument hinzu.
- Ändern Sie den Namen des Arguments von Neues Argument zu json.
- Ändern Sie den Typ des Arguments von Engineering.Object zu Engineering.Map.
- Fügen Sie den folgenden Java-Code in das Feld Code ein:
import com.mind8.mechatronic.skill.*;
import com.mind8.mechatronic.skill.eos.*;
import com.mind8.mechatronic.skill.api.IUtilAPI;
import org.foederal.apache.log4j.SpaceLogger;
logger = SpaceLogger.getSpaceLogger("SetParameterValueFromJsonAction");
logger.info(this, "Start logging");
TypeClass.findType(self.getUnitOfWork(),"Engineering.SetParameterValueFromJsonCommand").perform("execute", json);
self.getUnitOfWork().saveChanges();
TypeClass.findType(self.getUnitOfWork(),"Engineering.ExportPXCommand").perform("execute", "Feeder", "C:\\JobServer\\output\\ProjectWithJson.px",false);
- Speichern Sie die Action.
- Damit ist die Action WriteJsonToParameterAction erfolgreich erstellt.
Zur Erklärung:
An das Command Engineering.SetParameterValueFromJsonCommand werden die Argumente execute und json übergeben. Das erste Argument entspricht der Start-Methode und das zweite Argument übergibt das webserviceTrigger-Objekt.
Bei der Ausführung wird der Inhalt der JSON-Struktur in den Parameter geschrieben, dessen Namen in den Modellvariablen definiert ist (Standard ist JsonData). Der Parameter muss in der Projektkomponente der obersten Ebene enthalten sein (Im Tutorial-Modell ist das die Komponente Feeder).
Sind die JSON-Daten in den Parameter geschrieben, wird diese Änderung gespeichert.
Anschließend wird die Projektänderung mit dem Command Engineering.ExportPXCommand in eine Datei auf dem Dateisystem exportiert. Diese Angabe ist gegebenenfalls anzupassen.
Die Erstellung einer Jobdefinition mit webserviceTrigger
Erstellen Sie eine Jobdefinition mit dem Namen \resources\JobServer\JMX\readjson.jmx und dem folgenden Inhalt:
<?xml version="1.1"?>
<jobdefinition name="readjson" model="..\..\..\model\model.eox" xmlns:xi="http://www.w3.org/2001/XInclude">
<webserviceTrigger>
<outputFolder value="..\..\..\resources\JobServer\output" />
</webserviceTrigger>
<actions>
<action name="T_Mechatronic_ModularSystem.Actions.WriteJsonToParameterAction" arguments="List{trigger.json}"/>
</actions>
</jobdefinition>
Die Erweiterung des modularen Baukastens um zusätzliche Parameter
- Starten Sie EEC.
- Wechseln Sie von der Job Server-Perspektive zur Engineering-Perspektive.
- Erstellen Sie in der Unit T_Mechatronic_ModularSystem.Mechatronic.Parameter einen Parameter mit dem Namen JsonData und dem Typ Map.
- Öffnen Sie die Mechatronikkomponente Feeder.
- Fügen Sie den Parameter JsonData in die Komponente Feeder ein.
- Wechseln Sie zur Datenbasis eox:///./eox/model.eox?mode=rw.
- Wiederholen Sie die Schritte 3 bis 5.
- Erstellen Sie zusätzlich die Parameter mit dem Namen PartName und dem Typ String, sowie dem Namen OrderPos und dem Typ Integer.
- Fügen Sie dem Parameter OrderPos die Auswahlwerte 1, 2, 3 und 4 hinzu.
- Fügen Sie diese drei Parameter in die Mechatronikkomponente Feeder ein.
- Fügen Sie in der Mechatronikkomponente Feeder für den Parameter PartName folgende Formel ein:
=$JsonData.value('OrderItems').value(parameter('OrderPos').value().toString).select(x|x.key='PartName').values().asList().at(0)
- Wechseln Sie zur Datenbasis eox:///./model/model.eox?mode=rw.
- Wechseln Sie von der Engineering-Perspektive zur Job Server-Perspektive.
- Damit ist der modulare Baukasten T_Mechatronik_ModularSystem erfolgreich erweitert.
Erklärung der Formel:
Das Ziel der Formel ist es, für eine gegebene Auftragsposition (Parameter OrderPos) von 1 bis 4 den Artikelnamen (Parameter PartName) zu ermitteln.
Der Ausdruck $JsonData.value('OderItems') greift auf die eingelesenen JSON-Daten im Parameter JsonData zu und reduziert diese auf Einträge innerhalb der Map OrderItems.
Der Ausdruck .value(parameter('OrderPos').value().toString) reduziert die Einträge auf Inhalte der Map mit der angegebenen Nummer im Parameter OrderPos. Da dieser Parameter vom Typ Integer ist, wird der Wert noch zu String umgewandelt.
Der Ausdruch .select(x|x.key='PartName').values().asList().at(0) gibt die Werte für den Schlüssel PartName als Liste zurück und entnimmt daraus den ersten (und einzigen) Eintrag.
Die Erstellung einer JSON-Struktur, die per webserviceTrigger an den Job Server übertragen wird
- Erstellen Sie die folgende JSON-Struktur:
{
"defaultJobName":"DemoJob",
"params":{
"OrderNo":"20211117001",
"OrderDate":"20211117"
},
"json":{
"OrderHeader":{
"Company":"Eplan",
"Address":{
"Street":"An der alten Ziegelei 2",
"ZipCode":"40789",
"City":"Monheim"
}
},
"OrderItems":{
"1":{
"PartName":"Main switch",
"EAN":"001356897563",
"Qty":"1"
},
"2":{
"PartName":"Fuse",
"EAN":"001452976326",
"Qty":"24"
},
"3":{
"PartName":"Terminal",
"EAN":"000556894712",
"Qty":"48"
},
"4":{
"PartName":"Wire",
"EAN":"00059655331",
"Qty":"96"
}
}
}
}
- Aktualisieren Sie die Jobdefinitionen im Job Server.
- Übertragen Sie die JSON-Struktur mit Hilfe eines REST-Aufrufs an http://localhost:8686/api/request/readjson.
- In der Ansicht Jobs sollte die erfolgreiche Ausführung eines Jobs mit der Jobdefinition readjson aufgelistet sein.
- Im Ordner c:\JobServer\output sollte die Datei ProjectWithJson.px vorhanden sein.
Das Importieren der erzeugten PX-Datei
- Wechseln Sie von der Job Server-Perspektive zur Engineering-Perspektive.
- Wechseln Sie zur Datenbasis eox:///./eox/model.eox?mode=rw.
- Importieren Sie das Konfigurationsergebnis der Datei ProjectWithJson.px.
Das Tutorialmodell mit Auswertung der eingelesenen Datenstruktur
- Öffnen Sie die Projektkomponente Feeder.Mechatronic.Feeder.
- Öffnen Sie den Editor Parameter.
- Wählen Sie für den Parameter OrderPos einen Wert von 1 bis 4 aus der Dropdown-Liste.
- Für OrderPos = 1 wird PartName = Main switch ermittelt.
- Für OrderPos = 2 wird PartName = Fuse ermittelt.
- Für OrderPos = 3 wird PartName = Terminal ermittelt.
- Für OrderPos = 4 wird PartName = Wire ermittelt.
Damit ist das Beispiel abgeschlossen.
Mehr: