Skip to content

Neuen Provider erstellen

Provider-Library

Für einen neuen Provider wird ein Projekt vom Typ Classlibrary gemäss elego Projektstruktur erstellt und das Nuget Package Eis.Framework.Business.Base aus dem Eis.azure.feed hinzugefügt.

Namenskonvention

Wichtig: Der Namespace muss zwingend mit Eis. ... beginnen. Sonst werden eingebettete Ressourcen und die Bausteine nicht berücksichtigt.

Nun wird das Provider-Interface und eine konkrete Implementierung erstellt.

using Eis.Framework.Business.Core;

namespace Eis.MyDemo.Service.Demo
{
    public interface IDemoProvider : IProvider
    {

    }
}
using Eis.Framework.Business.Base.Provider;

namespace Eis.MyDemo.Service.Demo
{
    internal class DemoProvider : ProviderBase, IDemoProvider
    {
        protected override void InitializeImpl(IDictionary<string, string> parameters)
        {
            base.InitializeImpl(parameters);
        }
    }
}

Provider integrieren

Der Provider muss dem Service als Projektreferenz hinzugefügt werden.

Provider mit Parameter

Ein Eintrag in Tabelle PROVIDER_CONFIG bindet eine konkrete Provider-Implementierung an ein Provider-Interface. In Tabelle PROVIDER_CONFIG_PARAM können für jeden Provider beliebig viele Parameter defniert werden. Diese werden normalerweise (Release) per TFS-Variable zugewiesen. Für die Entwicklung (Debug) werden die Werte direkt zugewiesen.

Für das Binding eines Provider und die Definition eines Parameters sind drei SQL-Files gemäss folgender Struktur mit Build Action Embedded resource zu erstellen:

SQL-Files als Embedded Resources

Pcg_g_id

Als ID wird eine neue GUID gelöst und als PK resp. FK verwendet.

Insert_[Providername].sql:

INSERT INTO [env].[PROVIDER_CONFIG] 
            ([PCG_G_ID], 
            [PCG_N_VERSION], 
            [PCG_D_INSERTED_ON], 
            [PCG_S_INSERTED_BY], 
            [PCG_D_UPDATED_ON], 
            [PCG_S_UPDATED_BY], 
            [PCG_D_CREATED_ON], 
            [PCG_S_CREATED_BY], 
            [PCG_D_MODIFIED_ON], 
            [PCG_S_MODIFIED_BY], 
            [PCG_D_DELETED_ON], 
            [PCG_S_DELETED_BY], 
            [PCG_S_KEY],
            [PCG_S_INTERFACE_TYPE],
            [PCG_S_CLASS_TYPE]) 
            VALUES (N'87CD07E4-841B-4D02-B69D-A6712EA5689D'
            , 1
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , NULL
            , N''
            , N'DemoProvider'
            , N'Eis.MyDemo.Service.Demo.IDemoProvider, Eis.MyDemo.Service.Demo'
            , N'Eis.MyDemo.Service.Demo.DemoProvider,  Eis.MyDemo.Service.Demo');
GO

Insert_[Providername]_DEBUG.sql:

INSERT INTO [env].[PROVIDER_CONFIG_PARAM]
            ([PCP_G_ID], 
            [PCP_N_VERSION], 
            [PCP_D_INSERTED_ON], 
            [PCP_S_INSERTED_BY], 
            [PCP_D_UPDATED_ON], 
            [PCP_S_UPDATED_BY], 
            [PCP_D_CREATED_ON], 
            [PCP_S_CREATED_BY], 
            [PCP_D_MODIFIED_ON], 
            [PCP_S_MODIFIED_BY], 
            [PCP_D_DELETED_ON], 
            [PCP_S_DELETED_BY], 
            [PCP_G_PROVIDER_CONFIG_ID],
            [PCP_S_KEY], 
            [PCP_S_VALUE]) 
            VALUES (NEWID()
            , 1
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , NULL
            , N''
            , N'A87CD07E4-841B-4D02-B69D-A6712EA5689D'
            , N'MyConfig'
            , N'MyConfigValue');
GO

Insert_[Providername]_RELEASE.sql:

INSERT INTO [env].[PROVIDER_CONFIG_PARAM]
            ([PCP_G_ID], 
            [PCP_N_VERSION], 
            [PCP_D_INSERTED_ON], 
            [PCP_S_INSERTED_BY], 
            [PCP_D_UPDATED_ON], 
            [PCP_S_UPDATED_BY], 
            [PCP_D_CREATED_ON], 
            [PCP_S_CREATED_BY], 
            [PCP_D_MODIFIED_ON], 
            [PCP_S_MODIFIED_BY], 
            [PCP_D_DELETED_ON], 
            [PCP_S_DELETED_BY], 
            [PCP_G_PROVIDER_CONFIG_ID],
            [PCP_S_KEY], 
            [PCP_S_VALUE]) 
            VALUES (NEWID()
            , 1
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , CURRENT_TIMESTAMP
            , N'SYSTEM'
            , NULL
            , N''
            , N'A87CD07E4-841B-4D02-B69D-A6712EA5689D'
            , N'MyConfig'
            , N'__MyConfig__');
GO

Provider ohne Parameter

Sind keine Parameter erforderlich und gibt es nur genau eine Implementierung, kann anstelle der SQL-Files die Zuweisung per Attributierung in der Provider-Klasse gemacht werden.

[SystemProviderMetadata<IDemoProvider>]
internal class DemoProvider : ProviderBase, MyDemo.Service.Demo.IDemoProvider
{
}

Raum in Betrieb

Optional kann ein Raum definiert werden:

internal class DemoProvider : ProviderBase, MyDemo.Service.Demo.IDemoProvider
    {
        protected override void InitializeImpl(IDictionary<string, string> parameters)
        {
            base.InitializeImpl(parameters);

            RegisterDynamicModule(new DynamicModuleConfigurator<MyDemoModule>()
                .ConfigureModule(RoomTypes.Operation, -1)
                .RegisterActivityCommand<TestActivity>()
                .Module);
        }


        [Module(nameof(RoomTypes.Operation), De = "MyDemo D", Fr = "MyDemo F", It = "MyDemo I", En = "MyDemo E")]
        [Command(nameof(RoomTypes.Operation), nameof(TestActivity), De = "Interne Abrechnung")]
        private class MyDemoModule : DynamicModule
        {
        }
    }