Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Beschreibung

Mit dem Interface „IWmsActivitySetting“ kann der WMS-Benutzer genau eine Einstellung hinterlegen. Verwenden  Verwenden Sie das Interface „IWmsActivitySetting“ z.B. zur Konfiguration von API-Verbindungen. Auch die [accantum] DMS Verbindungseinstellung nutzen dieses Interface.

Häufige Anwendungsfälle:

  • Angabe von API-Einstellungen (Url zu einem Dienst bzw. einer Rest-API)

  • Angabe von Authentifizierung-Daten (Benutzername und Passwort oder ein

LIzenzschlüssel
  • Lizenzschlüssel)

Paneltitle

Inhalt

Inhalt

Aufbau des Interface IWmsActivitySetting

Eigenschaft / Methode

Beschreibung

Identifier

Immer gleicher, eindeutiger Identifier dieser Einstellung!

Title

Titel der Einstellung, wird als Name des Menüs verwendet.

TitleToolTip

Tooltip für das Menü bzw. die Schaltfläche.

Beispiel 

Implementierung IWmsActivitySetting

Beispiel IWmsActivitySetting
Codeblock
languagec#
titleBeispiel IWmsActivitySetting
linenumberstruecollapsetrue
using System;
using System.ComponentModel;
using System.Windows.Controls;
using Accantum.Wms.ActivityContracts.Settings;

namespace HelloWorld.Settings
{
    public class HelloWorldSetting: IWmsActivitySetting
    {
        public HelloWorldSetting()
        {
        }

        public static Guid SettingUId = new Guid("2ee56307-e8b5-448e-90c4-476f01f3e5a2");

        public Guid Identifier => SettingUId;
        public string Title => Resources.HelloWorldSetting;
        public string TitleTooltip => Resources.HelloWorldSetting_Desc;

        public event PropertyChangedEventHandler PropertyChanged;

        public bool Initialise(string a_sSettings, bool a_bIsWorkflowDefSetting)
        {
            Content = new HelloWorldControl(a_sSettings);
            if (Content?.DataContext is HelloWorldControlViewModel oViewModel)
            {
                //PropertyChanged weiterleiten
                oViewModel.PropertyChanged += (a_oSender, a_oArgs) =>
                {
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(a_oArgs.PropertyName));
                };
            }

            return true;
        }

        public string GetSettings()
        {
            if (!(Content?.DataContext is HelloWorldControlViewModel oViewModel))
                return string.Empty;
            return oViewModel.GetSettings();
        }

        public void RestoreSettings(string a_
sSettings
settings)
        {
            if (Content?.DataContext is HelloWorldControlViewModeloViewModel 
oViewModel
viewModel)
                
oViewModel
viewModel.RestoreSettings(a_
sSettings
settings);
        }

        public UserControl Content { get; private set; }
    }
}

Implementierung ViewModel 

Codeblocklanguagetitle

c#
Beispiel Setting-ViewModel
linenumbers
Codeblock
true
language
collapse
c#
true
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace HelloWorld.Settings
{
    public class HelloWorldControlViewModel: INotifyPropertyChanged
    {
        private string m_sText;

        public HelloWorldControlViewModel(HelloWorldSetting a_sSetting)
        {	
        }

        public string Text { get; set; }

        public string GetSettings()
        {
            // return serialized setting
        }

        public void RestoreSettings(string a_sSettings)
        {
            // restore settings
        }

        private void SetSettings(HelloWorldSettingData a_oSettings)
        {
            Text = a_oSettings.Text
        }

		// Implementierung von INotfiyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Implementierung Oberfläche

Codeblocklanguageymltitle

Beispiel Setting Control
linenumbers
Codeblock
true
language
collapse
yml
true
<UserControl x:Class="HelloWorldSetting.HelloWorldControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:properties="clr-namespace:HelloWorld.Properties"
             xmlns:mySetting="clr-namespace:HelloWorld.Settings"
             mc:Ignorable="d" 
             d:DesignHeight="200" d:DesignWidth="400"
             d:DataContext="{d:DesignInstance {x:Type mySetting:HelloWorldControlViewModel}}">


    <Grid Margin="4" MaxWidth="500" HorizontalAlignment="Left">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*" MinWidth="300"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Label Grid.Row="0" Grid.Column="0" Content="{x:Static properties:Resource.Text}" Margin="4"/>
        <TextBox Grid.Row="0" Grid.Column="1" Margin="4" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"/>

        <!-- weitere Controls ...-->

    </Grid>
</UserControl>

Verwendung in der Aktivität

Codeblocklanguagec#title

Beispiel zur Verwendung in der Aktivität
linenumbers
Codeblock
true
language
collapsetrue
c#
using System;
using System.Activities;
using System.ComponentModel;
using System.Drawing;
using Accantum.Wms.ActivityContracts.Attributes;
using Accantum.Wms.ActivityContracts.Settings;
using ActivitySample.Activities.ActivityWithSetting.MySetting;
using ActivitySample.Images;

namespace ActivitySample.Activities.ActivityWithSetting.V01
{
    /// <summary>
    ///  Diese Aktivität verwendet die Einstellung <see cref="HelloWorldSetting"/>, um z.B. auf einen externen Dienst zuzugreifen.
    ///  Attribut mit der Implementierung von <see cref="IWmsActivitySetting"/> ist nötig, um die Einstellung im Workflow-Studio anzeigen
    /// </summary>
    [ActivityGroup("Acc-Demo")]
    [ActivitySettingsType(typeof(HelloWorldSetting))]
    public class ActivityWithSetting : CodeActivity
    {

        /// <summary>
        /// Aktivität gibt zu Testzwecken den Text aus den Einstellungen zurück
        /// </summary>
        public OutArgument<string> Text{ get; set; }


        protected override void Execute(CodeActivityContext a_oContext)
        {
            //Einstellung aus dem ActivityContext ermitteln, dazu ist der Identifier des Settings notwendig
            WmsSettingsCollection oExtension = a_oContext.GetExtension<WmsSettingsCollection>();
            WmsSettingValue oSettingValue = oExtension[HelloWorldSetting.SettingId];

            //Den serialisierte Wert der Einstellung deserialisieren
            var oMySetting = MySettingData.Deserialise(oSettingValue.SerializedValue);
            if (oMySetting == null)
                throw new Exception("Einstellung ist nicht vorhanden!");
            Console.Out.WriteLine("Einstellung: " + oSettingValue.SerializedValue);

            Text.Set(a_oContext, oMySetting.Text);

            //So könnte ein Aufruf eines Dienst aussehen (MyServiceAdapter sollte Disposable sein)
            //using (var oServiceAdapter = new MyServiceAdapter(oMySetting, a_oContext))
            //{
            //    oServiceAdapter.DoSomething();
            //}
        }
    }
}