Die eigentliche Selektion findet in der Methode findCases in der Klasse ch.ivyteam.ivy.workflow.ui.utils.WorkflowUIAccessPermissionHandler statt. Dieser Methode kann ein Integer "caseDisplayMode" mitgegeben werden, welcher den Benutzer-Filter steuert:
- 0 stands for your cases
- 1 stands for team cases
- 2 stands for all application cases (ivy.wf)
- 3 any query cases: it means find all cases that fit to the received criteria (property filter)
Um "Meine"-Prozesse anzuzeigen, wird der Wert 0 übergeben. Die Methode findCases verwendet dann die Ivy-Session Methode findInvolvedCases. Als Involviert gilt ein User wenn:
- he is the creator of the case
- he has worked or is working on a task of the case.
- he can work on a task of the case. Either because he is the activator of the task or the activator of the task is a role he owns.
Zum Ändern des Erstellers eines Cases habe ich keine API Methode gefunden. Daher habe ich momentan folgendes implementiert:
- Beim Starten des Prozesses über ein File basierter Event Start wird der "Besitzer" des Prozesses aus der Datei gelesen (wurde in diesem Fall bereits mitgeliefert) und in den Case Daten (hier als businessCreatorUser) gespeichert
- Bei der Anzeige habe ich eine zusätzliche Option "Besitzer" implementiert, welche als caseDisplayMode 3 angibt und einen entsprechende Filter übergibt:
IPropertyFilter filter = in.propertyFilter;
if(in.caseDisplayMode == 3) {
filter = ivy.wf.createCasePropertyFilter(
ch.ivyteam.ivy.workflow.CaseProperty.BUSINESS_CREATOR_USER,
ch.ivyteam.logicalexpression.RelationalOperator.EQUAL,
ivy.session.getSessionUserName());
}