Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Med Dynamics 365 Customer Engagement (on-premises) version 9 kan du tilføje en attribut for automatisk nummerering for et hvilket som helst objekt. I øjeblikket kan du tilføje attributten ved programmering. Der er ingen brugergrænseflade til at tilføje denne type attribut. I denne artikel forklares det, hvordan du programmatisk kan oprette en attribut for automatisk nummerering og angive en basisværdi for sekventielle elementer. Derudover viser denne artikel, hvordan du indstiller sekvensnummeret for den næste post, hvis du har brug for at nulstille seeden på et senere tidspunkt.
Bemærk
Indstillingen af basis er valgfri. Der er ingen grund til at kalde basis, hvis du ikke har brug for at genstarte.
Du kan oprette en attribut for automatisk nummerering på samme måde, som du opretter en strengattribut ved hjælp af klassen StringAttributeMetadata , bortset fra at du bruger den nye egenskab AutoNumberFormat . Brug egenskaben AutoNumberFormat til at definere et mønster, der indeholder sekventielle tal og tilfældige strenge ved at oprette pladsholdere, som angiver længden og typen af de værdier, der genereres. De tilfældige strenge hjælper dig med at undgå dubletter eller kollisioner, især når offlineklienter forsøger at oprette automatiske numre.
Når du opretter en attribut for automatisk nummerering, skal egenskaben StringAttributeMetadata.FormatName eller egenskabsværdierne StringAttributeMetadata.Format være Text. Da dette er standardværdierne, vil du typisk ikke angive denne egenskab. Du kan ikke oprette en automatisk nummereringsattribut, der bruger en anden speciel type format, f.eks. Mail, Telefon, TextArea, URL eller andre eksisterende formater.
Autonummerering styres af SQL og sikres at være unik.
Bemærk
Autonummereringsværdier er på forhånd valgt af databasen, når posten oprettes. Hvis en post startes, men annulleres, bruges det tildelte nummer ikke. Hvis der i løbet af denne tid fuldføres en anden post med det næste fortløbende nummer, vil der være huller i den automatiske nummerering af poster.
Bemærk
Du kan ændre en eksisterende formattekstattribut til at være et format med automatisk nummerering.
Når der tilføjes et kontrolelement i en formular, der er bundet til en attribut for automatisk nummerering i den ældre webklient, deaktiveres kontrolelementet automatisk og fungerer som skrivebeskyttet i formularen, hvor slutbrugerne ikke kan redigere kontrolelementet. I Unified Interface skal kontrolelementer, der er bundet til en attribut for automatisk nummerering, eksplicit angives som deaktiveret. Hvis du ikke angiver den oprindelige attributværdi i formularen, angives værdien først, når du har gemt objektet. Automatisk nummerering kan anvendes på attributfeltværdier i visninger, gitre osv.
Eksempler
I følgende eksempler vises, hvordan du opretter en ny attribut for automatisk nummerering med navnet new_SerialNumber for et brugerdefineret objekt med navnet new_Widget, som har en værdi, der ser sådan ud: WID-00001-AB7LSFG-20170913070240. Brug af tjenesten Organisation med SDK-assemblies CreateAttributeRequest og StringAttributeMetadata-klasser :
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);
Bruge Web API
Du kan oprette og opdatere objektdefinitioner ved hjælp af web-API'en.
Flere oplysninger: Oprette og opdatere objektdefinitioner ved hjælp af attributterne Opret web-API>.
Request
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
}
Respons
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)
Indstillinger for AutoNumberFormat
Disse eksempler viser, hvordan du kan konfigurere egenskaben AutoNumberFormat for at få forskellige resultater:
| AutoNumberFormat-værdi | Eksempelværdi |
|---|---|
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 |
Pladsholderne for tilfældige strenge er valgfrie. Du kan medtage mere end én tilfældig strengpladsholder. Brug en af formatværdierne for dato/klokkeslæt-pladsholdere fra standarddato- og klokkeslætsformatstrenge.
Strenglængde
Tabellen viser værdien for strenglængden for de tilfældige og sekventielle pladsholdere.
| Pladsholder | Strenglængde | Output-scenarie |
|---|---|---|
{RANDSTRING:MIN_LENGTH} |
Værdien af MIN_LENGTH er mellem 1 og 6. | Når du gemmer objektet, genererer attributten auto-number den tilfældige streng med den definerede længde, hvis værdien er mellem 1 og 6. Hvis du bruger den MIN_LENGTH værdi som 7 eller ud over 7, får du vist en ugyldig argumentfejl. |
{SEQNUM:MIN_LENGTH} |
Minimumsværdien af MIN_LENGTH er 1. Antallet fortsætter med at stige ud over minimumslængden. | Når du gemmer objektet, fungerer attributten for automatisk nummerering fint og fungerer fortsat fint for større værdier af MIN_LENGTH. |
For sekventielle værdipladsholdere er MIN_LENGTH en minimumslængde. Hvis du angiver værdien til 2, vil den oprindelige værdi være 01, og den 100. objektværdi vil være 100. Antallet vil fortsætte med at stige ud over minimumslængden. Værdien ved angivelse af længden for sekventielle værdier er at etablere en ensartet længde for den automatisk genererede værdi ved at tilføje yderligere 0'er til startværdien. Det vil ikke begrænse den absolutte værdi. Pladsholdere med tilfældig værdi vil altid have samme længde.
Da de sekventielle værdier kan blive større end den minimumlængde, der er tildelt dem, bør du ikke justere egenskaben StringAttributeMetadata.MaxLength , så den svarer til længden af den formaterede værdi. Der er ringe værdi i at gøre dette, og det kan forårsage en fejl i fremtiden, hvis værdien overstiger MaxLength-værdien . Sørg for, at du efterlader plads nok til et realistisk udvalg af sekventielle værdier.
Bemærk
Der er ingen validering af pladsholderværdierne, når du opretter attributten. Fejlen vises kun, når du forsøger at gemme en objektforekomst, der bruger en forkert konfigureret AutoNumberFormat-værdi . Hvis du f.eks. angiver længden af den tilfældige streng på mere end 6, får den første person, der opretter en ny objektforekomst, fejlen Ugyldigt argument , når de første gang forsøger at gemme det objekt, der indeholder den nye attribut for automatisk nummerering.
Opdater attributter til automatisk nummerering
Hvis du opretter en attribut for automatisk nummerering med en forkert konfiguration, eller hvis du vil ændre en eksisterende attribut for automatisk nummerering, kan du opdatere attributten AutoNumberFormat-værdien .
I følgende kodestykke kan du hente, ændre og opdatere attributten for automatisk nummerering.
Hvis du vil ændre en eksisterende attribut for automatisk nummerering, skal du hente attributten ved hjælp af klassen RetrieveAttributeRequest .
// 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);
Når du har hentet attributten for automatisk nummerering, skal du ændre og opdatere attributten.
//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);
Angive en startværdi
Som standard starter alle automatisk nummererede sekventielle værdier med 1000 og bruger 0 som præfiks afhængigt af længden. På denne måde er længden af værdien altid den samme. Hvis du vil ændre startværdien, skal du ændre den oprindelige seed-værdi ved hjælp af API'en nedenfor for at angive det næste tal, der bruges til det sekventielle segment.
Hvis du f.eks. ikke brugte en basisværdi, eller hvis du indstillede basisværdien til et enkelt ciffer, ville dit første tal være et enkelt ciffer med et præfiks på nuller tilføjet for at svare til tallængden. Et enkelt cifret frø med en visningslængde på 5 ville resultere i visning af "5" som "00005". Ved at bruge en seed-værdi kan du starte med en større startværdi, så hvis du indstiller din seed som "10000", vil en værdi på 5 blive vist som "10005".
Hvis du vil vælge en anden startværdi, når du har oprettet attributten for automatisk nummerering, skal du bruge meddelelsen SetAutoNumberSeed . Brug klassen SetAutoNumberSeedRequest, når du bruger SDK-assemblies og handlingen SetAutoNumberSeed , når du bruger web-API'en.
AutoNumberSeed-meddelelsen har følgende parametre:
| Navn | Type | Beskrivelse |
|---|---|---|
| EntityName | streng | Det logiske navn på det objekt, der indeholder den attribut, du vil angive seeden på. |
| AttributeName | streng | Det logiske navn på den attribut, du vil angive basis på. |
| Værdi | heltal | Næste værdi for automatisk nummerering af attributten. |
Bemærk
Hvis du angiver seedet, ændres kun den aktuelle talværdi for den angivne attribut i det aktuelle miljø. Det indebærer ikke en fælles startværdi for attributten. Seed-værdien er ikke inkluderet i en løsning, når den installeres i et andet miljø. Hvis du vil angive startnummeret efter en løsningsimport, skal du bruge SetAutoNumberSeed-meddelelsen i destinationsmiljøet.
Eksempler
I følgende eksempler angives kernen til 10000 for en attribut til automatisk nummerering med navnet new_SerialNumber for et brugerdefineret objekt med navnet new_Widget.
Brug af organisationstjenesten med SDK-assemblies SetAutoNumberSeedRequest-klasse :
//Define the seed
SetAutoNumberSeedRequest req = new SetAutoNumberSeedRequest();
req.EntityName = "newWidget";
req.AttributeName = "newSerialnumber";
req.Value = 10000;
_serviceProxy.Execute(req);
Brug af web-API-handlingen SetAutoNumberSeed .
Flere oplysninger: Brug af web-API-handlinger > Ubundne handlinger
Request
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
}
Respons
HTTP/1.1 204 No Content
OData-Version: 4.0
Værktøjer til fællesskabet
Automatisk nummerstyring
Auto Number Manager til XrmToolBox er et community-drevet værktøj til Dynamics 365 Customer Engagement (on-premises), der indeholder en brugergrænseflade til at angive, opdatere og fjerne automatisk nummereringsformat for nye eller eksisterende attributter. Se artiklen Udviklerværktøjer for værktøjer udviklet af community'et og anm.xrmtoolbox.com for at få flere oplysninger om Automatisk nummerstyring.
Bemærk
Community-værktøjerne er ikke et produkt af Microsoft Dynamics og udvider ikke support til community-værktøjerne. Hvis du har spørgsmål vedrørende værktøjet, bedes du kontakte forlaget. Flere oplysninger: XrmToolBox.