Del via


Oprette og administrere produktfamilier, produkter, bundter og produktegenskaber

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Definer dit produktkatalog ved at organisere dine produkter i en hierarkisk struktur ved at oprette produkter og bundter under en produktfamilie, definere relaterede produkter og tilføje egenskaber (attributter) til den overordnede produktfamilie, så alle de underordnede produkter og bundter under en produktfamilie automatisk arver egenskaberne.

Når du opretter en produktfamilie-, produkt- eller bundtpost, er de som standard i tilstanden Kladde. Når du har oprettet et produkt, defineret relaterede produkter og konfigureret attributter for den overordnede produktfamiliepost, skal du udgive produktfamilie-, produkt- eller bundtposten, for at de bliver tilgængelige i systemet, så dine salgsagenter kan sælge dem.Flere oplysninger:Udgiv en produktfamilie, et produkt eller et bundt

Bemærk

For produkter, der ikke er knyttet til en produktfamilie, det vil sige produkter, der ikke har en overordnet produktfamiliepost tildelt, kan du oprette dem direkte i en aktiv tilstand ved at angive attributten Organization.CreateProductsWithoutParentInActiveState til 1 (sand). Denne attribut er som standard angivet til 0 (falsk) for en ny installation af Microsoft Dynamics 365 og til 1 (sand), hvis du opgraderer fra en tidligere version af Dynamics 365 for at sikre kompatibilitet for dine programmer, der arbejder med den tidligere version af Dynamics 365, hvor produktposterne blev oprettet i en aktiv tilstand.

Du kan også bruge fanen Salg i området for systemindstillinger i Microsoft Dynamics 365 eller Microsoft Dynamics 365 til Outlook til at angive, om produkter er oprettet i en aktiv tilstand.Flere oplysninger:TechNet: Administrer konfiguration af produktkatalog

Dette emne indeholder

Definere produkter, produktfamilier og bundter

Definere produktegenskaber

Bundter og pakker

Definere produktrelationer for at få forbedrede forslag under produktsalg

Klone en produktfamilie, et produkt eller et bundt

Definere produkter, produktfamilier og bundter

Brug attributten Product.ProductStructure til at angive, om en vare er en produktfamilie, et produkt eller et bundt. Indstil værdien af denne attribut til:

  • 1 for at oprette et produkt

  • 2 for at oprette en produktfamilie

  • 3 for at oprette et bundt

Her er nogle vigtige punkter at overveje, når du definerer produktfamilier, produkter og bundter:

  • En produktfamiliepost kan indeholde flere underordnede produktfamilie-, produkt- og bundtforekomster i en hierarkisk struktur. For en underordnet produktfamilieforekomst, en underordnet produktforekomst eller en underordnet bundtforekomst definerer du den overordnede produktfamilieforekomst ved hjælp af attributten Product.ParentProductId. Du kan ikke ændre den overordnede post, når du har konfigureret den.

  • Et produkt eller et bundt kan ikke angives som overordnet, hvilket indebærer, at en produkt- eller bundtpost ikke kan have underordnede poster.

  • En produktfamilie-, produkt- eller bundtforekomst kan kun være en del af én produktfamilieforekomst.

  • Der er ingen begrænsninger på indlejringsniveauet for en produktfamilie.

  • Attributterne Product.ValidFromDate og Product.ValidToDate har ikke har nogen out-of-box forretningslogik, der er knyttet til dem, bortset fra at der er en kontrol for at sikre, at datoen i Product.ValidToDate skal være senere end eller lig med datoen i Product.ValidFromDate. Hvis det er nødvendigt, kan du implementere din egen forretningslogik, der er baseret på disse attributter. Du kan for eksempel køre et planlagt job for automatisk at tilbagetrække sidste sæsons produkter ved hjælp af datoværdien i attributten Product.ValidToDate.

I følgende kodeeksempel demonstreres, hvordan du kan oprette en produktfamilie og en underordnet produktpost.

// Create a product family
Product newProductFamily = new Product
{
   Name = "Example Product Family",
   ProductNumber = "PF001",
   ProductStructure = new OptionSetValue(2)
};
_productFamilyId = _serviceProxy.Create(newProductFamily);
Console.WriteLine("\nCreated {0}", newProductFamily.Name);

// Create a product record under the product family
Product newProduct1 = new Product
{
   Name = "Example Product 1",
   ProductNumber = "P001",
   ProductStructure = new OptionSetValue(1),
   ParentProductId = new EntityReference(Product.EntityLogicalName, _productFamilyId),
   QuantityDecimal = 2,
   DefaultUoMScheduleId = new EntityReference(UoMSchedule.EntityLogicalName, _unitGroupId),
   DefaultUoMId = new EntityReference(UoM.EntityLogicalName, _unit.Id)
};
_product1Id = _serviceProxy.Create(newProduct1);
Console.WriteLine("Created {0} under the product family", newProduct1.Name);

Definere produktegenskaber

Produktegenskaber hjælper dig med at definere egenskaberne for produktet som f.eks. dets størrelse, farve eller komponent. En produktegenskab defineres ved hjælp af DynamicProperty-objektet. Når du definerer en produktegenskab, kan du kun knyttes til en produktfamiliepost i tilstanden Draft og ikke til en produkt- eller bundtpost. Det maksimale antal produktegenskaber, der kan tilknyttes til en post for produktfamiliekladden, bestemmes af følgende organisationsindstilling: Organization.MaximumDynamicPropertiesAllowed. Antallet træder i kraft, når du udgiver en underordnet produktpost eller et bundt under en produktfamilie, som egenskaberne er knyttet til, og ikke på det tidspunkt, hvor du vedhæfter egenskaberne til en kladdeproduktfamiliepost.

Tip

Du kan også bruge fanen Salg i området for systemindstillinger i Dynamics 365 eller Dynamics 365 til Outlook til at konfigurere det maksimale antal produktegenskaber.Flere oplysninger:TechNet: Administrer konfiguration af produktkatalog.

Under oprettelsen af en produktegenskab angiver du dens navn, den produktfamiliepost i tilstanden Draft, som er tilknyttet, attributter for egenskaben, f.eks. om den er skjult, påkrævet eller skrivebeskyttet, og datatypen for egenskaben. En produktegenskab kan være en af følgende datatyper:

Værdi

Datatype

0

Grupperet indstilling

1

Decimal

2

Flydende tal

3

Enkelt tekstlinje

4

Heltal

Du kan ikke ændre datatypen for en produktegenskab, efter den er oprettet. Når du opretter en produktegenskab, bliver den oprettet i tilstanden Draft.

I følgende eksempelkode vises det, hvordan du kan oprette en produktegenskab:

DynamicProperty newProperty = new DynamicProperty
{
    Name = "Example Property",
    RegardingObjectId = new EntityReference(Product.EntityLogicalName,
                                            _productFamilyId),
    IsReadOnly = true,
    IsRequired = true,
    IsHidden = false,
    DataType = new OptionSetValue(3), //Single line of text
    DefaultValueString = "Default Value"
};
_productPropertyId = _serviceProxy.Create(newProperty);

Du kan se hele eksempelkoden under Eksempel: Oprette og udgive produkter.

Bemærk

Når du opretter en produktegenskab med datatypen Option Set, skal du angive individuelle indstillinger for produktegenskaben ved at oprette DynamicPropertyOptionSetItem-objektposter. Hver enhedspost gemmer oplysninger om den individuelle indstilling, hvor attributterne DynamicPropertyOptionSetItem.DynamicPropertyOptionName og DynamicPropertyOptionSetItem.DynamicPropertyOptionValue definerer henholdsvis indstillingens navn og værdi, og du kan knytte individuelle indstillingsposter til den overordnede produktegenskabsforekomst ved hjælp af attributten DynamicPropertyOptionSetItem.DynamicPropertyId.

Du kan finde oplysninger om oprettelse og administration af produktegenskaber ved hjælp af webklienten under Hjælp og undervisning: Bruge egenskaber til at beskrive et produkt.

Bemærk

Måden, du definerer en produktegenskab på, bestemmer, hvordan den kan bruges af salgsagenten på kørselstidspunktet, det vil sige under tilføjelse af et tilknyttet produkt til en salgsmulighed, et tilbud, en ordre eller en faktura. Værdien for en produktegenskab, som kan opdateres, kan ændres på kørselstidspunktet, mens værdien af en skrivebeskyttet produktegenskab ikke kan. For en produktegenskab, der er angivet som krævet, skal der være angivet en værdi for egenskaben på kørselstidspunktet. Ellers vises egenskaben som uløst. En skjult egenskab vises ikke for salgsagenterne på kørselstidspunktet.

Produktegenskaber påvirker heller ikke prissætningen for et produkt. Dette indebærer, at Dynamics 365-prissætningsfunktionen ikke understøtter ændring af prisen på et produkt baseret på en ændring af produktegenskabernes værdier.

Ændre produktegenskaber

Det er vigtigt at kende de forskellige tilstande for produktegenskaben for at forstå, hvordan og hvornår den kan ændres. En produktegenskab kan være i tilstanden Kladde, Aktiv eller Udgået. Når der oprettes et produkt, er det i tilstanden Kladde og skifter til tilstanden Aktiv, når den tilknyttede produktfamiliepost udgives. Når den tilknyttede produktfamiliepost er udgået, ændres tilstanden for produktegenskaben også til Retired.

En produktegenskab kan ændres på to niveauer: første på det produktfamilieniveau, som produktegenskaben er tilknyttet, og anden på det underordnede produktfamilie-, produkt- eller bundtniveau, hvor produktegenskaben er nedarvet.

Ændring af produktegenskab for den produktfamilie, der er tilknyttet

For en produktfamiliepost i tilstanden Draft kan du ændre en produktegenskab, der er knyttet til den. Når du har udgivet produktfamilieposten (skifter til tilstanden Active), kan du ikke ændre produktegenskaben, før du reviderer produktfamilieposten. Efter revidering af produktfamilieposten (skifter til tilstanden Under Revision) kan du overskrive den udgivne (aktive) version af egenskaben med henblik på at foretage ændringer. Du kan finde oplysninger om produktets livscyklus under Udgive, revidere, genindlæse, lade udgå og aktivere produkter (produktlivscyklus)

Ændring af arvet produktegenskab til underordnet produktfamilie, produkt eller bundt

For en produktegenskab i tilstanden Draft kan de underordnede produktfamilie-, produkt- og bundtposter tilsidesætte den arvede egenskab for at definere deres egen version af egenskaben. Du kan f.eks. tilsidesætte den arvede egenskab for at ændre dens navn eller dens attributter fra Skjult til Synlig, Påkrævet til Valgfri eller fra Skrivebeskyttet til Kan opdateres. Du kan ikke tilsidesætte eller ændre datatypen for den arvede egenskab.

Hvis du vil tilsidesætte en produktegenskab, skal du oprette en forekomst af produktegenskaben og angive egenskaben BaseDynamicPropertyId til GUID for den egenskab, du tilsidesætter. Derudover kan du også knytte den nye egenskabsforekomst til den underordnede produktfamilie-, produkt- eller bundtpost, hvor den bliver tilsidesat.

Følgende eksempelkode viser, hvordan du kan tilsidesætte en eksisterende produktegenskabspost, f.eks. med GUID _productPropertyId, og knytte den tilsidesatte egenskab til produktposten, f.eks. med GUID _product1Id. Derefter kan du opdatere attributterne for den nye egenskab for at angive dine egne værdier og fuldføre ændringen.

// Override a product property
DynamicProperty newOverrideProperty = new DynamicProperty();
newOverrideProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
                           _productPropertyId);
newOverrideProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName, _product1Id);
_productOverridenPropertyId = _serviceProxy.Create(newOverrideProperty);

// Retrieve the attributes of the cloned property you want to update                    
ColumnSet columns = new ColumnSet();
columns.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverridenProperty = (DynamicProperty)_serviceProxy.Retrieve(
                                               DynamicProperty.EntityLogicalName, _productOverridenPropertyId,
                                               columns);

// Update the attributes
retrievedOverridenProperty.Name = "Overridden Example Property";
retrievedOverridenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverridenProperty);

Du kan se hele eksempelkoden under Eksempel: Oprette og udgive produkter.

For en produktegenskab i tilstanden Active kan du overskrive den arvede egenskab for den underordnede produktfamilie-, produkt- eller bundtpost, forudsat at følgende delsætninger er sande:

  • Den underordnede produktfamilie-, produkt- eller bundtpost er i tilstanden Under revision.

  • Den arvede aktive produktegenskab er allerede tilsidesat.

Hvis du vil overskrive en produktegenskab, skal du oprette en forekomst af produktegenskaben og angive egenskaben BaseDynamicPropertyId til GUID for den allerede tilsidesatte egenskab. Derudover kan du knytte den nye egenskabsforekomst til den underordnede produktfamilie-, produkt- eller bundtpost, der er til tilstanden Under Revision.

Følgende eksempelkode viser, hvordan du kan overskrive en eksisterende produktegenskabspost i aktiv tilstand, som allerede er tilsidesat, f.eks. med GUID _productOverridenPropertyId, og knytte den nye egenskab til produktposten i tilstanden Under Revision, f.eks. med GUID _product1Id. Derefter kan du opdatere attributterne for den nye egenskab for at angive dine egne værdier og fuldføre overskrivningen.

// Overwrite a product property
DynamicProperty newOverwriteProperty = new DynamicProperty();
newOverwriteProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
                           _productOverridenPropertyId);
newOverwriteProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName,
    _product1Id);
_productOverwrittenPropertyId = _serviceProxy.Create(newOverwriteProperty);

// Retrieve the attributes of the cloned property you want to update
ColumnSet myCols = new ColumnSet();
myCols.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverwrittenProperty = (DynamicProperty)_serviceProxy.Retrieve(
                                                   DynamicProperty.EntityLogicalName, _productOverwrittenPropertyId,
                                                   myCols);

// Update the attributes of the cloned property to complete the overwrite 
retrievedOverwrittenProperty.Name = "Overwritten Example Property";
retrievedOverwrittenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverwrittenProperty);

Du kan se hele eksempelkoden under Eksempel: Oprette og udgive produkter.

Bundter og pakker

Et bundt er en funktion, der er indført i Dynamics 365 som erstatning for den gamle pakkefunktionalitet. Lige som en pakke er et bundt en samling af produkter, der sælges som en enkelt enhed. Bundtning af produkter er nyttigt til at gruppere produkterne på en måde, så kunderne får flere fordele fra hele udvalget af produkter, eller til at tilbyde rabatter på bundtede produkter, der giver dig mulighed for at gruppere produkter og sælge dem som en enkelt enhed.

Der kan kun føjes produkter til et bundt. Du kan ikke føje en produktfamilie-, bundt- eller pakkepost til et bundt. Du kan føje produkter til et bundt eller en pakke ved at oprette en produkttilknytningspost ved hjælp af objektet ProductAssociation. Posten ProductAssociation.ProductId angiver det bundt eller den pakke, som du vil føje et produkt til, og ProductAssociation.AssociatedProduct angiver det produkt, der skal tilføjes. Det maksimale antal produkter, der kan føjes til et bundt, bestemmes af den følgende organisationsindstilling: Organization.MaxProductsinBundle.

Du kan også bruge fanen Salg i området for systemindstillinger i Dynamics 365 eller Dynamics 365 til Outlook til at angive det maksimale antal produkter, der kan føjes til et bundt.Flere oplysninger:TechNet: Administrer konfiguration af produktkatalog

I følgende kodeeksempel demonstreres, hvordan du kan føje produkter til et bundt.

// Add a product to a bundle
ProductAssociation newAssociation1 = new ProductAssociation
{
   AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product1Id),
   ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
   Quantity = new decimal(15),
   ProductIsRequired = new OptionSetValue(0),
   UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id)
};
_product1AssociationId = _serviceProxy.Create(newAssociation1);                    

// Add another product to the bundle                    
ProductAssociation newAssociation2 = new ProductAssociation
{
   AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product2Id),
   ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
   Quantity = new decimal(20),
   ProductIsRequired = new OptionSetValue(1),
   UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id),                        
};
_product2AssociationId = _serviceProxy.Create(newAssociation2);

if ((_product1AssociationId != null) && (_product1AssociationId != null))
Console.WriteLine("\nAdded both the products to the bundle");

Du kan se hele eksempelkoden under Eksempel: Føje produkter til et bundt.

Forskelle mellem pakker og bundter

Både pakker og bundter giver dig mulighed for at gruppere produkter til en enkelt enhed, men her er nogle forskelle mellem de to.

Pakker

Bundter

Alle produkterne i en pakke er obligatoriske.

Nogle produkter i et bundt kan være valgfri.

Pakker understøtter indlejring. Du kan føje en pakke til en anden pakke.

Du kan ikke føje et bundt til et andet bundt. Du kan kun føje produkter til et bundt.

Når du tilføjer en pakke til en salgsmulighed, et tilbud, en ordre eller en faktura, kan du kun se detaljer på pakkeniveau. Du kan ikke se de enkelte produkter i pakken.

Når du tilføjer et bundt til en salgsmulighed, et tilbud, en ordre eller en faktura, kan du både se detaljer på bundtniveau og de enkelte produkter i bundtet.

Bemærk

Pakker frabedes i Dynamics 365. Du skal bruge bundter i stedet.

Definere produktrelationer for at få forbedrede forslag under produktsalg

Du kan definere relaterede produkter for et produkt, der vises som forslag til dine salgsagenter under styring af salgsmuligheder eller ordrer. Produktforslag til et produkt giver dine salgsagenter mulighed for at anbefale relaterede produkter og bundter/pakker til kunderne og øge produktsalget. Du kan definere følgende relationer for et produkt: tilbehør, krydssalg, erstatning og opsalg. For eksempel kan Surface Pro tilføjes som et opsalgsprodukt til Surface RT, så når din salgsagent tilføjer Surface RT til en salgsmulighed, et tilbud, en ordre eller en faktura, vil Surface Pro blive foreslået som opsalgsmuligheden.

Brug attributten ProductSubstitute.SalesRelationshipType til at definere produktrelationer. Indstil værdien af denne attribut til:

  • 0 for opsalg

  • 1 for krydssalg

  • 2 for tilbehør

  • 3 for erstatning

Når du definerer produktrelationer, er det vigtigt at definere retningen af relationen for at undgå dubletter af data. De understøttede retninger for produktrelationerne er:

Produktrelation

Retning

Tilbehør

Envejs

Skab krydssalg

Envejs eller tovejs

Erstatning

Envejs eller tovejs

Skab mersalg

Envejs

Brug attributten ProductSubstitute.Direction til at angive retningen for en produktrelation. Indstil værdien af denne attribut til:

  • 0 for envejs

  • 1 for tovejs

Følgende kodeeksempel demonstrerer, hvordan du kan definere relationer for produkter.

// Set product relationship
// Set product1 and product2 as substitute of each other (bi-directional)
ProductSubstitute newProductRelation = new ProductSubstitute
{
   SalesRelationshipType = new OptionSetValue(3),
   Direction = new OptionSetValue(1),
   ProductId = new EntityReference(Product.EntityLogicalName, _product1Id),
   SubstitutedProductId = new EntityReference(Product.EntityLogicalName, _product2Id)
};
_productRelationId = _serviceProxy.Create(newProductRelation);

Klone en produktfamilie, et produkt eller et bundt

Brug meddelelsen CloneProductRequest til at klone en produktfamilie-, produkt- eller bundtpost og oprette en kopi af posten under den samme overordnede node. Du skal angive id'et for posten for at klone den. Kloning en produktpost kopierer også egenskaberne for produktet. Den klonede post oprettes med det dato- og tidsstempel, der er føjet til de oprindelige værdier i attributterne Product.Name og Product.ProductNumber. Dato-tidsstemplet angiver det tidspunkt, hvor posten blev klonet. I følgende kodeeksempel demonstreres, hvordan du kan klone et produkt.

CloneProductRequest cloneReq = new CloneProductRequest
{
   Source = new EntityReference(Product.EntityLogicalName, _productId)
};

CloneProductResponse cloned = (CloneProductResponse)_serviceProxy.Execute(cloneReq);                                     
_productCloneId = cloned.ClonedProduct.Id;

// Retrieve the cloned product record
Product retrievedProduct = (Product)_serviceProxy.Retrieve(Product.EntityLogicalName, _productCloneId, new ColumnSet(true));
Console.WriteLine("\nCreated clone product: {0}", retrievedProduct.Name);

Næste trin

Udgiv dine produktposter for at gøre produkterne tilgængelige, så dine salgsagenter kan sælge dem.Flere oplysninger:Udgiv en produktfamilie, et produkt eller et bundt

Se også

Udgive, revidere, genindlæse, lade udgå og aktivere produkter (produktlivscyklus)
Eksempel: Oprette og udgive produkter
Eksempel: Klone produktposter
Eksempel: Føje produkter til et bundt
Produktkatalogobjekter

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret