Freigeben über


Erstellen von Attributen für die automatische Nummerierung

Mit der Version 9 von Dynamics 365 Customer Engagement (on-premises) können Sie ein Attribut für die automatische Nummerierung für jede Entität hinzufügen. Derzeit können Sie das Attribut programmgesteuert hinzufügen. Es gibt keine Benutzeroberfläche, um diesen Attributtyp hinzuzufügen. In diesem Artikel wird erläutert, wie Sie programmgesteuert ein Attribut für die automatische Nummerierung erstellen und einen Startwert für sequenzielle Elemente festlegen können. Außerdem wird in diesem Artikel gezeigt, wie die Sequenznummer für den nächsten Datensatz festgelegt wird, wenn Sie später den Startwert jederzeit zurücksetzen müssen.

Hinweis

Die Einstellung des Startwerts ist optional. Es ist nicht erforderlich, den Startwert anzurufen, wenn Sie den Startwert nicht erneut festlegen müssen.

Sie können ein Attribut für die automatische Nummerierung auf die gleiche Weise erstellen wie ein Zeichenfolgenattribut mit der StringAttributeMetadata-Klasse , mit der Ausnahme, dass Sie die neue AutoNumberFormat-Eigenschaft verwenden. Verwenden Sie die AutoNumberFormat-Eigenschaft , um ein Muster zu definieren, das sequenzielle Zahlen und zufällige Zeichenfolgen enthält, indem Sie Platzhalter erstellen, die die Länge und den Typ der generierten Werte angeben. Die zufälligen Zeichenfolgen helfen Ihnen, Duplikate oder Kollisionen zu vermeiden, insbesondere wenn Offline-Clients versuchen, automatische Nummern zu erstellen.

Beim Erstellen eines Attributs für die automatische Nummerierung müssen die Werte der StringAttributeMetadata.FormatName-Eigenschaft oder der StringAttributeMetadata.Format-Eigenschaft Text sein. Da es sich hierbei um die Standardwerte handelt, legen Sie diese Eigenschaft in der Regel nicht fest. Sie können kein Attribut für die automatische Nummerierung erstellen, das ein anderes spezielles Format verwendet, z. B. E-Mail, Telefon, TextArea, URL oder andere vorhandene Formate.

Die automatische Nummerierungssequenzierung wird von SQL verwaltet und stellt sicher, dass sie eindeutig ist.

Hinweis

Die Werte für die automatische Nummerierung werden von der Datenbank vorausgewählt, wenn der Datensatz gestartet wird. Wenn ein Datensatz gestartet, dann aber storniert wird, wird die zugewiesene Zahl nicht verwendet. Wenn während dieser Zeit ein anderer Datensatz mit der nächsten fortlaufenden Nummer vervollständigt wird, sind Lücken bei der automatischen Nummerierung von Datensätzen vorhanden.

Hinweis

Sie können ein vorhandenes Formattextattribut in ein Format mit automatischer Nummerierung ändern.

Im Legacy-Webclient wird ein Steuerelement, das Sie zu einem Formular hinzufügen und das an ein Attribut für die automatische Nummerierung gebunden ist, automatisch deaktiviert. Dadurch ist das Steuerelement im Formular schreibgeschützt und Endbenutzer können es nicht bearbeiten. In der einheitlichen Oberfläche müssen Steuerelemente, die an ein Attribut für die automatische Nummerierung gebunden sind, explizit als deaktiviert festgelegt werden. Wenn Sie den anfänglichen Attributwert nicht im Formular festlegen, wird der Wert erst festgelegt, nachdem Sie die Entität gespeichert haben. Die automatische Nummerierung kann auf Attributfeldwerte in Ansichten, Rastern usw. angewendet werden.

Beispiele

In den folgenden Beispielen wird gezeigt, wie Sie ein neues Attribut für die automatische Nummerierung mit dem Namen new_SerialNumber für eine benutzerdefinierte Entität mit dem Namen new_Widget erstellen, die einen Wert aufweist, der wie folgt aussieht: WID-00001-AB7LSFG-20170913070240. Verwenden des Organisationsdiensts mit den SDK-Assemblys CreateAttributeRequest und StringAttributeMetadata-Klassen :

CreateAttributeRequest widgetSerialNumberAttributeRequest = new CreateAttributeRequest
            {
                EntityName = "newWidget",
                Attribute = new StringAttributeMetadata
                {
                    //Define the format of the attribute
                    AutoNumberFormat = "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",
                    LogicalName = "new_serialnumber",
                    SchemaName = "new_SerialNumber",
                    RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
                    MaxLength = 100, // The MaxLength defined for the string attribute must be greater than the length of the AutoNumberFormat value, that is, it should be able to fit in the generated value.
                    DisplayName = new Label("Serial Number", 1033),
                    Description = new Label("Serial Number of the widget.", 1033)
                }
            };
            _serviceProxy.Execute(widgetSerialNumberAttributeRequest);

Web-API verwenden

Sie können Entitätsdefinitionen mithilfe der Web-API erstellen und aktualisieren.

Weitere Informationen: Erstellen und Aktualisieren von Entitätsdefinitionen mithilfe der Web-API > Attribute erstellen.

Anfrage

POST [Organization URI]/api/data/v9.1/EntityDefinitions(LogicalName='new_widget')/Attributes HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
 "AttributeType": "String",
 "AttributeTypeName": {
  "Value": "StringType"
 },
 "Description": {
  "@odata.type": "Microsoft.Dynamics.CRM.Label",
  "LocalizedLabels": [
   {
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
    "Label": "Serial Number of the widget.",
    "LanguageCode": 1033
   }
  ]
 },
 "DisplayName": {
  "@odata.type": "Microsoft.Dynamics.CRM.Label",
  "LocalizedLabels": [
   {
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
    "Label": "Serial Number",
    "LanguageCode": 1033
   }
  ]
 },
 "RequiredLevel": {
  "Value": "None",
  "CanBeChanged": true,
  "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
 },
 "SchemaName": "new_SerialNumber",
 "AutoNumberFormat": "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",
 "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",
 "FormatName": {
  "Value": "Text"
 },
 "MaxLength": 100
}

Antwort

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.1/EntityDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/Attributes(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)

Optionen für AutoNumberFormat

In diesen Beispielen wird gezeigt, wie Sie die AutoNumberFormat-Eigenschaft konfigurieren können, um unterschiedliche Ergebnisse zu erzielen:

AutoNumberFormat-Wert Beispielwert
CAR-{SEQNUM:3}-{RANDSTRING:6} CAR-123-AB7LSF
CNR-{RANDSTRING:4}-{SEQNUM:4} CNR-WXYZ-1000
{SEQNUM:6}-#-{RANDSTRING:3} 123456-#-R3V
KA-{SEQNUM:4} KA-0001
{SEQNUM:10} 1234567890
QUO-{SEQNUM:3}#{RANDSTRING:3}#{RANDSTRING:5} QUO-123#ABC#PQ2ST
QUO-{SEQNUM:7}{RANDSTRING:5} QUO-0001000P9G3R
CAS-{SEQNUM:6}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss} CAS-002000-S1P0H0-20170913091544
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMMddhh}-{RANDSTRING:6} CAS-002002-2017091309-HTZOUR
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMM}-{RANDSTRING:6}-{DATETIMEUTC:hhmmss} CAS-002000-201709-Z8M2Z6-110901

Die Platzhalter für zufällige Zeichenfolgen sind optional. Sie können mehr als einen Platzhalter für zufällige Zeichenfolgen einfügen. Verwenden Sie einen beliebigen Formatwert für datetime-Platzhalter aus den Standardformatzeichenfolgen für Datum und Uhrzeit.

Zeichenfolgenlänge

Die Tabelle zeigt den Wert der Zeichenfolgenlänge für die zufälligen und sequenziellen Platzhalter.

Platzhalter Zeichenfolgenlänge Ausgabeszenario
{RANDSTRING:MIN_LENGTH} Der Wert von MIN_LENGTH liegt zwischen 1 und 6. Wenn Sie die Entität speichern, generiert das Attribut für die automatische Nummerierung die zufällige Zeichenfolge mit der definierten Länge, wenn der Wert zwischen 1 und 6 liegt. Wenn Sie den MIN_LENGTH Wert als 7 oder über 7 hinaus verwenden, wird der Fehler "Ungültiges Argument" angezeigt.
{SEQNUM:MIN_LENGTH} Der Mindestwert des MIN_LENGTH beträgt 1. Die Nummer wächst inkrementell über die minimale Länge hinaus. Wenn Sie das Element speichern, funktioniert das Attribut für die automatische Nummerierung einwandfrei und funktioniert auch weiterhin für größere Werte von MIN_LENGTH.

Bei Platzhaltern für sequenzielle Werte ist der MIN_LENGTH eine Mindestlänge. Wenn Sie den Wert auf 2 festlegen, ist der Anfangswert 01, und der 100. Entitätswert ist 100. Die Zahl wird über die Mindestlänge hinaus weiter inkrementiert. Der Wert beim Festlegen der Länge für sequenzielle Werte besteht darin, eine konsistente Länge für den automatisch generierten Wert festzulegen, indem dem Anfangswert zusätzliche 0en hinzugefügt werden. Der absolute Wert wird nicht begrenzt. Platzhalter mit zufälligen Werten haben immer die gleiche Länge.

Da die sequenziellen Werte größer als die für sie zugewiesene Mindestlänge werden können, sollten Sie die StringAttributeMetadata.MaxLength-Eigenschaft nicht so anpassen, dass sie der Länge des formatierten Werts entspricht. Dies ist wenig sinnvoll und kann in Zukunft zu einem Fehler führen, wenn der Wert den MaxLength-Wert überschreitet. Stellen Sie sicher, dass Sie genügend Platz für einen realistischen Bereich sequenzieller Werte lassen.

Hinweis

Es gibt keine Validierung der Platzhalterwerte, wenn Sie das Attribut erstellen. Der Fehler wird nur angezeigt, wenn Sie versuchen, eine Entitätsinstanz zu speichern, die einen falsch konfigurierten AutoNumberFormat-Wert verwendet. Wenn Sie z. B. die Länge der Zufallszeichenfolge größer als 6 angeben, erhält die erste Person, die eine neue Entitätsinstanz erstellt, den Fehler " Ungültiges Argument", wenn sie zum ersten Mal versucht, die Entität mit dem neuen Attribut für die automatische Nummerierung zu speichern.

Aktualisieren von Attributen für die automatische Nummerierung

Wenn Sie ein Attribut für die automatische Nummerierung mit einer falschen Konfiguration erstellen oder ein vorhandenes Attribut für die automatische Nummerierung ändern möchten, können Sie das Attribut mit dem Wert AutoNumberFormat aktualisieren.

Im folgenden Codeausschnitt wird erläutert, wie Sie das Attribut für die automatische Nummerierung abrufen, ändern und aktualisieren.

Um ein vorhandenes Attribut für die automatische Nummerierung zu ändern, müssen Sie das Attribut mithilfe der RetrieveAttributeRequest-Klasse abrufen.

// Create the retrieve request
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
            {
                EntityLogicalName = entityName.ToLower(),
                LogicalName = "new_serialnumber",
                RetrieveAsIfPublished = true
            };
// Retrieve attribute response
RetrieveAttributeResponse attributeResponse = (RetrieveAttributeResponse)_serviceProxy.Execute(attributeRequest);

Nachdem Sie das Attribut für die automatische Nummerierung abgerufen haben, müssen Sie das Attribut ändern und aktualisieren.

//Modify the retrieved auto-number attribute
AttributeMetadata retrievedAttributeMetadata = attributeResponse.AttributeMetadata;
retrievedAttributeMetadata.AutoNumberFormat = "CAR-{RANDSTRING:5}{SEQNUM:6}"; //Modify the existing attribute by writing the format as per your requirement 

// Update the auto-number attribute            
UpdateAttributeRequest updateRequest = new UpdateAttributeRequest
                        {
                            Attribute = retrievedAttributeMetadata,
                            EntityName = "newWidget",
                        };
// Execute the request
_serviceProxy.Execute(updateRequest);

Einen Startwert festlegen

Standardmäßig beginnen alle fortlaufenden Werte für die automatische Nummerierung mit 1000 und verwenden je nach Länge 0 als Präfix. Auf diese Weise ist die Länge des Wertes immer gleich. Wenn Sie den Anfangswert ändern möchten, müssen Sie den anfänglichen Startwert mithilfe der API unten ändern, um die nächste Zahl festzulegen, die für das sequenzielle Segment verwendet wird.

Wenn Sie z. B. keinen Startwert verwendet haben oder wenn Sie den Startwert auf eine einzelne Ziffer festlegen, ist die erste Zahl eine einzelne Ziffer mit einem Präfix aus Nullen, die der Zahlenlänge entsprechen. Bei einem einstelligen Startwert mit einer Anzeigelänge von 5 wird also die „5“ als „00005“ angezeigt. Wenn Sie einen Startwert verwenden, können Sie mit einem größeren Anfangswert beginnen, wenn Sie also Ihren Startwert auf "10000" festlegen, wird ein Wert von 5 als "10005" angezeigt.

Wenn Sie nach dem Erstellen des Attributs für die automatische Nummerierung einen anderen Startwert auswählen möchten, verwenden Sie die Meldung SetAutoNumberSeed . Verwenden Sie die SetAutoNumberSeedRequest-Klasse , wenn Sie die SDK-Assemblys verwenden, und die SetAutoNumberSeed-Aktion , wenn Sie die Web-API verwenden.

Die AutoNumberSeed-Nachricht weist die folgenden Parameter auf:

Name Typ Beschreibung
Name der Entität Schnur Der logische Name der Entität, der das Attribut enthält, für das Sie den Startwert festlegen möchten.
Attributname Schnur Der logische Name des Attributs, für das Sie den Startwert festlegen möchten.
Wert INT Nächster Wert für die automatische Nummerierung des Attributs.

Hinweis

Festlegen des Startwerts ändert nur den aktuellen Zahlenwert für das angegebene Attribut in der aktuellen Umgebung. Es impliziert keinen gemeinsamen Startwert für das Attribut. Der Startwert ist nicht in einer Lösung enthalten, wenn er in einer anderen Umgebung installiert wird. Um die Startnummer nach einem Lösungsimport festzulegen, verwenden Sie die SetAutoNumberSeed-Nachricht in der Zielumgebung.

Beispiele

In den folgenden Beispielen wird der Startwert für ein Attribut für die automatische Nummerierung mit dem Namen new_SerialNumber für eine benutzerdefinierte Entität mit dem Namen new_Widget auf 10000 festgelegt.

Verwenden des Organisationsdienstes mit der SetAutoNumberSeedRequest-Klasse der SDK-Assemblys:

//Define the seed 
SetAutoNumberSeedRequest req = new SetAutoNumberSeedRequest();
req.EntityName = "newWidget";
req.AttributeName = "newSerialnumber";
req.Value = 10000;
_serviceProxy.Execute(req);

Verwenden Sie die Web-API-Aktion SetAutoNumberSeed.

Weitere Informationen: Verwenden von Web-API-Aktionen > Ungebundene Aktionen

Anfrage

POST [Organization URI]/api/data/v9.1/SetAutoNumberSeed HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
 "EntityName": "new_Widget",
 "AttributeName": "new_Serialnumber",
 "Value": 10000
} 

Antwort

HTTP/1.1 204 No Content
OData-Version: 4.0

Communitytools

Automatischer Nummernmanager

Auto Number Manager for XrmToolBox ist ein Community-gesteuertes Tool für Dynamics 365 Customer Engagement (on-premises), das eine Benutzeroberfläche zum Festlegen, Aktualisieren und Entfernen des automatischen Zahlenformats für neue oder vorhandene Attribute bereitstellt. Weitere Informationen zu von der Community entwickelten Tools finden Sie im Artikel Entwicklertools und zu Auto Number Manager auf anm.xrmtoolbox.com.

Hinweis

Die Communitytools sind kein Produkt von Microsoft Dynamics, und es wird kein Support für die Communitytools angeboten. Wenn Sie Fragen zu dem Tool haben, setzen Sie sich bitte mit dem Herausgeber in Verbindung. Weitere Informationen: XrmToolBox.

Siehe auch

Metadaten und Datenmodelle
Anpassen der Metadaten von Entitätsattributen