Neue Activity erstellen
Auswahl Basisklasse
Folgende Basisklassen stehen zu Verfügung:
- CodeActivityStandalone (Kontextlos)
- CodeActivityEntity (Entity als Kontext)
- CodeActivitySet (Liste von Werten als Kontext)
- CodeActivityEntitySet (Liste von Entities als Kontext)
- CodeActivityAsync (wird asynchron als Task ausgeführt)
- CodeActivityEntityAsync (wird asynchron als Task ausgeführt)
Implementerung
Eine Activity wird im Unterverzeichnis Extension / Activity gemäss folgenden Beispielen erstellt.
Langlaufende Activities, die als Tasks ausgeführt werden, können auf einen Stop des Task-Workers wie z.B. mit StopTaskExecutionForWorkers reagieren. Im ActivityContext stehen dazu folgende Hilfsmittel zur Verfügung:
- TaskCancellationToken: CancellationToken, das mitteilt, wenn eine Stop-Anforderung ausgelöst wird.
- IsStopRequested: Gibt
truezurück, wenn der Task-Executor gestoppt wurde. - ThrowExceptionIfStopRequests(): Wirft eine Exception, wenn eine Stop-Anforderung ausgelöst wurde.
Beispiel einer CodeActivityStandalone:
using Eis.Framework.Business.Base.Activity;
using Eis.Framework.Business.Base.Extension;
using Eis.Framework.Business.Base.Persistence;
using Eis.Framework.Business.Core.Resources;
namespace Eis.MyDemo.Service.Demo.Extension;
[Description(De = "Erstellt ein konkretes Entity für Schnittstelle IDemoEntity", Fr = "", It = "", En = "")]
class CreateDemoEntity : CodeActivityStandalone
{
private readonly ICurrentUnitOfWork _currentUnitOfWork;
// Benötigte Provider können per Dependency Injection integriert werden.
public CreateDemoEntity(ICurrentUnitOfWork currentUnitOfWork)
{
_currentUnitOfWork = currentUnitOfWork;
}
#region In / Out Parameter
[ResourceData(De = "Text", Fr = "", It = "", En = "Text")]
public InputParameter<string> Text{ get; } = new();
[ResourceData(De = "DemoEntity", Fr = "", It = "", En = "DemoEntity")]
public OutputParameter<IDemoEntity> DemoEntity{ get; } = new();
#endregion
protected override void Execute(ActivityContext activityContext)
{
var text = Text.GetValue(activityContext) ?? "";
var demoEntity = Impl.DemoEntity.Builder.Create()
.WithText(text)
.Build();
_currentUnitOfWork.Current.SaveOrUpdate(demoEntity);
DemoEntity.SetValue(demoEntity, activityContext);
}
}
Beispiel einer CodeActivityEntity:
using Eis.Framework.Business.Base.Activity;
using Eis.Framework.Business.Base.Extension;
using Eis.MyDemo.Service.Demo.Impl;
namespace Eis.MyDemo.Service.Demo.Extension;
internal class EditDemoEntity : CodeActivityEntity<IDemoEntity>
{
public InputParameter<string> Test { get; } = new InputParameter<string>();
protected override void Execute(EntityActivityContext<IDemoEntity> entityActivityContext)
{
var entity = entityActivityContext.Entity;
var test = Test.GetValue(entityActivityContext);
DemoEntity.Updater.Update(entity).WithName(test);
}
}
Beispiel einer Execute-Methode einer langlaufenden Actitvity, die auf einen Stop des Workers reagiert: