WMS Einstellung: IWmsActivitySettingWithMapping
Beschreibung
Mit dem Interface „IWmsActivitySettingWithMapping“ kann der WMS-Benutzer zu einer Einstellung Zuordnugnen anlegen.
Verwenden Sie zusätzlich das Interface „IWmsActivitySettingWithMapping“ in Ihrer Implementierung von IWmsActivitySetting.
Häufige Anwendungsfälle:
Im Workflow muss mit Daten (i.d.R. mit IDs) aus dem Drittsystem gearbeitet werden. Um zu vermeiden, dass der WMS Benutzer die IDs kennen und in Ihre Aktivität eintragen muss sind Zuordnugnen notwendig
Aufbau der Interfaces
IWmsActivitySettingWithMapping
Das Interface dient nur der Verbindnung Ihrer WMS Einstellung: IWmsActivitySetting zu der Mapping-Implementierung
Eigenschaft / Methode | Beschreibung |
---|---|
Type WmsMappingType | Typ der Klasse die das Interface WMS Einstellung: IWmsActivitySettingWithMapping#IWmsMapping implementiert |
IWmsMapping
Das Interface dient der Implementierung des Mapping-Controls (Beispiel: Zuordnungen#DMS)
Eigenschaft / Methode | Beschreibung |
---|---|
Type[] VariableTypes | Typen der zu erstellenden Variablen (muss IWmsMappingObject implementieren) |
UserControl Content | Inhalt (GUI), der im Menü "Zuordnugnen" angezeigt werden soll. |
bool Initialise(setting, variables) | Methode, die einmalig beim Laden der GUI aufgerufen wird. Ab WMS 1.1.2 Damit Sie Zugriff auf den Wert der Einstellung haben, ruft das WMS vor dieser Methode IWmsActivitySetting.Initialise(value) auf. |
IEnumerable<WmsMappingVariable> GetMappingVariables() | Methode, die aktuellen Werte der Mappings liefert, welche als Variable angelegt werden sollen. |
string GetCloseConfirmMessage() | Methode, die eine Meldung zurückgibt, wenn der Dialog mit den Mappings geschlossen wird. Sie können auch nur null oder einen Leerstring liefern, wenn Sie diese Funktion nicht benötigen. |
IWmsMappingObject
Diese Interface beschreibt den Typ der Variable, die das Mapping anlegen soll.
Eigenschaft / Methode | Beschreibung |
---|---|
Name | Name des Objects aus dem Drittssystem, um das Element zu identifizieren und bei Bedarf einen Datenabgleich durchzuführen |
Beispiel
Implementierung IWmsActivitySettingWithMapping
Beispiel IWmsActivitySettingWithMapping
using System;
using System.ComponentModel;
using System.Windows.Controls;
using Accantum.Wms.ActivityContracts.Mappings;
using Accantum.Wms.ActivityContracts.Settings;
namespace ActivitySample.Activities.ActivityWithMappings.MySettingWithMappings
{
public class MySettingWithMappings: IWmsActivitySetting, IWmsActivitySettingWithMapping
{
//... Die Implementierungsdetails zu IWmsActivitySetting unterscheiden sich nicht. Sie finden Sie im Beispiel zu IWmsActivitySetting
//Typ der das Interface IWmsMapping implementiert
public Type WmsMappingType => typeof(MyMappingImpl);
}
}
Implementierung IWmsMapping
Beispiel IWmsMapping
using System.ComponentModel;
using Accantum.Wms.ActivityContracts.Mappings;
using Accantum.Wms.ActivityContracts.Settings;
namespace ActivitySample.Activities.ActivityWithMappings.MyMapping
{
public class MyMappingImpl : IWmsMapping
{
/// <summary>
/// Variable-Typen, die dieses Mapping anlegt, verwaltet und löscht
/// Die Variablen, die angelegt werden, sind von diesem Typ
/// </summary>
public Type[] VariableTypes => new Type[] { typeof(MyMappingVariableType) };
/// <summary>
/// Die Oberfläche zur Anzeige der Variablen und Zuordnungen
/// </summary>
public UserControl Content { get; private set; }
/// <summary>
/// Initialisiert die Ansicht und die Daten für die Zuordungen
/// </summary>
/// <param name="a_oSetting">
/// Die Einstellung, die zu diesen Mappings gehören (hier vom Typ MySettingWithMappings)
/// </param>
/// <param name="mappingVariables">List mit Variablen aus dem Workflow</param>
public bool Initialise(IWmsActivitySetting setting, IEnumerable<WmsMappingVariable> mappingVariables)
{
var viewModel = new MyMappingControlViewModel(mappingVariables);
Content = new MyMappingControl(viewModel);
return true;
}
/// <summary>
/// Ermittelt die Variablen, die in der Oberfläche ausgewählt wurden.
/// Diese Variablen werden schließlich im Worklfow angelegt, alle anderen von diesem Typ werden gelöscht
/// </summary>
/// <returns>List der anzulegenden Variablen</returns>
public IEnumerable<WmsMappingVariable> GetMappingVariables()
{
//Nur weiterleiten an das ViewModel
if (!(Content?.DataContext is MyMappingControlViewModel viewModel))
return new List<WmsMappingVariable>();
return viewModel.GetMappingVariables();
}
/// <summary>
/// Methode, die eine Meldung zurückgibt, wenn der Dialog mit den Mappings geschlossen wird.
/// Wenn leer oder null, wird kein Dialog angezeigt
/// </summary>
/// <param name="selectedVariables">die ausgewählten Variablen</param>
/// <returns></returns>
public string GetCloseConfirmMessage(IEnumerable<WmsMappingVariable> selectedVariables)
{
//Nur weiterleiten an das ViewModel
if (!(Content?.DataContext is MyMappingControlViewModel viewModel))
return null;
return viewModel.GetCloseConfirmMessage(selectedVariables);
}
}
}
Implementierung Mapping-Oberfläche
Beispiel Mapping Control
<UserControl x:Class="ActivitySample.Activities.ActivityWithMappings.MyMapping.MyMappingControl"
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:myMapping="clr-namespace:ActivitySample.Activities.ActivityWithMappings.MyMapping"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance myMapping:MyMappingControlViewModel}">
<Grid Margin="10">
<DataGrid ItemsSource="{Binding Items}"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserSortColumns="True"
AutoGenerateColumns="False">
<!--SelectedItems="{Binding SelectedItems}" geht nicht so einfach-> da wäre ein Behaviour notwendig-->
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="" Binding="{Binding IsSelected, Mode=TwoWay}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTextColumn Header="ID" Binding="{Binding Id}" IsReadOnly="True"/>
<DataGridTextColumn Header="Variable" Binding="{Binding VariableName}" IsReadOnly="False"/>
<DataGridTextColumn Header="Kommentar" Binding="{Binding Comment}" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>