►
From YouTube: Elsa Workflows Community Meeting 13 ( 2022-06-14 )
Description
Meeting 13
Topics
- Elsa 3
○ Toolbar
○ Transposition
○ Prevent cyclic graph detection
- Multitenancy
○ What levels: record level, container/configuration level
- Composite activity stores everything, regardless of storage provider
○ Jay to create an issue
- Auth
○ Jay to write a blog post about authentication & authorization with Elsa
Add a section to homepage pointing to other Elsa related articles?
B
B
I
know
what
you're
referring
to,
unfortunately
not
yet,
but
it's
on
my
list-
and
I
think
my
next
topic
for
me
is
the
multi-tenant
and
I
think
also
I'm
working
on
a
authentication
and
authorization.
B
A
Okay,
that's
cool.
Do
you
have
a
blog
website
somewhere
that
you
write
more
blog
posts
regularly
or
once
in
a
while,
because
I
was
thinking-
maybe
we
we
should
add
a
section
on
the
homepage
or
the
readme
of
the
elsa
project,
where
we
can
point
others
to
those
blog
posts.
I
think
I
read
a
blog
post
from
you
at
some
point,
but
I'm
not
sure
did
I
lose
you
no
you're.
Still
there
all
right,
so
yeah
I'll
just
get
started
with
elsa
3
updates.
There's
some
noise
coming
from
you.
It
seems
jay.
Now
it's
gone.
A
Thank
you!
Hey
france,
hey!
Let's
go
to
the
elsa
3
updates!
Personally.
I've
been
working
on
the
journal,
but
I
wasn't
able
to
make
much
progress
because
I
ran
into
some
oversight
which
I
will
explain
later,
but
before
we
get
to
that,
let
me
show
something
cool.
So
here
we're
looking
at
the
new
designer
and
the
first
thing
you
may
notice,
if
you,
if
you're
familiar
with
the
new
designer.
C
A
There
are
two
new
buttons
called
zoom
to
fit
and
outer
layout
and
auto
layout
is
not
actually
implemented.
This
was
added
as
part
of
little
user
story
to
add
a
toolbar,
that's
extensible,
so
we
can
add
more
buttons
to
it,
but
zoom
to
fit
actually
works.
So
let
me
show
you
that
so
now,
when
I
click
this
it
zooms
to
fit,
as
you
can
see,
there's
still
some.
A
It
needs
some
tweaking
still
because
it's
not
taking
into
account
this
toolbar
itself
and
maybe
some
more
freaking
room
would
be,
would
be
nice
and
also
maybe
we
don't
want
to
exceed
the
100
zoom.
So
zooming
out
should
be
fine,
but
I
don't
think
it
makes
much
sense
to
zoom
in
more
than
100
or
maybe
a
little
bit
more,
but
not
too
much
probably
will
make
it
configurable,
but
we
will
see-
and
of
course
it
also
works
when
you
have
a
very
large
workflow.
D
A
Like
this,
for
example,
and
now
you
can
zoom
to
fit,
you
know
everything
fits
onto
the
canvas
but
again
take
into
account
that
there's
this
little
issue
still.
So
this
is
going
to
be
useful,
especially
once
we
have
other
layouts.
So
then,
when
you
have
all
sorts
of
connections
and
then
you
made
a
bit
of
a
spaghetti
workflow
and
you
can't
identify
the
flow
anymore,
you
should
be
able
to
click
outer
layout
and
then
it
will
use
probably
a
some
dagger
algorithm
to
lay
it
out
in
some
pre-structure.
So.
C
Yeah
question
there
you
go,
I
think
you're
gonna
use
the
maximum
minimum
of
the
boxes
that
support
activities.
What
if
the
connectors
are
extending
beyond
those
maximum
minimum,
for
instance,
having
a
connector
line
going
over
the
most
top
one?
Do
you
take
that
into
account
or
not.
A
You
mean
for
the
zoom
to
fit
algorithm
yeah.
Exactly
I'm
not
entirely
sure
I
I
get
the
situation.
Can
you
can
you
rephrase.
C
A
C
A
I
see
a
good
question:
let's
see,
let's,
let's
remove
this
one,
so
to
be
clear,
the
algorithm
used
is
implemented
by
x6,
which
is
the
underlying
library
that
we're
using.
So
I
don't
know
what
it's
using
okay,
but
let's
see
what
happens
yeah
it
looks
like
it
takes
into
account
the
boxes,
but
not
so
much.
The
connectors
yeah.
A
Yeah,
so
some
more
tweaking
is
warranted,
and
I
see
little
things
like
that
horizontal
scroll
over
here
unnecessary
one
step.
A
Exactly
so,
that's
all
I
have
for
elsa
3
workflows,
elsa
3,
workflow
progress,
as
I
mentioned,
there's
some
well.
I
ran
into
a
little
issue
and
I
will
try
to
explain
so,
as
you
can
see
here.
Let
me
actually
delete
this
and
start
with
an
actual
workflow.
So
let
me
add
this
one
and
then
add
this
one
for
each,
because
this
is
important
and
then
two
more
of
these.
So
now,
let's
connect
these
two
and
we.
C
A
Ignore
the
done
for
now,
let
me
zoom
to
fit
so
this
workflow.
The
way
it's
supposed
to
work
is
as
follows:
the
first
one
there's
no
context
menu
here,
so
this
is
the
starting
node.
So
this
will
execute
first
and
keep
in
mind.
This
is
a
flowchart
style
activity
and
the
next
activity
to
execute
is
determined
by
the
connection
right.
A
So
we
have
a
connection
to
the
forces
and
then,
as
you
may
recall,
from
previous
sessions,
the
for
each
activity
has
a
body
property,
so
the
property
is
of
type
I
activity,
so
it's
not
like
in
elsa
2.
Where
then
the
for
each
has
an
outcome
of
body
that
then
schedules
the
next
activity,
that's
not
how
it
works
anymore.
Nails
are
three.
The
four
its
activity
itself
will
schedule
its
body
activity.
A
So
in
order
to
make
that
work
from
a
model
that's
generated
by
this
designer,
where
everything
is
just
connected
nodes,
I
need
to
do
a
little
transformation
and
the
transformation
would
be
that
I
would
basically
follow
the
next
connection
from
the
designer
and
then
whatever
node
is
connected.
I
will
take
that
node
and
add
it
as
a
property
on
the
for
you,
so
for
it
would
have
a
body
property,
and
then
I
assign
that
property.
A
The
value
of
the
rightline
activity
in
this
example-
and
I
call
it
transposition
and
it
works,
except
for
the
fact
that
I
didn't
take
into
account
the
next
one.
So
here
whenever
the
for
each
activity
would
execute,
it
would
successfully
schedule
the
writeline
activity,
which
would
then
execute,
and
then
because
this
one
is
now
finished
before
each
activity
would
complete
and
because
it
would
complete
the
entire
the
outer
flow
chart
would
execute
or
schedule
its
next
child.
What
it
would
do
is
it
would
see.
A
Oh
okay,
I
have
no
more
activities
connected
because
it
would
not
see
this
one,
because
this
one
is
connected
to
that
one,
and
because
this
one
is
completed
and
there's
no
other
activity.
Well,
I
could,
of
course,
this
one
here
to
done
so
if
we
would
execute
this
workflow
after
for
each
executed,
it
would
have
executed
this
one
and
then
finally,
this
one,
but
this
one
would
be
skipped.
So
that's
a
that
was
an
omission
on
my
end,
which
I'm
fixing
and
the
way
to
fix.
A
So,
instead,
what
needs
to
happen
is
this
body
activity
itself
needs
to
be
a
container,
so
first
I
create
a
container
and
to
that
container
I
then
add
these
activities
and
then
whatever
that
container
may
be,
would
then
handle
the
scheduling
of
these
two
activities
and
because
the
nature
of
this
designer,
with
this
flowchart
without
containment,
the
default
container,
should
be
a
flowchart.
We
can
add
a
little
bit
more
logic
later
on,
that
can
be
more
intelligent
and
try
and
add
a
sequence
for
example.
A
B
B
That's
exactly
how
I
see
the
thing
I
think,
but
I
think
we
already
discussed
on
this.
We
we
could
modify
the
designer
to
embed
all
the
activities
of
the
sequence,
maybe
directly.
B
Yes,
I
say
I
think
we
already
discussed
on
this,
but
it's
exactly
how
I
see
the
thing
to
move
all
the
the
activity
in
a
sequence
in
a
container
and
after
could
allow
us
to
embed
sequence
in
the
ui
component
of
the
forage.
That's.
A
B
A
C
A
C
A
Reason
I
am
doing
this
is
because
this
kind
of
designer
is
easier
to
implement
and
it's
more
similar
to
lsat
2..
So
those
two
things
I
think
make
it
easier
for
me
to
at
some
point
release
an
initial
version
which
will
work
well
and
then
we
can
evolve
it
over
time
with
different
kinds
of
activities
in
their
designers.
A
One
thing
I
was
wondering
about
is
what
would
be
the
name
if
we
want
to
keep
this
activity,
which
is
currently
called
flowchart,
and
we
want
to
introduce
a
another
kind
of
flowchart
that
is
very
similar
to
the
windows
workflow
foundation.
Flowchart.
We
can't
use
the
same
names,
but
if
anyone
has
any
suggestions
for
a
name
or
maybe
we
could
configure
the
flowchart
activity
itself
to
use
one
designer
or
the
other,
it
could
be.
In
other
words,
it
could
be
a
configuration,
but
this
is
still
outstanding
for
me,.
C
I
don't
have
a
name
for
it.
I
will
think
about
it,
but
going
through
the
whole
tree
it's
kind
of
challenging.
I
guess
because
there
could
be,
and
for
each
in
that
one
and
if
and
when
do
you
see
that
it's
ending
and
which
elements
because
you
can
have
multiple
splits,
basically
in
the
child's
element
after
the
four
each
you
have
to
take
that
all
the
neck
into
account.
A
Exactly
that's
the
challenge,
so,
for
example,
we
could
have
another
for
each
here
and
and
of
course,
the
switz,
which
is
a
whole
different
thing.
I
haven't
worked
so
that's
broken
right
now,
but
a
switch
has
its
own
set
of
rules
to
provide
more
connections
to
child
activities.
So
the
way
I'm
going
about
that
is,
of
course,
there's
recursion
into
it.
So
what
I'm
basically
doing,
I'm
taking
all
the
connections
starting
with
the
root,
so
the
flow
chart
has
this
notion
of
the
the
first
or
the
starting
node
and
using
that
as
a
root.
A
A
So
that
way,
this
will
work
because
from
from
this
point
on,
because
I
noticed
that
there's
this
outbound
property,
this
outbound
activity
property-
I
should
say
I
know
that
I
will
now
create
a
sub
flow
or
a
container
for
now.
I'm
using
a
subflow,
as
I
mentioned
it
could
be
a
container-
could
be
something
else
to
be
determined,
but
by
default
I
will
use
a
subflow
and
then
I
basically
get
all
descendant
connections.
So
right
now,
there's
just
one
two
descendants-
and
this
is
the
this-
is
the
current
connection.
C
A
C
A
Loop
here,
yeah
exactly
these
things
need
to
be
taken
into
account
right
now.
It's
not
even
finished
so,
let
alone
infinite.
Looping
is
not
handled,
but
we
will
have
to
handle
those
scenarios.
I
don't
even
think
this
should
be
allowed,
and
the
nice
thing
about
containment
is
that
this
would
not
even
be
possible,
but
with
this
free
flow
editor,
you
can
basically
do
anything
unless
we
build
in
these
cards
right.
We
could
determine
that.
Oh
wait.
This
is
now
part
of
a
lower
level
part
of
the
hierarchy,
so
this
should
not
be
possible,
but
yeah.
A
A
D
Normally
there
is
a
cyclic
graph
detection,
which
basically
says
that
a
child
node
should
not
have
a
path
leaning
back
to
the
parent,
so
there
are
some
algorithms
for
detecting
cyclic
graphs.
I
think
it
could
help
to
prevent
this,
because
if,
if
we
don't
prevent
that
your
algorithm
itself
to
find
the
child
activities,
it
will
go
into
an
infinite
loop.
What
did
you
call
this
cycle?
Cyclic
graph
graph.
A
C
C
A
schedule
that
I
saw
some
samples
in
elsa
2,
where
you
could
say
well,
if
you're,
I
think,
in
the
documentation,
approval
thingy.
B
C
A
Lc2
is
interesting:
on
the
one
hand,
everything
is
of
a
single
hierarchy,
there's
there's
actually
there's
no
hierarchy,
but
then,
at
the
same
time
it
tries
to
model
some
hierarchies
artificially,
so
by
default,
everything
is
flat.
So
this
is
a
flowchart
these
activities.
None
of
them
are
parents
of
others.
A
They
are
just
connected
in
this
connectome
if
you
will,
but
then
there's
activities
like
for
eats
or
if
and
then
well,
let's
take
d4
eats
as
an
example
before
eats
it's
not
shown
here,
but
the
four
eats
has
an
iterate
outcome
and
then,
whenever
the
iterate
branch
has
completely
finished,
the
four
years
activity
itself
is
scheduled
again
and
basically
trying
to
mimic
a
parent-child
relationship
between
the
parent
for
each
and
the
child
iterate
activities.
But
it's
that's
not
how
it's
modeled
structurally
but
functionally
it's.
It
tries
to
achieve
that.
Behavior.
A
Compare
that
to
elsa
three
in
also
three.
If
there
is
actually
an
article
structure
and
there
we
are
using
this
the
same
flowchart
editor.
This
is
more
design.
This
is
intended
to
be
used
on
a
level
structure,
not
not
an
hierarchical
structure.
So
there's
a
mismatch
there.
So
in
lc2
it's
it
should
work.
It's
it's
it's
fine,
except
for
the
fact
that
the
activities
like
for
each
try
to
mimic
an
hierarchy
which
it
shouldn't.
So
I
think
to
fix
this
mismatch
in
lsat
2.
A
We
should
remove
the
parent
child's
attempt,
but
we
can't
do
it
because
we
will
break
everyone
in
elsa
3.
The
structure
is
already
hierarchical
in
nature,
but
we
should
fix
the
designer
by
supporting
containment
and
even
if
we
have
a
flowchart
designer
within
that
particular
flowchart,
the
the
nodes
within
it
will
be
on
the
same
level,
there
will
not
be
parent
child
nodes.
In
that
regard
you
can
have
like
in
a
windows
foundation.
A
B
C
It's
gonna
work
and
then
you
should
prevent
it
indeed
to
have.
It
relate
back
to
a
parent
node
that
would
work,
but
otherwise
I
couldn't
see
how
it
would
work.
If
you
have
a
reminder
that
is
rescheduled
after
a
day
over
and
over
again,
because
then
it
feels
like
you
have
to
give
it
back
to
your
parents,
but
it's
apparently
on
the
same
note
exactly.
A
If
it's
a
true
flowchart,
then
the
reminder
and
whatever
activity
you
want
to
do
in
response
to
the
timer
event,
they
are
at
the
same
level,
and
you
would
just
connect
back
to
the
previous,
though,
because
in
a
floater
that's
valid
in
this
flowchart.
This
is
actually
actually
this
one
is
a
child
of
four
eats,
but
it's
displayed
as
a
as
the
same
level
and
that's
where
the
issue
lies,
but
in
reality
this
is
a
child
of
this
one.
A
So
here
this
could
never
be
a
send
email
activity,
for
example,
while
this
is
a
timer
when
where
this
is
a
child
of
the
timer
that
shouldn't
work,
but
what
should
work
is
just
having
a
timer
node,
which
then
is
you
know
once
it
triggers
it?
It's
done,
and
then
the
next
activity
gets
scheduled
through
this
connection,
and
that
should
work
fine,
but
not
when
this
is
a
container
and
that's
the
confusing
part
in
this
designer,
because
there's
no
way
of
telling
oh,
my
body
is
a
child,
or
this
is
a
childhood
for
it.
A
B
Yes,
justice:
when
topics,
I
think
we
we
need
to
work,
because
I
think
there
is
some
missing
titan
and
configuration
for
a
different
controller.
For
example,
if
you,
I
think,
if
you
save
your
workflow
today,
there
is
no
information
about
the
tenant.
Maybe
I
have
missing
some
things.
There
is
a
test
on
a
get
on
a
ibm
list,
but
not
not
for
all
the
controller.
B
I
think
there
is
a
something
to
do
on
this,
and
maybe,
as
I
wrote
on
the
discord,
maybe
we
we
have
to
write
some
elements
and
discuss
on
what
we
want
to
do
with
multi-tenancy.
Be
sure
that
we
want
to,
for
example,
a
split,
a
database
with
the
item
element
or
split
to
a
multiple
database,
etc,
etc.
Maybe
we
need
to
specify
different
scenarios
for
for
this.
This
is
for
multi-tenancy
and
what
you,
what
you
showed
on
discord,
was
more
about
the
persistence
issue
with
composite
activity.
A
B
Is-
and
I
think
there
is
a
two
level-
there
is
a
content
property
here
and,
for
example,
I
map
the
content
property
for
the
message
property
in
the
build
method
and,
as
you
see,
I
have
tried
to
force
the
transient
or
the
metal
property.
I
think
I
succeeded
to
this.
It
is
understood
by
the
engine,
but
the
content
property
is
not
stored
as
transient.
A
Yeah,
we
need
to
fix
that.
Did
you
raise
an
issue
for
this
by
any
chance
that
we
can
look
into
for
2.9?
Maybe
sure
I
will
return
perfect.
Thank
you
all
right.
That's
good!
So
back
to
the
multi-tenancy
topic
such
a
interesting,
but
also
complex
topic,
because
there's,
as
you
say,
j
there's
few
levels
at
which
you
can
make
this.
You
know
cut,
there's
multi-tenancy
at
the
database
level
or
at
the
record
level.
Actually
so,
where
you
use
a
discriminator
on
the
record
level
using
a
column
called
tenant
id
for
example.
A
So
that's
implementation
in
elsa
was
started,
but
it's
it's
not
complete
and
it's
it
hasn't
been
completed.
It's
been
worked
on
an
occasion
by
people
who
use
it
in
specific
scenarios,
but
it's
not
ideal,
because
if
you
now,
you
think
it's
it's
there
and
you
start
to
use
it
and
then
you'll
keep
running
into
scenarios
where
multi-tenancy
isn't
fully
completed,
and
this
is
this
is
a
bit
of
an
issue,
so
that's
record
level
multi-tenancy
and
then
there's
of
course,
multi-tenancy
at
the
service
container
level.
A
If
you
will,
and
at
that
level
you
can
configure
different
database
connections.
If
you
want
in
this
way,
you
can
use
same
database
server
but
use
different
databases
for
tenants
depending
on
the
database
provider.
You
could
even
have
the
same
database
but
use
a
prefix
for
a
tenant
so
that
you
use
the
same
database,
but
each
set
of
tables
are
using
their
own
prefix
or
maybe
even
their
own
schema.
If
database
provider
is
four
cents,
we
don't
have
such
a
provided
today,
except
maybe
for
yes
sql.
A
I
think
yes,
sql
might
allow
you
to
prefix
your
set
of
database
tables
for
tenants,
but
none
of
this
is
implemented
today.
There
is
a
pull
request
that
adds
this
functionality
and
this
a
different
kind
of
multi-tenancy.
So
this
is
not
record
level
multi-tenancy,
but
it's
configuration
multi-tenancy,
basically,
where
you
can
use
configuration
to
specify
your
tenants.
So
here's
a
default
one,
but
you
could
add
more
tenants
to
this
configuration.
The
main
reason
this
hasn't
been
merged
yet
is
because
of
the
implementation.
This
implementation
requires
certain
modules
of
elsa
to
be
aware
of
the
multi-tenancy.
C
A
I
am
not
sure,
but
I
think
it
should
be
possible
to
implement
container
level
multi-tenancy
with
unobtrusively
sort
of
without
any
elsa
services
having
to
be
aware
of
the
fact
that
they
are
part
of
a
tenant.
I
know
that
organ
core
has
implemented
it.
I
know
artifact
has
support
for
multi-tenant
service
containers,
so
I
discussed
this
with
with
this
contributor
and
he's
he's
doing
a
bit
of
a
proof
of
concept
to
see
what's
possible
there.
So.
B
This
is
for
elsa
too,
and
I
think
just
about
multi-tenancy.
There
is
a
question
about
the
database
when,
where
you,
you
store
a
lot
of
information,
but
there
is
also
question
about
the
storage
of
the
event.
For
example,
if
you
use
the
service
boost,
maybe
you
want
to
to
use
multi-tenancy
also
for
the
trigger,
etc,
etc.
It's
more
large
than
just
saving
data
in
the
database.
Yeah.
A
Good
point
so,
since
this
is
configuration
based,
you
could
use
a
different
connection
string
for
different
service
bus
so
that
your
tenant
is
isolated
in
that
way
by
using
a
different
service
bus
altogether.
But
if
you
use
like
use
the
same
database
table
the
same
configuration
but
have
multi-tenancy
at
the
record
level,
then
maybe
you
also
want
that
for
the
messaging
stories
where
a
message
belongs
to
a
given
tenant
and
is
then
routed
to
the
correct
consumer
of
the
tenant.