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

108/204

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

Item
{?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

Trade item measurement
{!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

Dairy fish meat poultry
, {?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

Items
{$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

Nutritional information
{?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}"}
Nutritional information
{!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

Nutritional information: Collect 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:

images/download/attachments/445938484/image2022-2-11_14-38-5.png

Nutritional information: Assemble Nutrient quantities
{!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

Items
{?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

Dairy fish meat poultry
{?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

Items
{$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

Nutritional information, line 2
{?ValueSetLocal "tmpNutrientListByContainerName",BY_PACKAGE_OR_CONTAINER_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
Nutritional information, line 32
{?ValueSetLocal "tmpNutrientListByMeasureName",BY_MEASURE_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}
Nutritional information, line 62
{?ValueSetLocal "ByServing",BY_SERVING_{&Nutritional information.Preparation state}_{&Nutritional information.Target market}}

Nutritional information, new lines 100-128
{!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

Collect 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:

images/download/attachments/445938484/image2022-2-11_14-18-32.png

Assemble Nutrient quantities
{!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.

MSSQL - Find db IDs for unit codes
-- 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')
MSSQL - Fields using table ArticleDomainUOM
-- 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))
MSSQL - Fields using table ArticleSubDomainUOM
  -- 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))
MSSQL - Fields using table ArticleMarketExtensionUOM
-- 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))
MSSQL - Fields using table ArticleSubDomainUOM
-- 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))
Oracle - Find db IDs for unit codes
-- 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');
Oracle - Fields using table ArticleDomainUOM
-- 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));
Oracle - Fields using table ArticleSubDomainUOM
-- 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));
Oracle - Fields using table ArticleMarketExtensionUOM
-- 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));
Oracle - Fields using table ArticleSubDomainUOM
-- 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:

  1. In your Power Center installation find the folder DataTransformation/ServiceDB and make a backup of this folder.

  2. Stop the GDSN workflows.

  3. Stop Power Center, Data Exchange and MFT.

  4. 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.

  5. Extract all files and open DT_Services folder.

  6. Depending on whether you use GDSN as a

    1. Data Source (e. g. manufacturer), copy the content of the DataSource folder to the DataTransformation/ServiceDB folder of your B2B installation.

    2. Data Recipient (e. g. retailer), copy the content of the DataRecipient folder to the Data Transformations/ServiceDB folder of your B2B installation.

  7. Start Power Center, Data Exchange and MFT.

  8. Start the workflows.