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