Examples: query, "exact match", wildcard*, wild?ard, wild*rd
Fuzzy search: cake~ (finds cakes, bake)
Term boost: "red velvet"^4, chocolate^2
Field grouping: tags:(+work -"fun-stuff")
Escaping: Escape characters +-&|!(){}[]^"~*?:\ with \, e.g. \+
Range search: properties.timestamp:[1587729413488 TO *] (inclusive), properties.title:{A TO Z}(excluding A and Z)
Combinations: chocolate AND vanilla, chocolate OR vanilla, (chocolate OR vanilla) NOT "vanilla pudding"
Field search: properties.title:"The Title" AND text
Beantwortet
.NET Systemaktivität entwickeln

Hallo zusammen,

ich befasse mich gerade ein wenig damit, wie ich Systemaktivitäten bauen kann. Da ich Ahnung von C# und auch schon viel wiederverwendbaren Code habe, würde ich natürlich gerne die .NET Systemaktivität verwenden, statt der PHP Systemaktivität.

Jetzt hat JR die schöne Dokumentation unter https://docs.jobrouter.com/2023.2/de/developer/developer_implementierung_net_api.html
Laut dieser Doku muss ich zuerst eine PHP Systemaktivität erstellen, darin erwähnen, dass es sich um eine .NET Aktivität handelt, diese dann in den JobActivity Pfad einfügen und der JobRouter Datenbank bekannt machen - etwas umständlich, aber gesagt, getan. (Siehe Anhang).
JobActivity
JRMODULETIMER
JRMODULECFG

Zum Problem: Wenn ich die Systemaktivität im Simulator ausführe, erhalte ich folgende Fehlermeldung:
Error

Das Prozess-Log dahinter sieht so aus:

2023-11-21 10:39:14,925 systemactivity_DocuWareStamp ERROR WAm5qysJ 2ee74fde53d163e4731afa69571a8cea0000000552 || Method for selected function "fixedstamp" not implemented in system activity DocuWare Stempel [] {"file":"C:\\inetpub\\wwwroot\\jobrouter\\includes\\classes\\SystemActivity.php","line":2940,"class":"SystemActivity","callType":"->","function":"log"}
2023-11-21 10:39:14,947 HellmannS ERROR WAm5qysJ 2ee74fde53d163e4731afa69571a8cea0000000552 || Error executing module DocuWareStamp: Method for selected function "fixedstamp" not implemented in system activity DocuWare Stempel  {"version":"2023.2.3-stable","file":"C:\\inetpub\\wwwroot\\jobrouter\\includes\\classes\\Step.php","line":8575,"caller":"Step::handleDefaultExceptionsDuringExecute"} [] []
2023-11-21 10:39:14,951 HellmannS ERROR WAm5qysJ 2ee74fde53d163e4731afa69571a8cea0000000552 || #0 C:\inetpub\wwwroot\jobrouter\includes\classes\ProxySystemActivity.php(506): SystemActivity->ensureSystemActivityExecutionMethodIsDefined(Object(DocuWareStampSystemActivity)) #1 C:\inetpub\wwwroot\jobrouter\includes\classes\SystemActivity.php(2236): ProxySystemActivity->executeSelectedFunction() #2 C:\inetpub\wwwroot\jobrouter\includes\classes\ProxySystemActivity.php(477): SystemActivity->executeSelectedFunctionOrSimulation() #3 C:\inetpub\wwwroot\jobrouter\includes\classes\ProxySystemActivity.php(136): ProxySystemActivity->executeSelectedFunctionOrSimulation() #4 C:\inetpub\wwwroot\jobrouter\includes\classes\AbstractSystemActivityAPI.php(64): ProxySystemActivity->execute() #5 C:\inetpub\wwwroot\jobrouter\includes\classes\Step.php(8519): AbstractSystemActivityAPI->execute(0) #6 C:\inetpub\wwwroot\jobrouter\includes\classes\Step.php(7859): Step->executeModule() #7 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Engine\Runtime\Step\StepProcessingLogic.php(162): Step->send() #8 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Command\Custom\Ajax\StepProcessingCommand.php(68): JobRouter\Engine\Runtime\Step\StepProcessingLogic->execute() #9 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Command\SecureCommandProxy.php(43): JobRouter\Command\Custom\Ajax\StepProcessingCommand->execute(Object(HttpResponse)) #10 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Command\SecureCommandProxy.php(51): JobRouter\Command\SecureCommandProxy->__call('execute', Array) #11 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Application\FrontController.php(97): JobRouter\Command\SecureCommandProxy->execute(Object(HttpResponse)) #12 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Core\Legacy\App.php(528): JobRouter\Application\FrontController->handleRequest(Object(HttpRequest), Object(HttpResponse)) #13 C:\inetpub\wwwroot\jobrouter\library\JobRouter\Core\Controller\LegacyController.php(30): JobRouter\Core\Legacy\App->run(Object(HttpRequest), Object(HttpResponse)) #14 C:\inetpub\wwwroot\jobrouter\library\vendor\symfony\http-kernel\HttpKernel.php(102): JobRouter\Core\Controller\LegacyController->JobRouter\Core\Controller\{closure}() #15 C:\inetpub\wwwroot\jobrouter\library\vendor\symfony\http-foundation\StreamedResponse.php(102): Symfony\Component\HttpKernel\HttpKernel::Symfony\Component\HttpKernel\{closure}() #16 C:\inetpub\wwwroot\jobrouter\library\vendor\symfony\http-foundation\Response.php(423): Symfony\Component\HttpFoundation\StreamedResponse->sendContent() #17 C:\inetpub\wwwroot\jobrouter\index.php(43): Symfony\Component\HttpFoundation\Response->send() #18 C:\inetpub\wwwroot\jobrouter\index.php(2): sg_load('36D95066C7C4FC9...') #19 {main}  {"version":"2023.2.3-stable","file":"C:\\inetpub\\wwwroot\\jobrouter\\includes\\classes\\Step.php","line":8576,"caller":"Step::handleDefaultExceptionsDuringExecute"} [] []

Leider kann ich damit nicht wirklich etwas anfangen. Interessant ist, dass dieser Fehler nur auftritt, wenn ich versuche, das ganze als .NET Aktivität zu machen - entferne ich die "getActivityType()" Methode und erstelle eine entsprechende PHP Funktion, funktioniert alles. JobActivity schreibt hier niemals ein Log, daher habe ich die Vermutung, dass die .NET Library gar nicht aufgerufen wird, und ich irgendeinen dummen Fehler in der SystemActivity.php habe (im Anhang auf .txt geändert, da ich keine .php hochladen kann). Vielleicht findet den ja jemand hier ;)

Edit: Ich nutze die aktuelle Version 2023.2.3 vom JR.

Danke & Grüße vom Rhein,
Simon H. Hellmann
📎 SystemActivity.txt

Stimmen Neuste

Antworten 8


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.

1
1
Gepostet vor einem Jahr

Hallo Simon,

kannst du auch deinen .net-code teilen? Ich denke, dass da einfach die Methode nicht gefunden wird, die er aufrufen will.

Daniel

1
1
Gepostet vor einem Jahr

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.
1
1
Gepostet vor einem Jahr

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...

1
1
Gepostet vor einem Jahr
Stefan Köngeter
309 × 7 Administrator

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!

  
  
Gepostet vor einem Jahr

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

  
  
Gepostet vor 6 Monaten

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.

  
  
Gepostet vor einem Jahr

Hallo Daniel,

bisher tut mein Code noch nicht viel.
JobActivity Verzeichnis
So sieht aktuell mein Projekt aus:
VS Projekt

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.

  
  
Gepostet vor einem Jahr
  
  

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.
Daniel Winkels   vor einem Jahr Melden
2K Ansichten
8 Antworten
vor einem Jahr
vor 6 Monaten
Stichwörter