summaryrefslogtreecommitdiff
path: root/src/main/resources/boot/SC/SetWorkflow.xml
blob: 1b4fdd2789152d43c6028d8901c50d0fd5309e70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="UTF-8"?>
<cristalscript>
	<output name="errors" type="com.c2kernel.scripting.ErrorInfo"/>
	<script language="javascript" name="SetWorkflow"><![CDATA[

		importClass(Packages.com.c2kernel.lookup.DomainPath);

		// Fetch the requested name from the outcome field
		var wfDefName = job.getOutcome().getField("WorkflowDefinitionName");
		var wfDefVersion = job.getOutcome().getField("WorkflowDefinitionVersion");
		// Look up the description
		var root = new DomainPath("/desc/ActivityDesc");
		var wfItem;
		try {
			var wfPath = root.find(wfDefName);
			wfItem = agent.getItem(wfPath);
		} catch (e) { 
			throw wfDefName+" is not a valid item"; 
		}

		// Make sure it has the right properties to be a composite activity desc
		var itemType = wfItem.getProperty("Type");
		var complex = wfItem.getProperty("Complexity");
		if (!itemType.equals("ActivityDesc"))
			throw wfDefName+" is not an activity description";
		if (!complex.equals("Composite"))
			throw wfDefName+" is not a composite activity description";
			
		// Check that the named version exists
		try {
			var view = wfItem.getObject("/ViewPoint/CompositeActivityDef/"+wfDefVersion);
		} catch (e) {
			throw wfDefName + " does not contain a version "+wfDefVersion;
		}

		// Fetch the 'Workflow' collection
		var coll = item.getObject("/Collection/Workflow");
		if (coll.size() > 0) { // if there's already a member, remove it
			var member = coll.getMembers().list.get(0);
			coll.removeMember(member.getID());
		}
		// add the new member
		var cm = coll.addMember(wfItem.getSystemKey());
		cm.getProperties().put("Version", wfDefVersion);
		// save it back to the item
		var params = new Array(1);
		params[0] = agent.marshall(coll);
		agent.execute(item, "AddC2KObject", params);

		]]></script>
</cristalscript>