-- -- workflow_case__set_task_assignments/3 -- create or replace function workflow_case__set_task_assignments( integer, character varying, character varying ) returns int4 as $$ declare set_task_assignments__task_id alias for $1; set_task_assignments__callback alias for $2; set_task_assignments__custom_arg alias for $3; v_done_p boolean; case_assignment_rec record; context_assignment_rec record; v_str text; begin /* Find out who to assign the given task to. * * 1. See if there are rows in wf_case_assignments. * 2. If not, and a callback is defined, execute that. * 3. Otherwise, grab the assignment from the workflow context. * * (We used to use the callback first, but that makes * reassignment of tasks difficult.) */ v_done_p := 'f'; for case_assignment_rec in select party_id from wf_case_assignments ca, wf_tasks t, wf_transitions tr where t.task_id = set_task_assignments__task_id and ca.case_id = t.case_id and ca.role_key = tr.role_key and tr.workflow_key = t.workflow_key and tr.transition_key = t.transition_key LOOP v_done_p := 't'; PERFORM workflow_case__add_task_assignment ( set_task_assignments__task_id, case_assignment_rec.party_id, 'f' ); end loop; if v_done_p != 't' then if set_task_assignments__callback != '' and set_task_assignments__callback is not null then v_str := 'select '|| set_task_assignments__callback || '(' || set_task_assignments__task_id || ',' || coalesce(quote_literal(set_task_assignments__custom_arg),'null') || ')'; execute v_str; else for context_assignment_rec in select party_id from wf_context_assignments ca, wf_cases c, wf_tasks t, wf_transitions tr where t.task_id = set_task_assignments__task_id and c.case_id = t.case_id and ca.context_key = c.context_key and ca.workflow_key = t.workflow_key and ca.role_key = tr.role_key and tr.workflow_key = t.workflow_key and tr.transition_key = t.transition_key LOOP PERFORM workflow_case__add_task_assignment ( set_task_assignments__task_id, context_assignment_rec.party_id, 'f' ); end LOOP; end if; end if; return 0; end;$$ language plpgsql;