Obieg opracowania (workflow)
W tym podmodule definiuje się graf etapów procesu ze wskazaniem obsługiwanej klasy obiektów (pośrednio grupa użytkowników) oraz możliwych przejść w grafie.
W przykładowym rozwiązaniu stosowanym w Politechnice Warszawskiej przyjęto, że opracowanie odbywa się w dwóch etapach:
rozpoczęcie projektu
realizacja/zakończenie projektu
przy czym w obydwu etapach, zakres działań oraz uprawnienia jednostki centralnej (COP) znaczeni różnią się od tego, co może wykonywać kierownik projektu (poziom wydziału)
Z tego powodu wyróżniono cztery fazy obiegu opracowania:
Rozpoczęcie projektu - przygotowanie rekordu projektu przez COP: COP_01
klasa obiektów: Projekty zarządzane przez COP
możliwe przejścia:
Faculty_01
Faculty_02
Rozpoczęcie projektu - uzupełnianie opisu projektu przez wydział (kierownika) w fazie początkowej: Faculty_01
klasa obiektów: Projekty zarządzane przez COP
możliwe przejścia:
COP_01
Realizacja/Zakończenie projektu - modyfikacja rekordu projektu przez COP: COP_02
klasa obiektów: Projekty zarządzane przez COP
możliwe przejścia:
Faculty_01
Faculty_02
Realizacja/Zakończenie projektu - uzupełnianie opisu projektu przez wydział (kierownika) w fazie trwania/zakończenia projektu: Faculty_02
klasa obiektów: Projekty zarządzane przez COP
możliwe przejścia:
COP_02
Uprawnieni użytkownicy mogą we właściwym stanie opisu “przekazać” rekord do opracowania w innej fazie. wynikającej z potrzeb dalszego uzupełniania danych gromadzonych w opisie projektu.
Poniższe rysunki pokazują najważniejsze pola na formularzu definicji rekordu workflow.
Formularz definicji rekordu workflow zawiera miedzy innymi poniższe pola, które są najbardziej istotne dla definiowania procesu:
Nazwa systemowa
Nazwa w języku polskim
Nazwa w języku angielskim
Klasa obiektów
Następny etap
Adres e-mail odbiorców poczty przychodzącej
Adres e-mail odbiorców poczty przychodzącej (EL/skrypt)
Priorytet sortowania (znakowo)
Etap domyślny
Adres odbiorców poczty elektronicznej może być wyznaczany automatycznie na dwa sposoby:
poprzez podanie metody ustalania wykazu adresów
załączenie opracowanego skryptu
przy czym możliwe jest stosowanie kilku metod oraz skryptu jednocześnie.
Zasady wykorzystania dostępnych metod ustalania adresatów poczty opisane są w podrozdziale Metody automatycznego ustalania adresów poczty elektronicznej.
Przykładowa metoda została użyta w definicji fazy FACULTY_01 i wygląda jak na poniższym rysunku
przy czym treść tej definicji jest następująca:
Skrypt określający adresatów poczty elektronicznej może zawierać następującą treść:
// build email address list of the record owner's unit chief
function chiefEmail(aff, cdaoHelper, iulq) {
var gemail='';
var ca='';
var csep='';
var semail='';
var culq='';
if (culq =='') {
var lid = 'cop_HB';
switch (aff) {
case 'DPK' : lid = 'cop_BK'; break;
case 'DFS' : lid = 'cop_MLC'; break;
case 'DPM' : lid = 'cop_AG'; break;
}
culq='login=\''+lid+'\'';
} else culq = iulq;
var lu = cdaoHelper.listQ(culq, 'user', "id;ascending");
if (lu.size() > 0) {
for (var i1=0; i1<lu.size(); i1++) {
if (lu[i1].author) {
ca=lu[i1].author;
if (gemail !='') csep=';';
if (ca.email) {semail=ca.email;if (gemail.toLowerCase().indexOf(semail.toLowerCase()) ==-1) gemail=gemail+csep+ca.email;}
}
}
}
return gemail;
}
var daoHelper = component('daoHelper');
var temail='';
var cemail='';
var csep='';
if (entity) {
if (entity.owner) {
var ouq='login=\''+entity.owner+'\' or jcr:contains(@alias,\''+entity.owner+'\')';
var ou = daoHelper.listQ(ouq, 'user', 'id;ascending');
if (ou.size() > 0) {
if (ou[0].author) {
var oa=ou[0].author;
if (temail !='') csep=';';
if (oa.email) temail=temail+oa.email;
if (oa.affiliation) {
var affil = oa.affiliation;
if (affil.accronymPL) {
aff = affil.accronymPL;
cemail=chiefEmail(aff, daoHelper, '');
if (cemail !='') {
if (temail !='') csep=';';
temail=temail+csep+cemail;
}
}
}
}
}
}
if (temail =='') {
if (entity.administratorUnit) {
if (entity.administratorUnit.accronymPL) {
aff = entity.administratorUnit.accronymPL;
cemail=chiefEmail(aff, daoHelper, '');
if (cemail !='') {
if (temail !='') csep=';';
temail=temail+csep+cemail;
}
}
}
}
if (temail =='') {
var tulq='login=\'cop_BK\' or login=\'cop_MLC\' or login=\'cop_AG\' or login=\'cop_HB\'';
cemail=chiefEmail(aff, daoHelper, tulq);
if (cemail !='') {
if (temail !='') csep=';';
temail=temail+csep+cemail;
}
}
}
temail;