cpee 1.3.158 → 1.3.159
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cpee.gemspec +1 -1
- data/lib/cpee/processtransformation/bpmn2.rb +9 -2
- data/lib/cpee/processtransformation/structures.rb +15 -9
- data/server/instances/1/properties.xml +101 -69
- data/server/instances/10/properties.xml +70 -106
- data/server/instances/11/properties.xml +73 -133
- data/server/instances/12/notifications/8d7f2ae546a742fce3a0a488266ea51d/consumer-secret +1 -0
- data/server/instances/12/notifications/8d7f2ae546a742fce3a0a488266ea51d/producer-secret +1 -0
- data/server/instances/12/notifications/8d7f2ae546a742fce3a0a488266ea51d/subscription.xml +6 -0
- data/server/instances/12/notifications/b0a0abbb8ad6fb81c579c4e97829d681/consumer-secret +1 -0
- data/server/instances/12/notifications/b0a0abbb8ad6fb81c579c4e97829d681/producer-secret +1 -0
- data/server/instances/{1/notifications/d12eff1ac812661c05d7090ce7394cf9 → 12/notifications/b0a0abbb8ad6fb81c579c4e97829d681}/subscription.xml +0 -0
- data/server/instances/12/properties.xml +43 -0
- data/server/instances/2/properties.xml +44 -191
- data/server/instances/3/properties.xml +44 -70
- data/server/instances/4/properties.xml +68 -28
- data/server/instances/5/properties.xml +70 -10
- data/server/instances/6/properties.xml +55 -175
- data/server/instances/7/properties.xml +52 -118
- data/server/instances/8/properties.xml +50 -112
- data/server/instances/9/properties.xml +47 -115
- data/server/resources/properties.init +1 -1
- metadata +106 -105
- data/server/instances/1/notifications/d12eff1ac812661c05d7090ce7394cf9/consumer-secret +0 -1
- data/server/instances/1/notifications/d12eff1ac812661c05d7090ce7394cf9/producer-secret +0 -1
- data/server/instances/11/notifications/e0910b6b5536976209bca471780066f1/consumer-secret +0 -1
- data/server/instances/11/notifications/e0910b6b5536976209bca471780066f1/producer-secret +0 -1
- data/server/instances/11/notifications/e0910b6b5536976209bca471780066f1/subscription.xml +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c839fcbe55d2d855568d6467466d136d756288c
|
4
|
+
data.tar.gz: 74c5767ec1e718a38f440c01005922f54ba90920
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 532002e583957edbb012a7f9e62282680fc1dd59c5c495349762250de952822f96ccd94664ed05f9eab26306a4edd537aed9fc9001a0a1425117049a8b0cab21
|
7
|
+
data.tar.gz: d4bcf178ce517f1df5cbd3f3278976d6c1da7610f74db0084d459cf321eb2a5a160c06896dcba9a8f04e8c88a3108f86f11a5c127ac13b3c09aea00163f2ecac
|
data/cpee.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cpee"
|
3
|
-
s.version = "1.3.
|
3
|
+
s.version = "1.3.159"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.license = "LGPL-3"
|
6
6
|
s.summary = "Preliminary release of cloud process execution engine (cpee). If you just need workflow execution, without a rest/xmpp service exposing it, then use WEEL"
|
@@ -206,9 +206,10 @@ module CPEE
|
|
206
206
|
end
|
207
207
|
end
|
208
208
|
end
|
209
|
+
nic = traces.incoming(node)
|
209
210
|
if node == enode
|
210
211
|
traces.shift_all
|
211
|
-
elsif
|
212
|
+
elsif nic == 1 || branch.is_a?(CPEE::ProcessTransformation::InfiniteLoop)
|
212
213
|
traces.shift_all
|
213
214
|
n = map_node(node)
|
214
215
|
if !(n.nil? || (n.container? && (node.outgoing <=1 || traces.finished?)))
|
@@ -218,6 +219,7 @@ module CPEE
|
|
218
219
|
loops = traces.loops
|
219
220
|
if node.type == :exclusiveGateway || traces.all_loops?
|
220
221
|
### as the first is a decision node, just remove and continue
|
222
|
+
### change to nic
|
221
223
|
if node.incoming == 2
|
222
224
|
node.incoming = 1
|
223
225
|
branch << Loop.new(node.id)
|
@@ -274,7 +276,12 @@ module CPEE
|
|
274
276
|
end
|
275
277
|
endnode.incoming -= 1 unless endnode.nil?
|
276
278
|
end
|
277
|
-
traces
|
279
|
+
# remove all traces that don't start with endnode to account for loops
|
280
|
+
if endnode.nil?
|
281
|
+
traces.empty!
|
282
|
+
else
|
283
|
+
traces.remove_by_endnode(endnode)
|
284
|
+
end
|
278
285
|
### all before is reduced to one incoming arrow
|
279
286
|
### if now there is still more than one incoming we have a loop situation
|
280
287
|
### where the end of a branching statement is also the starting/endpoint
|
@@ -271,6 +271,11 @@ module CPEE
|
|
271
271
|
self.delete(t)
|
272
272
|
end
|
273
273
|
end
|
274
|
+
def remove_by_endnode(enode)
|
275
|
+
self.delete_if do |t|
|
276
|
+
t[0] != enode
|
277
|
+
end
|
278
|
+
end
|
274
279
|
|
275
280
|
def empty!
|
276
281
|
self.delete_if{true}
|
@@ -311,14 +316,13 @@ module CPEE
|
|
311
316
|
end
|
312
317
|
|
313
318
|
# future use
|
314
|
-
def incoming
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
tcount
|
319
|
-
else
|
320
|
-
raise "Wrong Question"
|
319
|
+
def incoming(node)
|
320
|
+
tcount = 1
|
321
|
+
self.each do |t|
|
322
|
+
break if t.length == 1
|
323
|
+
tcount += 1 if t.last == node
|
321
324
|
end
|
325
|
+
tcount
|
322
326
|
end
|
323
327
|
|
324
328
|
def include_in_all?(e)
|
@@ -341,11 +345,12 @@ module CPEE
|
|
341
345
|
|
342
346
|
def add_breaks(context)
|
343
347
|
trueloops = self.find_all{ |t| t.last == t.first }.length
|
348
|
+
tb = Break.new(context,1)
|
344
349
|
if trueloops == self.length
|
345
350
|
self << [self.first_node] ### the blank conditional so that we get a break
|
346
351
|
else
|
347
352
|
self.each do |t|
|
348
|
-
t <<
|
353
|
+
t << tb unless t.last == t.first ### an explicit break
|
349
354
|
end
|
350
355
|
end
|
351
356
|
end
|
@@ -439,7 +444,8 @@ module CPEE
|
|
439
444
|
def find_endnode
|
440
445
|
# supress loops
|
441
446
|
trcs = self.dup
|
442
|
-
#
|
447
|
+
# dangerous TODO
|
448
|
+
trcs.delete_if { |t| t.uniq.length < t.length }
|
443
449
|
|
444
450
|
# find common node (except loops)
|
445
451
|
enode = nil
|
@@ -1,65 +1,90 @@
|
|
1
1
|
<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
|
2
|
-
<info>
|
3
|
-
<state>
|
2
|
+
<info>Enter info here</info>
|
3
|
+
<state>ready</state>
|
4
4
|
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
5
|
-
<positions
|
6
|
-
<a1>after</a1>
|
7
|
-
</positions>
|
5
|
+
<positions/>
|
8
6
|
<dataelements>
|
9
|
-
<
|
7
|
+
<persons>3</persons>
|
8
|
+
<card>Visa_12345</card>
|
9
|
+
<airline>null</airline>
|
10
|
+
<hotels>[]</hotels>
|
11
|
+
<from>Vienna</from>
|
12
|
+
<to>Prague</to>
|
13
|
+
<costs>0</costs>
|
10
14
|
</dataelements>
|
11
15
|
<endpoints>
|
12
|
-
<
|
16
|
+
<bookAir>http://gruppe.wst.univie.ac.at/~mangler/services/airline.php</bookAir>
|
17
|
+
<bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
|
18
|
+
<approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
|
13
19
|
</endpoints>
|
14
|
-
<dsl>
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
<dsl>call :a1, :bookAir, { :method => "post", :parameters => { :from => data.from, :to => data.to, :persons => data.persons } }, <<-end
|
21
|
+
data.airline = result.value('id')
|
22
|
+
data.costs += result.value('costs').to_f
|
23
|
+
status.update 1, 'Hotel'
|
24
|
+
end
|
25
|
+
parallel do
|
26
|
+
loop pre_test{data.persons > 0} do
|
27
|
+
parallel_branch data.persons do |p|
|
28
|
+
call :a2, :bookHotel, { :method => "post", :parameters => { :to => data.to } }, <<-end
|
29
|
+
data.hotels << result.value('id')
|
30
|
+
data.costs += result.value('costs').to_f
|
31
|
+
end
|
32
|
+
end
|
33
|
+
manipulate :a3, <<-end
|
34
|
+
data.persons -= 1
|
35
|
+
end
|
20
36
|
end
|
21
37
|
end
|
22
|
-
|
23
|
-
data.
|
38
|
+
choose do
|
39
|
+
alternative data.costs > 700 do
|
40
|
+
call :a4, :approve, { :method => "post", :parameters => { :costs => data.costs } }
|
41
|
+
end
|
24
42
|
end
|
25
43
|
</dsl>
|
26
44
|
<dslx>
|
27
45
|
<description xmlns="http://cpee.org/ns/description/1.0">
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
<
|
32
|
-
<
|
33
|
-
|
34
|
-
|
46
|
+
<call id="a1" endpoint="bookAir">
|
47
|
+
<parameters>
|
48
|
+
<method>post</method>
|
49
|
+
<parameters>
|
50
|
+
<from>data.from</from>
|
51
|
+
<to>data.to</to>
|
52
|
+
<persons>data.persons</persons>
|
53
|
+
</parameters>
|
54
|
+
</parameters>
|
55
|
+
<manipulate output="result"> data.airline = result.value('id')
|
56
|
+
data.costs += result.value('costs').to_f
|
57
|
+
status.update 1, 'Hotel'</manipulate>
|
58
|
+
</call>
|
59
|
+
<parallel>
|
60
|
+
<loop pre_test="data.persons > 0">
|
61
|
+
<parallel_branch pass="data.persons" local="p">
|
62
|
+
<call id="a2" endpoint="bookHotel">
|
35
63
|
<parameters>
|
36
|
-
<
|
64
|
+
<method>post</method>
|
65
|
+
<parameters>
|
66
|
+
<to>data.to</to>
|
67
|
+
</parameters>
|
37
68
|
</parameters>
|
38
|
-
|
39
|
-
</
|
40
|
-
|
41
|
-
|
42
|
-
<
|
69
|
+
<manipulate output="result"> data.hotels << result.value('id')
|
70
|
+
data.costs += result.value('costs').to_f</manipulate>
|
71
|
+
</call>
|
72
|
+
</parallel_branch>
|
73
|
+
<manipulate id="a3"> data.persons -= 1</manipulate>
|
74
|
+
</loop>
|
75
|
+
</parallel>
|
76
|
+
<choose>
|
77
|
+
<alternative condition="data.costs > 700">
|
78
|
+
<call id="a4" endpoint="approve">
|
43
79
|
<parameters>
|
44
|
-
<label/>
|
45
80
|
<method>post</method>
|
46
81
|
<parameters>
|
47
|
-
<
|
82
|
+
<costs>data.costs</costs>
|
48
83
|
</parameters>
|
49
84
|
</parameters>
|
50
85
|
</call>
|
51
|
-
</
|
52
|
-
</
|
53
|
-
<call id="a2" endpoint="timeout">
|
54
|
-
<parameters>
|
55
|
-
<label/>
|
56
|
-
<method>post</method>
|
57
|
-
<parameters>
|
58
|
-
<timeout>b</timeout>
|
59
|
-
</parameters>
|
60
|
-
</parameters>
|
61
|
-
<manipulate>data.x += "a2,"</manipulate>
|
62
|
-
</call>
|
86
|
+
</alternative>
|
87
|
+
</choose>
|
63
88
|
</description>
|
64
89
|
</dslx>
|
65
90
|
<status>
|
@@ -68,41 +93,48 @@ end
|
|
68
93
|
</status>
|
69
94
|
<description>
|
70
95
|
<description xmlns="http://cpee.org/ns/description/1.0">
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
<
|
75
|
-
<
|
76
|
-
|
77
|
-
|
96
|
+
<call id="a1" endpoint="bookAir">
|
97
|
+
<parameters>
|
98
|
+
<method>post</method>
|
99
|
+
<parameters>
|
100
|
+
<from>data.from</from>
|
101
|
+
<to>data.to</to>
|
102
|
+
<persons>data.persons</persons>
|
103
|
+
</parameters>
|
104
|
+
</parameters>
|
105
|
+
<manipulate output="result"> data.airline = result.value('id')
|
106
|
+
data.costs += result.value('costs').to_f
|
107
|
+
status.update 1, 'Hotel'</manipulate>
|
108
|
+
</call>
|
109
|
+
<parallel>
|
110
|
+
<loop pre_test="data.persons > 0">
|
111
|
+
<parallel_branch pass="data.persons" local="p">
|
112
|
+
<call id="a2" endpoint="bookHotel">
|
78
113
|
<parameters>
|
79
|
-
<
|
114
|
+
<method>post</method>
|
115
|
+
<parameters>
|
116
|
+
<to>data.to</to>
|
117
|
+
</parameters>
|
80
118
|
</parameters>
|
81
|
-
|
82
|
-
</
|
83
|
-
|
84
|
-
|
85
|
-
<
|
119
|
+
<manipulate output="result"> data.hotels << result.value('id')
|
120
|
+
data.costs += result.value('costs').to_f</manipulate>
|
121
|
+
</call>
|
122
|
+
</parallel_branch>
|
123
|
+
<manipulate id="a3"> data.persons -= 1</manipulate>
|
124
|
+
</loop>
|
125
|
+
</parallel>
|
126
|
+
<choose>
|
127
|
+
<alternative condition="data.costs > 700">
|
128
|
+
<call id="a4" endpoint="approve">
|
86
129
|
<parameters>
|
87
|
-
<label/>
|
88
130
|
<method>post</method>
|
89
131
|
<parameters>
|
90
|
-
<
|
132
|
+
<costs>data.costs</costs>
|
91
133
|
</parameters>
|
92
134
|
</parameters>
|
93
135
|
</call>
|
94
|
-
</
|
95
|
-
</
|
96
|
-
<call id="a2" endpoint="timeout">
|
97
|
-
<parameters>
|
98
|
-
<label/>
|
99
|
-
<method>post</method>
|
100
|
-
<parameters>
|
101
|
-
<timeout>b</timeout>
|
102
|
-
</parameters>
|
103
|
-
</parameters>
|
104
|
-
<manipulate>data.x += "a2,"</manipulate>
|
105
|
-
</call>
|
136
|
+
</alternative>
|
137
|
+
</choose>
|
106
138
|
</description>
|
107
139
|
</description>
|
108
140
|
<transformation>
|
@@ -1,90 +1,62 @@
|
|
1
1
|
<properties xmlns="http://riddl.org/ns/common-patterns/properties/1.0">
|
2
2
|
<info>Enter info here</info>
|
3
|
-
<state>
|
3
|
+
<state>ready</state>
|
4
4
|
<handlerwrapper>DefaultHandlerWrapper</handlerwrapper>
|
5
|
-
<positions
|
5
|
+
<positions>
|
6
|
+
<a1>after</a1>
|
7
|
+
</positions>
|
6
8
|
<dataelements>
|
7
|
-
<
|
8
|
-
<card>Visa_12345</card>
|
9
|
-
<airline>Lufthansa</airline>
|
10
|
-
<hotels>["Rathaus","Rathaus","Ibis"]</hotels>
|
11
|
-
<from>Vienna</from>
|
12
|
-
<to>Prague</to>
|
13
|
-
<costs>940.0</costs>
|
9
|
+
<x/>
|
14
10
|
</dataelements>
|
15
11
|
<endpoints>
|
16
|
-
<
|
17
|
-
<bookHotel>http://gruppe.wst.univie.ac.at/~mangler/services/hotel.php</bookHotel>
|
18
|
-
<approve>http://gruppe.wst.univie.ac.at/~mangler/services/approval.php</approve>
|
12
|
+
<timeout>http://gruppe.wst.univie.ac.at/~mangler/services/timeout.php</timeout>
|
19
13
|
</endpoints>
|
20
|
-
<dsl>call :a1, :
|
21
|
-
data.
|
22
|
-
data.costs += result.value('costs').to_f
|
23
|
-
status.update 1, 'Hotel'
|
14
|
+
<dsl>call :a1, :timeout, { :method => "post", :parameters => { :timeout => 2 } }, <<-end
|
15
|
+
data.x += "a1,"
|
24
16
|
end
|
25
|
-
|
26
|
-
|
27
|
-
parallel_branch data.persons do |p|
|
28
|
-
call :a2, :bookHotel, { :method => :post, :parameters => {:to => data.to} }, <<-end
|
29
|
-
data.hotels << result.value('id')
|
30
|
-
data.costs += result.value('costs').to_f
|
31
|
-
end
|
32
|
-
end
|
33
|
-
manipulate :a3, <<-end
|
34
|
-
data.persons -= 1
|
35
|
-
end
|
36
|
-
end
|
17
|
+
call :a2, :timeout, { :method => "post", :parameters => { :timeout => 4 } }, <<-end
|
18
|
+
data.x += "a2,"
|
37
19
|
end
|
38
|
-
|
39
|
-
|
40
|
-
call :a4, :approve, { :method => :post, :parameters => {:costs => data.costs} }
|
41
|
-
end
|
20
|
+
call :a3, :timeout, { :method => "post", :parameters => { :timeout => 4 } }, <<-end
|
21
|
+
data.x += "a3,"
|
42
22
|
end
|
43
23
|
</dsl>
|
44
24
|
<dslx>
|
45
25
|
<description xmlns="http://cpee.org/ns/description/1.0">
|
46
|
-
|
26
|
+
<!--{{{-->
|
27
|
+
<call id="a1" endpoint="timeout">
|
47
28
|
<parameters>
|
48
|
-
|
29
|
+
<!--{{{-->
|
30
|
+
<method>post</method>
|
49
31
|
<parameters>
|
50
|
-
<
|
51
|
-
<to>data.to</to>
|
52
|
-
<persons>data.persons</persons>
|
32
|
+
<timeout>2</timeout>
|
53
33
|
</parameters>
|
54
34
|
</parameters>
|
55
|
-
|
56
|
-
|
57
|
-
|
35
|
+
<!--}}}-->
|
36
|
+
<manipulate output="result"> data.x += "a1,"</manipulate>
|
37
|
+
</call>
|
38
|
+
<call id="a2" endpoint="timeout">
|
39
|
+
<parameters>
|
40
|
+
<!--{{{-->
|
41
|
+
<method>post</method>
|
42
|
+
<parameters>
|
43
|
+
<timeout>4</timeout>
|
44
|
+
</parameters>
|
45
|
+
</parameters>
|
46
|
+
<!--}}}-->
|
47
|
+
<manipulate output="result"> data.x += "a2,"</manipulate>
|
48
|
+
</call>
|
49
|
+
<call id="a3" endpoint="timeout">
|
50
|
+
<parameters>
|
51
|
+
<!--{{{-->
|
52
|
+
<method>post</method>
|
53
|
+
<parameters>
|
54
|
+
<timeout>4</timeout>
|
55
|
+
</parameters>
|
56
|
+
</parameters>
|
57
|
+
<!--}}}-->
|
58
|
+
<manipulate output="result"> data.x += "a3,"</manipulate>
|
58
59
|
</call>
|
59
|
-
<parallel>
|
60
|
-
<loop pre_test="data.persons > 0">
|
61
|
-
<parallel_branch pass="data.persons" local="p">
|
62
|
-
<call id="a2" endpoint="bookHotel">
|
63
|
-
<parameters>
|
64
|
-
<method>:post</method>
|
65
|
-
<parameters>
|
66
|
-
<to>data.to</to>
|
67
|
-
</parameters>
|
68
|
-
</parameters>
|
69
|
-
<manipulate output="result"> data.hotels << result.value('id')
|
70
|
-
data.costs += result.value('costs').to_f</manipulate>
|
71
|
-
</call>
|
72
|
-
</parallel_branch>
|
73
|
-
<manipulate id="a3"> data.persons -= 1</manipulate>
|
74
|
-
</loop>
|
75
|
-
</parallel>
|
76
|
-
<choose>
|
77
|
-
<alternative condition="data.costs > 700">
|
78
|
-
<call id="a4" endpoint="approve">
|
79
|
-
<parameters>
|
80
|
-
<method>:post</method>
|
81
|
-
<parameters>
|
82
|
-
<costs>data.costs</costs>
|
83
|
-
</parameters>
|
84
|
-
</parameters>
|
85
|
-
</call>
|
86
|
-
</alternative>
|
87
|
-
</choose>
|
88
60
|
</description>
|
89
61
|
</dslx>
|
90
62
|
<status>
|
@@ -93,48 +65,40 @@ end
|
|
93
65
|
</status>
|
94
66
|
<description>
|
95
67
|
<description xmlns="http://cpee.org/ns/description/1.0">
|
96
|
-
|
68
|
+
<!--{{{-->
|
69
|
+
<call id="a1" endpoint="timeout">
|
70
|
+
<parameters>
|
71
|
+
<!--{{{-->
|
72
|
+
<method>post</method>
|
73
|
+
<parameters>
|
74
|
+
<timeout>2</timeout>
|
75
|
+
</parameters>
|
76
|
+
</parameters>
|
77
|
+
<!--}}}-->
|
78
|
+
<manipulate output="result"> data.x += "a1,"</manipulate>
|
79
|
+
</call>
|
80
|
+
<call id="a2" endpoint="timeout">
|
81
|
+
<parameters>
|
82
|
+
<!--{{{-->
|
83
|
+
<method>post</method>
|
84
|
+
<parameters>
|
85
|
+
<timeout>4</timeout>
|
86
|
+
</parameters>
|
87
|
+
</parameters>
|
88
|
+
<!--}}}-->
|
89
|
+
<manipulate output="result"> data.x += "a2,"</manipulate>
|
90
|
+
</call>
|
91
|
+
<call id="a3" endpoint="timeout">
|
97
92
|
<parameters>
|
98
|
-
|
93
|
+
<!--{{{-->
|
94
|
+
<method>post</method>
|
99
95
|
<parameters>
|
100
|
-
<
|
101
|
-
<to>data.to</to>
|
102
|
-
<persons>data.persons</persons>
|
96
|
+
<timeout>4</timeout>
|
103
97
|
</parameters>
|
104
98
|
</parameters>
|
105
|
-
|
106
|
-
|
107
|
-
status.update 1, 'Hotel'</manipulate>
|
99
|
+
<!--}}}-->
|
100
|
+
<manipulate output="result"> data.x += "a3,"</manipulate>
|
108
101
|
</call>
|
109
|
-
<parallel>
|
110
|
-
<loop pre_test="data.persons > 0">
|
111
|
-
<parallel_branch pass="data.persons" local="p">
|
112
|
-
<call id="a2" endpoint="bookHotel">
|
113
|
-
<parameters>
|
114
|
-
<method>:post</method>
|
115
|
-
<parameters>
|
116
|
-
<to>data.to</to>
|
117
|
-
</parameters>
|
118
|
-
</parameters>
|
119
|
-
<manipulate output="result"> data.hotels << result.value('id')
|
120
|
-
data.costs += result.value('costs').to_f</manipulate>
|
121
|
-
</call>
|
122
|
-
</parallel_branch>
|
123
|
-
<manipulate id="a3"> data.persons -= 1</manipulate>
|
124
|
-
</loop>
|
125
|
-
</parallel>
|
126
|
-
<choose>
|
127
|
-
<alternative condition="data.costs > 700">
|
128
|
-
<call id="a4" endpoint="approve">
|
129
|
-
<parameters>
|
130
|
-
<method>:post</method>
|
131
|
-
<parameters>
|
132
|
-
<costs>data.costs</costs>
|
133
|
-
</parameters>
|
134
|
-
</parameters>
|
135
|
-
</call>
|
136
|
-
</alternative>
|
137
|
-
</choose>
|
138
102
|
</description>
|
139
103
|
</description>
|
140
104
|
<transformation>
|