►
From YouTube: Elsa Workflows Community Meeting 14 ( 2022-06-21)
Description
Meeting 14
Topics
- Elsa 3 designer update
- "dependency properties" on activities in a flowchart activity to control things like "Wait Any" and "Wait All" when merging execution.
A
All
right
so
yeah,
as
we
just
discussed,
we've
been
working
on
the
designer
mohammed.
You
mentioned
as
your
data
fabric
as
a
tool
to
look
to
for
the
designer
for
ls3.
B
A
A
We
changed
many
things.
I
will
actually
okay.
You
will
see
as
I
go
through
the
update
in
a
second
that
you
were
referring
to.
Is
that
done?
That's
what
hp
requested
very
cool
and.
A
Doing
pretty
well
having
a
lot
of
fun
with
the
lc3
designer
of
course.
Last
week
we
discussed
some
of
the
changes.
We
specifically
talked
about:
transforming
a
flowchart
style
workflow
into
a
nested
hierarchy
structure
and
then
mohammed
came
with
the
tip
of
azure
data
fabric,
which
I
would
like
to
show
in
a
in
a
couple
of
minutes,
and
maybe
we
can
talk
about
that.
So,
as
you
can
tell
already,
my
mind's
been
full
with
the
also
3
designer
and
it's
been.
A
A
It's
been
there
for
a
couple
of
weeks
yeah,
but
this
is
not
the
interesting
part,
the
interesting
part
yeah.
Let
me
walk
you
through
the
design
and
changes
step
by
step,
and
so
we
will
start
with
a
new
canvas
and,
as
you
recall
last
week,
we
talked
about
activities
that
can
contain
other
activities
like
the
eff
activity
right.
D
A
Before
they,
this
change
the
way
it
would
work,
you
would
see
an
if
activity
with
two
outcomes
and
then
you
can
connect
to
the
next
activity,
use
it
by
connecting
these
these
lines.
So
I
would
look
like
this.
Of
course,
the
effectivity
has
changed
significantly
and
we'll
also
talk
about
ways
where
you
can
still
have
the
separate
line
so
where
you
have
a
decision
activity
or
an
effectivity
with
two
lines.
In
fact,
let
me
maybe
open
windows
workflow
foundation
activities.
A
So
what
I
wanted
to
explain
is
that,
before
this
design
exchange,
what
you
would
see
is
a
if
activity
with
two
outcomes
like
then
and
and
else
and
then
you
can
connect
whatever
else
you
want
to
to
execute
right,
but
a
defaulting
change
with
lc3
is
that
if
you
look
at
the,
if
else,
activity-
or
I
should
say
the
effectivity
as
its
names,
it
has
a
10
property
and
an
else
property.
It
can
contain
a
single
activity
in
a
sequence
of
activity
or
an
array
of
activities.
A
D
A
A
way
to
transpose
or
transform
a
network
of
activities
into
a
container
activity
which
itself
would
be
a
nested
flowchart
a
little
bit
complicated.
It
worked.
I
actually
have
another
branch
where
it
does
work,
but
yeah
based
on
some
vertical
discussions
I
had
with
muhammad,
I
realized.
Maybe
maybe
we
should
just
update
the
designers
and
visually,
create
the
workflows
as
it's
also
stored
structurally.
So
with.
A
So
I
need
to
sort
that
out
before
release,
but
for
now
it's
also
called
a
port
and
what
you
can
do
you
can
actually
drill
into
it
and
then
design
a
nested
workflow.
If
you
will
and
then
on
the
top,
you
will
see
the
path,
and
this
is
based
on
what
we
have
in
azure
data
fabric.
I
believe
it's
called.
I.
A
A
very
very
nice
tip
from
mohammed
to
look
into
this
because
it
seems
to
me
it's
it's
heavily
inspired
on
windows,
workflow
foundation,
but
simplified.
So
let
me
open
the
studio.
Maybe
you'll
recognize
it
if
you've
used
anything
similar
to
workflow
foundation,
all
right,
so
let
me
create
a
new
pipeline
collapse,
this
tool
panel.
So
here
we
have
an
empty
canvas
and
let
me
just
start
with
the
with
one
of
these.
So
let's
say
we
have
a
it's
a
condition.
A
So,
as
you
can
see,
this
is
an
activity
and
it
has
a
true
and
a
false
property,
and
then
you
can
go
in
and
actually
create
the
workflow
for
for
this
for
the
true
activities.
So
what
this
means
that,
if
the
condition
evaluates
to
true,
then
whatever
workflow
you
create
here
will
be
executed,
then
you
can
go
back
and
do
the
same
for
false.
So
it's
as
you
can
see,
it's
heavily
inspired
on
that.
A
So
what
I
would
like
to
do
now
is
give
a
an
actual
demo,
that
with
a
workflow
that
actually
works,
so
let's
go
back
to
the
root
view,
view
or
the
root
of
the
hierarchy,
and
then
here
we'll
say
we'll
write
something
to
the
console
called
start
and
I'm
going
to
remove
this
one
and
replace
with
848.
So
we
can
see
what
it
takes
to
loop
over
a
set
of
items
and
then
print
them
to
the
console.
So
here
we
will
configure
this
one
with
little
array
and
to
access
its
current
item
as
it
iterates.
A
You
need
to
capture
the
output,
so
the
current
value
will
be
stored
in
whatever
output
target.
We
specify
here
right
now,
there's
only
one
such
type,
which
is
workflow
variables,
but
we
might
have
future
possibilities
to
capture
the
output
or
maybe
even
directly
connected
to
another
activity
or
have
another
activity
receive
the
output
as
it
executes.
I
don't
know
yet,
but
this
is
for
now
it's
just
variable.
So
let's
create
a
variable
called
current
python
of
type
string.
Let's
connect
these
two
and
then
in
the
for
each
body.
A
We
can
specify
what
the
logic
is
supposed
to
be
for
each
iteration.
So
the
most
simple
thing,
of
course,
to
do
is
just
write.
The
current
item
to
be
like
this.
So
it's
the
current
item.
So
this
is
the
variable
I
declared
on
the
workflow.
So
that's
this
guy
and
of
course,
because
this
is
javascript,
we
can
use
string
interpolation.
So
we
could
say
something
like
this
just
to
make
it
a
little
bit
more
interesting.
A
Of
course
you
could
do
other
things
right
now,
it's
a
single
activity,
but
you
could
also
do
things
like
set
a
delay,
so
it
waits
for
let's
say
a
second
for
each
iteration.
Alright.
So
as
muhammad
also
discovered
there's
a
bug-
and
in
here
you
see
it
on
display
they're
supposed
to
be
a
navigator,
but
there's
a
little
bug
that
doesn't
update
it
correctly.
A
A
If
and
let's
say
that
if
the
current
item
is
item
2,
then
we
I
don't
know,
maybe
we
request
that
the
user
grants
permission
to
continue
as
a
silly
example,
let's
see
what
that
looks
like
so,
I
would
say
if
parent
item
equals
item
two.
So
if
this
evaluates
to
true,
then
we
want
to
do
something
in
the
in
the
then
outcome.
A
So
here
we
would
say
we
would
instruct
the
user,
basically
by
saying
please
approve
and
we'll
use
just
because
we
don't
have
too
many
activities
as
of
yet,
but
we
can
just
say,
let's
request
that
the
user
approves
by
sending
some
http
request
to
some
endpoint,
so
we
can
say
the
proof,
for
example,
and
when
it's
approved
we
say
thanks
whatever
right
so.
D
A
This
is
not
updating,
I'm
gonna
refresh
just
so
so
you
get
a
picture
for
what
it's
gonna
look
like
visually,
so
this
is
a
way
to
navigate
back
to
the
upper
layers
of
the
of
the
workflow.
So
here
we're
in
the
deepest
layer.
We
can
go
back
one
level
up
here.
We
see
the
body
of
the
four
each.
So
if
item
equals,
current
item
equals
item
two,
we
execute
this
nest
activity
and.
B
A
Way
right
now,
you
see
flow
chart
because
the
type
of
activity
is
actually
a
flowchart.
This
thing
is
a
flowchart.
The
canvas
basically
represents
the
flowchart,
it's
an
activity
and
granted.
This
is
not
very
descriptive.
This
doesn't
mean
anything
to
a
user
that
looks
at
this,
so
we
need
a
way
to
allow
the
user
to
provide
some
description
or
display
name
also
as
a
future
update.
What
I
would
like
for
the
user
to
be
able
to
do
is
instead
of
always
defaulting
to
creating
a
workflow.
A
You
should
be
able
to
just
add
or
assign
that
activity
to
this
property,
but
this
requires
some
more
enhancements
to
the
designer
so
that
you
can
actually
maybe
drag
and
drop
something
into
it
or
where
you
can
click
on
the
plus
icon
and
it
shows
a
drop
down
list
with
available
activities
like
a
drop
down,
picker
or
even
drag
and
drop
something
into
it.
But
those
details
we
need
to
figure
out
still
at
the
very
least
structurally
that
now
becomes
possible.
A
But
for
the
time
being
it
will
be
a
flowchart,
and
I
want
to
be
able
to
highlight
the
flowchart
so
that
you
can
edit
its
properties
on
the
right
hand,
side
and
give
it
a
custom
name.
That
already
should
help
a
lot.
But
anyway,
let's
let's
go
back
to
the
workflow
at
hand.
So
this
is
now
done
and
then
here
we
write
the
current
item
here
we
have
a
delay.
So,
let's
see
if
this,
what
this
does
for
now
and
let's
also
mark
the
end
of
the
workflow
all.
D
A
So
let's
publish
this
and
take
the
definition
id
and
then
we
can
invoke
this
workflow
from
postman.
So
first
let
me
clean
the
console
out
or
the
console
contents,
so
we
can
see
what
happens
so
now
I
executed
the
workflow.
We
see
that
start
was
printed
bunch
of
current
items
and
then
done
so.
This
doesn't
do
exactly
what
I
intended
for
for
it
to
do
so
it
could
be
a
bug,
but
let's
see
if
we
can
figure
this
out.
First
of
all,
the
current
item
should
actually
display
the
current
item
right.
A
So,
let's
see
what's
going
on
there
so
for
each
activity
I
forgot
to
assign
the
its
current
value
to
the
current
item
variable
so
that
variable
remained
empty.
So
that's
one
issue:
let's
see
what
happens
if
we
try
again,
but
every
second
for
the
delay.
We
see
the
current
item,
but
still
it's
not
displaying
the
current
text
this
I
actually
know
this
is
a
bug
which
has
to
do
with
the
delay
activity
and
the
fact
that
the
variable
is
not
being
persisted
by
default,
so
by
default.
A
None
of
the
stuff
is
persisted
into
the
database,
and
this
is
to
prevent
the
issues
that
we
have
with
elsa
too,
when
you,
for
example,
use
objects
that
aren't
serializable,
and
then
you
have
to
do
all
sorts
of
stuff
to
prevent
it
from
being
serialized
and
in
elsewhere
it's
the
other
way
around.
If
you
want
something
to
persist,
you
need
to
be
explicit
about
that.
So
here,
let's
use
memory
for
now
to
to
store
the
variable.
A
B
A
This
looks
better
and
now
we
also
see
because
item
two
is
about
to
be
displayed,
but
we
we
have
this
if
activity,
which
included
a
blocking
50,
which
is
the
hp
endpoint.
So
let's,
let's
see
if
we
can
resume
this
and
I
think
the
url
was
approved
nope,
no,
that's
not
it
or
it
was
this
thing,
but
there's
some
bug
somewhere,
where
it
doesn't
currently
doesn't
store
this
correctly.
So,
let's
let
me
see
if
I
can
make
it
work,
so
I'm
gonna
change
this
to
something
else.
A
Of
course,
I
also
have
to
restart
the
workflow,
because
the
workflow
instance
doesn't
take
into
effect
the
any
change
I
make
here
so
delete
this
guy
here
and
try
again
nope
doesn't
want
to
work.
I
need
to
look
into
this
issue.
Sorry
about
that.
Of
course,
you'll
you'll
believe
me
when
I
tell
you
that
it
worked
before
the
demo.
C
A
Oh,
this
is
bound
to
the
workflow
instance,
because
it's
not
used
as
a
starting
activity,
so
it
would
only
work
when
a
workflow
instance
is
actually
blocked
on
this
this
activity
and
to
be
more
specific,
if
we
look
at
the
workflow
bookmarks,
we
see
three
of
them
because
I
started
three
instances
of
it.
So
if
I
was
able
to
successfully
resume
the
workflow,
is
this
request
made
to
approve
one
or
a
proof
would
execute
all
three
bookmarks?
A
Well,
not
all
three,
because
one
of
them
is
listening
for
or
two
of
them
are
listening
to
a
proof
one,
and
this
one
is
listening
just
for
the
approved
path.
So
if
this
one
succeeded,
both
of
them
would
execute.
Of
course,
okay
in
in
real
world
world
scenarios,
probably
what
you
want
is
to
invoke
one
wordplaces
or
trigger
one
of
them,
and
for
that
you
need
to
rely
on
correlation,
but
we
did
not
specify
any
correlation
id
and
when
you
do
correlate
your
workload
instance
with
some
identifier.
A
A
Well,
it's
just
not
implemented
yet
there's
no
signaling.
Yet
you
know.
D
A
Three,
but
probably
it
will
be,
it
will
work
in
a
similar
way
where,
if
you
have,
you
always
have
to
work,
for
instance,
to
you
at
your
disposal
to
invoke
a
ver.
A
specific
instance
and
also
correlation
is
supported,
and
these
are
just
two
bits
of
information
you
need,
or
you
need
one
of
them
in
order
to
be
able
to
target
a
specific
workflow
instance.
But
the
point
of
the
engine
is:
is
that
you,
you
should
be
able
to
extend
on
it?
You
can,
of
course,
also
create
custom
tables
and
make
custom
associations.
A
D
A
Which
we
don't
have
in
outside
too
not
completely
anyway,
is
the
event
they
didn't
add
it
here,
but
there's
actually
let
me
let
me
see
if
I
can
add
it.
A
Yeah
you're
right,
thank
you
yeah,
so
this
one
is
what
I
was
looking
for.
So
this
is
an
event
and
with
the
event,
it
allows
your
application
to
just
publish
an
event,
and
then
it
will
trigger
a
workflow,
a
new
work,
for
instance,
or
resume
an
existing
word,
for
instance,
and
it
has
just
a
simple
thing
called
an
event
name.
It
could
be
custom
event.
A
So
let's
switch
this
out
so
when
this
executes
it
will
block
workflow
execution
until
it
receives
appreciation,
event
called
custom
event,
and
let's
see
if
this
works
so
first
I'm
gonna
start
a
new
instance
all
right.
So
now
we
have
an
instance
blocked
on
the
event
name
called
custom
event
and
to
resume
this
work.
For
instance,
there
is
an
api
here
called
trigger
where
you
specify
the
event
name.
So
in
this
case
custom
event,
and
then
this
is
just
an
action
on
this
resource
called
trigger.
So
this
is
part
of
the
route
body.
A
I
think
at
some
point
will
allow
you
to
provide
input,
custom
input
that
your
workflow
can
then
access
and,
let's
see
what
happens.
If
I
do,
this,
okay
looks
like
it
did
something
all
right
and
then
so
there
seems
to
be
a
bug
in
the
xp
endpoint.
But
this
activity
allowed
me
to
resume
the
workflow
instance
and,
as
you
can
see,
then
it
goes
to
item
2
and
3
and
ultimately
done
awesome.
A
So
the
uniqueness
is
not
imposed
at
this
point,
and
maybe
I
don't
know
actually
if
it
makes
sense
for
the
correlation
id
to
be
unique
per
workflow
instance
or
if
it
should
be
unique
per
workflow
definition.
So
maybe
you
should
be
able
to
have
multiple
instances
of
a
given
workflow
definition
and
then
within
that
set
only
one
of
them
can
have
the
same
correlation
id.
It
depends
on
your
scenario.
A
Some
users
want
it
to
be
unique
and
others
have
scenarios
where
they
want
to
use
the
same
correlation
d
across
multiple
instances
of
the
same
word,
for
definition
as
well
as
others.
I
think
it
should
be.
It
should
not
be
restricted.
I
think
if
you
want
to
ensure
that
only
one
instance
of
a
given
correlation
that
he
executes
at
any
given
time
of
a
given
word
for
definition,
we
should
try
and
find
a
different
way
to
to
achieve
that.
But
at
this
moment
it's
unrestricted
and
I-
and
it
probably
will
be
that
way.
C
Okay,
yeah.
I
was
looking
into
that
because
we
are
using
that
basically
for
a
messaging
process
where
there
is
a
conversation
id
basically
and
I
wanted
to
correlate
all
the
mess
or
all
the
processes
that
handled
messages
within
that
conversation.
Just
by
the
conversation
id
and
I
set
down
the
correlation
id,
but
since
there
were
multiple
messages,
I
got
tied
up
because
id
was
already
mentioned,
and
I
wanted
to
use
that
just
for
analysis
later
on.
So
I
can
easily
find
which
processes
were
for
the
same
conversation.
A
That's
a
good
point
because
you
should
be
able
to
associate
or
annotate
your
workflow
definition,
but
also
workflow
in
instances
with
custom
data
and
not
be
limited
to
just
using
a
correlation
id
but
have
different
tags
so
a
little
bit
similar
to
labels
for
workflow
definitions.
So
here
we
can
say
not
this
one,
but
this
one.
You
should
be
able
to
say
and
don't
mind
this.
This
ui
bug
here,
we'll
fix
that.
Let's
say
we
have
label
one.
D
A
Label
two
yeah
there's
some
ui
work
to
be
done
here
to
be
fixed
on
label
two:
okay:
let's
let's
go
with
this
so
this
these
could
be
custom
values
and
and
similar,
so
this
is
associated
with
the
workflow
definition.
But
similarly,
you
can
imagine
having
something
like
this
for
workflow
instances.
So
you
can
associate
this
conversation
id
using
a
label
called
conversation
id
for
example,
and
then
you
can
also
query
by
it,
which
also
means
you
should
be
able
to
resume
workplaces
by
specific
conversation.
If
that
would
make
sense.
In
your
use
case
scenario,.
B
A
C
B
C
A
C
Yeah,
it's
looking
really
impressive,
great
progress
since
last
time,
yeah.
A
Thank
you,
yeah,
I'm
pretty
happy
with
this.
This
was
one
of
the
things
that
I
was
actually
waiting
a
little
bit,
whether
I
should
delve
into
it.
It
seemed
very
complicated
to
be
able
to.
You
know,
create
these
hierarchies,
but
in
this
way
it
already
works.
Well,
it's
not
perfect
yet,
but
it's
it's
getting
there
and,
most
importantly,
it's
it's
a
very
simple
structure
to
to
set
up
compared
to
what
I
was
trying
before
transposing
networks
into
embedded
activities
which
is
prone
to
error
yeah.
A
I
took
a
lot
of
inspiration
from
this,
as
I
mentioned,
and
what
I
noticed
that
this
engine
does.
If
you
look
at
the
structure,
so
what
would
they
allow
you
to
do?
Is
they
allow
you
to
add
multiple
activities
on
a
given
slot?
So
here
we
have
the
true
slot,
and
if
you
edit
this,
you
can,
let's
say
you
can
have
this
one
and
this
one.
So
these
are
two
activities.
We
can
of
course
connect
them
and
if
we
go
back
up,
the
level
displays
the
number
of
activities
and
the
way
they
do.
A
C
B
A
Explain
in
a
minute
why
this
is
the
case,
but
it's
interesting
to
see
what
they
are
doing
and
also
the
way
they
relate
or
associate
one
activity
to
the
other
one.
They
don't
use
connections.
What
they
use
instead
is.
It
depends
on
which
makes
sense.
So
here
you
can
just
specify,
for
example,
what
I
did
here:
the
azure
function
or
actually
the
custom.
One
activity
depends
on
the
azure
function.
In
this
way
they
can
visualize
the
dependencies.
A
The
connections
it's
very
convenient,
but
I
think
it's
also
potentially
limiting,
because
what
else
iii
would
allow
us
to
do
is
to
use
different
kinds
of
flow
charts
or
different
kinds
of
diagrams.
I
should
say,
for
example,
we
could
now
have
not
just
flow
chart
style
activities,
but
it
could
also
be
sequential
activities
where
it's
not
a
flowchart,
but
just
a
series
of
steps.
It
could
be
a
state
machine
or
even
a
bpmn
custom
activity
or
anything
else
we
come
up
with.
C
I
think
everything
should
be
possible
with
depends
on
actually,
because
if
you
look
at
any
of
the
charts,
it's
always
a
2b
and
a
connection
between
those,
and
if
you
always
look
at
that
from
the
point
or
where
it
goes
to,
when
it
says,
depends
on
you
can
basically
create
everything
relating
it
back.
That's.
A
Exactly
the
case,
but
I
was
pointing
out
that
they
are
doing
something
else,
that's
interesting,
and
that
is
it's,
for
example,
the
true
property.
Here,
let
me
pull
up
this
guy
here,
so
they
call
it
the
if
through
activities
which
is
a
property
of
the,
if
condition
type,
it's
an
array
and
that's
another
difference
and
it's
very
convenient,
but
I
think
having
this
as
an
array
is
also
potentially
limiting.
Maybe
not
I'm
not
sure,
but
it's
interesting
to
see
how
they
are
doing
it.
A
C
I'm
thinking
about
that
two
activities
and
for
me
it's
okay,
it's
in
static
that
there
is-
and
there
are
two
activities
being
executed
in
that
true.
What
I
would
find
interesting
is
that
it
would
have,
for
instance,
two
starting
activities
that
would
be
more
interesting
to
know
than
the
amount
of
the
whole
activity
flow
in
there,
and
that's
one
of
the
questions
that
I
had
in
elsa
3.
C
A
A
C
A
So
that's
still
the
case
in
ls3,
so
for
that
you
need
to
use
triggers.
So
let's
say
we
have
two
triggers
or
maybe
use
the
same
one.
Let's
say
we
have
event
one
and
event
two
and
you
can
both
mark
them
as
startable.
This
is
important
by
the
way
yeah.
So
now
we
can
execute
this
workflow
by
either
firing
this
one
or
this
event,
but
you
do
need
to
mark
them
as
startable,
because
that's
how
the
engine
indexes
the
workflow
by
looking
at
you
know
what
triggers
to
create
based
on
these
settings.
A
So
you
have
a
bit
more
control.
The
downside
is
you
actually
need
to
be
aware
of
this,
so
it
can
be
confusing,
but
this
would
just
work
and
you
didn't
market
the
starter
ball
then,
and
it
won't
work
could
be
confusing.
The
reason
I
did
it
is
because
the
imagine
you
have
this
workflow
here.
Let
me
show
you,
but.
C
A
Exactly
if
you
look
at
this
workflow
and
yeah,
let's
forget
about
these
these
for
a
second.
If
you
look
at
this,
then
you
would
be
writing
thinking.
Well,
it's
only
these
two
so
and
these
are
triggers.
So
what's
the
problem
right,
why
not
just
take
them?
The
thing
is:
is
that
this
these
two
activities
are
part
of
a
collection
of
the
outer
flow
chart,
so
the
root
activity
of
the
workflow,
so
workflow
is
a
model
that
looks
like
this,
so
this
is
a
class
or
actually
this
is
yeah.
A
A
This
workflow
is
a
flowchart
activity
which
is
a
separate.
Well,
it's
just
another
kind
of
activity.
So,
of
course,
we
could
easily
program
it
in
such
a
way
where
we
recognize
that
okay,
this
workflow
starts
with
a
flowchart.
Let's
look
at
its
starting
activities
and
index.
Those
would
work,
but
it
also
seems
maybe
a
little
bit
arbitrary
to
do
it
just
for
this
specific
type,
because
we
also
have
sequences.
So
we
would
have
to
do
the
same
for
a
sequence.
Look
at
its
first
activity,
see
if
it's
a
trigger
and.
B
A
May
very
well
do
this,
but
in
order
to
not
have
to
do
that,
I'm
experimenting
with
the
startable
activity
and
the
downside
is
what
I
just
mentioned,
but
the
advantage,
I
think,
is
it's
more
explicit.
So
maybe
you
do
want
two
triggers,
but
maybe
you
want
to
be
able
to
disable
one
of
them,
and
this
makes
it
explicit
action
anyway.
That's
the
thinking
we
may
reconsider.
I
don't
know
what
what's
the
best
way
to
deal
with
this
and
it's
it
seems
to
me
it's
also
a
bit
subjective.
What's
better
and
what's
not
so
good.
C
Yeah,
I
agree.
I
will
give
it
a
thought,
because
I,
like
the
concept
of
not
having
to
force
users,
to
use
something
using
startable
as
an
enabler.
Disabler
feels
also
a
bit
like
misusing
the
possibilities
rather
having
than
an
activity
to
be
disabled
in
the
workflow,
to
explicitly
name
it
like
that
yeah
we'll
give
it
a
thoughts
about
the
pros
and
cons
and
how
it
is
for
the
user
to
do
that.
A
Yeah,
please
do.
That
would
be
great
a
big
disadvantage.
I
think
personally,
is
you
also
have
to
do
this
when
you
actually
code
a
workflow,
so,
for
example,
not
this
one
but
no?
Well.
Let
me
just
invent
some
examples,
so
so
here,
for
example,
we
have
a
for
simple
for
each
workflow,
it
has
a
set
of
items
and
then
the
root
of
this
workflow
is
a
sequence,
so
the
sequence
has
an
activities
properties.
A
This
is
the
contents
of
this
sequence
activity.
Now,
let's
say
we
want
to
have
a
trigger-
let's
say
an
http
endpoint,
to
turn
this
workflow
into
an
api
endpoint,
for
example,
with
the
current
the
way
the
engine
currently
works.
You
actually
need
to
say
that
this
is
that
this
can
start
the
workflow.
So
it's
you
know
it's
not
very
intuitive
or
convenient,
because
you
would
think
that
maybe
you
know
this
should
just
just
work,
but
now
it
only
works.
A
A
A
So
here
I'm
just
saying:
run
workflow
11
or
whatever
I
configure
here
so
this.
Of
course
this
will
always
work,
because
the
way
this
works
is
just
execute.
The
workflow
and
the
workflow
itself
has
a
root
activity,
so
the
root
activity
will
be
scheduled
for
execution
and
that's
a
sequence
and
the
sequence
will
then
schedule
its
child
activities
for
execution.
That
will
always
work,
but
the
thing
is
with
triggers
right,
like
hp.
A
Endpoints
signal
receive
event
that
kind
of
thing
for
that
the
engine
or
the
system
needs
to
index
its
workflow
definition
and
extract,
or
you
know,
interpret
the
triggers
and
and
request
some
bookmarking
information
that
gets
stored
in
the
database
in
the
triggers
table.
So
this
would
get
populated.
So
that's
the
that's.
The
deal
yeah.
A
A
Because
in
most
cases
you
want
it
to
be
startable,
the
tricky
part,
of
course,
is
if
you
use
a
trigger
as
a
blocking
activity.
That's
which
means
it's
not
a
starting
activity,
but
it's
somewhere
on
the
somewhere.
Here,
let's
say:
let's
say
I
want
to
move
this
in
between
so
now
it's
no
longer
well,
it
will
actually
be
able
to
start
a
workflow,
because
even
though
it's
not
a
starting
activity
anymore,
it's
marked
as
startable.
A
So
if
I
now
trigger
event
one
this
workflow
will
actually
start
with
this
activity
and
go
into
the
right
line,
and
this
will
be
ignored.
So
that's
the
other
side
of
it.
If
you
do
what
you
suggest
mohammed
everything
will
be
startable
or
can't
start.
Startable
will
be
true
and
that's
has
a
different
issue,
because
this
is
not
expected.
I
think
so
here
you
would
have
to
uncheck
and
you
would
have
to
do
it
for
every
blocking
activity
that
you
do
not
want
to
start
the
workflow
if
you
have
to
explicitly
make
it
unstartable.
A
If
that
makes
sense,
oh
yeah,
it's
it's
a
tricky
problem,
I
think,
but
maybe
we
should
just
accept
that
there
is
common
logic
and
common
use
cases
where
a
workflow
starts
typically
with
a
container,
and
we
can
just
look
at
the
first
item
of
sequence
activities
and
the
first
or
the
starting
notes
of
a
flowchart
activity
in
most
use
cases
that
works
and
for
those
workflows
that
don't
start
with
a
container,
but
just
let's
say
a
writeline,
because
that's
possible
as
well.
This
could
be
replaced
with
another
write
line,
but
let's
say
an
hp.
A
Endpoint
would
be
quite
useless
because
now
it
will
trigger
the
workflow,
but
nothing
will
happen
because
our
hp
endpoint
cannot
itself
contain
more
activities,
but
in
this
case
it
will
be
found
as
a
by
the
indexer
as
a
trigger
so
yeah.
Let's
give
that
some
thought
see
if
we
can
come
up
with
a
more
elegant
approach,
oh
by
the
way.
One
other
thing
I
had
before
a
couple
of
or
not
more
than
a
couple
of
changes
ago,
I
think
couple
of
months
ago,
was
to
allow
the
workflow
itself
to
have
a
set
of
triggers.
A
A
It
would
be
analogous
to
azure
functions
where
you
create
a
function,
and
you
can
associate
it
with
triggers,
so
it
the
trigger
itself
would
not
be
an
activity
per
se
could
be
an
activity,
but
it
could
also
just
be
a
mechanism
to
associate
with
your
workflow
so
that
when
that
trigger
is
invoked,
it
will
evoke
the
associated
workflow.
That
was
another
that's
another
way.
A
For
example,
let's
say
we
have
these
two
triggers
and
when
the
hp
endpoint
is
received,
maybe
I
want
to
maybe
set
a
variable
read
from
the
query
string
that
was
passed
from
this
trigger,
so
that's
different
logic
than
when
compared
to
the
event
two,
when
maybe
it
receives.
Some
payload
requires
a
different
bit
of
interpretation
to
get
its
input
into
some
variable,
so
you
want
to
maybe
normalize
the
various
types
of
input
into
a
normalized
variable
and
then
continue
and
that
implementing
that
logic
would
not
make
sense
when
you
just
specify
these
triggers.
C
Yeah,
I
agree
the
logic
and
the
depending
on
the
trigger
is
needed.
I
use
that
now
you
could
think
about
and
the
triggers
that
you
put
on
the
workflow
instance
as
elements
on
the
on
the
grid
on
the
canvas,
and
it
makes
it
a
bit
unlogical
for
how
did
they
end
up
there,
and
I
think
this
is
more
consistent
and
more
intuitive.
If
you
do
it
and
do
it
like
this.
A
Yeah
exactly
so
yeah,
so
for
now
it's
it's
an
explicit
action
to
mark
something
unstartable.
If
you
want
to
to
do
it,
but
let's
let's
see
if
we
can
find
a
way
where
it's
not
necessary
to
mark
something
unstartable,
but
maybe
have
some
rules
that
identify
this
based
on
common
patterns
that
should
be
extensible.
So
let's
say
you
also
have
a
new
kind
of
container
activity.
Then
you
should
be
able
to
have.
Maybe
some
I
don't
know
some
trigger
provider
implementation.
A
Let's
say
that
implements
a
strategy
to
to
return
some
information
about
some
trigger.
That
would,
from
the
user's
point
of
view,
would
be
even
better
because
then
they
don't
need
to
think
about
startable.
Then
this
would
just
work
because,
from
a
user's
point
of
view
is
intuitive,
it
doesn't
require
them
to
do
anything
special.
So.
C
A
C
A
Yeah,
and
especially
if
you
are
talking
about
the
api
for
ls2,
it
gets
quite
complicated
and
hard
to
work
with,
especially
with
the
flowchart
model,
where
the
fluent
api
attempts
to
connect
activities
as
you
create
them
to
others
to
the
next
one,
but
with
elsa
three.
I
don't
know
if
you've
taken
a
look
at
the
also
three
structure,
but.
C
A
Think
so
too,
yeah,
because
because
of
course
it's
it's
nested
right.
So,
as
you
say,
there's
indentation
there's
no
manual
connecting
between
activities.
It's
just
you!
You
just
declare
what
you
want
to
happen
here
and
then
a
sequence
is
a
sequence
of
steps
and
then,
if
has
well
this,
if
has
two
properties
here,
so
it
should
already
be
a
little
bit
better.
But
I
agree
even
code.
It's.
It
is
hard
to
read
so
having
design
and
support
to
create
that
code.
That
will
be
helpful
and
especially
interesting
with
code
generators.
D
A
I
was
hoping
you
would
say
that
so
I'm
actually
kind
of
looking
forward
to
some
cool
demo,
maybe
in
the
near
future.
Oh.
A
That's
great,
and,
and
since
we're
on
the
topic
of
you
know
easily
declaring
workflows.
Let
me
just
remind
you
there's
a
lot
of
it
here:
there's
a
dsl
module
which
is
a
different
take
on
easily
creating
long-running
workflows
or
any
workflow.
For
that
matter,
and
here's
a
nice
example.
I
think
this
one.
A
Of
course,
there's
no
syntax
coloring
yet,
and
this
is
irrelevant
this
is
out
of
date.
This
is
out
of
date
too
well,
but
here
this
is,
I
think,
it's
very
readable
right,
it's
just
from
top
to
bottom.
This
is
actually
not
a
c-sharp
if
statement,
but
the
if
activity
where
you
configure
the
then
outcome
and
the
else
outcome
and
each
statement
is
actually
an
activity,
and
this
is
this
is
like
an
alias
of
to
the
right
line
activity
and
you
can
configure
the
alias
you
want
to
use.
Of
course
you
don't
have
to
use
aliases.
A
You
can
also
just
say
right
line
yes
and
say:
text
equals
whatever
like
that.
I
still
think
nope,
not
too
many
people
like
it.
Actually,
nobody
likes
it
that
I've
spoken
with,
except
for
one,
but
I
still
think
this
is
quite
awesome
because
think
of
the
ramifications,
if
you
can
write
a
simple
script
that
implements
a
long
running
process,
because
this
doesn't
have
to
execute
from
start
to
end,
it
could
also
be
like
a
wait
for
a
customer
to
prove
offer.
A
A
Yeah
since
you're
busy
with
it,
I
think
it
might
be
fun
for
you,
too,
okay,
yeah,
yeah,
great,
all
right
and
here's
another
example
where
you
just
can
say
delay,
and
this
will
actually
delay
and
suspend
the
workflow
or
wait
some
signal
and
most
of
this
code
actually
works.
The
delay
I
think,
works
this
one
doesn't
but
but
yeah.
This
works
all
right
enough
about
the
dso.
Any
other
questions
from
anyone.
Yeah.
D
I
heard
one
question
in
insta3
designer:
I
know
that
you
can
connect
the
output
of
one
activity
to
multiple
activities.
Oh.
A
A
Yeah
yeah
exactly
so
like
this,
then,
let's
add
another
one
like
this
and
this
this
is,
and
this
is
going
to
execute
twice
so
line
1
3
3a
the
end
yeah.
So
it
goes
from
this
to
this
then,
to
this
one
then
to
this
one,
but
everything
is
scheduled
at
the
same
time,
so
the
flowchart
activity
schedules
all
connections.
So
this
is
the
first
connection
and
it
schedules
this
one
as
well,
and
then
it's
going
to
execute
and
because
this
one
finished
it's
going
to
look
for
its
connection,
which
is
this
one.
A
When
this
one
finishes
it's
executing
this
one.
So
that
makes
sense
and
then
it
gets
this
one,
because
it's
a
stack
based
scheduling
system
and
then
that's
what
we
see
exactly
here.
Then
we
get
two
to
a
and
again
you're
saying.
Maybe
you
don't
expect
that
if
you
look
at
this
from
a
user's
point
of
view,
maybe
you
would
expect
something
else
to
happen.
So
so
maybe
you
can
talk
us
through
what
you
the
way
it
should
execute.
A
Okay,
so
then
this
will
execute
and
this
would
execute
and
then
somehow
the
engines
should
know
that.
Well,
I
just
want
this
one,
even
though
it's
yeah,
so
with
the
alpha
2,
we
have
a
fork
activity
that
does
basically
what
this
thing
is
doing
here
and
then
we
use
a
join
and
the
join
activity
has
the
logic
to
well.
It
receives
both
inbound
executions,
but
it
blocks
further
execution
depending
on
the
setting.
A
So
it's
either
gonna
wait
for
all
inbound
branches
to
complete
or
any
one
of
them
before
it
continues,
would
be
interesting
to
have
this
notion
implemented
without
needing
an
explicit,
join,
maybe,
but
I'm
struggling
a
little
bit
to
figure
or
to
come
up
with
a
whole
way
that
that
makes
sense.
Maybe
somebody
else
has
any
any
thoughts
on
that.
C
Yeah
you
can
detect
it.
It
was
interesting
exercise,
though,
when
you
first
showed
it.
I
was
yeah.
This
is
the
expected
behavior,
but
I
can
also
go
with
the
fact
that
it
isn't
implicit
for
can
join
yeah.
A
C
A
B
C
C
Do
you
want
you
want
to
execute
all
yes
yeah,
you
want
to
wait
any
or
and
so
on.
Yeah.
C
A
Exactly
this,
this
will
be
identified
by
the
flowchart
activity
itself,
which
knows
about
all
connections,
and
it
knows
about
this
node
having
two
inbound
connections,
so
it
could
inspect
these
things.
But
I
think
your
intermission
is
right
that
it
should
be
on
this
activity
here,
because
you
don't
want
to
configure
it
on
this
one
and
this
one,
because
it
applies
to
both
inbound.
You
want
to
control
at
this
level,
whether
to
block
wait
for
all
or
wait
for
any,
but.