From b22a9f8f8c0bf36b60df464f98c700225a8339eb Mon Sep 17 00:00:00 2001 From: Rafael Carnucci Date: Mon, 14 Dec 2020 19:57:33 +0100 Subject: [PATCH] Added EntityChanged Trigger (#512) Co-authored-by: Rafael Carnucci --- Elsa.sln | 14 ++++++ .../Activities/EntityChanged/EntityChanged.cs | 28 +++++++++++ .../EntityChanged/EntityChangedActions.cs | 10 ++++ .../EntityChangedBuilderExtensions.cs | 14 ++++++ .../EntityChanged/EntityChangedExtensions.cs | 15 ++++++ .../Attributes/EntityNameAttribute.cs | 15 ++++++ .../Elsa.Activities.Entity.csproj | 35 +++++++++++++ .../Extensions/ServiceCollectionExtensions.cs | 14 ++++++ .../Extensions/TypeExtensions.cs | 17 +++++++ .../Models/EntityChangedDto.cs | 20 ++++++++ .../Triggers/EntityChangedTrigger.cs | 43 ++++++++++++++++ .../Elsa.Activities.Entity/icon.png | Bin 0 -> 9825 bytes .../Elsa.Samples.EntityChanged.csproj | 18 +++++++ .../Elsa.Samples.EntityChanged/Entity.cs | 9 ++++ .../EntityChangedWorkflow.cs | 17 +++++++ .../Elsa.Samples.EntityChanged/Program.cs | 46 ++++++++++++++++++ 16 files changed, 315 insertions(+) create mode 100644 src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChanged.cs create mode 100644 src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedActions.cs create mode 100644 src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedBuilderExtensions.cs create mode 100644 src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedExtensions.cs create mode 100644 src/activities/Elsa.Activities.Entity/Attributes/EntityNameAttribute.cs create mode 100644 src/activities/Elsa.Activities.Entity/Elsa.Activities.Entity.csproj create mode 100644 src/activities/Elsa.Activities.Entity/Extensions/ServiceCollectionExtensions.cs create mode 100644 src/activities/Elsa.Activities.Entity/Extensions/TypeExtensions.cs create mode 100644 src/activities/Elsa.Activities.Entity/Models/EntityChangedDto.cs create mode 100644 src/activities/Elsa.Activities.Entity/Triggers/EntityChangedTrigger.cs create mode 100644 src/activities/Elsa.Activities.Entity/icon.png create mode 100644 src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj create mode 100644 src/samples/console/Elsa.Samples.EntityChanged/Entity.cs create mode 100644 src/samples/console/Elsa.Samples.EntityChanged/EntityChangedWorkflow.cs create mode 100644 src/samples/console/Elsa.Samples.EntityChanged/Program.cs diff --git a/Elsa.sln b/Elsa.sln index 684499aae..6e05d2482 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -170,6 +170,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Backend", "sr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.WebAssembly", "src\dashboards\blazor\ElsaDashboard.WebAssembly\ElsaDashboard.WebAssembly.csproj", "{0AA2A003-C79E-4B43-803E-E1150254D2B0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Entity", "src\activities\Elsa.Activities.Entity\Elsa.Activities.Entity.csproj", "{A0A8431F-3A2F-433A-BB0D-EB9627DFA739}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.EntityChanged", "src\samples\console\Elsa.Samples.EntityChanged\Elsa.Samples.EntityChanged.csproj", "{A3149FE4-FD39-4DC2-AA9F-208C7216BC03}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -408,6 +412,14 @@ Global {0AA2A003-C79E-4B43-803E-E1150254D2B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {0AA2A003-C79E-4B43-803E-E1150254D2B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {0AA2A003-C79E-4B43-803E-E1150254D2B0}.Release|Any CPU.Build.0 = Release|Any CPU + {A0A8431F-3A2F-433A-BB0D-EB9627DFA739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0A8431F-3A2F-433A-BB0D-EB9627DFA739}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0A8431F-3A2F-433A-BB0D-EB9627DFA739}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0A8431F-3A2F-433A-BB0D-EB9627DFA739}.Release|Any CPU.Build.0 = Release|Any CPU + {A3149FE4-FD39-4DC2-AA9F-208C7216BC03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3149FE4-FD39-4DC2-AA9F-208C7216BC03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3149FE4-FD39-4DC2-AA9F-208C7216BC03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3149FE4-FD39-4DC2-AA9F-208C7216BC03}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -488,6 +500,8 @@ Global {CCF8D59E-3672-4238-A900-CE879ABF02D2} = {E02BD53A-5B08-47A0-920E-DD537A6AFAAA} {B5EAB378-0002-47FD-A0C1-8931DB577006} = {E02BD53A-5B08-47A0-920E-DD537A6AFAAA} {0AA2A003-C79E-4B43-803E-E1150254D2B0} = {E02BD53A-5B08-47A0-920E-DD537A6AFAAA} + {A0A8431F-3A2F-433A-BB0D-EB9627DFA739} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} + {A3149FE4-FD39-4DC2-AA9F-208C7216BC03} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158} diff --git a/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChanged.cs b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChanged.cs new file mode 100644 index 000000000..afb70ae05 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChanged.cs @@ -0,0 +1,28 @@ +using Elsa.Activities.Entity.Models; +using Elsa.ActivityResults; +using Elsa.Attributes; +using Elsa.Design; +using Elsa.Services; + +// ReSharper disable once CheckNamespace +namespace Elsa.Activities.Entity +{ + [Trigger( + Category = "Entity", + DisplayName = "Entity Changed", + Description = "Trigger when Entity Changed", + Outcomes = new[] { OutcomeNames.Done } + )] + public class EntityChanged : Activity + { + [ActivityProperty(Type = ActivityPropertyTypes.Text, Hint = "Entity Name")] + public string? EntityName { get; set; } + + [ActivityProperty(Type = ActivityPropertyTypes.Text, Hint = "Action")] + [SelectOptions("Added", "Updated", "Deleted")] + public EntityChangedAction? Action { get; set; } + + protected override IActivityExecutionResult OnExecute() => Done(new EntityChangedDto(EntityName, Action)); + + } +} diff --git a/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedActions.cs b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedActions.cs new file mode 100644 index 000000000..986d80d39 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedActions.cs @@ -0,0 +1,10 @@ +// ReSharper disable once CheckNamespace +namespace Elsa.Activities.Entity +{ + public enum EntityChangedAction + { + Added, + Updated, + Deleted + } +} diff --git a/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedBuilderExtensions.cs b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedBuilderExtensions.cs new file mode 100644 index 000000000..6d3a1bb6a --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedBuilderExtensions.cs @@ -0,0 +1,14 @@ +using System; + +using Elsa.Builders; + +// ReSharper disable once CheckNamespace +namespace Elsa.Activities.Entity +{ + public static class EntityChangedBuilderExtensions + { + private static IActivityBuilder EntityChanged(this IBuilder builder, Action> setup) => builder.Then(setup); + public static IActivityBuilder EntityChanged(this IBuilder builder, Type entity, EntityChangedAction action) => builder.EntityChanged(setup => setup.WithEntity(entity).WithAction(action)); + public static IActivityBuilder EntityChanged(this IBuilder builder, EntityChangedAction action) => builder.EntityChanged(setup => setup.WithEntity(typeof(TEntity)).WithAction(action)); + } +} diff --git a/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedExtensions.cs b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedExtensions.cs new file mode 100644 index 000000000..2d6de0953 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Activities/EntityChanged/EntityChangedExtensions.cs @@ -0,0 +1,15 @@ +// ReSharper disable once CheckNamespace +using System; + +using Elsa.Activities.Entity.Extensions; +using Elsa.Builders; + +namespace Elsa.Activities.Entity +{ + public static class EntityChangedExtensions + { + public static ISetupActivity WithEntity(this ISetupActivity activity) => activity.WithEntity(typeof(T)); + public static ISetupActivity WithEntity(this ISetupActivity activity, Type type) => activity.Set(x => x.EntityName, type.GetEntityName(false)); + public static ISetupActivity WithAction(this ISetupActivity activity, EntityChangedAction action) => activity.Set(x => x.Action, action); + } +} diff --git a/src/activities/Elsa.Activities.Entity/Attributes/EntityNameAttribute.cs b/src/activities/Elsa.Activities.Entity/Attributes/EntityNameAttribute.cs new file mode 100644 index 000000000..39cf605d9 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Attributes/EntityNameAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace Elsa.Activities.Entity.Attributes +{ + [AttributeUsage(AttributeTargets.Class)] + public class EntityNameAttribute : Attribute + { + public string Name { get; } + + public EntityNameAttribute(string name) + { + Name = name; + } + } +} diff --git a/src/activities/Elsa.Activities.Entity/Elsa.Activities.Entity.csproj b/src/activities/Elsa.Activities.Entity/Elsa.Activities.Entity.csproj new file mode 100644 index 000000000..2364801e3 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Elsa.Activities.Entity.csproj @@ -0,0 +1,35 @@ + + + + netstandard2.0 + 1.0.0 + latest + Elsa Contributors + + Elsa is a set of workflow libraries and tools that enable lean and mean workflowing capabilities in any .NET Core application. + This package provides the following Entity activities: + + * EntityChanged + + 2020 + https://github.com/elsa-workflows/elsa-core + https://github.com/elsa-workflows/elsa-core + GitHub + elsa, workflows, entity + icon.png + enable + + + + + True + + + + + + + + + + diff --git a/src/activities/Elsa.Activities.Entity/Extensions/ServiceCollectionExtensions.cs b/src/activities/Elsa.Activities.Entity/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 000000000..c2418b68d --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,14 @@ +using Elsa.Activities.Entity; +using Elsa.Activities.Entity.Triggers; + +// ReSharper disable once CheckNamespace +namespace Microsoft.Extensions.DependencyInjection +{ + public static class ServiceCollectionExtensions + { + public static IServiceCollection AddEntityActivities(this IServiceCollection services) => + services + .AddActivity() + .AddTriggerProvider(); + } +} diff --git a/src/activities/Elsa.Activities.Entity/Extensions/TypeExtensions.cs b/src/activities/Elsa.Activities.Entity/Extensions/TypeExtensions.cs new file mode 100644 index 000000000..53ce8ce48 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Extensions/TypeExtensions.cs @@ -0,0 +1,17 @@ +using System; +using System.Reflection; + +using Elsa.Activities.Entity.Attributes; + +namespace Elsa.Activities.Entity.Extensions +{ + public static class TypeExtensions + { + public static string GetEntityName(this Type type, bool inherit = false) + { + var attribute = type.GetCustomAttribute(inherit); + + return attribute?.Name ?? type.FullName; + } + } +} diff --git a/src/activities/Elsa.Activities.Entity/Models/EntityChangedDto.cs b/src/activities/Elsa.Activities.Entity/Models/EntityChangedDto.cs new file mode 100644 index 000000000..6b794e770 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Models/EntityChangedDto.cs @@ -0,0 +1,20 @@ + +namespace Elsa.Activities.Entity.Models +{ + public class EntityChangedDto + { + public string? EntityName { get; set; } + public EntityChangedAction? Action { get; set; } + + public EntityChangedDto() + { + + } + + public EntityChangedDto(string? entityName, EntityChangedAction? action) + { + EntityName = entityName; + Action = action; + } + } +} diff --git a/src/activities/Elsa.Activities.Entity/Triggers/EntityChangedTrigger.cs b/src/activities/Elsa.Activities.Entity/Triggers/EntityChangedTrigger.cs new file mode 100644 index 000000000..d63b415d7 --- /dev/null +++ b/src/activities/Elsa.Activities.Entity/Triggers/EntityChangedTrigger.cs @@ -0,0 +1,43 @@ +using System.Threading; +using System.Threading.Tasks; + +using Elsa.Triggers; + +namespace Elsa.Activities.Entity.Triggers +{ + public class EntityChangedTrigger : Trigger + { + public string? EntityName { get; set; } + + public EntityChangedAction? Action { get; set; } + + public string? ContextId { get; set; } + + public string? CorrelationId { get; set; } + + public EntityChangedTrigger() + { + + } + + public EntityChangedTrigger(string? entityName, EntityChangedAction? action, string? contextId, string? correlationId) + { + EntityName = entityName; + Action = action; + ContextId = contextId; + CorrelationId = correlationId; + } + + } + + public class EntityChangedTriggerProvider : TriggerProvider + { + public override async ValueTask GetTriggerAsync(TriggerProviderContext context, CancellationToken cancellationToken) => + new EntityChangedTrigger( + entityName: await context.Activity.GetPropertyValueAsync(x => x.EntityName, cancellationToken), + action: await context.Activity.GetPropertyValueAsync(x => x.Action, cancellationToken), + contextId: context.ActivityExecutionContext.WorkflowExecutionContext.WorkflowInstance.ContextId, + correlationId: context.ActivityExecutionContext.WorkflowExecutionContext.WorkflowInstance.CorrelationId + ); + } +} diff --git a/src/activities/Elsa.Activities.Entity/icon.png b/src/activities/Elsa.Activities.Entity/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..28dbaafbfe82119161a9b48c7e1fb59fef019c2f GIT binary patch literal 9825 zcmaKSbyytF((Yivf&~i%S=`+TvdBVkhsAXX?(QKF2*HB~cNX^m0Rn*pcPF^J1cH;h z`F-b{@BVSm-RIfe>7MtkuIj3u?y2tg>Z9KM^5v< z7)~EY7X%vs#3X%O%q{I<9v}%M;o|1y;^pN)AUNE8ojlBaIGo(+ z{w+Zk=5Fa`>*8VS>;(EN(cHq>(?gsVq3Qpa;OO!nu}<#)>Lx^oarv0LaPe?*|265~ zKoyn$Kh)9jKWKLkP1yhH`~MW|uI=jrduo3rO?uK%}L3czGd0f^yva`~t$lGLV0BWt}ZO9brx$|K?i#FPG=Pa{tDH zqYI*CS(uxx7tBh|&Djz3kIkaC|5X=R$bXghFRs;p)kRkBzjC<{%5eSl?EmHIe^(*G z=kMiz;ucZ(Pvpa#5aI5Ii0hjdd369lJEb5irR}qDn1u<|>Am~0;@=X2+!DI(WU!s# z&uPw?*0R-Mn4Z|SotR>sa(BGK;VvYgA{(!*O*HHFgF}O`l1P?8N;YiJi|b0#{mXAU zRJ6_P%RArf=C`#&nZ7##CqtRu%i{^5E}rh*)~Wlt<$V=m^=?B^29@}HC`drIxdqAK zAx*uF_1cgV-`&S~VyAJ91i7N0(W=|XI*G;xyuWG;U@fy`K)AX2Z}j>NU2F?v63niF zj#txWsZ>J}R=R`_n80{TAA88WAft&M4RrKF5?kAa<#ulc)-5(rM-w(L=cN24Uw{Lu zTxwT8NIFB1EPne0sAC9E$E!zE{v0%$WX6+c*T>11=9^Cq^JLvTW-* zkCBhWz56&`B1pB!z!%gif*+L`G>;gAqIK&QIwTzcVD*vPnyQ7;c1y9Q!d{n&rw$p| zbn}~I7P2=G$$nwEqeK zn%@0@>6mMMi)f)V9}Yn%C)+&?7ZIU0*T;)qMQ5c&e+huuePXW{^eG+A@(E@FB8dU8 z)#vS@!Eua1Kc`ie21)=-OAhloHrJ)AAhY2DLc)gnW)SxR?$H`Z0kFk>jmAuGYD~@d zyet6VHT#Jz51ru6- zHW9`h!H^YgXmatu{+P9O<&hq^lDK!po_?>RgnN7g>&%+&bpo@cuP>EBk^*YO;LTlL70yosrZO(w}V%Z&!xmqLawKvGc}i zN}tsK_?e#~Ker55z^;GB&ef~xh2Bu)#&MAN&0ba3>o$1FzJF+b^r7=L<<$-P+>&G6g#X zBr_?toWHG{^xqwh_+qMsKV+dQk~MvraQe=?rwey+^dotd5fnBpgV`8d?q~@Yuc6$d zJmiZ;2LSzG@?GYl3TzFqa~)qvLg1>SB6*t{OXJSMMW$IG^A7p!?sDkzV<~ZYEfp== z*YfC&Lyx4N$DR|7lyb35$6AT0oj=Qm8f|(1NIPfYrdXwBxK-Gm*%6n<{b7gCR}1VN z#vc-ee0kwXz#zaPbgfHX0;<_DZ#05rs7QG z6>?^29&Sb>jn4ZUQ#dBEQzA0$bQ`1+VapitJpC zCoPz|?P`k}(^bQD(c#FzTuKj*XMgSVLDGWnr$bbw(d~C5hX(q%0(Rno_&OVi0TZ9J zxetj9Mei$9Om5LVV=)&cKi;0;iUc&` zPsv}V~7D1G*A|M&j0iWEZhujNswT0W<4(KtQW^u&;wYpG%Y z@U$@JlQtG{&365Sox+xbYf(!H=oFY(s46}?!2dR@TOR6%B25mAVUc7Vx!Wy5 zYw!h-LcE9ue?!0;;FMi{by{^21QbBU2BNF~{sLXd0DwUP0N@$`z^@QP{ZKmam^QI>zRxAfEr4!OJ;YpEaTZAv2l&G*FzM}IKWJyB~Ps|kW9a^EAVG!)fFI8 z?C7JG*pi>CP_qF)|=tWMq)DKc6ZQTURqc3}SjqD2@!ITjZD(Z^B-KpraURU!HXp0)3u> za|RMSynWlHx4F)<`L6*GpAqsmh*EF`b62bX4P);E<$EgR5ak*r#e$v$e=8lP_Dt3d zNjn;S<;Y=VFv*urh?ma9V5Kxt0ck-20OA?>r_q+`Rj~@=Q=fS6=q7H_@!I*>Tto%-pNwQ zSOH?SaC7{;e{MyMz;l`{FOf<2X0jmOa91DLv*kk{E6(RB#M;0dtNi~ZU(z1)8CKAEXjxlpZ?tscAbec%T zp@Og}P8c-ZmXhJ0N!!Vt*86_u><(nK@1_G*U-y)W$P7z&gvHwpoalT0Jg21SNMari zHNgVtR?d}(W=G|9t_t-ghh;+KFvQDDTE*E-y;1VNBZI&VJKN3H`Di zON^5RALa&78X~?G5Gj_mW@-j?mJHlYmQTB)GgjuW`YwhM+9Qo2tF}35Nf%7RJLKCl zoR3cmNc&5^S@F{FN_c}0h>_x|d7GCMYfaHgA5AXdoic)upX1)5OFsip3pjE`&(S48 zmcv_C9hd5aSLL%&mRyeWYK!wWY+E_P7jC)t8aj#Tnm48Ugw!fa%_dsjgK~y#5?Lx; zlg)M2u8%b8+x$!8J5Ly_9;F^od=g-BXbi z&gdt#p>Ilh@OB6Z$s{j}!Va#%;byR}R=ndT)i-M4_Pxw*%!WiU$c4Vl)Fqmsv$%@a z8`S(yP}yE|3%KN+Htu}s+C2Bt7o7SEMVX`e(f0nLW|X8(_Qm*feX~h{3Ql8Dt()^L z;zi+z4kO4*L$&iz3(~bashdF%2^Rv91 z?dTpBkq`MmxE>hk6?{!exy$oOla7i8ApUYY#V8m)RDitas=}yE=f!+$@)`Q@WsAvf zEcZh85+)YGY-Duy+$HJ&nbcyxk2eJGjzQ?O$u^8_IC{ITmkbwUmS_wV zSUUIO;)LalDq=mhGCWwmj0Rbv-bIGZQwfl@ku&@*VIBX*+;eg9S3Bz=CC~2B+miSv zs9R+47_ZqR#9ie~{Eq|{>U;?W?55Pk#!1UToCbHlkBdjL+QzA8tIG#mXTRWKe=id# z6;D2d#`O`L@HIr$aC$x>L1O1rQ|LXb0!cWHBAc9+q&*L&2)vV6t<51HNQy#2vZl(f zzEa;Vd>Y2a_D?4uJDCAlXLpOx&5)NCL z1jgpi=1lcGbezdS&dn`!ij~Q17Yw7Mf9;H_eG+_pWrA{R-`&p>9HymyHQ%t}&fA;y zxvTi8tRU}NbL4dI)s?@i|WVD zENNTY1)oT@z`Ktw9D5pB@WAQxzIiI-+@$fO_m>)-2Ohy*x!cF>_OqM~9{m<>F7ZvB ziXFUSHe+DFdQAo|O6A(x1(Be~(|UF3OvWex?VVt0!kL`XApX6XHlQO#Rs@rDLZR&1P$j z!uF+}J#1X^75(%r?7!pEE(KMZG$v*UIWtltB`ZOE%xuk8srIMqBdn?8H*%^AWwKYs zH|X-ZHB`Xlht86DeR4{>s^wc5#N`W(_Ty_ZQgzSR^f5_(^!L9{;V_i`K*~WxYtuN; zVk^nFmLXkxCk-;9UH=-kPell?87bF!A(>1m@rxXc)aI?w`nd|D%TI2lBXHMjEC_DU z2rs72#r_qr$4yxE8D+L`zO$5|(gVX^+B;o+$yyphP6DS5$DTwuYV2^HkHOSPFUibx z*{}Q=8s!`l`+$AculnZk1QIRg8%@-AQofPK9?zDX&%~GZ3mx;;`2$bHMZFHW8=W5B zR2;Az5cT8Y;_|zH=RaRrV;fv6o696`Pl;{HRNStSM>WZtWJ+U(-^pRwUy7$&e&k;w z2_SnHLF%}2ta5yOe14VnjC}grhVkvuEZxQYYm;t!T@}l^v9lm0=Fg*=6AXn54a|-0 z6`TI|iPltkHH;rv_NtkOv4uu!zUHt|eXZ1bm8jS&_AoLs!tX!xbfH-Y{L9{uVx#@J z=!_HNQud3G@S8)IU6Sx=(^ncnI|3_20hLjmKhJ+%=GDOlS?xV48opO)l?YObe$MH* zbK-6J{Mn}CSNO?G`5zf-1)CqBD+5p4(&({*y$QmD_aeTVT^uicP|XtM48z+aO1m{o z_{EluY2I^c?y-G=sq(|IXyZ zbuSU3UHFQicR3=TG%Sjkjq#~t3*EABNyqj}n4N>z!;Bw^_<39Ik;e2ev{fe&Pe8`#YPN8VJ$r#F2BL=*uTa&c5et(0`|4+N_@^a18)7iEO} z&dU_6dR3WC@`g%YS}qYc`#8}J_`N~(sZMqQ+P&d+eeqHrXVTm%*2e0;xK1j4I0nU;kuO>)-T=d9B8www0fqLyr-vqH#GOE<$kd+o<>;*9&B&RnW|-i zJ55``lO-xT7on}iXa{8XF|?9nmwjuX^W|1Z!$#z0U(4w1cx8VOTv%`X*)`MBg%LgK zgdIV)S{7HaX{%4{_h>SP!q9Q#43UNKADKRWP56g?Hq4cVZP@`$cZuVrmGx+JaVAB( zx+ee=BcrBE0|9UEH5v=KUGHO z`0Fv9(?pmlj2VO!@*Ry$JU}C8W@yjja^PfhV?(9g?~+KhN#|uA+tuW7f@HsiFHkDtcO<*&PX>&aj&oMAMc8Y{2o{<_1hB-8f-Wz=8&^PH{SE9zJ%_qifp%V7;&o! zzZ`dtkVHeHEZns6d}8t4s8xk@fjzes$uzzfR6SY~VTwNX?X8~9($4;Dxx8_!SFtMP z%Xq~6OC^n=d%Sw{d7;^vY3?JFn$75P;O0?#jB2L(iik(?HNEJh1ET;&CfJsfcbCML z1nZR7>8)LYZ&J1RyB^6I2a$9RUJkB_h;th=|DjaJ&YR^_$9 zXr6a~{KsD7R^{idQ~X$$MzV+*(Q$LTD~ocT8Sb33JeAw^(x=po&ryzWlj8CH^>pgS z-hE4b1MC;0-=BvRxSzdy)1pOPm_*@b#94ldy(&+_vQ7Sh%1*grh0hRCFx&8~{7n;2 zB(WTHqO@Ir^W9=rBnC~B{jU^`i)+`+^^>E_S*)|yZ{9Pu&N#eby?tVe?YP(!A!vy_k{DHK`BZ!4UhDEO z{bPgQG?vPV`P8$3`m-KP)A6DYJK=A&6jM3F<=&XF*tgELxHFmKZOr5dmDBo?_ZgLT z+-%#oy3nM3kEK)z$0n670M{g8n?^g&PiXZ;wYqM^X}62Y8QBrAW`7UIo-Q4g$D*?b zx-^L$7aNMdMTCZ7SobV56J|F>o*caN|J@MJj3VfRBS8spzEz- z6-lg!o^$%Q;4t*Aaj@f^XOVG7&{V~qzYRVHNgssD@#?{DulQJRyK>4y*YAI3$EpeJnS!8TUUESPu>Tb* z2ANvduerrV?0KGI>$>qBzMt*$JIdF6=W7c-d#>E~xVum>al_Jelk4|_2eXx3 z+s+7ZW&Nd}!DllnVlG3?v#VOf*rI8r2G@i{vFN~wVm=9HKfR$O^2f9M9^IYt0)u1> zE63{yLV3%|_l7cVmHMg|DohZH*3dI__HlQ(bzp({Xmu6L7IdBc^a%&$uWLEhRwY;Wy)H1y*%yf5t zBkAJUT2esQglO`hULjSW-#}~ZQmZFHs4Nm9W0b+~!LL(kpp)XcfqnF`Lr%gA(IvXq zwdMg*hOs`rmn9QLN?i&-DB7d^ry1%#&aX6zLVkR>Y7k-A4@6v z74t6!U2;PW&Z5889Udmb2jCmmObl5!)JWU1XdGV^t9-&@iGOp>{YiO%q~iM8$44V? zs*G(Ib3pj1P76IfJ+ooWvyX|Zknr>E7tZRB_csu(X1ioon}8y$l<`uBF5V~?l&^xP z%^sSv?Rr&4WHHt1iL%dg=d^2%S32>ySkt7#v7$_@yF$^%PO-L@#TO+{1c@smBQX$p zzZe(2u$`siP~sPNY3u9js|o=B*P|L27&ghy)e6_Qk3eZ=QW6ms4vx+nGvjw=NV#5B zChc;JML*14N3t>B2_dPAydI7EmAPnC6ZCK-q^P12E{~+n6M;*q8DVy|t5-Wk3VBP6RRAnlYgL9X?&o!oi^u80vZBhCz9Espsk$*(fC8wd^i;RVHOq^h49e#*t!)&4Dt}jI8ZI+KouQ> zNbSAZn|wW?knsDdwG=yPMTBND6$OQ|Oau<8!0A&U-hHOZP;D?6O5-U&<<=FIQuibP z$$3I(g;oL^NIxIsdTBdR*zZ=V$WL0~Qf6Q4btHOwK8T6W0a(4OKEWjyvr03vmRd8a zaT?5Hd?DzRPe3Q}BZCCs&3J-K&7-NRB-q?y_P~(3aP4qa#A)27;o-sWhYdXI;zRvK zHrn(4<7QLGJt=7gzR2|MPW}wU9%S<)!pzGh-NId2azC z;x%?Sm%?UCU)`gJ`0!;Gs~C7BKBVcELW)A$|V_}I# zE~AFTVBoaVJjH*9N3EciEtX&}@MqQF(!qYjwPl8vojv;Y;vvoNVwb_n9{@IS#0+;o zpP6dbZ)bblUt_lD>5VbZW6$u#Qi#hToK6~M|K|~%BEk3dbzutg?O!(X|$WB&r*%Z#sHI?_Fjl1`P;TtSI0l- zy}=;AJkdJd-wt|XY{zz{`g3WiOn>sK)TG@{yEDibu3h#Fk?Xmb&?~eo;mq%>jPY}! z#>qkd+2(CJcl$k6Lp4)afrdseDc~g{nMr$4NNw(loWu$hJ3x`N+nslnF{)5ZW`%4G zCR?QfZ*CrjWoLd=+d6%jpDN<~h|C{=`$|DIucwfH%?kdbHg3-g`aC=$ zqMSovyHnn&h}vAoGL>x?k!?@c$cm})xt{*>>{|biJjTKk07NI9{eC(ab#Oqg0S^Gn z-OGREC1ejvK>;?w1K4OEaN4h{HXLo3fRLwi*3*UT^3crie@Z^8AF>JAi)}jV2ZI_A zyPDF!4I3j(1iROjrTmcqdU`FK0qvT!x-9Eda03|tMnX&^WT{JWgaOp>{NXMiKxJe6LC1c;{Nc|! za|0a!MwJLofVO*tB|8;1zBLvtKtnKEIw$OHJhH zvKY9EHVB%f`{pHb zGpJmnTBk&8Jv}x8gy@BpU{HN~A~XLOPLcC-b$>fM$M{<6P0aW*5MtDgF3B;!%gV#l znN(h2oo3TAK56OAnzw`mh|nkL6Ef;*h&(_7ofPXyHv12`8pHt*`aO(NAF{QbdfCE} zO#Hlyvy#RD2%(77VJr9AjM9?`Oj5y9svo3L#zO+Q(w{U15ZC$@5$L{4NI@4jmPG+V zqFo$q&fylxOrbDh4hib5Gku9u8~{XVL@4IoW}QsX_643i{@mHk&Fjq4^n5mna-woHenpYO*l$Z8uc{rpsq9cRLU*@=`Za=i@hSlWJN^2fZL!_K~PcX8-` z?IpmEmIG^d#ICKI$6)(rQ_j@JPD77`3LZY)^ruT#cWj2ycr|rk7w|m7Kh_WW{ob-4 z+Ml!2MhD_iv)?|TTQ8+Svzk54^EspI$8|lu($&;ZRFQxIYrOhulccxC%M2v6F2h(OuM$RZEuweX}1jYA>#MSUo-b?{j4P%EB^0O zBex*nPj_=~5AQ~V*eQ##aQ))YV}t5d74I8f)-CHt(-0(}K(Ww}Ou3Nd@1ZXRh^lOr Iv{~r?0hzVtHvj+t literal 0 HcmV?d00001 diff --git a/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj b/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj new file mode 100644 index 000000000..1d3a70be6 --- /dev/null +++ b/src/samples/console/Elsa.Samples.EntityChanged/Elsa.Samples.EntityChanged.csproj @@ -0,0 +1,18 @@ + + + + Exe + net5.0 + false + + + + + + + + + + + + diff --git a/src/samples/console/Elsa.Samples.EntityChanged/Entity.cs b/src/samples/console/Elsa.Samples.EntityChanged/Entity.cs new file mode 100644 index 000000000..8e1ae4506 --- /dev/null +++ b/src/samples/console/Elsa.Samples.EntityChanged/Entity.cs @@ -0,0 +1,9 @@ +using Elsa.Activities.Entity.Attributes; + +namespace Elsa.Samples.EntityChanged +{ + [EntityName("Test-Entity")] + public class Entity + { + } +} diff --git a/src/samples/console/Elsa.Samples.EntityChanged/EntityChangedWorkflow.cs b/src/samples/console/Elsa.Samples.EntityChanged/EntityChangedWorkflow.cs new file mode 100644 index 000000000..2838cf3ca --- /dev/null +++ b/src/samples/console/Elsa.Samples.EntityChanged/EntityChangedWorkflow.cs @@ -0,0 +1,17 @@ +using Elsa.Activities.Entity; +using Elsa.Activities.Console; +using Elsa.Builders; +using Elsa.Activities.Entity.Models; + +namespace Elsa.Samples.EntityChanged +{ + public class EntityChangedWorkflow : IWorkflow + { + public void Build(IWorkflowBuilder workflow) + { + workflow + .EntityChanged(EntityChangedAction.Added) + .WriteLine(context => $"Entity '{((EntityChangedDto)context.Input).EntityName}' was '{((EntityChangedDto)context.Input).Action}'"); + } + } +} diff --git a/src/samples/console/Elsa.Samples.EntityChanged/Program.cs b/src/samples/console/Elsa.Samples.EntityChanged/Program.cs new file mode 100644 index 000000000..af897bd58 --- /dev/null +++ b/src/samples/console/Elsa.Samples.EntityChanged/Program.cs @@ -0,0 +1,46 @@ +using System.Threading.Tasks; + +using Elsa.Activities.Entity; +using Elsa.Activities.Entity.Triggers; +using Elsa.Activities.Entity.Extensions; +using Elsa.Services; +using Elsa.Triggers; + +using Microsoft.Extensions.DependencyInjection; +using System.Linq; + +namespace Elsa.Samples.EntityChanged +{ + /// + /// Demonstrates the use of declarative composite activities. + /// + class Program + { + static async Task Main() + { + // Create a service container with Elsa services. + var services = new ServiceCollection() + .AddElsa() + .AddConsoleActivities() + .AddEntityActivities() + .AddWorkflow() + .BuildServiceProvider(); + + // Run startup actions (not needed when registering Elsa with a Host). + var startupRunner = services.GetRequiredService(); + await startupRunner.StartupAsync(); + + var workflowSelector = services.GetRequiredService(); + + var workflowSelectionResult = (await workflowSelector.SelectWorkflowsAsync(evalute => + (evalute.Action.HasValue == false || evalute.Action == EntityChangedAction.Added) + && (evalute.EntityName == null || evalute.EntityName == typeof(Entity).GetEntityName()))).First(); + + var workflowRunner = services.GetRequiredService(); + + await workflowRunner.RunWorkflowAsync(workflowSelectionResult.WorkflowBlueprint, workflowSelectionResult.ActivityId); + + } + + } +} \ No newline at end of file