►
From YouTube: Elsa Workflows Community Meeting 3 ( 2022-04-05 )
Description
# April 5, 2022
## Topics
- Steering Committee Elections 2022
- 9 candidates
- Voting process
- Everyone gets 5 votes
- Cast max 3 votes per candidate
- Cast votes are anonymous BUT voter must provide GitHub username to prevent multi-voting
- Status
- Elsa 2:
- HttpEndpoint route params
- Fix Composite Activity Timing/Occurrence and measurement in UI Journal
When 2.7 ?
- End of this month
- Elsa 3
- In progress :)
- Demos
- Elsa 2: HttpEndpoint route params
- Elsa 2: Workflow Context providers
- Discussion
- Elsa 3 context providers
- Add workflowContext.get argument to specify e.g. some ID
A
A
Christina
came
with
came
up
with
a
nice
little
service
called
all
unit,
and
I
already
went
ahead
and
configured
paul
or
an
election,
and
it
contains
all
of
our
all
of
the
candidates
and
I'm
thinking
that
what
we
should
allow
voters
to
do
is
to
have
give
them
five
votes
that
I
can
cast
on
the
candidates
and
the
reason
I'm
thinking
five
is
better
than
than
one
is
to
prevent
that,
for
example,
everyone
votes
on
votes
for
christina,
and
then
it's
the
only
steering
committee
member
that
we
want
to
have
at
most
five,
ideally
five,
exactly
not
just
one
or
two,
then.
A
I
don't
think
that's
a
good
idea,
so
so
I'm
thinking
five
votes
per
person
and
then
they
can
cost
a
maximum
of
three
of
those
five
votes
on
a
single
candidate.
So
they
are
not.
It's
not
mandatory
to
pass
your
votes
across
the
board.
That's
up
for
debate,
I'm
not
sure.
What's
the
best
way,
we
could
also
choose
to
require
everyone
to
cast
their
votes
at
most
to
one
person
at
the
most,
so
one
vote
per
person
instead
of
max
a
maximum
of
three.
What
do
you
guys
think?
B
D
A
D
A
So
let
me
go
walk
you
through
it.
So
let's
go
to
the
admin
link
and
then
we
can
edit
paul.
So
here
there's
the
title:
the
location,
some
description,
a
preview
and
we
can
configure
this
to
be
a
table
or
a
list
and
to
me
list
made
most
since
I'm
not
even
sure
how
to
interpret
maybe
others
do
I
just
the
list
is
nice
because
then
you
see
the
candidates
like
this
and
then
you
can
cast
your
vote
for
on
each
candidate,
and
here
we
can
configure
the
maximum
dot.
A
A
And
then
there's
both
types,
so
this
is
floating.
Probably.
I
can't
change
this,
oh
because
it
has
already
been
voted
yeah.
I
did
some
testing,
so
I
basically
locked
this
in
so
this
configuration
we
could
create
a
new
ball
unit.
Of
course,
if
we
wanted
to-
but
these
are
these
settings
here
are
the
actual
candidates
I
added
them
alphabetically,
based
on
the
last
names
on
all
nine
of
us.
These
are
just
theme
and
some
effect
we
can
change
that
for
the
the
beer.
D
A
Flickering
stuff,
that's
a
little
boring,
let's
make
it
rain.
I
like
the
fireflies
personally,
but
we'll
have
a
separate
paw
on
this
one.
Let's
continue,
and
here
we
can
allow
comments-
I
actually
disabled
this.
Somehow
it
got
enabled
again.
We
don't
allow
people
to
add
new
candidates
at
this
point.
That's
disabled.
We
allow
voting,
can
have
it
start
today
and
then
have
a
deadline
within
the
next
three
weeks.
A
Two
weeks,
on
the
one
hand,
I'm
thinking
two
weeks
is
long
enough,
because
that
is
two
weeks,
but
it
would
also
be
good
to
give
as
many
people
as
possible
a
chance
to
cast
their
votes.
I
I'm
just
not
sure
how
visible
this
announcement
is
to
the
community
at
large.
So
I'm
not
entirely
sure.
If
you
have
any
opinion
on
this,
please
let
me
know.
A
I
like
that,
so
here
I
added
a
custom
field
called
the
get
up
username.
Of
course
I
want
the
voting
to
be
anonymous,
so
nobody
should
know
who
casada
on
whom,
but
at
the
same
time
we
do
want
to
be
able
to
make
sure
that
one
person
isn't
voting
multiple
times,
although
this
website
keeps
track
of
your
ip
address
and
set.
But
it's
easy
to
you
know,
go
through
some
proxy
server
or
delete
your
cookie
and
cast
another
vote.
A
So
maybe
this
is
so
I
was
thinking.
Maybe
we
should
ask
for
the
github
username,
but
just
as
a
way
to
for
us
to
verify
that
this
is
a
valid,
it's
anonymized,
so
we
don't
know
who
you
are.
Of
course
we
know
that
we
know
about
the
github
username,
but
I
don't
think
we
know
to
worry
giving
you
a
github
username
what
their
votes
are.
We
have
to
verify
those,
though,
because
I'm
not
sure,
but
we
need
to
do
a
little
test.
A
There
is
also
a
setting
to
to
increase
the
protection
against
fraud,
so
this
is
the
ultimate
protection
where
we
send
individual
invitations
to
people
who
are
allowed
to
vote
and
they
need
to
create
a
poll
unit.
So
then
we
know
each
and
every
individual
that
is
allowed
to
vote,
but
that's
also
more
work.
So
I
show
something
like
this
may
be
good
enough.
A
C
C
Yeah
it
randomizes
it,
otherwise,
the
lower
ordered
people
might
get
less
votes.
Oh.
A
Yeah
so
there's
a
a
participant
link
that
we
can
share
through
discord
through
twitter
on
github
itself,
yeah
and
then
hopefully
get
us
as
much
reads
as
possible
through
that
way,
but
yeah,
I
don't
want
to
actually
go
and
email
individual
people,
because
the
last
time
I
checked,
there's
there's
a
lot
of
people
using
elsa.
So
that
would
be
a
lot
of
work.
So
hopefully
we
can
through
the
social
medias.
We
can
try
and
get
some
attention
for
this
and
then
voting
would
like
would
look
like
this.
A
So
as
a
user,
you
you
get
this
link
and
then
you
cast
your
votes.
You
choose
at
least
one
on
the
candidates.
You
would
like
to
see
as
part
of
the
committee
and
as
a
at
a
maximum.
You
lost
three
votes,
but
then
of
course,
if
I
this
one
three,
that's
not
allowed.
So
now
I
cost
my
five
votes,
but
I
can
change
that
to
one.
For
example,
I
think
it's
nice,
it's.
It
serves
the
purpose
that
looks
nice
great
job
christina
finding
this
one,
and
then
we
can
go
to
link
evaluation.
A
So
here
we
would
probably
see
the
current
score
activity.
Log
and
there's
there's
some:
I
don't
think
this
is
the
admin
view
yeah.
So
if
everyone
agrees
then
we
may
want
to
start
today
or
tomorrow
after
we
figure
out
the
github
username,
because
it's
important
that
it
remains
anonymous
in
terms
of
who's
voting,
for
whom.
B
Yeah,
maybe
do
some
testing
till
tomorrow
and
tomorrow
we
just
post
this
and
then
we
can
start
voting.
A
B
B
I
started
to
look
over
some
items
for
that
yeah.
I
update
it
on
the
backlog
for
it's
just
a
small
item
in
regards
the
publish
and
those
publish
and
publish
and
so
on.
Let's
have
a
quick
look,
but
I
was
wondering
when
you
put
an
item
in
progress.
Can
you
also
sign
it
like
to
a
person
or
just
you
have,
because
I
dragged
the
dashboard
in
the
in
progress,
but
you
cannot
actually
see
who's
working
on
that.
A
Yeah,
that's
definitely
possible,
and
somebody
showed
me
that
some
use,
I
think
it
was
mohammed.
He
he
showed
that
I
think
the
asp.net
core
team
they
actually
have
columns
or
assignee.
A
Right
so
right
now
you
are
assigned
okay
cool.
Do
we
see
it
here?
Yeah
there
you
are
and-
and
we
can
change
this
to
people,
but
there's
not
too
many
people
of
us
actively
working
on
this.
I
don't
think
so,
maybe
just
being
able
to
see
what
items
are
in
progress,
what
are
on
the
backlog,
etc
may
be
more
useful
for
now.
A
Progress
is
being
made.
I
like
it.
A
Seven,
when,
let's
take
a
look
at
the
milestone
due
by
april,
do
you
want
to
try
and
release
regularly
so
maybe
once
a
month,
regardless
of
the
number
of
features,
at
least
there
will
be
bug,
fixes
and
maybe
some
features,
so
maybe
that's
good
yeah.
I
I
do
want
to
try
and
release
before
the
end
of
the
month
or
around
the
end
of
the
month.
However,
this
milestone
needs
to
be
cleaned
up.
It
contains
a
lot
of
work.
A
That's
I
don't
think
we're
gonna
be
able
to
get
in
before
the
end
of
the
month.
So
what
we
need
to
do
is
just
look
at
these
features,
see
how
easy
they
are
or
how
important
they
are,
and,
of
course
it
depends
on
who
wants
to
work
on
what
and
then
that
some
of
these
I
know
I
I
want
in
and
if
you
want
to
work
on
something
that
you
would
like
to
see
in
the
release
as
well,
then
feel
free
to
either.
A
A
An
intention
to
review
there's
no
concrete
plan,
though
what
I
usually
do
is
just
go
through
it.
When
I
have
a
bit
of
time,
some
of
them
are
pretty
big
like
multi-tenancy,
I'm
not
sure
I
want
to
merge
it
in,
as
is,
I
haven't
reviewed
it
in
details,
but
it's
it's
a
quite
a
big
pr,
so
it
might
take
a
little
bit.
Are
you
interested
in
any
specific
pull
request?
I'm.
F
Sure,
yes,
the
one,
the
one
I
I
set
the
fixed
composite
activity,
timing.
A
B
Wasn't
this
something
that
simona
fixed
or
is
this
something
related
to
other.
A
Yeah,
this
is
a
specific
issue,
it's
specific
to
composite
activities,
so
simona.
B
A
The
other
issue
to
do
with
timing
of
activities
and
the
time
it
takes,
but
this
has
to
do
with
composite
activities
executing
they
are
display
an
unintuitive
amount
of
time
and
correct
me
if
I'm
wrong
jeremy,
but
my
understanding
is
is
that
it
should
display
the
total
amount
of
time
it
executes.
So,
let's
say
the
composite
activity
contains
a
bunch
of
child
activities.
Maybe
a
timer
and
this
timer
maybe
takes
or
waits
one
minute.
Then
the
total
execution
time
of
this
connectivity
would
be,
let's
say
a
minute
and
a
few
seconds.
F
Yes,
and
you
can
you
can
see,
I
do
a
lot
of
detail
on
the
the
issue
and
see
all
the
explanation
and
end
the
test,
okay,
and
why
this
has
happened,
because
the
composite
all
the
composite,
all
the
activities
in
the
composite
activities
are
surrounded
by
the
composite
activity
before
and
after
and
that's
why
you
see
twice
execution
and
not
one,
and
there
is
another
good
execution
time
so.
F
This
is
a
long
explanation,
but
just
too
too
little
file
change,
but
a
long
explanation
be
sure
that
everything
is
okay.
A
Yeah,
I
know
this
is
great.
This
is
really
good
yeah.
So
you
do
want
this
because
the
pr
is
there,
it's
well
explained
and
you
tested
it
and
it
works.
So
we
shoot
that
part
up
very
nice.
Thank
you.
Maybe
we
should
take
a
look
at
the
new
feature,
an
update
to
an
existing
feature
being
the
hsp
endpoint.
As
you
may
know,
the
hp
endpoint
allows
you
to
basically
implement
an
api
endpoint
or
even
a
web
page
using
a
workflow.
A
So
instead
of
creating
an
api
controller,
you
could
create
an
elsa
workflow
and
have
it
listen
on
a
a
certain
path
of
your
asp.net
core
application.
Unlike
asp.net
core
controllers,
these
workflows,
this
hp
endpoint,
didn't
support
route
parameters,
but
that's
been
changed
so
now
it
does
support
that.
So
I
will
show
you
what
that
to
show
how
it
works.
I
created
a
little
sample
application
so
I'll
through
that.
So
here
we
have
a
workflow
called,
not
this
one,
but
this
is
submit
order.
Workflow,
it's
a
very
simple
one
consists
of
starting
with
the
http
endpoint.
A
As
you
can
see
here,
it's
listens
for
the
path
customers.
Then
a
route
parameter
like
you
would
do
on
an
asp.net
core
controller
and
then
orders,
and
then
what
this
allows
you
to
do
is
invoke
the
workflow
by
invoking
an
api
here.
So
here's
an
example,
so
this
uses
postman
to
directly
invoke
your
workflow
through
the
exposed
endpoint.
So
this
is
path.
Prefix,
that's
configured
globally
for
the
applications
here
here
I
configured
the
base
path
to
be
slash
workflow.
A
Customer
id,
it
could
be
anything
you
like
the
system
doesn't
really
have
customers,
but
just
for
the
for
the
demo,
and
then
these
less
orders,
as
as
it
was
dictated
here.
So
what
happens
when
I
execute
this?
This
body
gets
posted
which
gets
read
by
this
activity,
and
that
means
it
becomes
also
available
to
the
entire
workflow.
So,
for
example,
this
custom
activity
to
create
order
active,
can
use
that
information
to
set
the
description
of
the
order
example.
A
So
here,
as
you
can
see,
it
accesses
the
endpoint
its
output
and
then
the
output
is
of
type
speed,
request
model
which
has
a
body
that's
parsed,
into
json
by
default,
and
there,
therefore,
I
can
access
it
like
this
here,
it's
an
it's
an
expandable
object,
it's
like
a
dynamic
value
and
that
maps
to
this
description
field,
but
this
is
about
the
route
parameter,
which
I
can
access
like
this.
So
the
hp
request
model
I
just
mentioned-
has
a
new
property
called
route
values,
and
then
it's
a
dictionary.
A
So
you
access
it
by
key
that
matches
this
key
here,
that's
how
it
works
in
a
nutshell.
Let
me
just
invoke
it
just
to
show
so
let
me
hit
send
and,
as
you
can
see,
it
created
a
new
order.
The
number
has
incremented,
that's
just
some
sample
logic
I
implemented
as
part
of
this
project,
and
then
the
next
step
will
be
to
ship.
The
order,
so
here
you
can
see
shift
is
false.
The
shift
date
is
16.
B
How
it's
from-
and
this
is
xlink's
refresh
a
segue.
A
I
forgot
to
mention
here,
but
I
I
also
wanted
to
show
workflow
context
providers
just
to
see
how
that
works
in
impress.
Go.
Take
a
look
at
that,
so
first
off
what
are
context
providers.
Let's
say
you
have
a
workflow
in
this
case
we
are
talking
about
orders
and
now
we
want
to
ship
this
order.
But
in
order
to
update
the
status
of
this
order,
we
would
have
to
load
in
the
order
into
the
workflow
memory.
A
If
you
will,
then
the
workflow
can
make
changes
to
this
object
and
then
you
would
have
to
save
it
back
to
the
database
that
could
work.
You
could
have
a
get
order
activity
and
then
a
safe
order
activity,
but
it
would
also
mean
that
that
you,
you
would
have
these
explicit
steps
in
your
workflow.
So
let's
say
we
have
a
ship
order
workflow
here
we
have
an
another
endpoint
to
invoke
the
workflow
and
then
imagine
this
would
be
load
order.
A
Then
we
determine
if
it
was
shipped
or
not,
and
if
then
we
will
update
the
order
using
a
custom
activity
and
then
it
will
be
saved
to
the
database
for
small
workflows.
In
a
few
steps,
that
would
be
perfectly
fine,
but
if
you
have
longer
long
running
workflows
with
more
logic,
then
having
these
load
and
safe
order
activities
make
your
workflow
a
little
bit
crowded.
A
If
you
have
a
workflow,
where
you
have
to
regularly
load
instances
of
your
domain
model
and
you
want
to
save
them,
then
a
context
provider
might
be
a
good
solution
for
you.
So
I
want
to
show
how
that
works.
So,
in
this
scenario,
is
the
and
it
exposes
this
endpoint,
so
it's
orders
taking
advantage
of
the
parameters
and
then
a
ship
command,
and
that
looks
like
this.
So
the
ship
order
accepts
the
order
id
which
we.
A
And
then
here
we
exit
in
and
we
don't
accept
a
body.
Let's
remove
that
now.
Let
me
send
this
one
and
now,
as
you
can
see
it
updated,
the
order
shift
is
set
to
true
and
set
to
a
date.
So
let's
walk
through
this
workflow
to
see
how
that
works.
This
one
we
just
took
a
look
at,
and
then
this
this
is
important
when
you
work
with
workflow
context,
the
workflow
needs
to
be
associated
with
some
context
id
in
a
context
city,
it's
a
very
general
term.
A
It
should
store
a
unique
identifier
that
maps
to
some
identity
of
your
domain
model.
So
in
this
case
we
are
talking
about
an
order,
so
this
needs
to
be
set
to
your
order
id.
What
does
this
look
like
here?
A
It's
getting
the
order
id
from
the
route
values
from
the
ac
and
associating
that
with
the
complexity
of
the
of
the
workflow,
and
this
context,
id
is
then
used
by
a
thing
called
a
workflow
context
provider
and
that's
just
a
class
you
can
implement
in
your
application
and
elsa
will
automatically
invoke
that
at
the
right
time
before
it
executes
a
workflow.
It
will
invoke
your
provider
load
in
your
object,
depending
on
on
your
logic.
A
A
And
what
is
a
refresher?
That's
actually
a
base
class
that
implements
two
interfaces,
one
that
allows
you
to
load
data
from
your
database
and
another
interface
to
save
data
back
to
your
database.
If
your
workflow
needs
it,
many
workflows
maybe
only
need
to
load
in
data.
That's
then
useful
to
your
workflow,
but
never
need
to
make
any
updates.
So
in
that
case
you
would
just
implement,
I
think,
workflow
context,
loader
and
then
there's
also
workflow
context
saver
or
something
like
that
yeah.
So
I
was
referring
to
this
interface.
A
I
load
workflow
context
and
I
save
workflow
context,
and
this
is
a
helpful
base
class
that
takes
care
of
some
plumbing,
but
from
the
from
your
point
of
view,
from
the
application
point
of
view,
you
just
implement
load,
and
here
I
inject
just
an
entity
framework,
a
database
context.
I
get
in
a
context
id
and
this
context
id
this
one
is
what
is
provided
by
this
activity
here.
So
this
activity
associates
the
workflow
instance
with,
in
this
case
the
order
id
and
as
soon
as
this
happens,
the
engine
will
invoke
this
workflow
provided.
A
A
The
order
in
this
case,
and
if
you
set
it
to
burst,
which
is
the
default,
it
will
only
be
loaded
once
the
workflow
starts
or
whenever
set
context,
the
contact
city
changes.
So
that's
also
a
reason
for
the
engine
to
load
a
fresh
copy
from
the
database
or
whatever
provider
is
used
and
then
execute
execution
continues.
All
the
way
until
the
end
is
encountered
or
a
blocking
activity
is
encountered
and
the
blocking
activities
are
activities
like
timers
signal
received,
http,
endpoints
message
received,
etc.
A
From
the
point
it
starts
executing
here
until
it
encounters
one
of
these
activities,
I
just
mentioned:
that's
called
a
burst
of
execution,
so
that
means,
as
it
progresses
through
a
workflow.
It
will
not
invoke
your
workflow
context
provider
at
every
step
of
the
way
you
it
will
not
do
that
unless
you
change
the
to
activity
and
then
it
will
and
now
at
every
step,
it
will
make
a
call
to
lotusing
and
once
an
activity
executed,
it
will
then
call
save
async.
So,
depending
on
your
scenario,
this
may
be
useful
or
maybe
not
depends
on.
A
C
A
A
great
question
I
forgot
to
show
so
here
in
the
settings
of
the
workflow,
there's
a
type
that
you
specify,
so
you
specify
the
context
type
and
not
the
provider
in
lsat2,
and
in
this
way,
if
you
have,
you
can
only
have
one
provider.
If
you
would
have
multiple
providers
for
the
same
domain
model,
it
would
pick
the
first
one
and
that's
not
very
deterministic,
of
course-
and
I
think
that's
a
design
error.
A
What
I
should
have
done
is
allow
you
to
provide
the
provider
type
here
so
that
you
can
potentially
have
multiple
providers
associated
with
a
one
or
multiple
workflows,
which
then
can
contain
different
kinds
of
logic,
because
right
now,
I'm
just
returning
the
order
object
directly.
Sometimes
maybe
you
want
to
provide
a
different
shape
of
your
model
with
additional
data
effects
from
other
sources
potentially,
and
this
may
be
specific
to
a
certain
set
of
flows,
or
maybe
one
workflow
and
then
other
workflows
may
need
similar
data,
but
in
a
slightly
different
shape.
A
A
Workflow,
I'm
so
glad
you
asked.
Let
me
show
you
so
here
I
have
an
elsa
3
workflow
definition
defined
in
code,
and
I
have
two
contexts
for
this
workflow
one
is
called
the
document
context
and
a
customer
context.
So
here
you
can
have
multiple
contacts
for
your
workflow
and
here
instead
of
the
workflow
being
bound
to
a
domain
model,
you
you
actually
create
a
workflow
context
and
you
get
to
specify
what
provider
you
want
to
use
for
a
given
model.
A
So
here
I'm
using
a
document
provider
for
a
document
you're
a
customer
provider
for
a
customer,
but
I
could
also
have
I
don't
know
a
document
provided
too,
for
example,
if
if
that
made
sense,
in
my
use
case,
that's
more
flexible
and
also
the
fact
that
you
can
provide
more
context
to
our
workflows
that
increases
the
flood
even
more
in
this
api.
You
can
then
directly
access
your
context
like
this.
The
context
will
be
available
to
this
workflow,
so
it
will
not
be
loaded
on
demand.
A
As
you
invoke
gaps,
it
will
already
have
loaded
in
the
way
it
works
in
elsa
through
middleware,
so
in
elsa
2.
The
workflow
context
is
baked
in
it's
part
of
the
core
library,
but
here
in
lsat
3,
it's
an
optional
module.
So
if
you
never
need
to
use
workflow
context,
it's
not
even
there,
but
if
you
want
it,
you
a
little
module
called
workflow
context
and
it
provides
a
middleware,
and
this
middleware
is
that's
the
way
elsa
3
workflow
execution
works.
A
It
has
middleware
at
the
level
of
workflow
execution,
so
there's
steps
you
can
have
executed
before
it
starts
actually
executing
a
workflow
and
after
of
course,
and
at
the
level
of
activities
themselves.
So
as
an
activity
executes,
you
can
invoke
application,
specific
logic
before
activity
and
after,
but
this
middleware
it
will
look
for
some
workflow
properties.
So
this
this
is
an
application.
This,
which
is
a
dictionary
which
is
a
yeah.
It's
a
dictionary
that
can
contain
application.
A
Specific
values
and
modules
can
leverage
that,
by
inserting
modules
specific
in
disk-
and
here
it's
got-
it
has
a
workflow
context
collection.
If
not
it's
just
going
to
continue.
If
there
is
a
workflow
context,
collection,
then
for
each
of
them
it's
going
to
be
it's
going
to
instantiate
the
associated
provider
invoke
its
load,
async
method.
This
could
be
your
custom
provider.
A
This
one,
so
here
as
an
example
here
I
have
a
document
provider,
so
it
implements
load-
and
this
is
just
dummy
code,
of
course,
where
it
acts
as
a
database.
Here,
it's
just
instantiating
a
new
document
object
here,
but
that's
call
we
do.
It
will
invoke
your
custom
provider
each
of
your
provider
that
you
installed.
So
in
this
case
it
will
be
those
two
and
then
it
makes
it
available
to
workflow
execution
context.
So
it
will
be
available
to
your
workflow.
A
Then
it
will
actually
invoke
the
workflow
or
whatever
comes
next
in
the
middleware
pipeline
and
then
after
that,
afterwards,
it's
again
going
to
iterate
over
your
workflow
context
and
this
time
it's
going
to
invoke
safe
async.
What
I
want
to
show
here
is
that
this
pipeline,
it's
very
extensible
and
you
can
imagine
multiple
kinds
of
modules
that
take
advantage
of
this
infrastructure
and.
C
Everything
on
this
online
23
and
24.
I
would
bit
worried
about
the
implementation
there.
Maybe
I'm
getting
it
wrong,
but
as
I
see
it
now,
you
have
this
document
context
in
a
customer
context
and
to
get
it,
you
just
provide
the
context.
For
me
it
seems
that
there
is
only
one
context
id
available,
so
in
elsa
2
you
had
that
context
id
that
you
could
set
right.
Yeah.
C
A
So
that's
a
good
point
and
at
this
point
there's
not
even
any
any
state
that
you
could
leverage
to
load
the
correct
model.
That
aspect
too
is
extensible,
so
this
provider,
for
example,
could
choose
to
use
the
correlation
id
of
the
workflow
execution
context.
So
here
I'm
just
generating
something
it
could
be
correlation
id
which
doesn't
even
exist
could
be
a
custom
property
or
an
attribute
that
you
associate
with
your
workflow
instance.
A
So
it's
it's
not
going
to
be
limited
to
just
a
workflow
context
study
because,
as
you
correctly
point
out,
wouldn't
make
sense
here,
there's
two
different
kinds
of
primary
keys
or
two
identifiers.
You
would
need-
and
maybe
maybe
you
want
to
load
the
document
based
on
the
customary
or
maybe
this
we
in
order
for
a
customer.
It
could
be
anything
like
that
and
it
would
be
up
to
you
to
determine
how
to
access
these
values
and
what
made
through
your
providers
doesn't
even
exist.
At
this
point,
yeah.
C
Actually,
I
don't
think
it
should
be
determined
by
the
document
provider,
because
then
the
document
provider
needs
to
know
the
implementation
details
of
the
workflow
know,
which
property
it
should
use
to
get
a
document
id
or
primary
key
for
the
document
or
the
customer.
I
think
it
should
be
provided
in
that
get
function.
A
C
C
E
Yeah,
maybe
if
you
are
going
to
deal
with
multiple
providers,
then
maybe
we
have
to
have
an
explicit
activity
to
load
the
items
from
the
provider
that
way
it's
more
clear
which
item
from
which
provider
we
are
getting,
because
with
one
context
and
one
provider
that
is
straightforward.
But
here,
for
example,
we
need
to
decide
when
we
want
to
load
the
document
when
you
load
want
to
load
the
customer.
For
me,
it
feels
that
an
explicit
activity
will
be
more
logical.
A
Yeah,
so
you
can
always,
of
course,
have
a
customity
that
loads,
whatever
you
need
to
be
loaded,
make
it
available
to
the
workflow
through
output.
The
end,
the
point
of
having
these
context
providers
is
so
that
it
happens
automatically
before
and
after
each
activity.
That's
the
frequency
you
want
or
for
every
burst
of
execution.
So
so
maybe
if,
if
you
want
to
load
those
things
explicitly
at
one
point,
then
maybe
context
provider
isn't
that
useful
in
that
scenario,
because
you
would
already
be
able
to
to
do
so.
C
Because
it's
going
to
be
quite
tricky
like
what
you
mentioned
with
the
burst
of
activities
which
burst,
is
needed
or
is
in
which
context
is
this
burst
activated?
Otherwise
you
might
have
do
some
alterations
to,
for
instance,
the
document
and
nothing
to
the
customer,
but
still
the
customer
gets
saved
anyways.
Indeed,.
A
So
these
context
providers
primarily
be
used.
If
you
need
the
provided
model
throughout
the
workflow,
if
that's
not
the
case,
then
maybe
explicits
in
the
workflow
to
actually
load
the
object.
You
need
and
then
persist
again
and
then
that's
a
section
of
the
workflow.
That's
the
only
area
where
it's
needed,
then
you
don't
need
the
workflow
context.
Okay,
that's
good
and
maybe
there's
different
structures,
different
strategies
you
could
think
of
where
you
want
some
like
with
aspect
oriented
programming.
There's
you
know.
B
A
Have
logic
that
should
execute
for
every
every
method,
for
example
that
that
x
global
to
your
process,
there
could
be
a
different
strategy
other
than
the
the
context
provider.
This
is
just
one
style,
the
middleware
stuff
and
the
ability
to
associate
custom
data
with
a
workflow
definition,
but
also
with
a
workflow
through
custom
attributes
which
are
just
dictionaries.
You
can
do
a
lot
of
fancy
logic
and
it
can
be
very
application.
Specific.
C
E
A
Yeah,
if
the,
if
both
patterns
match,
then
they're
not
going
to
be
activated,
but
you
would
get
an
error
that
says
there's
more
than
one
workflow
matching
this
route.
So
you
need
to
fix
that
like
having
two
controllers
or
controller
actions
have
the
same
route
pattern.
Then
the
mvc
pipeline
isn't
able
to
figure
out
what
to
serve.
So
it's
got
to
throw
an
error.
F
A
I
wanted
to
add
it,
but
it
requires
more
investigation
in
in
what
the
asp.net
routing
apis
do
internally
and
I
I
want
to
try
and
reuse
as
much
as
possible,
but
I
wasn't
able
to
figure
that
one
out
in
time,
but
I
want
to
add
it
in
the
as
a
future
update,
but
for
now
it
will
always
be
a
string.
Yes,
okay,
great,
I
just
want
to
show
the
pull
request.
A
I
added
some
notes
here:
I'm
stating
route
constraints
aren't
yet
implemented,
so
it
will
always
be
of
type,
but
it
would
be
a
nice
enhancement
to
have
for
sure.
Alright.
So
looks
like
we're
done
just
in
time,
then
we
saw
as
about
the
voting
process,
do
some
testing
and
then
maybe
we
can
start
inviting
the
audience
for
voting
tomorrow.
Hopefully,.
A
All
right:
well,
that's
we'll
just
do
a
bit
of
testing
primarily
concerned
about
the
github
username
and
the
anonymity
of
of
the
process,
we'll
see
what
we
can
do
all
right.
Unless
there's
anything
else,
then
I
say
goodnight
every
everyone
and
thank
you
for
joining
and
then
we'll
see
you
next
week.