Hallo Joachim (@jowin),
du hattest mir gestern kurz eine Mail geschrieben mit der Frage wie RunScripts via /session/runscript aus dem Webclient heraus auslösen kann und das Ergebnis als Json erhält.
Falls Ihr enaio >= 9.00SP1 verwendet, dann würde ich prinzipiellauf den EmptyJob setzen der besser hierfür geeignet ist.
Diesen Job kannst du per AppConnector mit Parametern aufrufen und erhältst die Rückgabeparameter als Json zurück.
Beispiel
KernelAfterJob::krn:EmptyJob anlegen
Als erstes musst du den Server Event KernelAfterJob::krn:EmptyJob
anlegen.
Der Event ist im Prinzip identisch zum RunScript Event aufgebaut. Das bedeutet, dass du eine Main Funktion hinterlegen musst und das Global RC
Objekt (RunningContext) zur Verfügung steht.
Mehr Infos liefert hier Optimal Systems in ihrer Dokumentation zum Serverskripting.
Die wichtigen Eigenschaften der RC
sind hier die InputParams
und OutputParams
.
In den InputParams
erhältst du die Eingangsparameter aus dem Aufruf. Mit den OutputParams
kannst du Parameter zurück geben.
Beispiel
Dieses Beispiel kopiert einfach die Eingangsparameter in die Ausgangsparameter.
Function Main
Dim InputNames: InputNames = RC.InputParams.Names
Dim NameArray: NameArray = Split(InputNames,";",-1,1)
For i = LBound(NameArray) to UBound(NameArray)
Name = NameArray(i)
Param = RC.InputParams.Value(Name)
RC.OutputParams.Value(Name) = Param
Next
End Function
Webclient Event
Als nächstes kannst du diese Event per Javascript (in meinem Fall einen OnClickItem
Event auf einen Button) den Endpunkt per Post aufrufen.
Beispiel
var parameter = {
"param1":"text",
"param2": 5
};
var xhr = new XMLHttpRequest();
xhr.open('POST', '/osrest/api/core/emptyJob', true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
response = JSON.parse(xhr.responseText);
alert(xhr.responseText);
}
};
xhr.send(JSON.stringify(parameter));
Ergebnis
In meinem Fall kommt hier neben den Eingangsparametern auch der $$$SwitchContextUserName$$$
mit welcher aber vom AppConnector gesetzt wird.