Version 3 (modified by jpo, 9 years ago)

--

Workflow - Pętle

Podstawowe informacje

Warunek zakończenia pętli

Pętla zostanie przerwana jeżeli zapytanie SQL zwróci prawdę (TRUE). Warunek jest sprawdzany po zakończeniu/załatwieniu czynności. przykład:

SELECT count(*) > 1 FROM stages WHERE ptstid = {stages.ptstid} AND isinst IS TRUE AND prn_id = {stages.prn_id} AND is_fix IS TRUE AND fixdat IS NOT NULL

Pętla zakończy się, gdy zostaną załatwione co najmniej 2 czynności równoległe (dla pętli typu "multi-instance").

UWAGI

Brak szarfy na procedurze

Gdy zostanie zmieniona definicja jednej czynności na pętlę multi. Taka zmiana nie jest kompatybilna z uruchomionymi już instancjami procedury i powoduje, że nikt nie jest przypisany do etapu, co może skutkować nie pojawieniem się szarfy. W takim przypadku należy ręcznie wygenerować (inserty) instancje do tej pętli.

INSERT INTO stages (sop_id,procid,ptstid,prn_id,stdver,ptstnm,ptsttp,orgarr,params,end___,duratn,is_fix,fixdat,fixper,orunid,sysdat,is_act,errlog,assign,props_,in_set,outset,isinst,actdat,state_,trbyev,prcref,allow_,commen) SELECT nextval('stages_sop_id_seq'::regclass),procid,ptstid, prn_id, stdver,ptstnm,ptsttp, array[orgarr] as orgarr, params,end___,duratn,is_fix,fixdat,fixper,orunid,sysdat,is_act,errlog,assign,props_,in_set,outset,isinst,actdat,state_,trbyev,prcref,allow_,commen
FROM (
select sop_id,procid,ptstid, sop_id as prn_id, stdver,ptstnm,ptsttp, unnest(orgarr) as orgarr, params,end___,duratn,is_fix,fixdat,fixper,orunid,sysdat,is_act,errlog,assign,props_,in_set,outset,TRUE as isinst,actdat,state_,trbyev,prcref,allow_,commen
from stages
where ptstid = 1075 AND orgarr != '{}' AND is_act AND NOT isinst AND sop_id NOT IN (SELECT sop_id FROM stages WHERE ptstid = 1075 AND isinst)
) aa
order by procid,sop_id;