Commit 860aa7b0 authored by Frank Bergmann's avatar Frank Bergmann

Initial import

parents
<?xml version="1.0"?>
<!-- Generated by the OpenACS Package Manager -->
<package key="acs-workflow" url="http://www.arsdigita.com/acs-repository/apm/packages/acs-workflow/" type="apm_service">
<package-name>Workflow Service (deprecated)</package-name>
<pretty-plural>Workflows Services (deprecated)</pretty-plural>
<initial-install-p>f</initial-install-p>
<singleton-p>t</singleton-p>
<version name="4.5" url="http://www.openacs.org/repository/download/apm/acs-workflow-4.5.apm">
<database-support>
<database>oracle</database>
<database>postgresql</database>
</database-support>
<owner url="http://www.pinds.com/">Lars Pind</owner>
<owner url="mailto:k2pts@yahoo.com">Neophytos Demetriou</owner>
<owner url="mailto:danw@rtp.ericsson.se">Daniel Wickstrom</owner>
<summary>Provides generic workflow management features to all ACS objects.</summary>
<release-date>2002-05-15</release-date>
<vendor url="http://www.openacs.org/">OpenACS</vendor>
<provides url="acs-workflow" version="4.5"/>
<requires url="acs-kernel" version="4.6.2"/>
<requires url="acs-mail" version="4.1"/>
<parameters>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="guard_font_size" default="10" description="The size of the font to use for guards when displaying a process graph." section_name="fonts"/>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="place_font_size" default="10" description="The size of the font to use for places when displaying a process graph." section_name="fonts"/>
<parameter datatype="number" min_n_values="1" max_n_values="1" name="transition_font_size" default="14" description="The size of the font to use for transitions when displaying a process graph." section_name="fonts"/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="guard_font_name" default="arial" description="The name of the font to use for guards when displaying a process graph. This is the name of a .ttf file available to your GraphViz installation." section_name="fonts"/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="place_font_name" default="arial" description="The name of the font to use for places when displaying a process graph. This is the name of a .ttf file available to your GraphViz installation." section_name="fonts"/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="transition_font_name" default="arialb" description="The name of the font to use for transitions when displaying a process graph. This is the name of a .ttf file available to your GraphViz installation." section_name="fonts"/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="tmp_path" default="/var/tmp" description="Path to a directory where we can store temporary files. It needs to be writable by the user that the webserver is running as."/>
<parameter datatype="string" min_n_values="1" max_n_values="1" name="graphviz_dot_path" default="/usr/local/bin/dot" description="Full path and filename for the AT and T GraphViz dot binary. Leave this blank if you don't have GraphViz installed."/>
</parameters>
</version>
</package>
--
-- acs-workflow/sql/acs-workflow-create.sql
--
-- Calls the other SQL files to create the data models and PL/SQL packages.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
@@ wf-core-create
@@ workflow-case-package
@@ workflow-package
@@ wf-callback-package
/* We create two sample processes */
@@ sample-expenses-create
@@ sample-article-create
--
-- acs-workflow/sql/acs-workflow-drop.sql
--
-- Drops the data model and the PL/SQL packages.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
@@ jobs-kill
@@ wf-core-drop
drop package wf_callback;
drop package workflow;
drop package workflow_case;
alter session set sql_trace = false
set autotrace off
set timing off
create or replace function
my_random
return integer
is
begin
return dbms_random.random/power(2,32)+0.5;
end my_random;
/
show errors
create or replace procedure
push_task_ahead(
task_id integer,
state in varchar2,
user_id in integer,
workflow_key in varchar2,
transition_key in varchar2
)
is
v_journal_id integer;
v_value char(1);
begin
if state = 'enabled' then
v_journal_id := workflow_case.task_action(
task_id => push_task_ahead.task_id,
action => 'start',
action_ip => '1.1.1.1',
user_id => push_task_ahead.user_id
);
else
/* State must be started */
if my_random < 0.02 then
v_journal_id := workflow_case.task_action(
task_id => push_task_ahead.task_id,
action => 'cancel',
action_ip => '1.1.1.1',
user_id => push_task_ahead.user_id
);
else
v_journal_id := workflow_case.begin_task_action(
task_id => push_task_ahead.task_id,
action => 'finish',
action_ip => '1.1.1.1',
user_id => push_task_ahead.user_id
);
for attr_rec in (select a.attribute_name, datatype
from wf_transition_attribute_map m, acs_attributes a
where workflow_key = push_task_ahead.workflow_key
and transition_key = push_task_ahead.transition_key
and a.attribute_id = m.attribute_id)
loop
/* We only know how to handle boolean attributes ... but that's the only thing we have right now, so ... */
if attr_rec.datatype = 'boolean' then
if my_random < 0.5 then
v_value := 't';
else
v_value := 'f';
end if;
workflow_case.set_attribute_value(
journal_id => v_journal_id,
attribute_name => attr_rec.attribute_name,
value => v_value
);
end if;
end loop;
workflow_case.end_task_action(
journal_id => v_journal_id,
action => 'finish',
task_id => push_task_ahead.task_id
);
end if;
end if;
end;
/
show errors
declare
v_object_id integer;
v_workflow_key varchar2(100);
v_count integer;
v_num_cases integer;
v_party_id integer;
v_case_id integer;
v_task_id integer;
v_user_id integer;
v_num_tasks integer;
v_state varchar2(100);
v_transition_key varchar2(100);
begin
v_num_cases := 100;
dbms_random.initialize(943820482);
/* Create a shit-load of cases */
for v_count in 1 .. v_num_cases
loop
select object_id into v_object_id from acs_objects where rownum = 1;
select workflow_key into v_workflow_key from wf_workflows where rownum = 1;
v_case_id := workflow_case.new(
workflow_key => v_workflow_key,
object_id => v_object_id
);
for trans_rec in (select transition_key from wf_transitions where workflow_key = v_workflow_key) loop
for party_rec in (select party_id from parties sample(50)) loop
workflow_case.add_manual_assignment(
case_id => v_case_id,
transition_key => trans_rec.transition_key,
party_id => party_rec.party_id
);
end loop;
end loop;
workflow_case.start_case(
case_id => v_case_id
);
end loop;
/* Move 85% of the cases all the way to finished */
for case_rec in (select case_id from wf_cases sample (85))
loop
loop
select decode(count(*), 0, 0, 1) into v_num_tasks from wf_user_tasks;
exit when v_num_tasks = 0;
if my_random < 0.005 then
workflow_case.cancel(
case_id => case_rec.case_id
);
end if;
select task_id, state, user_id, workflow_key, transition_key
into v_task_id, v_state, v_user_id, v_workflow_key, v_transition_key
from wf_user_tasks
where case_id = case_rec.case_id
and rownum = 1;
push_task_ahead(
task_id => v_task_id,
state => v_state,
user_id => v_user_id,
workflow_key => v_workflow_key,
transition_key => v_transition_key
);
end loop;
end loop;
/* Fire transitions at random */
for v_count in 1 .. round(v_num_cases * 0.15 * 3)
loop
select decode(count(*), 0, 0, 1) into v_num_tasks from wf_user_tasks;
exit when v_num_tasks = 0;
select task_id, state, user_id, workflow_key, transition_key
into v_task_id, v_state, v_user_id, v_workflow_key, v_transition_key
from wf_user_tasks
where rownum = 1;
push_task_ahead(
task_id => v_task_id,
state => v_state,
user_id => v_user_id,
workflow_key => v_workflow_key,
transition_key => v_transition_key
);
end loop;
end;
/
show errors
--
-- acs-workflow/sql/sample-article-create.sql
--
-- Creates a sample article-authoring workflow to play with
--
-- @author Kevin Scaldeferri (kevin@theory.caltech.edu)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
/* This table will hold one row for each case using this workflow. */
create table wf_article_cases (
case_id integer primary key
constraint wf_article_cases_case_fk
references wf_cases on delete cascade
);
declare
v_workflow_key wf_workflows.workflow_key%TYPE;
v_attribute_id acs_attributes.attribute_id%TYPE;
begin
v_workflow_key := workflow.create_workflow(
workflow_key => 'article_wf',
pretty_name => 'Article Publication',
pretty_plural => 'Article Publications',
description => 'Workflow for managing the publication of an article',
table_name => 'wf_article_cases'
);
/*****
* Places
*****/
workflow.add_place(
workflow_key => 'article_wf',
place_key => 'start',
place_name => 'Start place',
sort_order => 1
);
workflow.add_place(
workflow_key => 'article_wf',
place_key => 'to_be_written',
place_name => 'Needs to be written',
sort_order => 2
);
workflow.add_place(
workflow_key => 'article_wf',
place_key => 'to_be_reviewed',
place_name => 'Needs review',
sort_order => 3
);
workflow.add_place(
workflow_key => 'article_wf',
place_key => 'to_be_published',
place_name => 'Ready to go to press',
sort_order => 4
);
workflow.add_place(
workflow_key => 'article_wf',
place_key => 'end',
place_name => 'End place',
sort_order => 5
);
/*****
* Roles
*****/
workflow.add_role(
workflow_key => 'article_wf',
role_key => 'author',
role_name => 'Author',
sort_order => 1
);
workflow.add_role(
workflow_key => 'article_wf',
role_key => 'editor',
role_name => 'Editor',
sort_order => 2
);
/*****
* Transitions
*****/
workflow.add_transition(
workflow_key => 'article_wf',
transition_key => 'specify',
transition_name => 'Describe task and assign author',
role_key => 'editor',
sort_order => 1,
trigger_type => 'user'
);
workflow.add_transition(
workflow_key => 'article_wf',
transition_key => 'write',
transition_name => 'Write article',
role_key => 'author',
sort_order => 2,
trigger_type => 'user'
);
workflow.add_transition(
workflow_key => 'article_wf',
transition_key => 'review',
transition_name => 'Review article',
role_key => 'editor',
sort_order => 3,
trigger_type => 'user'
);
workflow.add_transition(
workflow_key => 'article_wf',
transition_key => 'publish',
transition_name => 'Publish article',
sort_order => 4,
trigger_type => 'automatic'
);
/*****
* Arcs
*****/
workflow.add_arc(
workflow_key => 'article_wf',
from_place_key => 'start',
to_transition_key => 'specify'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_transition_key => 'specify',
to_place_key => 'to_be_written'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_place_key => 'to_be_written',
to_transition_key => 'write'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_transition_key => 'write',
to_place_key => 'to_be_reviewed'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_place_key => 'to_be_reviewed',
to_transition_key => 'review'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_transition_key => 'review',
to_place_key => 'to_be_published',
guard_callback => 'wf_callback.guard_attribute_true',
guard_custom_arg => 'reviewer_ok',
guard_description => 'Reviewer approved article'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_transition_key => 'review',
to_place_key => 'to_be_written',
guard_callback => '#',
guard_description => 'Reviewer did not approve article'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_place_key => 'to_be_published',
to_transition_key => 'publish'
);
workflow.add_arc(
workflow_key => 'article_wf',
from_transition_key => 'publish',
to_place_key => 'end'
);
/*****
* Attributes
*****/
v_attribute_id := workflow.create_attribute(
workflow_key => 'article_wf',
attribute_name => 'reviewer_ok',
datatype => 'boolean',
pretty_name => 'Reviewer Approval',
default_value => 'f'
);
workflow.add_trans_attribute_map(
workflow_key => 'article_wf',
transition_key => 'review',
attribute_name => 'reviewer_ok',
sort_order => 1
);
/*****
* Assignment
*****/
workflow.add_trans_role_assign_map(
workflow_key => 'article_wf',
transition_key => 'specify',
assign_role_key => 'author'
);
end;
/
show errors
/* Context stuff */
insert into wf_context_transition_info (
context_key,
workflow_key,
transition_key,
hold_timeout_callback,
hold_timeout_custom_arg
) values (
'default',
'article_wf',
'specify',
'wf_callback.time_sysdate_plus_x',
1/24
);
commit;
create or replace package wf_article_callback
is
procedure notification(
task_id in number,
custom_arg in varchar2,
party_to in integer,
party_from in integer,
subject in varchar2,
body in varchar2
);
end wf_article_callback;
/
show errors
create or replace package body wf_article_callback
is
procedure notification(
task_id in number,
custom_arg in varchar2,
party_to in integer,
party_from in integer,
subject in varchar2,
body in varchar2
)
is
v_deadline_pretty varchar2(400);
v_object_name varchar2(4000);
v_transition_name wf_transitions.transition_name%TYPE;
v_name varchar2(1000);
v_subject varchar2(100);
v_body varchar2(4000);
v_request_id integer;
begin
select to_char(ta.deadline,'Mon fmDDfm, YYYY HH24:MI:SS'),
acs_object.name(c.object_id),
tr.transition_name
into v_deadline_pretty,
v_object_name,
v_transition_name
from wf_tasks ta, wf_transitions tr, wf_cases c
where ta.task_id = notification.task_id
and c.case_id = ta.case_id
and tr.workflow_key = c.workflow_key
and tr.transition_key = ta.transition_key;
v_subject := 'Assignment: '||v_transition_name||' '||v_object_name;
v_body := 'Dear '||acs_object.name(party_to)||'
'||'
Today, you have been assigned to a task.
'||'
Task : '||v_transition_name||'
Object : '||v_object_name||'
';
if v_deadline_pretty != '' then
v_body := v_body ||'Deadline: '||v_deadline_pretty||'
';
end if;
v_request_id := acs_mail_nt.post_request (
party_from => party_from,
party_to => party_to,
subject => v_subject,
message => v_body
);
end notification;
end wf_article_callback;
/
show errors
update wf_context_transition_info
set notification_callback = 'wf_article_callback.notification'
where workflow_key = 'article_wf'
and context_key = 'default'
and transition_key = 'specify';
commit;
--
-- acs-workflow/sql/sample-article-drop.sql
--
-- Drops the article-authoring workflow.
--
-- @author Kevin Scaldeferri (kevin@theory.caltech.edu)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
begin
workflow.delete_cases(workflow_key => 'article_wf');
end;
/
show errors;
drop table wf_article_cases;
begin
workflow.drop_workflow(workflow_key => 'article_wf');
end;
/
show errors;
This diff is collapsed.
--
-- acs-workflow/sql/sample-expenses-drop.sql
--
-- Drops the expenses workflow.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
begin
workflow.delete_cases(workflow_key => 'expenses_wf');
end;
/
show errors;
drop table wf_expenses_cases;
begin
workflow.drop_workflow(workflow_key => 'expenses_wf');
end;
/
show errors;
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
* Panels callbacks have changed.
*
* Instead of a Tcl callback (sick idea, we knew that all along),
* we now store a list of URLs of templates to include.
*/
/* Drop the old column */
alter table wf_context_transition_info drop column panels_callback_tcl;
/* Add the new table instead */
create table wf_context_task_panels (
context_key varchar2(100) not null
constraint wf_context_panels_context_fk
references wf_contexts(context_key)
on delete cascade,
workflow_key varchar2(100) not null
constraint wf_context_panels_workflow_fk
references wf_workflows(workflow_key)
on delete cascade,
transition_key varchar2(100) not null,
sort_key integer not null,
header varchar2(200) not null,
template_url varchar2(500) not null,
/* table constraints */
constraint wf_context_panels_trans_fk
foreign key (workflow_key, transition_key) references wf_transitions(workflow_key, transition_key)
on delete cascade,
constraint wf_context_panels_pk
primary key (context_key, workflow_key, transition_key, sort_key)
);
create index wf_ctx_panl_workflow_trans_idx on wf_context_task_panels(workflow_key, transition_key);
comment on table wf_context_task_panels is '
Holds information about the panels to be displayed on the task page.
';
/*
* Added a Notification callback.
*
*/
alter table wf_context_transition_info add (
/*
* Notification callback
* Will be called when a notification is sent i.e., when a transition is enabled,
* or assignment changes.
* signature: (task_id in number,
* custom_arg in varchar2,
* party_to in integer,
* party_from in out integer,
* subject in out varchar2,
* body in out varchar2)
*/
notification_callback varchar2(100),
notification_custom_arg varchar2(4000)
);
/*
* Enhanced comment on wf_cases.object_id
*
*/
comment on column wf_cases.object_id is '
A case is itself an acs_object, but moreover, a case will always be about some
other acs_object. E.g. for ticket-tracker, the case_id will refer to an instance of
the ticket-tracker-workflow, while the object_id will refer to the ticket itself.
It is possible to have multiple cases around the same object.
';
/*
* Added unassigned callback
*/
alter table wf_context_transition_info add (
/*
* Unassigned callback
* Will be called whenever a task becomes unassigned
* Signature: (case_id in number, transition_key in varchar2, custom_arg in varchar2)
*/
unassigned_callback varchar2(100),
unassigned_custom_arg varchar2(4000)
);
/*
* Added access privilege
*/
alter table wf_context_transition_info add (
/* name of the privilege we should check before allowing access
* to task information.
*/
access_privilege varchar2(100)
);
/* panels_callback_tcl, notification_callback and unassigned_callback
* affect this view.
*/
create or replace view wf_transition_info as
select t.transition_key,
t.transition_name,
t.workflow_key,
t.sort_order,
t.trigger_type,
t.context_key,
ct.estimated_minutes,
ct.enable_callback,
ct.enable_custom_arg,
ct.fire_callback,
ct.fire_custom_arg,
ct.assignment_callback,
ct.assignment_custom_arg,
ct.time_callback,
ct.time_custom_arg,
ct.deadline_callback,
ct.deadline_custom_arg,
ct.deadline_attribute_name,
ct.hold_timeout_callback,
ct.hold_timeout_custom_arg,
ct.notification_callback,
ct.notification_custom_arg,
ct.unassigned_callback,
ct.unassigned_custom_arg,
ct.access_privilege
from wf_transition_contexts t, wf_context_transition_info ct
where ct.workflow_key (+) = t.workflow_key
and ct.transition_key (+) = t.transition_key
and ct.context_key (+) = t.context_key;
/* Notifications and unassigned affect this */
create or replace view wf_enabled_transitions as
select c.case_id,
t.transition_key,
t.transition_name,
t.workflow_key,
t.sort_order,
t.trigger_type,
t.context_key,
t.enable_callback,
t.enable_custom_arg,
t.fire_callback,
t.fire_custom_arg,
t.assignment_callback,
t.assignment_custom_arg,
t.time_callback,
t.time_custom_arg,
t.deadline_callback,
t.deadline_custom_arg,
t.deadline_attribute_name,
t.hold_timeout_callback,
t.hold_timeout_custom_arg,
t.notification_callback,
t.notification_custom_arg,
t.unassigned_callback,
t.unassigned_custom_arg,
t.estimated_minutes,
t.access_privilege
from wf_transition_info t,
wf_cases c
where t.workflow_key = c.workflow_key
and t.context_key = c.context_key
and c.state = 'active'
and not exists
(select tp.place_key
from wf_transition_places tp
where tp.transition_key = t.transition_key
and tp.workflow_key = t.workflow_key
and tp.direction = 'in'
and not exists
(select tk.token_id
from wf_tokens tk
where tk.place_key = tp.place_key
and tk.case_id = c.case_id
and tk.state = 'free'
)
);
This diff is collapsed.
--
-- acs-workflow/sql/wf-callback-package-body.sql
--
-- Creates the PL/SQL package that provides a small library of reusable
-- workflow callback functions/procedures.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
create or replace package body wf_callback
as
function guard_attribute_true(
case_id in number,
workflow_key in varchar2,
transition_key in varchar2,
place_key in varchar2,
direction in varchar2,
custom_arg in varchar2
) return char
is
begin
return workflow_case.get_attribute_value(
case_id => case_id,
attribute_name => custom_arg
);
end guard_attribute_true;
function time_sysdate_plus_x(
case_id in number,
transition_key in varchar2,
custom_arg in varchar2
) return date
is
begin
return sysdate + to_number(custom_arg);
end time_sysdate_plus_x;
end wf_callback;
/
show errors;
--
-- acs-workflow/sql/wf-callback-package-head.sql
--
-- Creates the PL/SQL package that provides a small library of reusable
-- workflow callback functions/procedures.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
create or replace package wf_callback
as
function guard_attribute_true(
case_id in number,
workflow_key in varchar2,
transition_key in varchar2,
place_key in varchar2,
direction in varchar2,
custom_arg in varchar2
) return char;
function time_sysdate_plus_x(
case_id in number,
transition_key in varchar2,
custom_arg in varchar2
) return date;
end wf_callback;
/
show errors;
--
-- acs-workflow/sql/wf-callback-package.sql
--
-- Creates the PL/SQL package that provides a small library of reusable
-- workflow callback functions/procedures.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
@@wf-callback-package-head
@@wf-callback-package-body
This diff is collapsed.
--
-- acs-workflow/sql/wf-core-drop.sql
--
-- Drops the data model and views for the workflow package.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
/* Drop all cases and all workflows */
begin
for workflow_rec in (select w.workflow_key, t.table_name
from wf_workflows w, acs_object_types t
where t.object_type = w.workflow_key)
loop
workflow.delete_cases(workflow_key => workflow_rec.workflow_key);
execute immediate 'drop table '||workflow_rec.table_name;
workflow.drop_workflow(workflow_key => workflow_rec.workflow_key);
end loop;
end;
/
show errors;
/* Sequences */
drop sequence wf_task_id_seq;
drop sequence wf_token_id_seq;
/* Views */
drop view wf_user_tasks;
drop view wf_enabled_transitions;
drop view wf_transition_places;
drop view wf_role_info;
drop view wf_transition_info;
drop view wf_transition_contexts;
/* Operational level */
drop table wf_attribute_value_audit;
drop table wf_tokens;
drop table wf_task_assignments;
drop table wf_tasks;
drop table wf_case_assignments;
drop table wf_case_deadlines;
drop table wf_cases;
/* Context level */
drop table wf_context_assignments;
drop table wf_context_task_panels;
drop table wf_context_role_info;
drop table wf_context_transition_info;
drop table wf_context_workflow_info;
drop table wf_contexts;
/* Knowledge Level */
drop table wf_transition_role_assign_map;
drop table wf_transition_attribute_map;
drop table wf_arcs;
drop table wf_transitions;
drop table wf_roles;
drop table wf_places;
drop table wf_workflows;
/* acs_object_type */
begin
acs_object_type.drop_type(
object_type => 'workflow',
cascade_p => 't'
);
end;
/
show errors
This diff is collapsed.
--
-- acs-workflow/sql/workflow-case-package-head.sql
--
-- Creates the PL/SQL package that provides the API for interacting
-- with a workflow case.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
create or replace package workflow_case
is
function new (
case_id in number default null,
workflow_key in varchar2,
context_key in varchar2 default null,
object_id in integer,
creation_date in date default sysdate,
creation_user in integer default null,
creation_ip in varchar2 default null
) return integer;
procedure add_manual_assignment (
case_id in number,
role_key in varchar2,
party_id in number
);
procedure remove_manual_assignment (
case_id in number,
role_key in varchar2,
party_id in number
);
procedure clear_manual_assignments (
case_id in number,
role_key in varchar2
);
procedure start_case (
case_id in number,
creation_user in integer default null,
creation_ip in varchar2 default null,
msg in varchar2 default null
);
procedure del (
case_id in number
);
procedure suspend(
case_id in number,
user_id in number default null,
ip_address in varchar2 default null,
msg in varchar2 default null
);
procedure resume(
case_id in number,
user_id in number default null,
ip_address in varchar2 default null,
msg in varchar2 default null
);
procedure cancel(
case_id in number,
user_id in number default null,
ip_address in varchar2 default null,
msg in varchar2 default null
);
procedure fire_message_transition (
task_id in number
);
/* To perform an action on the workflow:
* (numbers in parenthesis is the number of times each function should get called)
*
* 1. begin_task_action (1) (returns journal_id)
* 2. set_attribute_value (0..*)
* 3. clear_manual_assignments (0..1)
* 4. add_manual_assignment (0..*)
* 5. end_task_action (1)
*/
function begin_task_action (
task_id in number,
action in varchar2,
action_ip in varchar2,
user_id in number,
msg in varchar2 default null
) return number;
procedure set_attribute_value (
journal_id in number,
attribute_name in varchar2,
value in varchar2
);
procedure end_task_action (
journal_id in number,
action in varchar2,
task_id in number
);
/* Shortcut, that does both begin and end, when you have no attributes to set or assignments to make */
function task_action (
task_id in number,
action in varchar2,
action_ip in varchar2,
user_id in number,
msg in varchar2 default null
) return number;
function get_attribute_value (
case_id in number,
attribute_name in varchar2
) return varchar2;
procedure add_task_assignment (
task_id in number,
party_id in number,
permanent_p in char default 'f'
);
procedure remove_task_assignment (
task_id in number,
party_id in number,
permanent_p in char default 'f'
);
procedure clear_task_assignments (
task_id in number,
permanent_p in char default 'f'
);
procedure set_case_deadline (
case_id in wf_cases.case_id%TYPE,
transition_key in wf_transitions.transition_key%TYPE,
deadline date
);
procedure remove_case_deadline (
case_id in wf_cases.case_id%TYPE,
transition_key in wf_transitions.transition_key%TYPE
);
-- DRB: I added this function because there appeared to be no way for a
-- client to get the task_id without querying the wf_tasks table directly,
-- breaking the PL/SQL abstraction.
function get_task_id (
case_id in wf_cases.case_id%TYPE,
transition_key in wf_transitions.transition_key%TYPE
) return wf_tasks.task_id%TYPE;
/* DBMS_JOBS */
procedure sweep_timed_transitions;
procedure sweep_hold_timeout;
end workflow_case;
/
show errors;
--
-- acs-workflow/sql/workflow-case-package.sql
--
-- Creates the PL/SQL package that provides the API for interacting
-- with a workflow case.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
@@workflow-case-package-head.sql
@@workflow-case-package-body.sql
This diff is collapsed.
This diff is collapsed.
--
-- acs-workflow/sql/workflow-package-head.sql
--
-- Creates the PL/SQL package that provides the API for defining and dropping
-- workflow cases.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
@@workflow-package-head.sql
@@workflow-package-body.sql
--
-- acs-workflow/sql/acs-workflow-create.sql
--
-- Calls the other SQL files to create the data models and PL/SQL packages.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
/* We create two sample processes */
\i wf-core-create.sql
\i workflow-case-package.sql
\i workflow-package.sql
\i wf-callback-package.sql
-- \i jobs-start.sql
-- \i sample-expenses-create.sql
\i sample-article-create.sql
--
-- acs-workflow/sql/acs-workflow-drop.sql
--
-- Drops the data model and the PL/SQL packages.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
--\i jobs-kill.sql
\i sample-article-drop.sql
\i wf-core-drop.sql
drop function __workflow__simple_p (varchar,integer);
drop table guard_list;
drop table target_place_list;
drop table previous_place_list;
drop sequence workflow_session_id;
drop function sweep_hold_timeout ();
drop function sweep_timed_transitions ();
select drop_package('wf_callback');
select drop_package('workflow');
select drop_package('workflow_case');
This diff is collapsed.
This diff is collapsed.
--
-- acs-workflow/sql/sample-article-drop.sql
--
-- Drops the article-authoring workflow.
--
-- @author Kevin Scaldeferri (kevin@theory.caltech.edu)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
create function inline_0 () returns integer as '
begin
perform workflow__delete_cases(''article_wf'');
return 0;
end;' language 'plpgsql';
drop table wf_article_cases;
select inline_0 ();
drop function inline_0 ();
create function inline_0 () returns integer as '
begin
perform workflow__drop_workflow(''article_wf'');
return 0;
end;' language 'plpgsql';
select inline_0 ();
drop function inline_0 ();
drop function wf_article_callback__notification(integer,varchar,integer,integer,varchar,varchar);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
--
-- acs-workflow/sql/wf-callback-package.sql
--
-- Creates the PL/SQL package that provides a small library of reusable
-- workflow callback functions/procedures.
--
-- @author Lars Pind (lars@pinds.com)
--
-- @creation-date 2000-05-18
--
-- @cvs-id $Id$
--
\i wf-callback-package-head.sql
\i wf-callback-package-body.sql
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
ns_cache create workflow_info -timeout 60
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment