GDSN Migration Guide for version 3.1.19
Product 360 data model changes
In this release we have x new fields and y changed fields in context of GDSN or Food & Beverage in total, for z fields the descriptions have changed.
New data fields
The following table lists all new fields we have added.
GDSN attribute name |
GDSN module |
GDSN/F&B |
P360 field identifier |
P360 entity |
Remarks |
isTradeItemUnitOfUse |
Trade item |
GDSN |
GDSNTargetMarketExtension.IsUnitOfUse |
Target market specific GDSN data |
|
diameter |
Trade item measurements |
GDSN |
GDSNTargetMarketExtensionUOM.Diameter GDSNTargetMarketExtensionUOM.DiameterUOM |
UOM of Target market specific GDSN data |
|
cheeseMilkAcquisitionTypeCode |
Dairy fish meat poultry |
F&B |
ArticleCheese.CheeseMilkAcquisitionTypeCode |
Cheese information |
Changed data fields
GDSN attribute name |
GDSN module |
GDSN/F&B |
P360 field identifier |
P360 entity |
Change |
Valid value list changes
New valid values
With this update, several new valid values were added to the corresponding lists.
Code changes with auto-migration
In addition to that, we fixed a few wrong valid value codes. Existing data will be migrated by the database update scripts we provide with this version. The following valid values are affected:
Field (Entity) |
Enumeration |
Valid value name |
Old code |
New code |
Packaging material type code (Packaging material) |
Packaging material type codes |
Medium-density fibre board |
WOOD_MEDIUM_DENSITY_FIBERBOARD |
WOOD_MEDIUM_DENSITY_FIBREBOARD |
Nutritional claim element code (Nutritional claims) |
Nutritional claim nutrient element code |
Fluoride |
FLOURIDE |
FLUORIDE |
Nutrient type (Nutrients) |
Nutrient types |
Nettle leaf extract |
NETTE_LEAF_EXTRACT |
NETTLE_LEAF_EXTRACT |
Discontinuation
Following valid values have been marked as deprecated (see documents for GDSN 3.1.19 and IM 8.28), they will be deleted in a future release.
Field (Entity) |
Enumeration |
Valid value name (code) |
Comment |
Allergen type (Allergen related information - Allergens) |
Allergen types |
Queensland Nut and its derivatives (SQ) |
Use Macadamia nut and its derivatives (SM) instead |
Other gluten containing grain and its derivatives (AX) |
Use Cereals and its derivatives (AW) instead |
Deletion (manual checks needed)
Some codes had to be deleted as they are no longer supported.
Please complete the checks listed below before updating.
Field (Entity) |
Enumeration |
Valid value name |
Comment |
Nutrient type (Nutrients) |
Nutrient types |
Water (WATER-) |
All existing values will be migrated to "Water (WATER)" Note: If there are already entries for WATER, the migration script will fail. This is intended as you need to adjust your data before migration. The following script lists all entries which have to be checked. MSSQL Server
SELECT Article.Identifier Item_identifier, Article.RevisionID, ArticleNutrient.TargetMarket, ArticleNutrient.Std_LK_Text100_02 PreparationState, ArticleNutrientList.Std_LK_Text250_01 NutrientTypeCode FROM ArticleSubDomain ArticleNutrientList INNER JOIN ArticleDomain ArticleNutrient ON ArticleNutrient.ID = ArticleNutrientList.ArticleDomainID INNER JOIN ArticleRevision Article ON Article.ID = ArticleNutrient.ArticleRevisionID WHERE ArticleNutrientList.EntityID = 10063 AND ArticleNutrient.EntityID = 10060 AND Article.EntityID = 1000 AND Std_LK_Text250_01 = 'WATER-' ORACLE
SELECT Article. "Identifier" Item_identifier, Article. "RevisionID" , ArticleNutrient. "TargetMarket" , ArticleNutrient. "Std_LK_Text100_02" PreparationState, ArticleNutrientList. "Std_LK_Text250_01" NutrientTypeCode FROM "ArticleSubDomain" ArticleNutrientList INNER JOIN "ArticleDomain" ArticleNutrient ON ArticleNutrient. "ID" = ArticleNutrientList. "ArticleDomainID" INNER JOIN "ArticleRevision" Article ON Article. "ID" = ArticleNutrient. "ArticleRevisionID" WHERE ArticleNutrientList. "EntityID" = 10063 AND ArticleNutrient. "EntityID" = 10060 AND Article. "EntityID" = 1000 AND "Std_LK_Text250_01" = 'WATER-' ; |
Allergen type (Allergens) |
Allergen types |
Methyl 2-Octynoate (MO) |
All existing values will be migrated to "Methyl 2-octynoate (Methyl heptin carbonate) (BQ)" Note: If there are already entries for BQ, the migration script will fail. This is intended as you need to adjust your data before migration. The following script lists all entries which have to be checked. MSSQL Server
SELECT Article.Identifier Item_identifier, Article.RevisionID, ArticleAllergen.TargetMarket, ArticleAllergen.Std_LK_Text100_01 SpecificationAgency, ArticleAllergen.Std_LK_Text100_02 SpecificationName, ArticleAllergenList.Std_LK_Text250_01 AllergenTypeCode FROM ArticleSubDomain ArticleAllergenList INNER JOIN ArticleDomain ArticleAllergen ON ArticleAllergen.ID = ArticleAllergenList.ArticleDomainID INNER JOIN ArticleRevision Article ON Article.ID = ArticleAllergen.ArticleRevisionID WHERE ArticleAllergenList.EntityID = 10022 AND ArticleAllergen.EntityID = 10020 AND Article.EntityID = 1000 AND Std_LK_Text250_01 = 'MO' ORACLE
SELECT Article. "Identifier" Item_identifier, Article. "RevisionID" , ArticleAllergen. "TargetMarket" , ArticleAllergen. "Std_LK_Text100_01" SpecificationAgency, ArticleAllergen. "Std_LK_Text100_02" SpecificationName, ArticleAllergenList. "Std_LK_Text250_01" AllergenTypeCode FROM "ArticleSubDomain" ArticleAllergenList INNER JOIN "ArticleDomain" ArticleAllergen ON ArticleAllergen. "ID" = ArticleAllergenList. "ArticleDomainID" INNER JOIN "ArticleRevision" Article ON Article. "ID" = ArticleAllergen. "ArticleRevisionID" WHERE ArticleAllergenList. "EntityID" = 10022 AND ArticleAllergen. "EntityID" = 10020 AND Article. "EntityID" = 1000 AND "Std_LK_Text250_01" = 'MO' ; |
Packaging material type code (Packaging information - Packaging material) |
Packaging material type codes |
Wire |
This value was only available for IM. An auto-migration is not possible, all existing values have to be checked and migrated manually. The corresponding recommendation is to use the value "Wire" for the "Packaging type" field. The following script lists all entries which have to be checked. MSSQL Server
SELECT Article.Identifier Item_identifier, Article.RevisionID, PackagingInformation.TargetMarket, PackagingInformation.Std_LK_Text100_01 PackagingType, PackagingMaterial.Std_LK_Text250_01 PackagingMaterialTypeCode FROM ArticleSubDomain PackagingMaterial INNER JOIN ArticleDomain PackagingInformation ON PackagingInformation.ID = PackagingMaterial.ArticleDomainID INNER JOIN ArticleRevision Article ON Article.ID = PackagingInformation.ArticleRevisionID WHERE PackagingMaterial.EntityID = 17114 AND PackagingInformation.EntityID = 17112 AND Article.EntityID = 1000 AND Std_LK_Text250_01 = 'WIRE' ; ORACLE
SELECT Article. "Identifier" Item_identifier, Article. "RevisionID" , PackagingInformation. "TargetMarket" , PackagingInformation. "Std_LK_Text100_01" PackagingType, PackagingMaterial. "Std_LK_Text250_01" PackagingMaterialTypeCode FROM "ArticleSubDomain" PackagingMaterial INNER JOIN "ArticleDomain" PackagingInformation ON PackagingInformation. "ID" = PackagingMaterial. "ArticleDomainID" INNER JOIN "ArticleRevision" Article ON Article. "ID" = PackagingInformation. "ArticleRevisionID" WHERE PackagingMaterial. "EntityID" = 17114 AND PackagingInformation. "EntityID" = 17112 AND Article. "EntityID" = 1000 AND "Std_LK_Text250_01" = 'WIRE' ; |
Data quality rule and configuration changes
The following table lists all rule configurations we have added, changed or deleted.
GDSN Rule ID |
GDSN Rule |
P360 Rule configuration |
P360 error message |
Remarks |
531 |
Check_ConditionalNotContainsString |
Check consumer unit items don't contain 'Brand name' in 'Functional name' (TM: US, en) |
GDSN531: If 'Is consumer unit' is equal to 'true' then 'Functional name' must not contain a value from 'Brand name' |
New Rule and rule configuration are new |
|
Check_ConditionalGreaterThan |
Check 'Is dispatch unit' items have a 'Gross weight (imperial)' greater than 0 (TM: US) |
GDSN108: 'Is dispatch unit' items must have a 'Gross weight' greater than 0 |
Changed Changed rule from Check_ConditionalEmpty to Check_ConditionalGreaterThan Adjusted name and error message Note: The error code doesn't match the actual GDSN rule ID. For historical reasons, we cannot change it since the same error code is used by another validation. |
1293 |
Check_ConditionalNotEmpty |
Check if 'Packaging type' equals <No code> then 'Platform type code' is populated |
GDSN1293: If the Packaging class is used then either 'Packaging type' or 'Platform type code' must not be empty |
Changed Moved from "Packaging information (Item Management)" to "Packaging information (Standard GDSN)" group |
1312 |
Check_IfNotEmptyConditionNotEmpty |
Check items with 'Platform terms and conditions' have a 'Platform type code' populated |
GDSN1312: If 'Platform terms and conditions' is not empty then 'Platform type code' must not be empty |
Changed Moved from "Packaging information (Item Management)" to "Packaging information (Standard GDSN)" group |
Changes in data source export templates
New XSD file set
A new XSD file set has been provided for GDSN version 3.1.19. All old XSD files used for export post steps have to be deleted, then all new XSD files must be uploaded. Export templates do not have to be adapted due to the changed XSD files.
DSE export template changes
The only changed export template for DSE is CIN_CatalogItemNotification.ext. The following fields or modules have been added to that template.
Is unit of use
Export template module: Items
Changes: line 25 was added
{?CreateXMLTagWithValue {?CompareBooleanValue {&Item.Is service}, true, false, ""}, "<
isTradeItemAService
>?</
isTradeItemAService
>"}
{?CreateXMLTagWithValue {?GDSNEnumerationCode {&Item.Product type}, "GDSN"}, "<
tradeItemUnitDescriptorCode
>?</
tradeItemUnitDescriptorCode
>"}
{?CreateXMLTagWithValue {?CompareBooleanValue {&Item.Is unit of use (Target market)}, true, false, ""}, "<
isTradeItemUnitOfUse
>?</
isTradeItemUnitOfUse
>"}
{?CreateXMLTagWithValue {&Item.Brand owner.GLN},"<
brandOwner
><
gln
>?</
gln
></
brandOwner
>"}
Diameter, Diameter UOM
Export template module: Trade item measurement
Changes: lines 4 - 6 were added
{!No second UOM allowed}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Depth (Target market, UOM type)}, ".", 3}
, "<
depth
measurementUnitCode=\"{&Item.Depth UOM (Target market, UOM type).Code (Unit system)}\">?</
depth
>"}
{!No second UOM allowed}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Diameter (Target market, UOM type)}, ".", 3}
, "<
diameter
measurementUnitCode=\"{&Item.Diameter UOM (Target market, UOM type).Unit system Code}\">?</
diameter
>"}
{!No second UOM allowed}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Height (Target market, UOM type)}, ".", 3}
, "<
height
measurementUnitCode=\"{&Item.Height UOM (Target market, UOM type).Code (Unit system)}\">?</
height
>"}
Cheese milk acquisition type
Export template module: Dairy fish meat poultry
Changes: line 32 - 33 were added
, {?CreateXMLTagWithValue {?EnumerationKey {&Dairy fish meat poultry.Fat percentage in dry matter measurement precision code}}
, "<
fatPercentageInDryMatterMeasurementPrecisionCode
>?</
fatPercentageInDryMatterMeasurementPrecisionCode
>"}
, {?CreateXMLTagWithValue {?EnumerationKey {&Dairy fish meat poultry.Cheese milk acquisition type}}
, "<
cheeseMilkAcquisitionTypeCode
>?</
cheeseMilkAcquisitionTypeCode
>"}
, "</
cheeseInformation
>"}}
New valid value for nutrient basis quantity type codes
The new value "By child nutrition serving" had to be considered and requires changes in some modules of the export template.
Export template module: Items
Changes: line 188 was changed, line 189 was added
{$Nutritional information: Collect Nutrient quantities}
{$Nutritional information: Assemble Nutrient quantities}
{?CreateXMLTagWithContent {?Concat
, {$Nutritional claims}
, {$Nutritional information}
}
, "<
nutritional_information
:nutritionalInformationModule
xsi:schemaLocation
=
"urn:gs1:gdsn:nutritional_information:xsd:3 http://www.gdsregistry.org/3.1/schemas/gs1/gdsn/NutritionalInformationModule.xsd"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:nutritional_information
=
"urn:gs1:gdsn:nutritional_information:xsd:3"
>
?
</
nutritional_information
:nutritionalInformationModule>"
}
Export template module: Nutritional information
Changes: lines 1-3 were changed, lines 4 and 86-110 were added
{?ValueSetLocal "ByContainer", "BY_PACKAGE_OR_CONTAINER_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}"}
{?ValueSetLocal "ByMeasure", "BY_MEASURE_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}"}
{?ValueSetLocal "ByServing", "BY_SERVING_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}"}
{?ValueSetLocal "ByChildServing", "BY_CHILD_NUTRITION_SERVING_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}"}
{!BY_CHILD_NUTRITION_SERVING only export when there is data for "by child nutrition serving"}
{?IfNotEmptyThenNotEnc {?ValueGetLocal {?ValueGetLocal "ByChildServing"}},
<
nutrientHeader
>
<
preparationStateCode
>{?EnumerationKey {&Nutritional information.Preparation state}}</
preparationStateCode
>
{?CreateXMLTagWithValue {&Nutritional information.Daily value intake reference (Language)}
, "<
dailyValueIntakeReference
languageCode=\"{?GDSNEnumerationCode {&Nutritional information.Language (Language)}, "GDSN"}\">?</
dailyValueIntakeReference
>"}
{?IfNotEmptyThenNotEnc {?ValueGet "LanguageDiffs"}
, {?CreateXMLTagWithValue {&Nutritional information.Daily value intake reference (Language second)}
, "<
dailyValueIntakeReference
languageCode=\"{?GDSNEnumerationCode {&Nutritional information.Language (Language second)}, "GDSN"}\">?</
dailyValueIntakeReference
>"}
}
<
nutrientBasisQuantityTypeCode
>BY_CHILD_NUTRITION_SERVING</
nutrientBasisQuantityTypeCode
>
{?CreateXMLTagWithValue {?FormatDecimal {&Nutritional information.Nutrient basis quantity (UOM type)}, ".", "6"}
, "<
nutrientBasisQuantity
measurementUnitCode=\"{&Nutritional information.Nutrient basis quantity UOM (UOM type).Code (Unit system)}\">?</
nutrientBasisQuantity
>"}
{?CreateXMLTagWithValue {?FormatDecimal {&Nutritional information.Serving size (UOM type)},.,6,}
, "<
servingSize
measurementUnitCode=\"{&Nutritional information.Serving size UOM (UOM type).Code (Unit system)}\">?</
servingSize
>"}
{?CreateXMLTagWithValue {&Nutritional information.Serving size description (Language)}
, "<
servingSizeDescription
languageCode=\"{?GDSNEnumerationCode {&Nutritional information.Language (Language)}, "GDSN"}\">?</
servingSizeDescription
>"}
{?IfNotEmptyThenNotEnc {?ValueGet "LanguageDiffs"}
, {?CreateXMLTagWithValue {&Nutritional information.Serving size description (Language second)}
, "<
servingSizeDescription
languageCode=\"{?GDSNEnumerationCode {&Nutritional information.Language (Language second)}, "GDSN"}\">?</
servingSizeDescription
>"}
}
{?IfEmptyThenNotEnc "", {?ValueGetLocal {?ValueGetLocal "ByChildServing"}}}
{!Reset variable}{?ValueSetLocal {?ValueGetLocal "ByChildServing"}, ""}
</
nutrientHeader
>
}
Export template module: Nutritional information: Collect nutrients
Changes: this module was deleted
Export template module: Nutritional information: Collect Nutrient quantities
This module was added, its data type filter was configured exactly like the data type filter of the second new module Nutritional information: Assemble Nutrient quantities
{?ValueSetLocal "key", {?Concat {&Nutrient quantities.Nutrient basis quantity type}, {&Nutrient quantities.Nutrient type}, {&Nutrient quantities.Preparation state}, {&Nutrient quantities.Target market} }}
{!store each attribute under the previously built key as group and its attribute name; take only the first non-empty value}
{?ValueSetLocal {?ValueGetLocal "key"}, "expressedAsPartOf", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "expressedAsPartOf"}, {?EnumerationKey {&Nutrient quantities.Expressed as part of}}}}
{?ValueSetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"}, {&Nutrient quantities.Percentage of daily intake}}}
{?ValueSetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}, {?EnumerationKey {&Nutrient quantities.Measurement precision}}}}
{!take all values, we assume that there is a uom for each value, but exclude a second entry if it has the same uom as the first one}
{?ValueSetLocal "uomAttributeName", {?Compare {?ValueGetLocal {?ValueGetLocal "key"}, "uom"}, "", "uom",
{?Compare {?ValueGetLocal {?ValueGetLocal "key"}, "uom"}, {&Nutrient quantities.Quantity contained UOM.Code (Unit system)}, "uom_ignore", "uom2"}}}
{?ValueSetLocal {?ValueGetLocal "key"}, {?ValueGetLocal "uomAttributeName"}, {&Nutrient quantities.Quantity contained UOM.Code (Unit system)}}
{?ValueSetLocal "valueAttributeName", {?Compare {?ValueGetLocal "uomAttributeName"}, "uom", "value", {?Compare {?ValueGetLocal "uomAttributeName"}, "uom2", "value2", "value_ignore"} }}
{?ValueSetLocal {?ValueGetLocal "key"}, {?ValueGetLocal "valueAttributeName"}, {&Nutrient quantities.Quantity contained}}
Export template module: Nutritional information: Assemble Nutrient quantities
This module was added, its data type filter is configured as displayed in the following screen:
{!collect all existing entries grouped by nutrient basis quantity type, preparation state and target markt, this key will be used to embed data into nutritional information}
{?ValueSetLocal "groupKey", {?EnumerationKey {&Nutrient quantities.Nutrient basis quantity type}}}
{?ValueSetLocal {?ValueGetLocal "groupKey"},{?ValueGetLocal "groupKey"}_{&Nutrient quantities.Preparation state}_{&Nutrient quantities.Target market} }
{?IfEmptyThenNotEnc , {!avoid encoding problems}
{!append if there is already data for the group}
{?ValueSetLocal {?ValueGetLocal {?ValueGetLocal "groupKey"}}, {?ValueGetLocal {?ValueGetLocal {?ValueGetLocal "groupKey"}}}
{!this is the local key we use to get collected nutrient quantities, this is necessary because there could be two entries for each group, one for metric and one for imperial uom}
{?ValueSetLocal "key", {?Concat {&Nutrient quantities.Nutrient basis quantity type}, {&Nutrient quantities.Nutrient type}, {&Nutrient quantities.Preparation state}, {&Nutrient quantities.Target market} }}
{?IfNotEmptyThenNotEnc {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"}{?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}{?ValueGetLocal {?ValueGetLocal "key"},"value"}{?ValueGetLocal {?ValueGetLocal "key"},"value2"},
<
nutrientDetail
>
<
nutrientTypeCode
>{?EnumerationKey {&Nutrient quantities.Nutrient type}}</
nutrientTypeCode
>
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"},".",2}
,"<
dailyValueIntakePercent
>?</
dailyValueIntakePercent
>"}
{?CreateXMLTagWithValue {?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}
,"<
measurementPrecisionCode
>?</
measurementPrecisionCode
>"}
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"},"value"},".","6"},
"<
quantityContained
measurementUnitCode=\"{?ValueGetLocal {?ValueGetLocal "key"},"uom"}\">?</
quantityContained
>"}
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"},"value2"},".","6"},
"<
quantityContained
measurementUnitCode=\"{?ValueGetLocal {?ValueGetLocal "key"},"uom2"}\">?</
quantityContained
>"}
{?CreateXMLTagWithValue {?ValueGetLocal {?ValueGetLocal "key"}, "expressedAsPartOf"}
,"<
expressedAsPartOf
>?</
expressedAsPartOf
>"}
</
nutrientDetail
>
}
}
}
{!output done for this key -> delete all values for this key}
{?ValueSetLocal {?ValueGetLocal "key"}, "expressedAsPartOf", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "uom", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "value", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "uom2", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "value2", ""}
IM export template changes
The only changed export template for Item Management is CR_CatalogueRequest Item.ext. The following fields or modules have been added to that template.
Diameter, Diameter UOM
Export template module: Items
Changes: line 119 was added
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Height (Target market, UOM type)}, ".", "6"}, "<
height
uom=\"{&Item.Height UOM (Target market, UOM type).Code (Unit system)}\">?</
height
>"}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Width (Target market, UOM type)}, ".", "6"}, "<
width
uom=\"{&Item.Width UOM (Target market, UOM type).Code (Unit system)}\">?</
width
>"}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Diameter (Target market, UOM type)}, ".", "6"}, "<
diameter
uom=\"{&Item.Diameter UOM (Target market, UOM type).Unit system Code}\">?</
diameter
>"}
{?CreateXMLTagWithValue {?FormatDecimal {&Item.Volume (Target market, UOM type)}, ".", "6"}, "<
volume
uom=\"{&Item.Volume UOM (Target market, UOM type).Code (Unit system)}\">?</
volume
>"}
Cheese milk acquisition type
Export template module: Dairy fish meat poultry
Changes: line 14 was added
{?CreateXMLTagWithContent {?SplitKeywords {?EnumerationKey {&Dairy fish meat poultry.Cheese maturation container process type}}, "<
value
>", "</
value
>"},
"<
attrMany
name
=
"cheeseMaturationProcessContainerTypeCode"
>?</
attrMany
>"}
{?CreateXMLTagWithValue {?EnumerationKey {&Dairy fish meat poultry.Cheese milk acquisition type}},<
attr
name
=
"cheeseMilkAcquisitionTypeCode"
>?</
attr
>}
{?CreateXMLTagWithValue {?FormatDecimal {&Dairy fish meat poultry.Fat percentage in dry matter},.,2}, <
attr
name
=
"fatPercentageInDryMatter"
>?</
attr
>}
{?CreateXMLTagWithValue {?EnumerationKey {&Dairy fish meat poultry.Is rind edible}},<
attr
name
=
"isRindEdible"
>?</
attr
>}
New valid value for nutrient basis quantity type codes
The new value "By child nutrition serving" had to be considered and requires changes in some modules of the export template.
Export template module: Items
Changes: line 132 was changed, line 133 was added
{$Collect Microbiological information}
{$Collect allergens}
{$Collect Nutrient quantities}
{$Assemble Nutrient quantities}
{$Collect product yield information}
{$Collect additional diet certification information}
Export template module: Nutritional information
Changes: lines 2, 32, 62 were changed, lines 100-128 were added
{?ValueSetLocal "tmpNutrientListByContainerName",BY_PACKAGE_OR_CONTAINER_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
{?ValueSetLocal "tmpNutrientListByMeasureName",BY_MEASURE_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
{?ValueSetLocal "ByServing",BY_SERVING_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
{!BY_CHILD_NUTRITION_SERVING only export when there is data for this basis quantity type code}
{?ValueSetLocal "byChildNutritionServing",BY_CHILD_NUTRITION_SERVING_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
{?IfNotEmptyThenNotEnc {?ValueGetLocal {?ValueGetLocal "byChildNutritionServing"}},
<
row
>
<
attr
name
=
"preparationStateCode"
>{?EnumerationKey {&Nutritional information.Preparation state}}</
attr
>
{?IfNotEmptyThenNotEnc {&Nutritional information.Daily value intake reference (Language)}{&Nutritional information.Daily value intake reference (Language second)},
"<
attrQualMany
name
=
"dailyValueIntakeReference"
>
{?CreateXMLTagWithValue {&Nutritional information.Daily value intake reference (Language)},
"<
value
qual
=
"{?GDSNEnumerationCode {&Nutritional information.Language (Language)},"
GDSN"}">?</
value
>"}
{?IfNotEmptyThenNotEnc {?ValueGet "LanguageDiffers"}, {?CreateXMLTagWithValue {&Nutritional information.Daily value intake reference (Language second)},
"<
value
qual
=
"{?GDSNEnumerationCode {&Nutritional information.Language (Language second)},"
GDSN"}">?</
value
>"}}
</
attrQualMany
>"
}
<
attr
name
=
"nutrientBasisQuantityTypeCode"
>BY_CHILD_NUTRITION_SERVING</
attr
>
{?CreateXMLTagWithValue {?FormatDecimal {&Nutritional information.Nutrient basis quantity (UOM type)},.,6,},
"<
attrQual
name
=
"nutrientBasisQuantity"
qual
=
"{&Nutritional information.Nutrient basis quantity UOM (UOM type).Code (Unit system)}"
>?</
attrQual
>"
}
{!IM accepts here multi values which we currently do not support }
{?CreateXMLTagWithContent {?FormatDecimal {&Nutritional information.Serving size (UOM type)},.,6,},
<
attrQualMany
name
=
"servingSize"
><
value
qual
=
"{&Nutritional information.Serving size UOM (UOM type).Code (Unit system)}"
>?</
value
></
attrQualMany
>
}
{?CreateXMLTagWithContent {?ValueGetLocal {?ValueGetLocal "byChildNutritionServing"}}, "<
attrGroupMany
name=\"nutrientDetail\">?</
attrGroupMany
>"}
{!Reset variable}{?ValueSetLocal {?ValueGetLocal "byChildNutritionServing"}, ""}
</
row
>
}
Export template module: Collect nutrients
Changes: this module was deleted
Export template module: Collect Nutrient quantities
This module was added, its data type filter was configured exactly like the data type filter of the second new module Assemble Nutrient quantities
{?ValueSetLocal "key", {?Concat {&Nutrient quantities.Nutrient basis quantity type}, {&Nutrient quantities.Nutrient type}, {&Nutrient quantities.Preparation state}, {&Nutrient quantities.Target market} }}
{!store each attribute under the previously built key as group and its attribute name; take only the first non-empty value}
{?ValueSetLocal {?ValueGetLocal "key"}, "expressedAsPartOf", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "expressedAsPartOf"}, {?EnumerationKey {&Nutrient quantities.Expressed as part of}}}}
{?ValueSetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"}, {&Nutrient quantities.Percentage of daily intake}}}
{?ValueSetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode", {?GetValue {?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}, {?EnumerationKey {&Nutrient quantities.Measurement precision}}}}
{!take all values, we assume that there is a uom for each value, but exclude a second entry if it has the same uom as the first one}
{?ValueSetLocal "uomAttributeName", {?Compare {?ValueGetLocal {?ValueGetLocal "key"}, "uom"}, "", "uom",
{?Compare {?ValueGetLocal {?ValueGetLocal "key"}, "uom"}, {&Nutrient quantities.Quantity contained UOM.Code (Unit system)}, "uom_ignore", "uom2"}}}
{?ValueSetLocal {?ValueGetLocal "key"}, {?ValueGetLocal "uomAttributeName"}, {&Nutrient quantities.Quantity contained UOM.Code (Unit system)}}
{?ValueSetLocal "valueAttributeName", {?Compare {?ValueGetLocal "uomAttributeName"}, "uom", "value", {?Compare {?ValueGetLocal "uomAttributeName"}, "uom2", "value2", "value_ignore"} }}
{?ValueSetLocal {?ValueGetLocal "key"}, {?ValueGetLocal "valueAttributeName"}, {&Nutrient quantities.Quantity contained}}
Export template module: Assemble Nutrient quantities
This module was added, its data type filter is configured as displayed in the following screen:
{!collect all existing entries grouped by nutrient basis quantity type, preparation state and target markt, this key will be used to embed data into nutritional information}
{?ValueSetLocal "groupKey", {?EnumerationKey {&Nutrient quantities.Nutrient basis quantity type}}}
{?ValueSetLocal {?ValueGetLocal "groupKey"},{?ValueGetLocal "groupKey"}_{&Nutrient quantities.Preparation state}_{&Nutrient quantities.Target market} }
{?IfEmptyThenNotEnc , {!avoid encoding problems}
{!append if there is already data for the group}
{?ValueSetLocal {?ValueGetLocal {?ValueGetLocal "groupKey"}}, {?ValueGetLocal {?ValueGetLocal {?ValueGetLocal "groupKey"}}}
{!this is the local key we use to get collected nutrient quantities, this is necessary because there could be two entries for each group, one for metric and one for imperial uom}
{?ValueSetLocal "key", {?Concat {&Nutrient quantities.Nutrient basis quantity type}, {&Nutrient quantities.Nutrient type}, {&Nutrient quantities.Preparation state}, {&Nutrient quantities.Target market} }}
{?IfNotEmptyThenNotEnc {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"}{?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}{?ValueGetLocal {?ValueGetLocal "key"},"value"}{?ValueGetLocal {?ValueGetLocal "key"},"value2"},
<
row
>
{?CreateXMLTagWithValue {?EnumerationKey {&Nutrient quantities.Nutrient type}} ,<
attr
name=\"nutrientTypeCode\">?</
attr
>}
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent"},".",2}
,"<
attr
name
=
"dailyValueIntakePercent"
>?</
attr
>"
}
{?CreateXMLTagWithValue {?ValueGetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode"}
,"<
attr
name
=
"measurementPrecisionCode"
>?</
attr
>"
}
{?CreateXMLTagWithValue {?ValueGetLocal {?ValueGetLocal "key"}, "expressedAsPartOf"}
,"<
attr
name
=
"expressedAsPartOf"
>?</
attr
>"
}
{?IfNotEmptyThenNotEnc {?ValueGetLocal {?ValueGetLocal "key"},"value"}{?ValueGetLocal {?ValueGetLocal "key"},"value2"},
<
attrQualMany
name
=
"quantityContained"
>
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"},"value"},".","6"},
"<
value
qual
=
"{?ValueGetLocal {?ValueGetLocal "
key"},"uom"}">?</
value
>"}
{?CreateXMLTagWithValue {?FormatDecimal {?ValueGetLocal {?ValueGetLocal "key"},"value2"},".","6"},
"<
value
qual
=
"{?ValueGetLocal {?ValueGetLocal "
key"},"uom2"}">?</
value
>"}
</
attrQualMany
>
}
</
row
>
}
}
}
{!output done for this key -> delete all values for this key}
{?ValueSetLocal {?ValueGetLocal "key"}, "expressedAsPartOf", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "dailyValueIntakePercent", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "measurementPrecisionCode", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "uom", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "value", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "uom2", ""}
{?ValueSetLocal {?ValueGetLocal "key"}, "value2", ""}
Units
New Units
Code |
Name |
Enumeration |
W/m2 |
Watt per square metre |
Enum.GDSNDefaultUnits |
NTU |
Nephelometric turbidity unit |
Enum.GDSNDefaultUnits |
Deprecated Units
The unit with code 'g/L' is deprecated. We've set its visibility for the GDSN unit system to false. This means you can still see the value if it has been maintained, but it is no longer part of the valid values lists.
Please use existing unit "gram per litre [GL]" instead.
Affected fields are:
Field name |
Field identifier |
Entity |
Suggested serving size UOM |
GDSNCanadaExtensionUOM.SuggestedServingSizeUOM |
Canada-specific GDSN data |
Unit |
ArticleMicrobiologicsUOM.Unit |
Microbiological information |
Serving size UOM |
ArticleNutrientBasisQuantity.ServingSizeUOM |
Nutritional information - Nutrient basis quantity |
Physiochemical characteristic value UOM |
ArticlePhysioChemicalUOM.PhysiochemicalCharacteristicValueUOM |
Physiochemical information |
Nutritional program ingredient unit |
ArticleNutritionalProgramUOM.NutritionalProgramIngredientUnit |
Health related information - Nutritional program |
Minimum fish meat poultry content UOM |
ArticleFishMeatPoultryContentUOM.MinimumFishMeatPoultryContentUOM |
Dairy fish meat poultry - Fish meat poultry content |
Categories
We cleaned up the unit enumerations with this release. The valid values lists for all unit of measure fields should be correct in respect to the IM Participant Dictionary for version 8.26. There still might be some units missing which are not yet part of the overall set of GDSN units we support in Product360.
The following fields are associated with the changes.
Field |
new units |
excluded units |
Enumeration |
ArticleNutrientBasisQuantity.ServingSizeUOM |
- |
'AIU', 'AM', 'AP', 'AR', 'AV', 'DC', 'FG', 'GN', 'IH', 'JC', 'JL', 'JN', 'JT', 'JV', 'JX', 'NT', 'PA', 'PT', 'RO', 'SZ', 'TB', 'US', 'VI', 'Y4' |
Changed from Enum.GDSNUnits to Enum.GDSNDefaultUnits (with category 'Default') |
GDSNCanadaExtensionUOM.SuggestedServingSizeUOM |
|||
ArticlePhysioChemicalUOM.PhysiochemicalCharacteristicValueUOM |
|||
ArticleMicrobiologicsUOM.Unit |
|||
ArticleFishMeatPoultryContentUOM.MinimumFishMeatPoultryContentUOM |
|||
ArticleNutritionalProgramUOM.NutritionalProgramIngredientUnit |
|||
GDSNExtensionUOM.NetContentUOM |
'AM', 'AP', 'AR', 'AV', 'BAR', 'DAY', 'DC', 'F27', 'G21', 'GN', 'IH', 'JC', 'JL', 'JN', 'JT', 'JV', 'JX', 'NU', 'PRS', 'SZ', 'TB', 'VI', 'Y4' |
'AIU', 'PTN' |
Added categories 'VolumeExtension' and 'Quantity' to Enum.GDSNQuantityUnits |
ArticlePackagingMaterialUOM.PackagingMaterialCompositionQuantityUOM |
|||
GDSNTargetMarketExtensionUOM.DiameterUOM |
'AWG', 'C45', 'C52', 'CFU' |
- |
Added category 'DimensionsExtension' to Enum.GDSNDimensionUnits |
GDSNTargetMarketExtensionUOM.DepthUOM |
|||
GDSNTargetMarketExtensionUOM.HeightUOM |
|||
GDSNTargetMarketExtensionUOM.WidthUOM |
|||
ArticlePackagingUOM.PackagingWeightUOM |
'NIU' |
- |
Added category 'MassExtension' to Enum.GDSNMassUnits |
ArticleTradeItemHandlingStackingUOM.StackingWeightMaximumUOM |
|||
GDSNTargetMarketExtensionUOM.GrossWeightUOM |
|||
ArticleDairyFishMeatPoultryUOM.CasingTareWeightUOM |
|||
GDSNTargetMarketExtensionUOM.NetweightUOM |
|||
ArticleCheeseUOM.RipeningTimePeriodUOM |
'MIN' |
- |
|
ArticleDistributionDetailUOM.OrderingLeadTimeUOM |
|||
ArticlePackagingUOM.UsableProductVolumeUOM |
'G21', 'NIU', 'Q32', 'Q33', 'Q34' |
Added categories 'VolumeExtMicro' and 'VolumeExtension' to Enum.GDSNVolumeUnits |
|
GDSNTargetMarketExtensionUOM.VolumeUOM |
|||
ArticleTradeItemHandlingUOM.ClampPressureUOM |
'F79', 'HN', 'KNM', 'KPA', 'N16', 'N17' |
||
ArticlePreparationServingProductYieldUOM.ProductYieldUOM |
'1N', 'H87', 'NIU' |
Add category 'MassExtension' to Enum.GDSNProductYieldUnits |
|
ArticleNutrientBasisQuantity.NutrientBasisQuantityUOM |
Renamed category 'MassEnergyVolumeInfoStorage' to 'NutritionQuantity' of Enum.GDSNNutritionQuantityUnits |
||
ArticleNutrientListQuantity.QuantityContainedUOM |
When the units are removed from the enumerations and you previously used some of those units, they will no longer be visible. In order to find out if your data is affected by the changes, here you find helpful database statements.
-- IDs are defined by Informatica, so they should be the same in each system
SELECT
UnitID
FROM
UnitSystemUnitMap
WHERE
UnitSystemID = 70
AND
Code
in
(
'AIU'
,
'AM'
,
'AP'
,
'AR'
,
'AV'
,
'DC'
,
'FG'
,
'GN'
,
'IH'
,
'JC'
,
'JL'
,
'JN'
,
'JT'
,
'JV'
,
'JX'
,
'NT'
,
'PA'
,
'PT'
,
'RO'
,
'SZ'
,
'TB'
,
'US'
,
'VI'
,
'Y4'
)
SELECT
UnitID
FROM
UnitSystemUnitMap
WHERE
UnitSystemID = 70
AND
Code
in
(
'AIU'
,
'PTN'
)
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticleNutrientBasisQuantity.ServingSizeUOM (EntityID = 10062, ArticleDomainUOMType.Std_UnitProxy_02)
-- GDSNCanadaExtensionUOM.SuggestedServingSizeUOM (EntityID = 10002, ArticleDomainUOMType.Std_UnitProxy_01)
-- ArticlePhysioChemicalUOM.PhysiochemicalCharacteristicValueUOM (EntityID = 10111, ArticleDomainUOMType.Std_UnitProxy_01)
-- ArticleMicrobiologicsUOM.Unit (EntityID = 10011, ArticleDomainUOMType.Std_LK_UnitProxy_01)
SELECT
ar.ArticleID, ar.Identifier, ad.TargetMarket, ad.Std_LK_Text100_01, ad.Std_LK_Text100_02, adu.EntityID, adu.UOMType, adu.Std_LK_UnitProxy_01, adu.Std_UnitProxy_01, adu.Std_UnitProxy_02
FROM
ArticleRevision
AS
ar
JOIN
ArticleDomain
AS
ad
ON
ar.ID = ad.ArticleRevisionID
JOIN
ArticleDomainUOM
as
adu
ON
ad.ID = adu.ArticleDomainID
WHERE
(adu.EntityID = 10062
AND
adu.Std_UnitProxy_02
in
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
OR
((adu.EntityID = 10002
OR
adu.EntityID = 10111)
AND
adu.Std_UnitProxy_01
in
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
OR
(adu.EntityID = 10011
AND
adu.Std_LK_UnitProxy_01
in
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticleFishMeatPoultryContentUOM.MinimumFishMeatPoultryContentUOM (EntityID = 10126, ArticleSubDomainUOMType.Std_UnitProxy_01)
-- ArticleNutritionalProgramUOM.NutritionalProgramIngredientUnit (EntityID = 17186, ArticleSubDomainUOMType.Std_UnitProxy_01)
SELECT
ar.ArticleID, ar.Identifier, ad.TargetMarket, asd.Std_LK_Text250_01, asdu.EntityID, asdu.UOMType, asdu.Std_UnitProxy_01
FROM
ArticleRevision
AS
ar
JOIN
ArticleDomain
AS
ad
ON
ar.ID = ad.ArticleRevisionID
JOIN
ArticleSubDomain
AS
asd
ON
ad.ID = asd.ArticleDomainID
JOIN
ArticleSubDomainUOM
as
asdu
ON
asd.ID = asdu.ArticleSubDomainID
WHERE
((asdu.EntityID = 10126
OR
asdu.EntityID = 17186)
AND
asdu.Std_UnitProxy_01
in
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- GDSNExtensionUOM.NetContentUOM
SELECT
ar.ArticleID, ar.Identifier, ameu.EntityID, ameu.UOMType, ameu.Std_UnitProxy_01
FROM
ArticleRevision
AS
ar
JOIN
ArticleMarketExtension
AS
ame
ON
ar.ID = ame.ArticleRevisionID
JOIN
ArticleMarketExtensionUOM
AS
ameu
ON
ame.ID = ameu.ArticleMarketExtensionID
WHERE
(ameu.EntityID = 1042
AND
ameu.Std_UnitProxy_01
in
(7002, 7038))
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticlePackagingMaterialUOM.PackagingMaterialCompositionQuantityUOM
SELECT
ar.ArticleID, ar.Identifier, ad.TargetMarket, ad.Std_LK_Text100_01, asd.Std_LK_Text250_01, asdu.EntityID, asdu.UOMType, asdu.Std_UnitProxy_01
FROM
ArticleRevision
AS
ar
JOIN
ArticleDomain
AS
ad
ON
ar.ID = ad.ArticleRevisionID
JOIN
ArticleSubDomain
AS
asd
ON
ad.ID = asd.ArticleDomainID
JOIN
ArticleSubDomainUOM
as
asdu
ON
asd.ID = asdu.ArticleSubDomainID
WHERE
(asdu.EntityID = 17115
AND
asdu.Std_UnitProxy_01
in
(7002, 7038))
-- IDs are defined by Informatica, so they should be the same in each system
SELECT
"UnitID"
FROM
"UnitSystemUnitMap"
WHERE
"UnitSystemID"
= 70
AND
"Code"
in
(
'AIU'
,
'AM'
,
'AP'
,
'AR'
,
'AV'
,
'DC'
,
'FG'
,
'GN'
,
'IH'
,
'JC'
,
'JL'
,
'JN'
,
'JT'
,
'JV'
,
'JX'
,
'NT'
,
'PA'
,
'PT'
,
'RO'
,
'SZ'
,
'TB'
,
'US'
,
'VI'
,
'Y4'
);
SELECT
"UnitID"
FROM
"UnitSystemUnitMap"
WHERE
"UnitSystemID"
= 70
AND
"Code"
in
(
'AIU'
,
'PTN'
);
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticleNutrientBasisQuantity.ServingSizeUOM (EntityID = 10062, ArticleDomainUOMType.Std_UnitProxy_02)
-- GDSNCanadaExtensionUOM.SuggestedServingSizeUOM (EntityID = 10002, ArticleDomainUOMType.Std_UnitProxy_01)
-- ArticlePhysioChemicalUOM.PhysiochemicalCharacteristicValueUOM (EntityID = 10111, ArticleDomainUOMType.Std_UnitProxy_01)
-- ArticleMicrobiologicsUOM.Unit (EntityID = 10011, ArticleDomainUOMType.Std_LK_UnitProxy_01)
SELECT
ar.
"ArticleID"
, ar.
"Identifier"
, ad.
"TargetMarket"
, ad.
"Std_LK_Text100_01"
, ad.
"Std_LK_Text100_02"
, adu.
"EntityID"
, adu.
"UOMType"
, adu.
"Std_LK_UnitProxy_01"
, adu.
"Std_UnitProxy_01"
, adu.
"Std_UnitProxy_02"
FROM
"ArticleRevision"
ar
INNER
JOIN
"ArticleDomain"
ad
ON
ar.
"ID"
= ad.
"ArticleRevisionID"
INNER
JOIN
"ArticleDomainUOM"
adu
ON
ad.
"ID"
= adu.
"ArticleDomainID"
WHERE
(adu.
"EntityID"
= 10062
AND
adu.
"Std_UnitProxy_02"
IN
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
OR
((adu.
"EntityID"
= 10002
OR
adu.
"EntityID"
= 10111)
AND
adu.
"Std_UnitProxy_01"
IN
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038))
OR
(adu.
"EntityID"
= 10011
AND
adu.
"Std_LK_UnitProxy_01"
IN
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038));
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticleFishMeatPoultryContentUOM.MinimumFishMeatPoultryContentUOM (EntityID = 10126, ArticleSubDomainUOMType.Std_UnitProxy_01)
-- ArticleNutritionalProgramUOM.NutritionalProgramIngredientUnit (EntityID = 17186, ArticleSubDomainUOMType.Std_UnitProxy_01)
SELECT
ar.
"ArticleID"
, ar.
"Identifier"
, ad.
"TargetMarket"
, asd.
"Std_LK_Text250_01"
, asdu.
"EntityID"
, asdu.
"UOMType"
, asdu.
"Std_UnitProxy_01"
FROM
"ArticleRevision"
ar
INNER
JOIN
"ArticleDomain"
ad
ON
ar.
"ID"
= ad.
"ArticleRevisionID"
INNER
JOIN
"ArticleSubDomain"
asd
ON
ad.
"ID"
= asd.
"ArticleDomainID"
INNER
JOIN
"ArticleSubDomainUOM"
asdu
ON
asd.
"ID"
= asdu.
"ArticleSubDomainID"
WHERE
((asdu.
"EntityID"
= 10126
OR
asdu.
"EntityID"
= 17186)
AND
asdu.
"Std_UnitProxy_01"
IN
(7001,147,936,426,246,116,205,249,1008,294,149,265,806,876,7005,7006,7007,7008,7009,7010,7011,7012,7034,7038));
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- GDSNExtensionUOM.NetContentUOM
SELECT
ar.
"ArticleID"
, ar.
"Identifier"
, ameu.
"EntityID"
, ameu.
"UOMType"
, ameu.
"Std_UnitProxy_01"
FROM
"ArticleRevision"
ar
INNER
JOIN
"ArticleMarketExtension"
ame
ON
ar.
"ID"
= ame.
"ArticleRevisionID"
INNER
JOIN
"ArticleMarketExtensionUOM"
ameu
ON
ame.
"ID"
= ameu.
"ArticleMarketExtensionID"
WHERE
(ameu.
"EntityID"
= 1042
AND
ameu.
"Std_UnitProxy_01"
in
(7002, 7038));
-- Find out if you have stored values that will no longer be part of the valid values lists for fields
-- ArticlePackagingMaterialUOM.PackagingMaterialCompositionQuantityUOM
SELECT
ar.
"ArticleID"
, ar.
"Identifier"
, ad.
"TargetMarket"
, ad.
"Std_LK_Text100_01"
, asd.
"Std_LK_Text250_01"
, asdu.
"EntityID"
, asdu.
"UOMType"
, asdu.
"Std_UnitProxy_01"
FROM
"ArticleRevision"
ar
INNER
JOIN
"ArticleDomain"
ad
ON
ar.
"ID"
= ad.
"ArticleRevisionID"
INNER
JOIN
"ArticleSubDomain"
asd
ON
ad.
"ID"
= asd.
"ArticleDomainID"
INNER
JOIN
"ArticleSubDomainUOM"
asdu
ON
asd.
"ID"
= asdu.
"ArticleSubDomainID"
WHERE
(asdu.
"EntityID"
= 17115
AND
asdu.
"Std_UnitProxy_01"
in
(7002, 7038));
Compatibility
The relevant changes of GDSN Major Release 3.1.19 will be supported from version 10.1.0.04 upwards. All older versions won´t have any of the changes mentioned in this migration guide so we highly recommend to update to the latest version.
As there are no structural changes in the XSD files compared to version 3.1.15 all export templates are compatible to version 3.1.19.
B2B
With the Update to GDSN 3.1.19 the XSDs changed. These are used by the data transformations in B2B.
If you are a cloud customer, you don't need to do anything. A new EC2 instance with an updated B2B will be created for you from a new AMI.
If you use an on premise installation of B2B, you need to execute the following steps to update your system:
In your Power Center installation find the folder DataTransformation/ServiceDB and make a backup of this folder.
Stop the GDSN workflows.
Stop Power Center, Data Exchange and MFT.
In the PIM_<version>_resources_gdsn.delta.zip of the GDSN Accelerator Package in the folder Common you will find a file called B2B_GDSN.zip.
Extract all files and open DT_Services folder.
Depending on whether you use GDSN as a
Data Source (e. g. manufacturer), copy the content of the DataSource folder to the DataTransformation/ServiceDB folder of your B2B installation.
Data Recipient (e. g. retailer), copy the content of the DataRecipient folder to the Data Transformations/ServiceDB folder of your B2B installation.
Start Power Center, Data Exchange and MFT.
Start the workflows.