Skip to content

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 true zurü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:

protected override void Execute(ActivityContext activityContext)
    {
        var timeout = Timeout.GetValue(activityContext);

        var iterations = timeout / 100;
        for (var i = 0; i < iterations; i++)
        {
            Thread.Sleep(100);
            activityContext.ThrowExceptionIfStopRequests();
        }
    }