Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

Version 1 Nächste Version anzeigen »

Beschreibung

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

Häufigste 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)
Inhalt



Aufbau des Interface IWmsActivitySetting

Eigenschaft / MethodeBeschreibung
Identifier

Immer gleicher, eindeutiger Identifier dieser Einstellung!

TitleTitel der Einstellung, wird als Name des Menüs verwendet.
TitleToolTipTooltip für das Menü bzw. die Schaltfläche.

Beispiel 

Implementierung IWmsActivitySetting

Beispiel IWmsActivitySetting
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)
        {
            if (Content?.DataContext is HelloWorldControlViewModeloViewModel oViewModel)
                oViewModel.RestoreSettings(a_sSettings);
        }

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

Implementierung ViewModel 

Beispiel Setting-ViewModel
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

Beispiel Setting Control
<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

Beispiel zur Verwendung in der Aktivität
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();
            //}
        }
    }
}



  • Keine Stichwörter