Dokumentation:
In die Spalte modulename muss der Name der Klasse der Systemaktivität eingetragen werden.
Deine Klasse heißt DocuWareStampSystemActivity nicht DocuWareStamp. Schau dir nochmal die Einträge in der JRMODULECFG an.
Also, wenn ich das richtig sehe, ist die Methode Execute() für die Systemaktivität für die ausführung der Funktionen verantwortlich. Ich würde jetzt (nach dem Überfliegen der Dokumentation) in meiner Execute()-Methode prüfen, welche Funktion aufgerufen werden soll:
protected override void Execute() { if (Function.Equals("fixedstamp") { fixedstamp(); } }
Jedenfalls sehe ich im Beispielcode bei der Dokumentation keinen Einsprungpunkt für die Funktion an sich - nur für die Systemaktivität. Diese muss also selbständig den Funktionsnamen und die zugehörigen Paramterer auslesen und verarbeiten.
- ist aber nur eine Vermutung.
Hey,
ich habe hier eine Beispiel-Aktivität liegen, da ist in der getActivityType() nicht
return SystemActivity::ACTIVITY_TYPE_NON_PHP;
sondern
return parent::ACTIVITY_TYPE_NON_PHP;
Aber das kann auch damit nichts zu tun haben...
Hallo Simon,
kannst du auch deinen .net-code teilen? Ich denke, dass da einfach die Methode nicht gefunden wird, die er aufrufen will.
Daniel
Hallo zusammen,
danke schon einmal für die reichliche und schnelle Unterstützung.
Nachdem ich return SystemActivity::ACTIVITY_TYPE_NON_PHP;
auf return parent::ACTIVITY_TYPE_NON_PHP;
geändert habe, bekam ich beim Konfigurieren der Systemaktivität einen 500er Fehler und folgenden Logeintrag in der system.log:2023-11-22 17:12:41,983 php CRITICAL NULL Uncaught Error: Undefined constant AbstractSystemActivityAPI::ACTIVITY_TYPE_NON_PHP {"exception":"[object] (Error(code: 0): Undefined constant AbstractSystemActivityAPI::ACTIVITY_TYPE_NON_PHP at C:\\inetpub\\wwwroot\\jobrouter\\systemactivities\\DocuWareStamp\\SystemActivity.php:18)"} {"file":"C:\\inetpub\\wwwroot\\jobrouter\\library\\vendor\\symfony\\error-handler\\ErrorHandler.php","line":514,"class":"Symfony\\Component\\ErrorHandler\\ErrorHandler","callType":"->","function":"handleException"} 2023-11-22 17:12:41,985 request CRITICAL yPnEzgWL Uncaught PHP Exception Error: "Undefined constant AbstractSystemActivityAPI::ACTIVITY_TYPE_NON_PHP" at C:\inetpub\wwwroot\jobrouter\systemactivities\DocuWareStamp\SystemActivity.php line 18 {"exception":"[object] (Error(code: 0): Undefined constant AbstractSystemActivityAPI::ACTIVITY_TYPE_NON_PHP at C:\\inetpub\\wwwroot\\jobrouter\\systemactivities\\DocuWareStamp\\SystemActivity.php:18)"} {"file":"C:\\inetpub\\wwwroot\\jobrouter\\library\\vendor\\symfony\\http-kernel\\EventListener\\ErrorListener.php","line":185,"class":"Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener","callType":"->","function":"logException"}
also wieder zurück geändert.
Jetzt probiere ich gerade mit Namen herum, wie von Daniel vorgeschlagen. Nach ein paar Versuchen habe ich es jetzt soweit, dass der Simulator mir keinen Fehler mehr zeigt, aber die Aktivität auch nicht fertiggestellt wird.
Möglicherweise hat das wirklich auch mit den DB Einträgen zu tun.
Grundsätzlich will ich auf Dauer mehrere Systemaktivitäten schaffen, die alle mehrere Funktionen haben, aber für den Anfang und zum Testen wäre ich schon mit eine Aktivität mit einer Funktion zufrieden ;)
Ich werde im Laufe der Woche, sofern ich dazu komme, noch weiter mit den Benennungen rumprobieren und hier aktualisieren, wenn ich etwas weiteres finde.
Hallo Daniel,
bisher tut mein Code noch nicht viel.
JobActivity Verzeichnis
So sieht aktuell mein Projekt aus:
und so der Code in der fixedstamp.cs:
using Jobrouter.Activity.API;
namespace DocuWareStamp
{
public class DocuWareStampSystemActivity : AbstractSystemActivityAPI
{
protected override string GetActivityId()
=> "docuwarestamp";
protected override string GetModuleName()
=> "DocuWareStamp";
protected override void Prepare() { }
protected override void Execute()
=> logger.Warn("executing " + GetModuleName());
protected override void BeforeSave()
=> StepStatus = 99;
protected override void OnSuccess()
=> logger.Info("finished processing " + GetModuleName());
protected override void OnException(Exception ex) { }
protected override void CleanUp() { }
public object GetParameterValueInterface(InputParameter input)
=> GetInputParameterValue(input);
public int fixedstamp()
=> 98;
}
}
Das einzige was ich mir hier noch vorstellen könnte, wäre, dass ich irgendwo falsche Benennungen habe – name der Method statt der Activity verwendet oder umgekehrt o.ä., leider ist die Doku da auch nicht so eindeutig.
Ich würde ganz stark vermuten, dass deine functionid in PHP
<function id='fixedstamp'
nicht zur
protected override string GetActivityId()=> "docuwarestamp";
passt.
Versuch doch mal bei beiden denselben wert.
Hello,
mir fällt gerade auf, dass ich hier nie aktualisiert habe.
der zuletzt beschriebene Fehler war, soweit ich mich erinnere, wirklich auf leicht unterschiedliche Benennung an bestimmten Stellen zurückzuführen, allerdings weiß ich nicht mehr wo genau.
Inzwischen habe ich eine funktionierende Beispielsystemaktivität fertig die ich als Kopiervorlage verwende, sowie zwei weitere Systemaktivitäten, die auch bereits im produktiven Einsatz sind und weitere Optionen bezüglich JR -> DW Anbindung bieten.
Weitere Aktivitäten sind in Planung und warten nur darauf, dass ich Zeit dafür finde.
Gruß aus Neuss,
Simon H. Hellmann
Hallo zusammen,
habe den Fehler gefunden.
Es ist wohl so, dass "ActivityId" und "ModuleName" übereinstimmen dürfen und mindestens der "ModuleName" auch mit dem Klassennamen übereinstimmen muss. Allerdings dürfen die "functions" nicht genauso benannt sein, sonst meckert C#. Habe jetzt also ActivityId und Module gleich benannt, aber einen anderen Namen für die function gewählt - funktioniert jetzt.
Nächster Schritt: überhaupt mal eine Funktionalität einbauen und dann probieren mehr als eine function in die Aktivität zu bauen.
Danke auf jeden Fall für die fleißige Unterstützung hier!