Článek: AN0001927Aktualizováno:: 22.09.2018
Workflow vytváří technický log svého průběhu, který je dostupný administrátorovi. Tento log obsahuje řadu podrobností, ale není vhodný pro běžného uživatele, kterému bychom měli zobrazit pro něj relevantní informace.
Na níže uvedeném obrázku máme záznam požadavku se čtyřmi klíčovými poli. Schvalování požadavku probíhá ve workflow, které je spuštěno s daným záznamem. Na dolní záložce master-detail relace chceme zobrazovat uživatelský log průběhu workflow.
Níže uvedené příklady jsou reálně použity v řešeních Přístupová práva a Znalostní báze, které jsou k dispozici v balíčku ObjectGears s modely.
Zápis do logu při vytvoření workflow úkolu
Následující skript (kromě přidělení úkolu a připojení odkazovaného záznamu k úkolu) vytvoří záznam ve třídě sledující průběh workflow a vloží do něj informaci o tom, komu a proč byl úkol přidělen úkol. Skript také nastaví nový stav v záznamu, s nímž byl spuštěn.
Místo použití skriptu: Aktivita workflow Úkol - Inicializační skript (obecně jakákoli aktivita obsahující pole pro vlastní skript)
//Přidělení úkolu gestorovi role
OGWFActualRun.ActualTaskAssignTo.Add( OGWFActualRun.Property.GetInteger( 'role-gestor'));
//*Přidání odkazu na Request do úkolu
OGWFActualRun.ActualTask.SetClassLink( 6721, OGWFActualRun.Property.GetInteger( 'request-id'));
//Vytvoření záznamu ve třídě Request flow
var clRF = OG.ClassDef.GetByCode( OGWFActualRun.ModelId, 'request-flow');
var drNew= OG.DataRow.CreateNew( clRF.Id);
drNew.SetClassLink( 6706, OGWFActualRun.Property.GetInteger('request-id'));
drNew.SetDateTime( 6708, System.DateTime.Now);
//zjištění Full name gestora
var p = OG.Person.GetById( OGWFActualRun.Property.GetInteger('role-gestor'));
drNew.SetText( 6709, 'Request was submitted to the role gestor ' + p.FullName);
OG.DataRow.SaveData( drNew);
//nastavit status requestu na 2 - pending for approval
var colStatus= OG.Column.GetByCode( OGWFActualRun.InputDataRow.ParentId, 'status');
OGWFActualRun.InputDataRow.SetClassLink( colStatus.Id, 2);
OG.DataRow.SaveData( OGWFActualRun.InputDataRow);
Zápis do logu po dokončení úkolu
Následující skript vytvoří záznam ve třídě sledující průběh workflow a vloží do něj informaci, zda byl úkol dokončen schválením nebo zamítnutím požadavku.
Místo použití skriptu: Aktivita workflow Úkol - Skript po vstupu uživatele (obecně jakákoli aktivita obsahující pole pro vlastní skript)
//Vytvoření záznamu ve třídě Request flow
var clRF = OG.ClassDef.GetByCode( OGWFActualRun.ModelId, 'request-flow');
var clT = OG.ClassDef.GetByCode( OGWFActualRun.ModelId, 'tasks');
var colAppr = OG.Column.GetByCode( clT.Id, 'approval');
var colComment = OG.Column.GetByCode( clT.Id, 'comment');
var drNew= OG.DataRow.CreateNew( clRF.Id);
drNew.SetClassLink( 6706, OGWFActualRun.Property.GetInteger('request-id'));
drNew.SetDateTime( 6708, System.DateTime.Now);
/* - Zjistit hodnotu ze sloupce approval, třídy tasks (z řádku, v němž byl řešen tento úkol). */
var column = OGWFActualRun.ActualTask.GetClassLink(colAppr.Id);
var col_comment = OGWFActualRun.ActualTask.GetTextAsString(colComment.Id);
var approval = 'rejected';
if (column == 1)
{
approval = 'approved';
OGWFActualRun.Property.SetBoolean( 'role-gestor-approval', true);
}
else
{
OGWFActualRun.Property.SetBoolean( 'role-gestor-approval', false);
}
if (col_comment == null || col_comment == '')
{
drNew.SetText( 6709, 'Request was ' + approval + ' by the role gestor.');
}
else
{ drNew.SetText( 6709, 'Request was ' + approval + ' by the role gestor with this comment: ' + col_comment + '.');
}
OG.DataRow.SaveData( drNew);