Skriptbasierte Weitergabe von Jobs (nach Bearbeitungszeit)


Mit Hilfe eines Javaskrips können Jobs anderen Gruppen in automatisierter Form unter Zuhilfenahme verschiedener Parameter zugeordnet werden.

Dies kann insbesondere dann sinnvoll sein, wenn nach einer gewissen Bearbeitungszeit ein Job noch nicht erledigt ist und einer anderen Gruppe zur Weiterbearbeitung übergeben werden soll.

Das nachfolgende Beispiel zeigt examplarisch die prinzipielle Vorgehensweise, die Ausgangslage ist wie folgt:

Es existiert eine Gruppe "Jobweitergabe-start", deren Tasks, die seit mehr als vier Wochen offen sind, an die Gruppe "Jobweitergabe-ziel" zur Nachverfolgung weitergeben werden sollen.

Diese Tasks sollen automatisiert über Nacht abgefragt werden und der Zielgruppe zugeordnet werden.

Hierfür ist die Einrichtung einer Hilfsgruppe "Jobweitergabe-batch" erforderlich, deren einzige Funktion ist, über eine automatisierte Wiederholung einen internen Job anzustossen, der skriptbasiert die Neuzuordnung der relevanten Tasks vornimmt. Hier die drei Gruppen:

sc1a.jpg

Für diese Hilfsgruppe "Jobweitergabe-batch" wird nun in der Start-Aktion ein Javaskript implementiert, das bei dem Anlegen eines Tasks für diese Hilfsgruppe durchlaufen wird.

sc2.jpg

Das Skript in Gänze:

var sendingMailbox="Bergener und Partner <jobrouter@bergener-partner.de>";
var targetEmail="support@bergener-partner.de";

// function to write error message and send mail in case of error
function treatError(message)
{
println(message);
helper.sendmail(sendingMailbox, "Fehler im Batch-Job: "+task.getId(),
 message,targetEmail, null, null, false);

}

function moveOverdueTasks(){
println("releaseParkedRequests");  
var qm =  new com.proxemo.todo.bom.ToDoArchiveQueryMap(100);

// get all tasks from group Jonweitergabe_start that are still open
var feedbackGroup = com.proxemo.todo.server.ToDoScheduledTaskDispatcher.getInstance().getReallyAllWorkGroups().get(new java.lang.Long(29));
qm.addNameValue(com.proxemo.todo.bom.ToDoArchiveQueryMap.SKILL_ATTRIBUTE, feedbackGroup);
qm.addNameValue(com.proxemo.todo.bom.ToDoArchiveQueryMap.STATE_ATTRIBUTE, com.proxemo.todo.bom.ToDoTask.STATE_OPEN);

   println(">>>>>>>>>>> task with creationdate older than 4 weeks ago");  
// task with creationdate older than 4 weeks ago
var nowDate = new java.util.Date();
var dv = java.lang.reflect.Array.newInstance(nowDate.getClass(), 2);
var now = nowDate.getTime();
var oneMonthInMillis=3600*1000*24*30;
var threeMonthsInMillis=oneMonthInMillis*3


dv[0]=new java.util.Date(now-threeMonthsInMillis);
dv[1]=new java.util.Date(now-oneMonthInMillis);
qm.addNameValue(com.proxemo.todo.bom.ToDoArchiveQueryMap.DATE_START_ATTRIBUTE, dv);

//execute query
println(">>>>>>>>>>> execute query");  
var qresult = new com.proxemo.todo.server.action.ToDoQueryArchiveAction().execute(-1, qm);

println("Overdue Jobs: "+qresult.getTasks().size());

for(var i=0; i<qresult.getTasks().size(); i++)
 {
 var t = qresult.getTasks().get(i);
 println("Found Overdue task"+t.getId());
 var overdueGroup = com.proxemo.todo.server.ToDoScheduledTaskDispatcher.getInstance().getReallyAllWorkGroups().get(new java.lang.Long(31));
 
 t.getAddressee().setAddressedWorkgroup(overdueGroup);
 var ts = new com.proxemo.todo.bom.ToDoTaskShell(t);
 new com.proxemo.todo.server.action.ToDoUpdateSimpleTaskAction().execute(-1, ts);
 }        
}
try
{
println("Reading Jobweitergabe jobs older than 4 weeks");

// detect and move overdue tasks
moveOverdueTasks();

// close current task
task.startWorking();
task.finishWorking(true);

println("Processing Jobweitergabe jobs older than 4 weeks finished");
}
catch (exc)
{
println("Exception in prodi"+ exc);
println("Exception in prodi"+ exc.stack);
treatError("JOBWEITERGABE_GENERIC_ERROR:"+task.getId());

}

Dieser automatisierte Aktualisierungs- und Weitergabejob wird nun als Wiederholung für die Gruppe "Jobweitergabe-batch" angelegt, in vorliegendem Fall wird die Prozedur täglich um 23.00 Uhr durchlaufen.

Alternativ kann die Neuzuordnung auch jederzeit manuell angestossen werden, indem einfach ein neuer Job für die Gruppe "Jobweitergabe-batch" angelegt wird.

sc3.jpg

Die relevanten,  individuell anpassbaren Teile des Javaskripts nun im Detail:

In diesem Teil wird die Ausgangsgruppe der betroffenen Jobs definert, also im vorliegenden Beispiel die Gruppe "Jobweitergabe-start" mit ihrer Gruppen-ID "29".

// get all tasks from group Jonweitergabe_start that are still open
 var feedbackGroup = com.proxemo.todo.server.ToDoScheduledTaskDispatcher.getInstance().getReallyAllWorkGroups().get(new java.lang.Long(29));
 qm.addNameValue(com.proxemo.todo.bom.ToDoArchiveQueryMap.SKILL_ATTRIBUTE, feedbackGroup);
 qm.addNameValue(com.proxemo.todo.bom.ToDoArchiveQueryMap.STATE_ATTRIBUTE, com.proxemo.todo.bom.ToDoTask.STATE_OPEN);

In diesem Teil werden die Jobs der Zielgruppe der betroffenen Jobs zugeordnet, also im vorliegenden Beispiel die Gruppe "Jobweitergabe-ziel" mit ihrer Gruppen-ID "31".

Diese Gruppe wird nun neuer Besitzer der Jobs.

 var t = qresult.getTasks().get(i);
  println("Found Overdue task"+t.getId());
  var overdueGroup = com.proxemo.todo.server.ToDoScheduledTaskDispatcher.getInstance().getReallyAllWorkGroups().get(new java.lang.Long(31));

Standardseitig ist das Zeitfenster auf einen Rahmen von 30 Tagen bis zu 90 Tagen festgelegt; dies kann auch separat individuell angepasst werden, indem die Werte aus folgendem Skriptfragment geändert werden:

var nowDate = new java.util.Date();
var dv = java.lang.reflect.Array.newInstance(nowDate.getClass(), 2);
var now = nowDate.getTime();
var oneMonthInMillis=3600*1000*24*30;
var threeMonthsInMillis=oneMonthInMillis*3

Zusammengefasst wurden in diesem Beispiel serverseitig Jobs aufgrund zweier definierter Kriterien (offen, Erstellungsdatum zwischen 30 Tagen und 90 Tagen in der Vergangenheit) selektiert und die Gruppenzuordnung für diese Jobs geändert. Prinzipiell ist diese Selektion nicht nur auf das Datum der Erstellung beschränkt, es können alle Datenbankfelder des Jobs für die Auswahl genutzt werden.

Die Implemetierung setzt allerdings zumindest fortschrittene Kenntnisse in Java und Javaskript voraus.

Sollten Sie daher eine entsprechende Anforderung haben, wenden Sie sich bitte an unseren Support unter support@bergener-partner.de

 

     

Unterseiten