In this article we will cover how to integrate / exchange Product / Product Master data in Product Information Management module of D365 SCM, D365 Commerce and D365 F&O (Finance & Operations). Going forward in this article we will refer to all above applications collectively as D365 SCM as it applies to all these application versions.
D365 SCM offer many options to integrate / connect and exchange data with 3rd party applications. In this article we will cover CRUD (Create, Read, Update & Delete) operations using OData protocol and talk about Data Entities involved in creation of Products and Product Master. In case you like to understand difference between Products and Product Master in D365 SCM. Please refer to Concept of Product and how to create Products & Product Master in D365 SCM.
Pre-requisites
This article assumes you already have a D365 F&O trial license and tier-1 development sandbox available.
- Acquire D365 SCM Trial License: If you are new to ISV development with D365 SCM or learning D365 SCM development. You can sign up for trial license to kick off your development journey with D365 SCM. Once you signed up for trial account you can spin off a cloud VM to host your D365 SCM sandbox following the article here. Kindly note the environment (VM) hosted on Azure will be charged to partner’s azure subscription use auto shutdown scripts to control consumption based on need.
- Have familiarity with OData data exchange concepts and familiar with nomenclature of API URIs and supported operations. The following article can serve for quick refresher on OData Capabilities of D365 Finance & Operations APIs.
- Please refer to Register a web application with AAD & this article to register an application in Azure Active Directory to allow authentication and token to exchange data between 3rd party application and D365 SCM application.
- For testing and mimicking 3rd party applications for integration. We will be using Postman with D365 SCM
Postman Variables & Parameters:
Let’s start with understanding some over the variables defined in Postman calls and their purpose.
- client_id, client_Secret: It is the ID you get when registering your application in AAD during pre-requisite step 2.
- tenant_id: The tenant ID of AAD on which the Application is registered as part of pre-requite step 2.
- resource: The base URL of the instance without the trailing '/' e.g., https://YourInstance.sandbox.operations.dynamics.com
- TokenAAD and resourceForToken: I am using to get token for authentication. TokenAAD represent https://login.microsoftonline.com/[tenant_id] and ResourceForToken is same as resource i.e., https://YourInstance.sandbox.operations.dynamics.com.
- tokenSalt: It’s a token of authentication please refer to query OData by using Postman to get token or my example below (Token request & response sections) in response see value of access_token copy its value without “”.
- ProduID_Salt, ProductName_Salt, ProductMasterID_Salt: These are variable placeholders for some products we will create in D365 SCM and will pass as variables in our OData requests for creation of products etc.
Token Request:
Please find below Post request to get oauth token as body we are sending grant_type, client_id, client_secret and D365 base url (as resource).
Token Response:
In response see value of access_token copy its value without “” this the bearer token value for subsequent calls.
Read Products / Product Master Request:
We will call get operation on DistinctProducts to get product data. I had put a filter to get just product whose productNumber = 0001. If we remove filter it will bring all products. Please note that authorization is taking the Bearer Token from Environment variables which we set based on access token in Token Response we received in above example.
For Product Master we will call get operation on ProductMasters to get data. I had put a filter to get just product whose productNumber = 81129. If we remove filter, it will bring all products. Please note that authorization is taking the Bearer Token from Environment variables which we set based on access token in Token Response we received in above example.
OData Call Sequence for Create Request:
First, we must create the product / product master and its relevant base information than as a second step we release these products to relevant legal entities so to have proper product data created in D365 SCM you have to follow call sequencing of POST operation in following sequence and data entities.
Product |
Product Master (PM) |
Purpose |
DistinctProducts |
ProductMasters |
To create Product / Product Master base record |
|
ProductMasterColors |
Optional use only if PM has Color dimension |
|
ProductMasterColorTranslations |
|
|
ProductMasterConfigurations |
Optional use only if PM has Configuration dimension |
|
ProductMasterConfigurationTranslations |
|
|
ProductMasterSizes |
Optional use only if PM has Size dimension |
|
ProductMasterSizeTranslations |
|
|
ProductMasterStyles |
Optional use only if PM has Style dimension |
|
ProductMasterStyleTranslations |
|
ReleasedProductsV2 |
ReleasedProductMastersV2 (To release the PM to specific |
Release the Product / Product Master to specific legal entity |
|
ReleasedProductVariantsV2 |
Release the Product Master variants to specific legal entity |
Note: There are some other translation / product tables specific to Retail as applicable in the case same above concept of OData can be populated in subsequent calls to those data entities as well.
Create Distinct Product Request & Response:
Update / Delete Requests:
In case we must update certain fields, we can use Patch operation. In the above case let us use the same newly created product and update its description, in below example notice operation is changed from POST to PATCH and filter is applied in the request for conditional update. The request will be as follows and if we read the product data afterwards, we will get the updated information in the request.
Result in D365 SCM -> Product Information Management -> Released Products.
In case we must delete newly created product we can use DELETE operation along with filter criteria as follows. Kindly note deleting will only be successful if no transactions exist on the product. In case it is released and if some inventory / sales orders or purchase order transactions already created in the D365 SCM. It will not allow to delete the product.
Release Distinct Product Request & Response:
Once we created the product with right values, we can release the product to applicable legal entity with more fields specific to legal entity such as its sales price, sales unit, purchase price, purchase unit and costing information so this released product is ready to be used in the SCM transactions onwards.
In the example below we used ReleasedProductsV2 data entity to create released product in USRT legal entity. One tip here is you can read an existing product to get list of attributed and pick and chose appropriate values to be sent in creation body as applicable to your product.
Sample Request:
{
"dataAreaId": "usrt",
"ItemNumber": "{{ProduID_Salt}}",
"IsPurchasePriceIncludingCharges": "No",
"IsPhantom": "No",
"ItemFiscalClassificationCode": "",
"SeventhProductFilterCode": "",
"ServiceAccountingCode": "",
"MarginABCCode": "None",
"IsICMSTaxAppliedOnService": "No",
"ShippingAndReceivingSortOrderCode": 0,
"ProductionConsumptionWidthConversionFactor": 0,
"AlternativeProductSizeId": "",
"CatchWeightItemHandlingPolicyName": "",
"RawMaterialPickingPrinciple": "Staging",
"ProductionConsumptionDepthConversionFactor": 0,
"DefaultProductConfigurationId": "",
"ItemModelGroupId": "MOV_AVG",
"GrossProductHeight": 0,
"AlternativeProductVersionId": "",
"IsSalesWithholdingTaxCalculated": "No",
"ScaleIndicator": "Relevant",
"ProductVolume": 0,
"TrackingDimensionGroupName": "None",
"PurchaseSalesTaxItemGroupCode": "RP",
"CustomsExportTariffCode": "",
"PlanningFormulaItemNumber": "",
"UpdateProductVariantLifecycleState": "No",
"WarehouseMobileDeviceDescriptionLine1": "",
"InventoryCountingReasonCodePolicyName": "",
"WarehouseMobileDeviceDescriptionLine2": "",
"SalesItemWithholdingTaxGroupCode": "",
"IsUnitCostProductVariantSpecific": "No",
"IsPOSRegistrationQuantityNegative": "No",
"UpperWarrantablePriceRangeLimit": 0,
"POSRegistrationPlannedBlockedDate": "1900-01-01T12:00:00Z",
"SellEndDate": "1900-01-01T12:00:00Z",
"SADGroup": "",
"IsPurchaseWithholdingTaxCalculated": "No",
"DefaultLedgerDimensionDisplayValue": "006--",
"WarrantyDurationTimeUnit": "Day",
"CommissionProductGroupId": "",
"IsExemptFromAutomaticNotificationAndCancellation": "No",
"TaxSubstitutionCode": "",
"ProductionType": "None",
"NetProductWeight": 0,
"ProductionPoolId": "",
"SalesSupplementaryProductProductGroupId": "",
"WarrantablePriceRangeBaseType": "None",
"StorageDimensionGroupName": "SiteWH",
"PurchasePricingPrecision": 0,
"BOMUnitSymbol": "",
"SalesPriceCalculationContributionRatio": 0,
"CatchWeightUnitSymbol": "",
"VendorInvoiceLineMatchingPolicy": "NotSet",
"SellStartDate": "1900-01-01T12:00:00Z",
"PhysicalDimensionGroupId": "",
"CarryingCostABCCode": "None",
"SalesRetailInventoryAvailabilityLevelProfile": "",
"TransferOrderOverdeliveryPercentage": 0,
"TenthProductFilterCode": "",
"UnitConversionSequenceGroupId": "",
"WillPickingWorkbenchApplyBoxingLogic": "No",
"FixedSalesPriceCharges": 0,
"IsDeliveredDirectly": "No",
"IsScaleProduct": "No",
"AlternativeProductColorId": "",
"FixedPurchasePriceCharges": 0,
"IsUnitCostIncludingCharges": "No",
"ShipStartDate": "1900-01-01T12:00:00Z",
"SalesPrice": 69.99,
"SalesPriceCalculationModel": "None",
"CustomsImportTariffCode": "",
"ArrivalHandlingTime": 0,
"SATCode": "",
"IntrastatCommodityCode": "",
"AreTransportationManagementProcessesEnabled": "No",
"WarehouseReleaseSalesUnitRestricted": "All",
"IsShipAloneEnabled": "No",
"ProductionConsumptionDensityConversionFactor": 0,
"PurchasePriceDate": "2016-10-06T12:00:00Z",
"SalesPricingPrecision": 0,
"PurchaseChargesQuantity": 0,
"ValueABCCode": "None",
"UnitCostDate": "2016-10-06T12:00:00Z",
"VariableScrapPercentage": 0,
"MaximumPickQuantity": 0,
"AlternativeProductStyleId": "",
"BarcodeSetupId": "",
"IsSalesPriceIncludingCharges": "No",
"PurchasePriceQuantity": 1,
"PurchaseChargeProductGroupId": "",
"ContinuityScheduleId": "",
"FixedCostCharges": 0,
"CostGroupId": "",
"EighthProductFilterCode": "",
"SalesLineDiscountProductGroupCode": "",
"POSRegistrationActivationDate": "1900-01-01T12:00:00Z",
"MaximumCatchWeightQuantity": 0,
"ProductLifeCycleValidToDate": "1900-01-01T12:00:00Z",
"WarrantyDurationTime": 0,
"ServiceFiscalInformationCode": "",
"IsTenderDiscountPOSRegistrationProhibited": "No",
"PurchaseSupplementaryProductProductGroupId": "",
"InventoryUnitSymbol": "Ea",
"WillTotalPurchaseDiscountCalculationIncludeProduct": "Yes",
"PackSizeCategoryId": "",
"SalesChargesQuantity": 0,
"SalesMultilineDiscountProductGroupCode": "",
"BatchMergeDateCalculationMethod": "Manual",
"SalesChargeProductGroupId": "",
"PurchasePrice": 41.994,
"SecondProductFilterCode": "",
"IsIntercompanyPurchaseUsageBlocked": "No",
"AlternativeProductConfigurationId": "",
"SalesOverdeliveryPercentage": 0,
"IsDiscountPOSRegistrationProhibited": "No",
"BestBeforePeriodDays": 0,
"PurchaseOverdeliveryPercentage": 0,
"ProductLifecycleStateId": "",
"PurchaseUnitSymbol": "Ea",
"SalesUnderdeliveryPercentage": 0,
"BuyerGroupId": "",
"IsManualDiscountPOSRegistrationProhibited": "No",
"ServiceType": "NotSpecified",
"NecessaryProductionWorkingTimeSchedulingPropertyId": "",
"ApprovedVendorCheckMethod": "NoCheck",
"SalesRebateProductGroupId": "",
"InventoryReservationHierarchyName": "",
"HSNCode": "",
"FlushingPrinciple": "Start",
"SalesPriceQuantity": 1,
"YieldPercentage": 0,
"TareProductWeight": 0,
"ApproximateSalesTaxPercentage": 0,
"PackingDutyQuantity": 0,
"PurchaseLineDiscountProductGroupCode": "",
"WillInventoryIssueAutomaticallyReportAsFinished": "No",
"Exempt": "No",
"FourthProductFilterCode": "",
"ProductFiscalInformationType": "",
"PackageHandlingTime": 0,
"GrossProductWidth": 0,
"NinthProductFilterCode": "",
"ShelfLifePeriodDays": 0,
"DefaultProductVersionId": "",
"SalesRetailInventoryAvailabilityBuffer": 0,
"TransferOrderUnderdeliveryPercentage": 0,
"DefaultReceivingQuantity": 0,
"POSRegistrationBlockedDate": "1900-01-01T12:00:00Z",
"MustKeyInCommentAtPOSRegister": "No",
"DefaultProductStyleId": "",
"ConstantScrapQuantity": 0,
"PotencyBaseAttributeValueEntryEvent": "PurchProdReceipt",
"KeyInPriceRequirementsAtPOSRegister": "NotMandatory",
"IntrastatChargePercentage": 0,
"ProductCoverageGroupId": "",
"PotencyBaseAttibuteTargetValue": 0,
"IsIntercompanySalesUsageBlocked": "No",
"PackingMaterialGroupId": "",
"PurchaseRebateProductGroupId": "",
"CNPJ": "",
"PrimaryVendorAccountNumber": "1004",
"ThirdProductFilterCode": "",
"SearchName": "{{ProductName_Salt}}",
"IsRetailDiscountPOSRegistrationProhibited": "No",
"ProjectCategoryId": "",
"OriginCountryRegionId": "",
"AlternativeItemNumber": "",
"NonGST": "No",
"PurchaseItemWithholdingTaxGroupCode": "",
"IsZeroPricePOSRegistrationAllowed": "No",
"CostChargesQuantity": 0,
"IsUnitCostAutomaticallyUpdated": "No",
"DefaultDirectDeliveryWarehouse": "",
"ProductTaxationOrigin": "National",
"IsVariantShelfLabelsPrintingEnabled": "No",
"UnitCost": 41.994,
"DefaultProductColorId": "",
"SalesPriceDate": "2016-10-06T12:00:00Z",
"AlternativeProductUsageCondition": "Never",
"WillTotalSalesDiscountCalculationIncludeProduct": "Yes",
"PurchasePriceToleranceGroupId": "",
"IsInstallmentEligible": "No",
"BaseSalesPriceSource": "PurchPrice",
"SixthProductFilterCode": "",
"SerialNumberGroupCode": "",
"ProductLifeCycleValidFromDate": "1900-01-01T12:00:00Z",
"ItemFiscalClassificationExceptionCode": "",
"NGPCode": 0,
"FirstProductFilterCode": "",
"FifthProductFilterCode": "",
"SalesUnitSymbol": "Ea",
"TaxRateType": "",
"LowerWarrantablePriceRangeLimit": 0,
"KeyInQuantityRequirementsAtPOSRegister": "NotMandatory",
"ProductionGroupId": "",
"DefaultOrderType": "Purch",
"ProductGroupId": "ActionSpor",
"IsCatchWeightProduct": "No",
"ProductionConsumptionHeightConversionFactor": 0,
"ContinuityEventDuration": 0,
"PKWiUCode": "",
"IsPOSRegistrationBlocked": "No",
"BatchNumberGroupCode": "",
"DefaultProductSizeId": "",
"ProductDimensionGroupName": "",
"PurchaseUnderdeliveryPercentage": 0,
"GrossDepth": 0,
"RevenueABCCode": "None",
"PackageClassId": "",
"SalesPriceCalculationChargesPercentage": 0,
"PurchaseMultilineDiscountProductGroupCode": "",
"WillWorkCenterPickingAllowNegativeInventory": "No",
"ProductLifeCycleSeasonCode": "",
"SalesSalesTaxItemGroupCode": "RP",
"IsRestrictedForCoupons": "No",
"IsSalesPriceAdjustmentAllowed": "No",
"IsPurchasePriceAutomaticallyUpdated": "No",
"MinimumCatchWeightQuantity": 0,
"WillInventoryReceiptIgnoreFlushingPrinciple": "No",
"ProductNumber": "{{ProduID_Salt}}",
"UnitCostQuantity": 1,
"FreightAllocationGroupId": "",
"ComparisonPriceBaseUnitSymbol": "",
"CostCalculationGroupId": "",
"ShelfAdvicePeriodDays": 0,
"OriginStateId": "",
"ItemOverUnderdeliveryToleranceGroupId": "",
"CustomsDescription": "",
"TransferOrderLandedCostGroupId": "",
"VoyageArrivalGroupId": "",
"LandedCostTypeGroupId": "",
"CommodityCodeId": "",
"RevRecBundle": "No",
"RevRecMedianPriceMaximumTolerance": 0,
"RevRecMedianPrice": "No",
"RevRecDefaultRevenueRecognitionSchedule": "",
"RevRecExcludeFromCarveOut": "No",
"RevRecMedianPriceMinimumTolerance": 0,
"RevRecRevenueRecognitionEnabled": "No",
"RevRecRevenueType": "Essential"
}
Result in D365 SCM -> Product Information Management -> Released Products:
Create Product Master Request & Response:
Sample Request:
{ "ProductNumber": "9x002", "NMFCCode": "", "ProductType": "Item", "ProductStyleGroupId": "", "STCCCode": "", "IsProductVariantUnitConversionEnabled": "No", "AreIdenticalConfigurationsAllowed": "No", "StorageDimensionGroupName": "SiteWH", "IsAutomaticVariantGenerationEnabled": "Yes", "ProductSizeGroupId": "", "VariantConfigurationTechnology": "PredefinedVariants", "ProductDimensionGroupName": "SizeColStl", "IsProductKit": "No", "IsCatchWeightProduct": "No", "ProductDescription": "When you need to be a bit on the business casual side, to not too formal, our selection of pants will have you covered.", "ProductColorGroupId": "", "RetailProductCategoryName": "Pants", "ProductSearchName": "Flat Front Pants", "TrackingDimensionGroupName": "None", "ProductName": "Flat Front Pants", "HarmonizedSystemCode": "" }
Create Product Master Color & Translation:
You must create product color translations for all the applicable languages in which customers require invoices / company users work globally and require country specific translations for products in transactions and reporting. So, create translations of the same color into all required languages.
Create Product Master Size & Translation:
Create Product Master Style & Translation:
Release Product Master Request & Response:
Once we created the product master along with its configurations like Size / Color / Style or Configuration as applicable with right values, we can release the product master to applicable legal entity with more fields specific to legal entity such as its sales price, sales unit, purchase price, purchase unit and costing information so this released product is ready to be used in the SCM transactions onwards.
In the example below we used ReleasedProductMastersV2data entity to create released product master in USRT legal entity. One tip here is you can read an existing product to get list of attributed and pick and choose appropriate values to be sent in creation body as applicable to your product.
Sample Request:
{ "dataAreaId": "usrt", "ItemNumber": "9x002", "FixedSalesPriceCharges": 0, "IsDiscountPOSRegistrationProhibited": "No", "ProductTaxationOrigin": "National", "TrackingDimensionGroupName": "None", "BOMUnitSymbol": "", "MinimumCatchWeightQuantity": 0, "PurchasePriceToleranceGroupId": "", "VariableScrapPercentage": 0, "CostCalculationBOMLevel": 0, "UnitCostQuantity": 1, "TareProductWeight": 0, "ShelfLifePeriodDays": 0, "NetProductWeight": 0, "ProjectCategoryId": "", "DefaultDirectDeliveryWarehouse": "", "MarginABCCode": "None", "FixedPurchasePriceCharges": 0, "ContinuityScheduleId": "", "CommissionProductGroupId": "", "IsSalesWithholdingTaxCalculated": "No", "PurchaseOverdeliveryPercentage": 0, "IsPurchaseWithholdingTaxCalculated": "No", "SellStartDate": "1900-01-01T12:00:00Z", "SalesMultilineDiscountProductGroupCode": "", "POSRegistrationActivationDate": "1900-01-01T12:00:00Z", "SalesChargeProductGroupId": "", "DefaultProductSizeId": "", "PrimaryVendorAccountNumber": "1002", "ProductFiscalInformationType": "", "ProductLifeCycleSeasonCode": "", "ProductionGroupId": "", "IsIntercompanyPurchaseUsageBlocked": "No", "WillInventoryReceiptIgnoreFlushingPrinciple": "No", "MaximumCatchWeightQuantity": 0, "VendorInvoiceLineMatchingPolicy": "NotSet", "BaseSalesPriceSource": "PurchPrice", "WillInventoryIssueAutomaticallyReportAsFinished": "No", "PurchaseChargeProductGroupId": "", "PackageHandlingTime": 0, "DefaultProductVersionId": "", "PlanningFormulaItemNumber": "", "ProductionConsumptionWidthConversionFactor": 0, "SearchName": "Flat Front Pants", "StorageDimensionGroupName": "SiteWH", "IsICMSTaxAppliedOnService": "No", "UnitConversionSequenceGroupId": "", "RevenueABCCode": "None", "PurchaseUnitSymbol": "ea", "WillTotalSalesDiscountCalculationIncludeProduct": "Yes", "PurchaseLineDiscountProductGroupCode": "", "AlternativeProductUsageCondition": "Never", "DefaultProductColorId": "", "SalesRebateProductGroupId": "", "PurchaseRebateProductGroupId": "", "MustKeyInCommentAtPOSRegister": "No", "IsIntercompanySalesUsageBlocked": "No", "ValueABCCode": "None", "SalesUnitSymbol": "ea", "PurchasePricingPrecision": 0, "IsPurchasePriceIncludingCharges": "No", "ApprovedVendorCheckMethod": "NoCheck", "PurchasePriceDate": "2022-05-20T12:00:00Z", "ProductionConsumptionDepthConversionFactor": 0, "PackingMaterialGroupId": "", "GrossDepth": 0, "WillPickingWorkbenchApplyBoxingLogic": "No", "SalesChargesQuantity": 0, "NecessaryProductionWorkingTimeSchedulingPropertyId": "", "PurchasePriceQuantity": 1, "IsUnitCostIncludingCharges": "No", "POSRegistrationPlannedBlockedDate": "1900-01-01T12:00:00Z", "KeyInQuantityRequirementsAtPOSRegister": "NotMandatory", "ProductionPoolId": "", "ServiceFiscalInformationCode": "", "PurchaseItemWithholdingTaxGroupCode": "", "PhysicalDimensionGroupId": "", "FlushingPrinciple": "Start", "PackSizeCategoryId": "", "ShipStartDate": "1900-01-01T12:00:00Z", "IsPurchasePriceAutomaticallyUpdated": "No", "PurchaseSalesTaxItemGroupCode": "RP", "GrossProductHeight": 0, "NGPCode": 0, "TransferOrderUnderdeliveryPercentage": 0, "CostChargesQuantity": 0, "YieldPercentage": 0, "OriginStateId": "", "CostGroupId": "", "UnitCost": 45, "ItemFiscalClassificationExceptionCode": "", "ProductType": null, "IsExemptFromAutomaticNotificationAndCancellation": "No", "SalesPriceCalculationChargesPercentage": 0, "CatchWeightUnitSymbol": "", "BuyerGroupId": "", "IsUnitCostAutomaticallyUpdated": "No", "CostCalculationGroupId": "", "ProductGroupId": "Fashion", "POSRegistrationBlockedDate": "1900-01-01T12:00:00Z", "DefaultProductConfigurationId": "", "InventoryGSTReliefCategoryCode": "", "ProductSearchName": "", "TransferOrderOverdeliveryPercentage": 0, "SalesUnderdeliveryPercentage": 0, "RawMaterialPickingPrinciple": "Staging", "SalesLineDiscountProductGroupCode": "", "SalesPriceCalculationContributionRatio": 0, "SalesPriceDate": "2022-05-20T12:00:00Z", "DefaultReceivingQuantity": 0, "WillWorkCenterPickingAllowNegativeInventory": "No", "FreightAllocationGroupId": "", "IsDeliveredDirectly": "No", "SalesPriceCalculationModel": "None", "ProductLifeCycleValidToDate": "1900-01-01T12:00:00Z", "ArrivalHandlingTime": 0, "WarehouseMobileDeviceDescriptionLine1": "", "WarehouseMobileDeviceDescriptionLine2": "", "IsScaleProduct": "No", "IsShipAloneEnabled": "No", "BOMLevel": 0, "BestBeforePeriodDays": 0, "SerialNumberGroupCode": "", "ContinuityEventDuration": 0, "ApproximateSalesTaxPercentage": 0, "IntrastatChargePercentage": 0, "ProductionConsumptionDensityConversionFactor": 0, "PotencyBaseAttibuteTargetValue": 0, "ConstantScrapQuantity": 0, "UnitCostDate": "2022-05-20T12:00:00Z", "DefaultProductStyleId": "", "PurchasePrice": 45, "ProductionConsumptionHeightConversionFactor": 0, "WillTotalPurchaseDiscountCalculationIncludeProduct": "Yes", "PackageClassId": "", "SalesPrice": 79.99, "SellEndDate": "1900-01-01T12:00:00Z", "MaximumPickQuantity": 0, "PurchaseUnderdeliveryPercentage": 0, "IsSalesPriceIncludingCharges": "No", "IsInstallmentEligible": "No", "ShelfAdvicePeriodDays": 0, "ProductionType": "None", "IsZeroPricePOSRegistrationAllowed": "No", "SalesSupplementaryProductProductGroupId": "", "IsRestrictedForCoupons": "No", "BarcodeSetupId": "", "AlternativeProductStyleId": "", "ItemFiscalClassificationCode": "", "IsSalesPriceAdjustmentAllowed": "No", "ProductNumber": "9x002", "IntrastatCommodityCode": "", "DefaultLedgerDimensionDisplayValue": "", "PurchaseMultilineDiscountProductGroupCode": "", "SalesItemWithholdingTaxGroupCode": "", "ProductLifeCycleValidFromDate": "1900-01-01T12:00:00Z", "CarryingCostABCCode": "None", "SalesGSTReliefCategoryCode": "", "ShippingAndReceivingSortOrderCode": 0, "InventoryReservationHierarchyName": "", "GrossProductWidth": 0, "IsPhantom": "No", "IsUnitCostProductVariantSpecific": "No", "ProductCoverageGroupId": "", "FixedCostCharges": 0, "IsPOSRegistrationQuantityNegative": "No", "KeyInPriceRequirementsAtPOSRegister": "NotMandatory", "SalesSalesTaxItemGroupCode": "RP", "AlternativeItemNumber": "", "SalesPricingPrecision": 0, "OriginCountryRegionId": "", "SalesOverdeliveryPercentage": 0, "ProductVolume": 0, "BatchNumberGroupCode": "", "PurchaseGSTReliefCategoryCode": "", "SalesPriceQuantity": 1, "PotencyBaseAttributeValueEntryEvent": "PurchProdReceipt", "ItemModelGroupId": "MOV_AVG", "DefaultOrderType": "Purch", "BatchMergeDateCalculationMethod": "Manual", "PurchaseChargesQuantity": 0, "AlternativeProductVersionId": "", "AlternativeProductConfigurationId": "", "IsVariantShelfLabelsPrintingEnabled": "No", "PackingDutyQuantity": 0, "AlternativeProductSizeId": "", "IsPOSRegistrationBlocked": "No", "AlternativeProductColorId": "", "ComparisonPriceBaseUnitSymbol": "", "AreTransportationManagementProcessesEnabled": "No", "PurchaseSupplementaryProductProductGroupId": "", "InventoryUnitSymbol": "ea" }
Release Product Master Variants Request & Response:
One important step is to generate & release the combinations of Color, Size and Style which are applicable for the product into the legal entity for this product master. We can generate 1 by 1 or in the example below we can batch multiple creation in one request. For that we will use POST Data Batch operation. Notice in below request the use is changed to batch operation as well the content type is changed from application/json to multipart/mixed;boundary=batch_xxxx-xxxx-xxxx (where xxxx can be any unique identifier)
Result in D365 SCM ->Product Information Management -> Released Products
Conclusion:
In this post we have seen how to sequence the OData calls to create and release Product and Product Master in D365 SCM legal entities so that can be used in further transactions. We have also seen how to update (Patch) and Delete using OData operations. The request formats / fields can be used from any 3rd party application to communicate and exchange data with PIM module of D365 SCM.
Full Blog Series Links:
- Integrating Products / Product Master data with Dynamics 365 Supply Chain Management
- Integrating Vendors / Purchase Order data with Dynamics 365 Supply Chain Management
- Integrating Customer / Sales Order data with Dynamics 365 Supply Chain Management
- Generate CUD Data Events in D365 Finance & Operations and Capture in 3rd Party Applications
*This post is locked for comments