-- -- workflow_case__get_task_deadline/5 -- create or replace function workflow_case__get_task_deadline( character varying, character varying, character varying, integer, character varying ) returns timestamptz as $$ declare get_task_deadline__callback alias for $1; get_task_deadline__custom_arg alias for $2; get_task_deadline__attribute_name alias for $3; get_task_deadline__case_id alias for $4; get_task_deadline__transition_key alias for $5; v_deadline timestamptz; v_rec record; v_str varchar; begin /* * 1. or if there is a row in wf_case_deadlines, we use that * 2. if there is a callback, we execute that * 3. otherwise, if there is an attribute, we use that */ /* wf_case_deadlines */ select deadline into v_deadline from wf_case_deadlines where case_id = get_task_deadline__case_id and transition_key = get_task_deadline__transition_key; if NOT FOUND then if get_task_deadline__callback != '' and get_task_deadline__callback is not null then /* callback */ v_str := 'select ' || get_task_deadline__callback || '(' || get_task_deadline__case_id || ',' || quote_literal(get_task_deadline__transition_key) || ',' || coalesce(quote_literal(get_task_deadline__custom_arg),'null') || ') as deadline'; for v_rec in execute v_str LOOP v_deadline := v_rec.deadline; exit; end LOOP; else if get_task_deadline__attribute_name != '' and get_task_deadline__attribute_name is not null then /* attribute */ v_deadline := acs_object__get_attribute ( get_task_deadline__case_id, get_task_deadline__attribute_name ); else v_deadline := null; end if; end if; end if; return v_deadline; end;$$ language plpgsql;