Share via


Exemplarische Vorgehensweise: Erstellen einer Geschäftstyperweiterung

Diese exemplarische Vorgehensweise veranschaulicht, wie eine Geschäftstyperweiterung für Visual Studio LightSwitch erstellt wird. Indem Sie eine Geschäftstyperweiterung in LightSwitch erstellen, können Sie Daten auf eine Weise präsentieren, die am besten für Ihre Anwendung geeignet ist, und zwar ohne den Datentyp zu ändern, mit dem die Daten in der zugrunde liegenden Datenbank gespeichert werden. Sie können in der Datenbank z. B. Werte im Decimal-Datentyp speichern, aber den integrierten Money-Geschäftstyp zum Anzeigen dieser Werte im Currency-Format auf dem Bildschirm verwenden und so ein Wertsteuerelement zum Anzeigen, Bearbeiten und Überprüfen der Währung bereitstellen.

Für jede Geschäftstyperweiterung müssen Sie die folgenden Aufgaben ausführen:

  • Erstellen eines Erweiterungsprojekts

  • Angeben des zu überschreibenden Datentyps

Die folgenden Aufgaben sind optional:

  • Testen der Geschäftstyperweiterung

  • Definieren eines entsprechenden Steuerelements für den Geschäftstyp

  • Definieren der Validierung für den Geschäftstyp

  • Hinzufügen einer benutzerdefinierten Eigenschaft zum Geschäftstyp

  • Erstellen eines Eigenschaften-Editors für Geschäftstypeigenschaften

Vorbereitungsmaßnahmen

  • Visual Studio 2013 Professional

  • Visual Studio 2013 SDK

  • LightSwitch Extensibility Toolkit für Visual Studio 2013

Erstellen eines Projekts für die Geschäftstyperweiterung

Der erste Schritt besteht darin, ein Projekt zu erstellen und eine LightSwitch-Geschäftstypvorlage hinzuzufügen.

So erstellen Sie ein Erweiterungsprojekt

  1. Wählen Sie in der Visual Studio-Menüleiste Datei, Neu und Projekt aus.

  2. Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual Basic oder Visual C#, erweitern Sie den Knoten LightSwitch, wählen Sie dann den Knoten Erweiterungen und anschließend die Vorlage LightSwitch-Erweiterungsbibliothek aus.

  3. Geben Sie im Feld Name den Namen BusinessTypeExtension für die Erweiterungsbibliothek an. Der Name erscheint auf der Registerkarte Erweiterungen des LightSwitch-Anwendungs-Designers.

  4. Wählen Sie die Schaltfläche OK, um eine Projektmappe zu erstellen, die die sieben Projekte enthält, die für die Erweiterung erforderlich sind.

So wählen Sie einen Erweiterungstyp aus

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Lspkg-Projekt aus.

  2. Wählen Sie in der Menüleiste Projekt, Neues Element hinzufügen aus.

  3. Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Geschäftstyp aus.

  4. Geben Sie im Feld Name den Namen PositiveInteger für die Erweiterung ein. Dieser Name wird im LightSwitch-Bildschirm-Designer angezeigt.

  5. Klicken Sie auf die Schaltfläche OK. Dateien werden für mehrere Projekte in der Projektmappe hinzugefügt.

Angeben des zu überschreibenden Datentyps

Ein Geschäftstyp überschreibt einen Basisdatentyp und stellt benutzerdefinierte Formatierung und Validierung bereit. Sie müssen die Metadaten aktualisieren, damit der Geschäftstyp den zugrunde liegenden Typ anzeigt, der überschrieben werden soll. Neben den Basisdatentypen können Sie auch Geschäftstypen überschreiben. Eine Liste der unterstützten Datentypen, die Sie überschreiben können, finden Sie unter Unterstützte Datentypen für LightSwitch-Erweiterungen.

So geben Sie den Typ an

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus.

  2. Erweitern Sie die Knoten Metadaten und Typen, öffnen Sie das Kontextmenü für die Datei PositiveInteger.lsml, und wählen Sie Öffnen mit aus.

  3. Im Dialogfeld Öffnen mit wählen Sie XML (Text)-Editor und dann OK aus.

  4. Ersetzen Sie wie folgt im SemanticType-Element den UnderlyingType-Wert durch Int32, und ersetzen Sie den DisplayName-Wert durch Positive Integer.

    <SemanticType Name="PositiveInteger"
        UnderlyingType=":Int32">
        <SemanticType.Attributes>
          <DisplayName Value="Positive Integer" />
        </SemanticType.Attributes>
      </SemanticType>
    

    Der UnderlyingType-Wert weist LightSwitch an, dass die Daten für den Typ als Int32-Datentyp in der Datenbank gespeichert werden sollen. Die Datentypen müssen in einer LSML-Datei mit dem Modulnamen und dem Namen des Datentyps angegeben werden. Die ":"-Notation ist eine Kurzform für "Microsoft.LightSwitch:". Der DisplayName-Wert wird in der Liste Typ im Tabellen-Designer angezeigt. Daher sollten Sie einen Anzeigenamen angeben.

Sie haben nun einen Geschäftstyp erstellt, den Sie in einer LightSwitch-Anwendung testen können.

Testen der Geschäftstyperweiterung

Sie können die Geschäftstyperweiterung in einer experimentellen Instanz von Visual Studio testen. Falls Sie nicht bereits ein anderes LightSwitch-Erweiterungsprojekt getestet haben, müssen Sie die experimentelle Instanz zunächst aktivieren.

So aktivieren Sie eine experimentelle Instanz

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Vsix-Projekt aus.

  2. Wählen Sie in der Menüleiste Projekt und dann die Option für Eigenschaften von BusinessTypeExtension.Vsix aus.

  3. Wählen Sie auf der Registerkarte Debuggen unter Startaktion die Option Externes Programm starten aus.

  4. Geben Sie den Pfad der ausführbaren Visual Studio-Datei (devenv.exe) ein.

    Auf einem 32-Bit-System ist der Standardpfad C:\Programme\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe, und auf einem 64-Bit-System ist der Pfad C:\Programme (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe.

  5. Geben Sie im Feld Befehlszeilenargumente die Zeichenfolge /rootsuffix Exp ein.

    Hinweis

    Alle folgenden LightSwitch-Erweiterungsprojekte verwenden standardmäßig ebenfalls diese Einstellung.

So testen Sie den Geschäftstyp

  1. Klicken Sie in der Menüleiste auf Debuggen und dann auf Debuggen starten. Eine experimentelle Instanz von Visual Studio wird geöffnet.

  2. Wählen Sie in der experimentellen Instanz in der Menüleiste Datei, Neu und Projekt aus.

  3. Erweitern Sie im Dialogfeld Neues Projekt den Knoten Visual Basic oder Visual C#, wählen Sie dann den Knoten LightSwitch und nachfolgend die Vorlage LightSwitch-Desktopanwendung aus.

  4. Geben Sie im Feld Name die Zeichenfolge BusinessTypeTest ein. Wählen Sie dann die Schaltfläche OK aus, um ein Testprojekt zu erstellen.

  5. Wählen Sie im Projektmappen-Explorer das Projekt BusinessTypeTest aus.

  6. Wählen Sie in der Menüleiste Projekt und die Option für Eigenschaften von BusinessTypeTest aus.

  7. Aktivieren Sie im Projekt-Designer auf der Registerkarte Erweiterungen das Kontrollkästchen BusinessTypeExtension.

  8. Fügen Sie eine Tabelle mit einem Name-Feld des Typs String und einem Score-Feld des Typs Positive Integer hinzu.

  9. Fügen Sie einen Listen- und Detailbildschirm mit der Tabelle als Quelle für die Bildschirmdaten hinzu. Im Bildschirm-Designer können Sie sehen, dass es sich bei dem Steuerelement für das Score-Feld um ein PositiveInteger-Steuerelement handelt.

  10. Klicken Sie in der Menüleiste auf Debuggen und dann auf Debuggen starten. Sie können das Verhalten des PositiveInteger-Steuerelements in der Anwendung überwachen, indem Sie einige Daten hinzufügen.

Wie Sie bemerkt haben, handelt es sich bei dem PositiveInteger-Steuerelement um ein TextBox-Element, das nur numerische Eingaben akzeptiert. Das Verhalten entspricht dem eines ShortInteger-Datentyps. Um den Positive Integer-Geschäftstyp nützlicher zu gestalten, können Sie eine oder mehrere der optionalen Aufgaben zum Erstellen einer Geschäftstyperweiterung ausführen. Diese Aufgaben werden im weiteren Verlauf dieser exemplarischen Vorgehensweise behandelt.

Definieren eines entsprechenden Steuerelements

Beim Erstellen einer Geschäftstyperweiterung wird ein entsprechendes LightSwitch-Steuerelement erstellt. Standardmäßig wird ein einfaches TextBox-Steuerelement in der Extensible Application Markup Language (XAML) definiert, und Sie können den XAML-Code ändern oder ersetzen, um ein benutzerdefiniertes Steuerelement für den Geschäftstyp zu erstellen.

Jedes Steuerelement, das für den Basistyp geeignet ist, kann auch für den Geschäftstyp verwendet werden. Folglich ist das enthaltene Steuerelement erst erforderlich, wenn Sie das Verhalten oder die Benutzeroberfläche ändern möchten.

Sie können zudem mehrere Steuerelemente für einen Geschäftstyp definieren. Weitere Informationen finden Sie unter Gewusst wie: Erstellen mehrerer Steuerelemente für einen Geschäftstyp.

So ersetzen Sie das Standardsteuerelement

  1. Wählen Sie im Projektmappen-Explorer den Ordner Präsentation, Steuerelemente des Projekts BusinessTypeExtension.Client aus, und öffnen Sie die Datei PositiveIntegerControl.xaml.

  2. Ersetzen Sie das <TextBox Text="{Binding StringValue, Mode=TwoWay}"/>-Element durch den folgenden XAML-Code.

    <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
    
            <Slider Value="{Binding Details.Value, Mode=TwoWay}" Minimum="-100" Maximum="100" SmallChange="1" LargeChange="5"/>
            <TextBlock Grid.Column="1" Text="{Binding Value}" MinWidth="30"/>
        </Grid>
    

    Im Code wird veranschaulicht, wie das standardmäßige TextBox-Steuerelement durch ein Slider-Steuerelement innerhalb eines Grid-Layouts ersetzt wird. Dabei werden feste Minimum- und Maximum-Werte für den Schieberegler festgelegt und ein TextBlock-Steuerelement zur Anzeige des aktuellen Werts hinzugefügt.

Zu diesem Zeitpunkt können Sie das Verhalten in der experimentellen Instanz erneut testen. Beim Ausführen des BusinessTypeTest-Projekts sehen Sie, dass das TextBox-Steuerelement durch Slider ersetzt wurde und der Wert in TextBlock angezeigt wird.

Definieren der Validierung für den Geschäftstyp

In den meisten Fällen wird eine integrierte Validierung für den Geschäftstyp hinzugefügt. Um diese Funktionen verfügbar zu machen, ist eine Validierungsregel für den Typ hinzuzufügen. Die Daten können Sie einfach mit dem integrierten Steuerelement verwalten. Es könnte jedoch sein, dass ein Entwickler möglicherweise ein anderes Steuerelement zum Anzeigen des Geschäftstyps einsetzen möchte. Um bei der Verwendung des Geschäftstyps mit einem beliebigen Steuerelement die Validierung zu erzwingen, muss die Validierung sowohl auf dem Server als auch auf dem Client implementiert sein. Nur eine Validierungsregel kann diese Anforderungen erfüllen.

Bevor Sie eine Validierungsregel hinzufügen, muss eine statische Klasse hinzugefügt werden, um einige Konstantennamen für den Datentyp und das Datensteuerelement zu definieren. Diese Namen nutzen Sie später in den Validierungsregeln.

So definieren Sie Konstanten

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus.

  2. Wählen Sie im Menü Projekt den Eintrag Klasse hinzufügen aus.

  3. Wählen Sie im Dialogfeld Neues Element hinzufügen das Feld Name aus, und geben Sie BusinessTypeExtensionModule ein. Wählen Sie dann die Schaltfläche Hinzufügen aus.

  4. Ersetzen Sie in der Datei BusinessTypeExtensionModule den vorhandenen Inhalt durch folgenden Code:

    Friend Module BusinessTypeExtensionModule
    
        Private Const Name As String = "BusinessTypeExtension"
        Private Const ModulePrefix As String = Name + ":"
        Private Const AttributePrefix As String = ModulePrefix + "@"
    
        Friend Class PositiveInteger
    
            Private Const Name As String = "PositiveInteger"
            Public Const GlobalName As String = ModulePrefix + Name
    
            Friend Class ValidationAttribute
    
                Private Const Name As String = "PositiveIntegerValidation"
                Public Const GlobalName As String = AttributePrefix + Name
            End Class
    
        End Class
    
    End Module
    
    namespace BusinessTypeExtension
    {
        internal static class BusinessTypeExtensionModule
        {
            private const string Name = "BusinessTypeExtension";
            private const string ModulePrefix = Name + ":";
            private const string AttributePrefix = ModulePrefix + "@";
    
            internal static class PositiveInteger
            {
                private const string Name = "PositiveInteger";
                public const string GlobalName = ModulePrefix + Name;
    
                internal static class ValidationAttribute
                {
                    private const string Name = "PositiveIntegerValidation";
                    public const string GlobalName = AttributePrefix + Name;
                }
            }
        }
    }
    

Im nächsten Schritt werden Validierungsregeln hinzugefügt. Der Validierungscode, den Sie im Common-Projekt hinzufügen, wird sowohl auf dem LightSwitchLightSwitch-Client als auch auf dem Server geladen. Dadurch wird sichergestellt, dass die gleiche Logik auf beiden Ebenen erzwungen wird.

So fügen Sie eine Validierungsregel hinzu

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus.

  2. Wählen Sie im Menü Projekt den Eintrag Klasse hinzufügen aus.

  3. Im Dialogfeld Neues Element hinzufügen wählen Sie das Feld Name aus und geben PositiveIntegerValidation ein. Wählen Sie dann die Schaltfläche Hinzufügen aus.

  4. Ersetzen Sie in der Datei PositiveIntegerValidation den vorhandenen Inhalt durch folgenden Code.

    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel.Composition
    Imports System.Linq
    Imports Microsoft.LightSwitch
    Imports Microsoft.LightSwitch.Model
    Imports Microsoft.LightSwitch.Runtime.Rules
    
    Public Class PositiveIntegerValidation
        Implements IAttachedPropertyValidation
    
        Public Sub New(attributes As IEnumerable(Of IAttribute))
            Me.attributes = attributes
        End Sub
    
        Private attributes As IEnumerable(Of IAttribute)
    
        Public Sub Validate(value As Object, results As IPropertyValidationResultsBuilder) Implements Microsoft.LightSwitch.Runtime.Rules.IAttachedPropertyValidation.Validate
            If value IsNot Nothing Then
    
                ' Ensure the value type is integer.
                If GetType(Integer) IsNot value.GetType() Then
                    Throw New InvalidOperationException("Unsupported data type.")
                End If
    
                Dim intValue As Integer = DirectCast(value, Integer)
    
                ' First validation rule: value should be greater than 0.
                If intValue <= 0 Then
                    results.AddPropertyError("Value should be greater than 0")
                End If
    
            End If
        End Sub
    
    End Class
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    using System.Linq;
    using Microsoft.LightSwitch;
    using Microsoft.LightSwitch.Model;
    using Microsoft.LightSwitch.Runtime.Rules;
    
    namespace BusinessTypeExtension
    {
        public class PositiveIntegerValidation : IAttachedPropertyValidation
        {
            public PositiveIntegerValidation(IEnumerable<IAttribute> attributes)
            {
                _attributes = attributes;
            }
    
            private IEnumerable<IAttribute> _attributes;
    
            public void Validate(object value, IPropertyValidationResultsBuilder results)
            {
                if (null != value)
                {
                    // Ensure the value type is integer.
                    if (typeof(Int32) != value.GetType())
                    {
                        throw new InvalidOperationException("Unsupported data type.");
                    }
    
                    int intValue = (int)value;
    
                    // First validation rule: value should be greater than 0.
                    if (intValue <= 0)
                    {
                        results.AddPropertyError("Value should be greater than 0");
                    }
                }
            }
        }
    }
    

    In diesem Code wird vom Validierungssteuerelement für den Geschäftstyp die IAttachedPropertyValidation-Schnittstelle implementiert, die eine Funktion mit dem Namen Validate definiert. Diese Funktion wird jedes Mal aufgerufen, wenn der Geschäftstyp validiert werden muss. Den Datenwert können Sie aus dem Parameter Wert abrufen und das Validierungsergebnis zurück an den Parameter results leiten.

    Als Nächstes definieren Sie ein Validierungsattribut, das im Validierungssteuerelement verwendet werden kann.

So definieren Sie ein Validierungsattribut

  1. Wählen Sie im Projektmappen-Explorer das Projekt BusinessTypeExtension.Common aus. Erweitern Sie die Knoten Metadaten und Typen, öffnen Sie das Kontextmenü für die Datei PositiveInteger.lsml, und wählen Sie Öffnen mit aus.

  2. Im Dialogfeld Öffnen mit wählen Sie XML (Text)-Editor und dann OK aus.

  3. Fügen Sie dem SemanticType.Attributes-Element direkt nach der Zeile <DisplayName Value="Positive Integer" /> folgenden Code hinzu.

    <Attribute Class="@PositiveIntegerValidation">
         </Attribute>
    
  4. Fügen Sie den folgenden Code nach dem SemanticType-Element ein:

    <AttributeClass Name="PositiveIntegerValidation">
    
        <AttributeClass.Attributes>
          <Validator />
          <SupportedType Type="PositiveInteger?" />
        </AttributeClass.Attributes>
          </AttributeClass>
    

    Anschließend definieren Sie ValidatorFactory.

So erstellen Sie ein ValidatorFactory-Element

  1. Wählen Sie im Projektmappen-Explorer das Projekt BusinessTypeExtension.Common aus, und öffnen Sie die Datei PositiveIntegerValidation.

  2. Fügen Sie unter der PositiveIntegerValidation-Klasse den folgenden Code hinzu, um die PositiveIntegerValidationFactory-Klasse zu implementieren.

    <Export(GetType(IValidationCodeFactory))>
    <ValidationCodeFactory(BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.GlobalName)>
    Public Class PositiveIntegerValidationFactory
        Implements IValidationCodeFactory
    
        Public Function Create(modelItem As Microsoft.LightSwitch.Model.IStructuralItem, attributes As System.Collections.Generic.IEnumerable(Of Microsoft.LightSwitch.Model.IAttribute)) As Microsoft.LightSwitch.Runtime.Rules.IAttachedValidation Implements Microsoft.LightSwitch.Runtime.Rules.IValidationCodeFactory.Create
    
            If Not IsValid(modelItem) Then
                Throw New InvalidOperationException("Unsupported data type.")
            End If
    
            Return New PositiveIntegerValidation(attributes)
    
        End Function
    
        Public Function IsValid(modelItem As Microsoft.LightSwitch.Model.IStructuralItem) As Boolean Implements Microsoft.LightSwitch.Runtime.Rules.IValidationCodeFactory.IsValid
    
            Dim nullableType As INullableType = TryCast(modelItem, INullableType)
    
            ' Get underlying type if it is a INullableType.
            modelItem = If(nullableType IsNot Nothing, nullableType.UnderlyingType, modelItem)
    
            ' Ensure that type is a positive integer semantic type, or that a type inherits from it.
            While TypeOf modelItem Is ISemanticType
                If String.Equals(DirectCast(modelItem, ISemanticType).Id, BusinessTypeExtensionModule.PositiveInteger.GlobalName, StringComparison.Ordinal) Then
                    Return True
                End If
                modelItem = DirectCast(modelItem, ISemanticType).UnderlyingType
            End While
    
    
            ' If the conditions aren't met, LightSwitch will not display the validation rule for
            '   this model item.
            Return False
    
        End Function
    
    End Class
    
    [Export(typeof(IValidationCodeFactory))]
        [ValidationCodeFactory(BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.GlobalName)]
        public class PositiveIntegerValidatorFactory : IValidationCodeFactory
        {
            public IAttachedValidation Create(IStructuralItem modelItem, IEnumerable<IAttribute> attributes)
            {
                // Enusre that the type model item is a positive integer semantic type (or nullable positive integer)
                if (!IsValid(modelItem)).
                {
                    throw new InvalidOperationException("Unsupported data type.");
                }
    
                return new PositiveIntegerValidator(attributes);
            }
    
            public bool IsValid(IStructuralItem modelItem)
            {
                INullableType nullableType = modelItem as INullableType;
    
                // Get underlying type if it is an INullableType.
                modelItem = null != nullableType ? nullableType.UnderlyingType : modelItem;
    
                // Ensure that type is a positive integer semantic type, or that a type inherits from it.
                while (modelItem is ISemanticType)
                {
                    if (String.Equals(((ISemanticType)modelItem).Id, BusinessTypeExtensionModule.PositiveInteger.GlobalName, StringComparison.Ordinal))
                    {
                        return true;
                    }
                    modelItem = ((ISemanticType)modelItem).UnderlyingType;
                }
    
                // If the conditions aren't met, LightSwitch will not display the validation rule for
                //   this model item.
                return false;
            }
        }
    

    Anschließend fügen Sie einen Validierungsindikator für das Steuerelement hinzu, damit im Falle, dass der Benutzer einen unzulässigen Wert angibt, ein Feedback bereitgestellt wird. Obwohl Sie einen eigenen Validierungsindikator für das Steuerelement erstellen können, wird empfohlen, den integrierten Validierungsindikator zu nutzen.

So fügen Sie einen Validierungsindikator hinzu

  1. Wählen Sie im Projektmappen-Explorer das Projekt BusinessTypeExtension.Client aus, und öffnen Sie die Datei PositiveIntegerControl.xaml.

  2. Fügen Sie den folgenden Namespaceverweis hinzu.

    xmlns:slu="clr-namespace:Microsoft.LightSwitch.Utilities.SilverlightUtilities;assembly=Microsoft.LightSwitch.Client"
    
  3. Fügen Sie den folgenden XAML-Code nach der gerade hinzugefügten Verweiszeile hinzu.

    ToolTipService.ToolTip="{Binding Description}"
    

    Obwohl dies nicht erforderlich ist, wird damit zur Laufzeit das ToolTip-Element für das Steuerelement aktiviert, sodass der vom Anwendungsentwickler vorgegebene Description-Eigenschaftswert angezeigt wird.

  4. Fügen Sie im <Grid>-Element unter der Zeile <TextBlock Grid.Column="1" Text="{Binding Value}" MinWidth="30"/> folgenden Code hinzu:

    <!-- Our data context is an IContentItem instance.  Bind to its StringValue property.  It will 
                 automatically handle Silverlight conversion errors and other behavior. -->
            <slu:ValidatableContentControl ValidationDataSource="{Binding StringValue}" Grid.ColumnSpan="2"/>
    

    Damit wird die gleiche automatische Validierung wie von den integrierten LightSwitchLightSwitch-Steuerelementen bereitgestellt.

Zu diesem Zeitpunkt können Sie das Verhalten in der experimentellen Instanz erneut testen. Beim Ausführen des BusinessTypeTest-Projekts legen Sie den Wert von Score auf eine negative Zahl fest und beobachten das Validierungsverhalten.

Hinzufügen einer benutzerdefinierten Eigenschaft zum Geschäftstyp

Integrierte Validierungsregeln für den Geschäftstyp werden immer erzwungen. Sie sollten auch eine Validierung hinzufügen, die vom Anwendungsentwickler aktiviert bzw. deaktiviert werden kann. Sie können dies bewerkstelligen, indem Sie eine Validierungseigenschaft hinzufügen, die – bei Auswahl des Geschäftstyps im Tabellen-Designer – im Fenster Eigenschaften angezeigt wird.

Der erste Schritt besteht darin, die Metadaten mit dem Wert bzw. den Werten zu aktualisieren, die der Anwendungsentwickler im Datenmodell haben möchte.

So aktualisieren Sie Metadaten

  1. Wählen Sie im Projektmappen-Explorer das Projekt BusinessTypeExtension.Common aus. Erweitern Sie den Knoten Metadaten, Typen, öffnen Sie das Kontextmenü für die Datei PositiveInteger.lsml, und wählen Sie Öffnen mit aus.

  2. Im Dialogfeld Öffnen mit wählen Sie XML (Text)-Editor und dann OK aus.

  3. Fügen Sie dem AttributeClass-Element direkt unter dem AttributeClass.Attributes-Element folgenden Code hinzu.

    <AttributeProperty Name="ShouldBeEven" MetaType="Boolean">
          <AttributeProperty.Attributes>
            <Category Value="Validation" />
            <DisplayName Value="Should be an even number" />
            <UIEditor Id="CheckBoxEditor"/>
          </AttributeProperty.Attributes>
        </AttributeProperty>
    

    Die Boolean-Eigenschaft ShouldBeEven wird den Validierungsmetadaten hinzugefügt, sodass der Anwendungsentwickler den Eigenschaftswert im Eigenschaftenblatt des Tabellen-Designers festlegen kann. Beachten Sie, dass CheckBoxEditor für das UIEditor-Attribut der Eigenschaft angegeben ist, was für eine Boolean-Eigenschaft geeignet ist. Ohne dies wählt LightSwitchLightSwitch automatisch einen Eigenschaften-Editor für die Validierungseigenschaft im Eigenschaftenblatt des Designers aus. Sie finden die Namen aller integrierten Eigenschaften-Editoren in der Microsoft.LightSwitch.Designers.PropertyPages.UI.CommonPropertyValueEditorNames-Klasse.

  4. Aktualisieren Sie die SemanticType-Definition, indem Sie wie folgt ein Property-Element innerhalb des Attribute-Elements hinzufügen.

    <Attribute Class="@PositiveIntegerValidation">
            <Property Name="ShouldBeEven" Value="False"/>
          </Attribute>
    

    Dieser Code gibt an, dass, wenn kein Wert ausgewählt ist, als Standardwert False gilt.

Anschließend fügen Sie mehrere Konstanten für die Darstellung der Eigenschaft hinzu.

So fügen Sie Konstanten hinzu

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus, und öffnen Sie die BusinessTypeExtensionModule.vb-Datei bzw. die BusinessTypeExtensionModule.cs-Datei.

  2. Fügen Sie der ValidationAttribute-Klasse direkt nach der Zeile Public Const GlobalName As String = AttributePrefix + Name (VB) bzw. public const string GlobalName = AttributePrefix + Name; (C#) folgenden Code hinzu.

    Public Const ShouldBeEvenPropertyName As String = "ShouldBeEven"
                Public Const ShouldBeEvenPropertyEditorName = GlobalName + ShouldBeEvenPropertyName + "Editor"
    
    public const string ShouldBeEvenPropertyName = "ShouldBeEven";
                    public const string ShouldBeEvenPropertyEditorName = GlobalName + ShouldBeEvenPropertyName + "Editor";
    

    Dadurch werden Konstanten für die Eigenschaft und den Eigenschaften-Editor bereitgestellt.

Als Nächstes fügen Sie Validierungscode für die neue Eigenschaft hinzu.

So fügen Sie Validierungscode hinzu

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus, und öffnen Sie die PositiveIntegerValidation.vb-Datei bzw. die PositiveIntegerValidation.cs-Datei.

  2. Ersetzen Sie die vorhandene Validate-Methode durch den folgenden Code.

    Public Sub Validate(value As Object, results As IPropertyValidationResultsBuilder) Implements Microsoft.LightSwitch.Runtime.Rules.IAttachedPropertyValidation.Validate
            If value IsNot Nothing Then
    
                ' Ensure that the value type is integer.
                If GetType(Integer) IsNot value.GetType() Then
                    Throw New InvalidOperationException("Unsupported data type.")
                End If
    
                Dim intValue As Integer = DirectCast(value, Integer)
    
                ' First validation rule: value should be greater than 0.
                If intValue <= 0 Then
                    results.AddPropertyError("Value should be greater than 0")
                End If
    
                ' Second validation rule: Value should be an even number.
                '  It's a dynamic rule - application developers set a property to specify whether 
                '    they want to enable it or not.
                Dim validationAttribute As IAttribute = Me.attributes.FirstOrDefault()
                If validationAttribute IsNot Nothing AndAlso
                    validationAttribute.Class IsNot Nothing AndAlso
                    validationAttribute.Class.Id = BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.GlobalName AndAlso
                    DirectCast(validationAttribute(BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.ShouldBeEvenPropertyName), Boolean) AndAlso
                    Not intValue Mod 2 = 0 Then
    
                    results.AddPropertyResult("Value should be an even number", ValidationSeverity.Error)
    
                End If
    
            End If
        End Sub
    
    public void Validate(object value, IPropertyValidationResultsBuilder results)
            {
                if (null != value)
                {
                    // Ensure that the value type is integer.
                    if (typeof(Int32) != value.GetType())
                    {
                        throw new InvalidOperationException("Unsupported data type.");
                    }
    
                    int intValue = (int)value;
    
                    // First validation rule: value should be greater than 0.
                    if (intValue <= 0)
                    {
                        results.AddPropertyError("Value should be greater than 0");
                    }
    
                    // Second validation rule: Value should be an even number.
                    // It's a dynamic rule - application developers set a property to specify whether 
                    //   they want to enable it or not.
                    IAttribute validationAttribute = _attributes.FirstOrDefault();
                    if (validationAttribute != null &&
                        validationAttribute.Class != null &&
                        validationAttribute.Class.Id == BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.GlobalName &&
                        (bool)validationAttribute[BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.ShouldBeEvenPropertyName] &&
                        intValue % 2 != 0)
                    {
                        results.AddPropertyResult("Value should be an even number", ValidationSeverity.Error);
                    }
                }
            }
    

    Mit diesem Code wird eine zweite Validierungsregel hinzugefügt, die einen Validierungsfehler auslöst, falls der Wert keine gerade Zahl ist.

Zu diesem Zeitpunkt können Sie das Verhalten in der experimentellen Instanz erneut testen. Öffnen Sie im BusinessTypeTest-Projekt den Tabellen-Designer, und wählen Sie das Score-Feld aus. Beachten Sie, dass die Eigenschaft mit dem Text Sollte eine gerade Zahl sein nun im Abschnitt Validierung des Fensters Eigenschaften angezeigt wird. Ändern Sie den Eigenschaftswert, und beobachten Sie das Verhalten in der ausgeführten Anwendung.

Erstellen eines Eigenschaften-Editors für Geschäftstypeigenschaften

Falls der integrierte Eigenschaften-Editor nicht Ihren Anforderungen entspricht, können Sie einen eigenen Eigenschaften-Editor erstellen. Beispielsweise stellt der Geschäftstyp PhoneNumber einen externen Editor zum Festlegen von Formaten für Telefonnummern bereit.

In diesem Beispiel erstellen Sie einen WPF (Windows Presentation Foundation)-Eigenschaften-Editor, der ein Dialogfeld für die Should be an even number-Eigenschaft anzeigt. Im Gegensatz zu Eigenschaften-Editoren für Steuerelemente muss hier nur eine Editor-Version für die Entwurfszeit implementiert werden. Eigenschaften von Geschäftstypen sind im Bildschirm-Designer für die Laufzeit nicht verfügbar.

Im ersten Schritt fügen Sie einige Verweise hinzu.

So fügen Sie Verweise hinzu

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt BusinessTypeExtension.Design, und wählen Sie dann Verweis hinzufügen aus.

  2. Fügen Sie im Dialogfeld Verweis hinzufügen einen Verweis auf Microsoft.LightSwitch.ExtensionProvider.dll hinzu.

    Der typische Speicherort dieser Datei ist im Ordner C:\Programme (x86)\MSBuild\Microsoft\VisualStudio\LightSwitch\v4.0.

  3. Öffnen Sie das Kontextmenü für den Knoten BusinessTypeExtension.Design, und wählen Sie Vorhandenes Element hinzufügen aus.

  4. Wechseln Sie zum BusinessTypeExtension.Common-Projekt in der Projektmappe, und wählen Sie BusinessTypeExtensionModule.vb bzw. BusinessTypeExtensionModule.cs aus.

  5. Wählen Sie über die Dropdownliste der Schaltfläche Hinzufügen die Option Als Link hinzufügen aus.

    Dadurch werden die bereits von Ihnen definierten Konstanten für das Design-Projekt freigegeben.

Der nächste Schritt besteht darin, das WPF-Dialogfeld für die Bearbeitung der Validierungseigenschaft zu erstellen.

So erstellen Sie ein WPF-Dialogfeld

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt BusinessTypeExtension.Design, und wählen Sie dann Neues Element hinzufügen aus.

  2. Erweitern Sie im Dialogfeld Neues Element hinzufügen den Knoten WPF, und wählen Sie Benutzersteuerelement (WPF) aus.

  3. Geben Sie im Feld Name die Zeichenfolge ShouldBeEvenEditorDialog ein, und klicken Sie auf Hinzufügen.

  4. Öffnen Sie die Code-Behind-Datei ShouldBeEvenEditorDialog.xaml.vb bzw. ShouldBeEvenEditorDialog.xaml.cs, und ersetzen Sie den Inhalt durch folgenden Code:

    Imports System.Windows
    
    Public Class ShouldBeEvenEditorDialog
        Inherits Window
        Public Property Value As Nullable(Of Boolean)
            Get
                Return MyBase.GetValue(ShouldBeEvenEditorDialog.ValueProperty)
            End Get
            Set(value As Nullable(Of Boolean))
                MyBase.SetValue(ShouldBeEvenEditorDialog.ValueProperty, value)
            End Set
        End Property
    
        Public Shared ReadOnly ValueProperty As DependencyProperty =
            DependencyProperty.Register(
                "Value",
                GetType(Nullable(Of Boolean)),
                GetType(ShouldBeEvenEditorDialog),
                New UIPropertyMetadata(False))
    
    End Class
    
    using System.Windows;
    
    namespace BusinessTypeExtension
    {
        /// <summary>
        /// Interaction logic for EditorDialog.xaml
        /// </summary>
        public partial class ShouldBeEvenEditorDialog : Window
        {
            public ShouldBeEvenEditorDialog()
            {
                InitializeComponent();
            }
    
            public bool? Value
            {
                get { return (bool?)GetValue(ValueProperty); }
                set { SetValue(ValueProperty, value); }
            }
            public static readonly DependencyProperty ValueProperty =
                DependencyProperty.Register("Value", typeof(bool?), typeof(ShouldBeEvenEditorDialog), new UIPropertyMetadata(false));
        }
    }
    
  5. Öffnen Sie die Datei ShouldBeEvenEditorDialog.xaml, und ersetzen Sie den Inhalt durch folgenden Code:

    <Window x:Class="BusinessTypeExtension.ShouldBeEvenEditorDialog"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
            WindowStartupLocation="CenterOwner"
            ShowInTaskbar="False"
            ResizeMode="NoResize"
            Title="Business Type Property Editor" Height="200" Width="300">
        <Grid>
            <CheckBox
                IsChecked="{Binding Value, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Mode=TwoWay}"
                Content="Should be even number"
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                />
        </Grid>
    </Window>
    

    Dieser Code definiert ein Dialogfeld, das ein CheckBox-Steuerelement für die Eigenschaft enthält.

Im nächsten Schritt fügen Sie dem BusinessTypeExtension.Design-Projekt ein WPF-Ressourcenwörterbuch für die Implementierung hinzu.

Sie können das Dialogfeld nicht direkt mit dem LightSwitch-Eigenschaftenblatt verknüpfen. Stattdessen zeigen Sie auf dem Eigenschaftenblatt eine Linkbezeichnung an und lassen das Dialogfeld aufrufen, sobald der Anwendungsentwickler auf den Link klickt.

Die LightSwitch-Entwurfszeit erfordert eine Implementierung von IPropertyValueEditorProvider, wodurch ein DataTemplate-Objekt bereitgestellt wird. Mit diesem wird ein Steuerelement erstellt, das innerhalb des Eigenschaftenblatts gehostet wird. Das DataContext-Element des Steuerelements wird als Instanz von IBindablePropertyEntry festgelegt. Dies wird vom Steuerelement verwendet, um auf den Wert, den Namen und andere Informationen zur Eigenschaft zuzugreifen.

So fügen Sie ein Ressourcenwörterbuch hinzu

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt BusinessTypeExtension.Design, und wählen Sie dann Neues Element hinzufügen aus.

  2. Erweitern Sie im Dialogfeld Neues Element hinzufügen den Knoten WPF, und wählen Sie Benutzersteuerelement (WPF) aus.

  3. Geben Sie im Feld Name die Zeichenfolge EditorTemplates ein, und klicken Sie auf die Schaltfläche Hinzufügen.

  4. Ersetzen Sie den vorhandenen Code durch folgenden Code:

    <ResourceDictionary
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:self="clr-namespace:BusinessTypeExtension">
    
        <DataTemplate x:Key="ShouldBeEvenEditorTemplate">
            <Label>
                <Hyperlink
                    Command="{Binding EditorContext}"
                    ToolTip="{Binding Entry.Description}">
                    <Run
                        Text="{Binding Entry.DisplayName, Mode=OneWay}"
                        FontFamily="{DynamicResource DesignTimeFontFamily}"
                        FontSize="{DynamicResource DesignTimeFontSize}"
                        />
                </Hyperlink>
            </Label>
        </DataTemplate>
    
    </ResourceDictionary>
    

    Damit wird der Link bereitgestellt, der im Eigenschaftenblatt für den Tabellen-Designer angezeigt wird.

    Hinweis

    Zu diesem Zeitpunkt wird Ihnen ein Fehler in der XAML angezeigt.Diesen können Sie erst einmal ignorieren, denn der Namespace, auf den verwiesen wird, wird später hinzugefügt.

Als Nächstes erstellen Sie das Steuerelement für den Eigenschaften-Editor, das ist recht einfach. Sie benötigen dafür einen Link, den Sie an EditorContext binden. Dies muss ein vom Editor bereitgestelltes ICommand-Objekt von WPF sein. Anschließend erstellen Sie einen Editor, um dieses Steuerelement für den LightSwitch-Designer verfügbar zu machen. Zudem muss der Befehl im Editor implementiert werden.

So erstellen Sie das Steuerelement für den Eigenschaften-Editor

  1. Öffnen Sie im Projektmappen-Explorer das Kontextmenü für das Projekt BusinessTypeExtension.Design, und wählen Sie dann Neues Element hinzufügen aus.

  2. Wählen Sie im Dialogfeld Neues Element hinzufügen den Knoten Code und dann Klasse aus.

  3. Geben Sie im Feld Name die Zeichenfolge ShouldBeEvenEditor ein, und klicken Sie auf die Schaltfläche Hinzufügen.

  4. Ersetzen Sie den Inhalt durch den folgenden Code.

    Imports System
    Imports System.ComponentModel.Composition
    Imports System.Runtime.InteropServices
    Imports System.Windows
    Imports System.Windows.Input
    Imports System.Windows.Interop
    Imports Microsoft.LightSwitch.Designers.PropertyPages
    Imports Microsoft.LightSwitch.Designers.PropertyPages.UI
    
    Friend Class ShouldBeEvenEditor
        Implements IPropertyValueEditor
    
        Public Sub New(entry As IPropertyEntry)
            Me.command = New EditCommand(entry)
        End Sub
    
        Private command As ICommand
    
        Public ReadOnly Property Context As Object Implements Microsoft.LightSwitch.Designers.PropertyPages.UI.IPropertyValueEditor.Context
            Get
                Return Me.command
            End Get
        End Property
    
        Public Function GetEditorTemplate(entry As Microsoft.LightSwitch.Designers.PropertyPages.IPropertyEntry) As System.Windows.DataTemplate Implements Microsoft.LightSwitch.Designers.PropertyPages.UI.IPropertyValueEditor.GetEditorTemplate
            Dim dict As ResourceDictionary = New ResourceDictionary()
            dict.Source = New Uri("BusinessTypeExtension.Design;component/EditorTemplates.xaml", UriKind.Relative)
            Return dict("ShouldBeEvenEditorTemplate")
        End Function
    
        Private Class EditCommand
            Implements ICommand
    
            Public Sub New(entry As IPropertyEntry)
                Me.entry = entry
            End Sub
    
            Private entry As IPropertyEntry
    
            Public Function CanExecute(parameter As Object) As Boolean Implements System.Windows.Input.ICommand.CanExecute
                Return True
            End Function
    
            Public Event CanExecuteChanged(sender As Object, e As System.EventArgs) Implements System.Windows.Input.ICommand.CanExecuteChanged
    
            Public Sub Execute(parameter As Object) Implements System.Windows.Input.ICommand.Execute
    
                Dim dialog As ShouldBeEvenEditorDialog = New ShouldBeEvenEditorDialog()
                dialog.Value = Me.entry.PropertyValue.Value
    
                ' Set the parent window of your dialog box to the IDE window; this ensures the win32 window stack works correctly.
                Dim wih As WindowInteropHelper = New WindowInteropHelper(dialog)
                wih.Owner = GetActiveWindow()
    
                dialog.ShowDialog()
    
                Me.entry.PropertyValue.Value = dialog.Value
    
            End Sub
    
            ''' <summary>
            ''' GetActiveWindow is a Win32 method; we import the method to get the IDE window
            ''' </summary>
            Declare Function GetActiveWindow Lib "User32" () As IntPtr
    
        End Class
    
    End Class
    
    <Export(GetType(IPropertyValueEditorProvider))>
    <PropertyValueEditorName(BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.ShouldBeEvenPropertyEditorName)>
    <PropertyValueEditorType("System.Boolean")>
    Friend Class ShouldBeEventEditorProvider
        Implements IPropertyValueEditorProvider
    
        Public Function GetEditor(entry As Microsoft.LightSwitch.Designers.PropertyPages.IPropertyEntry) As Microsoft.LightSwitch.Designers.PropertyPages.UI.IPropertyValueEditor Implements Microsoft.LightSwitch.Designers.PropertyPages.UI.IPropertyValueEditorProvider.GetEditor
            Return New ShouldBeEvenEditor(entry)
        End Function
    
    End Class
    
    using System;
    using System.ComponentModel.Composition;
    using System.Runtime.InteropServices;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Interop;
    using Microsoft.LightSwitch.Designers.PropertyPages;
    using Microsoft.LightSwitch.Designers.PropertyPages.UI;
    
    namespace BusinessTypeExtension
    {
    
    internal class ShouldBeEvenEditor : IPropertyValueEditor
        {
            public ShouldBeEvenEditor(IPropertyEntry entry)
            {
                _editCommand = new EditCommand(entry);
            }
            private ICommand _editCommand;
    
            public object Context
            {
                get { return _editCommand; }
            }
    
            public DataTemplate GetEditorTemplate(IPropertyEntry entry)
            {
                ResourceDictionary dict = new ResourceDictionary() { Source = new Uri("BusinessTypeExtension.Design;component/EditorTemplates.xaml", UriKind.Relative) };
                return (DataTemplate)dict["ShouldBeEvenEditorTemplate"];
            }
    
            private class EditCommand : ICommand
            {
                public EditCommand(IPropertyEntry entry)
                {
                    _entry = entry;
                }
    
                private IPropertyEntry _entry;
    
                #region ICommand Members
    
                bool ICommand.CanExecute(object parameter)
                {
                    return true;
                }
    
                public event EventHandler CanExecuteChanged { add { } remove { } }
    
                void ICommand.Execute(object parameter)
                {
                    ShouldBeEvenEditorDialog dialog = new ShouldBeEvenEditorDialog() { Value = (bool?)_entry.PropertyValue.Value };
    
                    // Set the parent window of your dialog box to the IDE window; this ensures that the win32 window stack works correctly.
                    WindowInteropHelper wih = new WindowInteropHelper(dialog);
                    wih.Owner = GetActiveWindow();
    
                    dialog.ShowDialog();
    
                    _entry.PropertyValue.Value = dialog.Value;
                }
    
                #endregion
    
                /// <summary>
                /// GetActiveWindow is a Win32 method; we import the method to get the IDE window.
                /// </summary>
                [DllImport("user32")]
                public static extern IntPtr GetActiveWindow();
            }
        }
    
    
        [Export(typeof(IPropertyValueEditorProvider))]
        [PropertyValueEditorName(BusinessTypeExtensionModule.PositiveInteger.ValidationAttribute.ShouldBeEvenPropertyEditorName)]
        [PropertyValueEditorType("System.Boolean")]
        internal class ShouldBeEvenEditorProvider : IPropertyValueEditorProvider
        {
            public IPropertyValueEditor GetEditor(IPropertyEntry entry)
            {
                return new ShouldBeEvenEditor(entry);
            }
        }
    }
    

    Der Code in diesem Beispiel macht eine Komponente verfügbar, die mit einem PropertyValueEditorName-Attribut benannt ist. Diese Komponente wird vom LightSwitch-Designer geladen, wenn er eine Eigenschaft anzeigen möchte, deren UIEditor-Wert auf dieselbe Zeichenfolge festgelegt ist wie der Wert des PropertyValueEditorName-Attributs.

    Der LightSwitch-Designer erstellt eine Instanz von IPropertyValueEditor aus der Factory und ruft sowohl das DataTemplate-Objekt als auch das (optionale) Context-Objekt ab. Mithilfe von DataTemplate erstellt der Designer das UI-Steuerelement und hostet dieses auf dem Eigenschaftenblatt. Das Steuerelement kann über eine EditorContext-Eigenschaft auf seinem DataContext-Objekt auf das Kontextobjekt zugreifen.

    Der Editor stellt ein spezielles Kontextobjekt bereit, das tatsächlich ein ICommand-Objekt ist. Das UI-Steuerelement wird an ICommand gebunden. Folglich wird es ausgeführt, wenn der Anwendungsentwickler auf den Link klickt. Das Dialogfeld wird angezeigt und führt einen Commit für den Wert im Befehlsobjekt aus.

  5. Wählen Sie auf der Menüleiste Erstellen und Build BusinessTypeExtension.Design aus.

    Durch die Erstellung wird der Fehler bezüglich des fehlenden Namespace in der EditorTemplates.xaml-Datei behoben.

Im letzten Schritt verknüpfen Sie den Eigenschaften-Editor, indem Sie die Metadaten für den Geschäftstyp aktualisieren.

So verknüpfen Sie den Eigenschaften-Editor

  1. Wählen Sie im Projektmappen-Explorer das BusinessTypeExtension.Common-Projekt aus.

  2. Erweitern Sie die Knoten Metadaten und Typen, öffnen Sie das Kontextmenü für die Datei PositiveInteger.lsml, und wählen Sie Öffnen mit aus.

  3. Im Dialogfeld Öffnen mit wählen Sie XML (Text)-Editor und dann OK aus.

  4. Ersetzen Sie das <UIEditor Id="CheckBoxEditor"/>-Element im AttributeProperty-Element durch folgenden Code.

    <!--<UIEditor Id="CheckBoxEditor"/>-->
            <Description Value="Modify this property in a dialog" />
            <UIEditor Id="BusinessTypeExtension:@PositiveIntegerValidationShouldBeEvenEditor" />
    

    Das weist LightSwitch an, das Dialogfeld zum Anzeigen der Eigenschaft zu verwenden.

    Der PositiveInteger-Geschäftstyp ist nun abgeschlossen, und Sie können ihn in der experimentellen Instanz erneut testen. Wählen Sie im Tabellen-Editor das Feld Score aus. Wie Sie sehen, wird für die Eigenschaft Sollte eine gerade Zahl sein nun ein Link im Fenster Eigenschaften angezeigt. Klicken Sie auf den Link, um den benutzerdefinierten Editor aufzurufen.

Nächste Schritte

Damit ist die exemplarische Vorgehensweise für die Geschäftstyperweiterung beendet. Sie sollten nun über eine voll funktionsfähige Geschäftstyperweiterung verfügen, die Sie in jedem LightSwitch-Projekt einsetzen können. Das war nur ein Beispiel für eine Geschäftstyperweiterung, möglicherweise möchten Sie einen Geschäftstyp erstellen, der sich in Bezug auf das Verhalten erheblich unterscheidet oder ein anderes Steuerelement verwendet. Die gleichen Schritte und Grundsätze gelten auch für jede andere Geschäftstyperweiterung, jedoch gibt es weitere Konzepte, die in anderen Situationen Anwendung finden. Beispielsweise könnten Sie festlegen, dass das Steuerelement für den Geschäftstyp schreibgeschützte Daten oder die Bearbeitung in einem DataGrid-Steuerelement unterstützen soll. Weitere Informationen finden Sie unter Zusätzliche LightSwitch-Steuerelementkonzepte.

Wenn Sie die Erweiterung verteilen möchten, sind einige zusätzliche Schritte erforderlich. Um die Richtigkeit der Informationen sicherzustellen, die für die Erweiterung im Projekt-Designer und Erweiterungs-Manager angezeigt werden, müssen die Eigenschaften für das VSIX-Paket aktualisiert werden. Weitere Informationen finden Sie unter Gewusst wie: VSIX-Paketeigenschaften. Außerdem sollten bei einer geplanten öffentlichen Verteilung der Erweiterung einige Punkte berücksichtigt werden. Weitere Informationen finden Sie unter Gewusst wie: Verteilen einer LightSwitch-Erweiterung.

Siehe auch

Aufgaben

Gewusst wie: Erstellen mehrerer Steuerelemente für einen Geschäftstyp

Gewusst wie: Erstellen eines LightSwitch-Steuerelements

Gewusst wie: Verteilen einer LightSwitch-Erweiterung

Gewusst wie: VSIX-Paketeigenschaften

Konzepte

Zusätzliche LightSwitch-Steuerelementkonzepte

Definieren, Überschreiben und Verwenden von LightSwitch-Steuerelementeigenschaften

LightSwitch-Erweiterbarkeits-Toolkit für Visual Studio 2013