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:

  1. Rozpoczęcie projektu - przygotowanie rekordu projektu przez COP: COP_01

    1. klasa obiektów: Projekty zarządzane przez COP

    2. możliwe przejścia:

      • Faculty_01

      • Faculty_02

  2. Rozpoczęcie projektu - uzupełnianie opisu projektu przez wydział (kierownika) w fazie początkowej: Faculty_01

    1. klasa obiektów: Projekty zarządzane przez COP

    2. możliwe przejścia:

      • COP_01

  3. Realizacja/Zakończenie projektu - modyfikacja rekordu projektu przez COP: COP_02

    1. klasa obiektów: Projekty zarządzane przez COP

    2. możliwe przejścia:

      • Faculty_01

      • Faculty_02

  4. Realizacja/Zakończenie projektu - uzupełnianie opisu projektu przez wydział (kierownika) w fazie trwania/zakończenia projektu: Faculty_02

    1. klasa obiektów: Projekty zarządzane przez COP

    2. 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 https://omega-psir.atlassian.net/wiki/spaces/OM/pages/5279580161.

 

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;