DMT - Dynamic Attributes error

Has anyone successfully DMT’d Dynamic Attribute Classes for AUOM?

Trying to reload AUOM Dynamic Attribute classes after pilot refresh and I cannot get past the error:

Attribute enabled for MRP are Required everywhere.

It likely refers to the Demand, Supply, Inventory options seen here:

However, the data doesn’t exist in the DynAttrClassDtl table and the DynClassAttrDtlReq table doesn’t exist in the DMT template.

The closest I can find are the two fields seen here
(DynAttrClassDtl#RequiredAtSelectedCodes
& DynAttrClassDtl#RequiredAtSelectedDesc)
but these don’t exist in the DTL table either so how would I know what to populate in them?

I gather that the ability to DMT AUOM data is somewhat newly released so checking if anyone has done this or has suggestions before creating a support case.

TIA,
Josh

Looking at the REST API response, it seems the correct format for these field values are like so:

Inventory~Supply~Demand

image

Tried that in DMT and it works.

Finally figured out where this data is stored so we can BAQ it out of Pilot for DMT into Live.

It’s in individual rows at DynAttrClassDtlReq.RequiredAtTableName so to output for DMT, a Group By CTE with STRING_AGG does the trick.

STRING_AGG(DynAttrClassDtlReq.RequiredAtTableName,'~') 
with [CTEDynAttrClassDtlReq] as 
(select  
	[DynAttrClassDtlReq].[Company] as [DynAttrClassDtlReq_Company], 
	[DynAttrClassDtlReq].[AttrClassID] as [DynAttrClassDtlReq_AttrClassID], 
	[DynAttrClassDtlReq].[AttributeID] as [DynAttrClassDtlReq_AttributeID], 
	(STRING_AGG(DynAttrClassDtlReq.RequiredAtSchemaName,'~')) as [Calculated_RequiredAtSchemaName], 
	(STRING_AGG(DynAttrClassDtlReq.RequiredAtTableName,'~')) as [Calculated_RequiredAtTableName] 

from Erp.DynAttrClassDtlReq as [DynAttrClassDtlReq]
group by 
	[DynAttrClassDtlReq].[Company], 
	[DynAttrClassDtlReq].[AttrClassID], 
	[DynAttrClassDtlReq].[AttributeID])

select  
	[DynAttrClass].[Company] as [DynAttrClass_Company], 
	[DynAttrClass].[AttrClassID] as [DynAttrClass_AttrClassID], 
	[DynAttrClass].[RelatedToSchemaName] as [DynAttrClass_RelatedToSchemaName], 
	[DynAttrClass].[RelatedToTableName] as [DynAttrClass_RelatedToTableName], 
	[DynAttrClass].[Active] as [DynAttrClass_Active], 
	[DynAttrClass].[Description] as [DynAttrClass_Description], 
	[DynAttrClass].[FullExpression] as [DynAttrClass_FullExpression], 
	[DynAttrClass].[CalculationType] as [DynAttrClass_CalculationType], 
	[DynAttrClass].[NumberOfPiecesAction] as [DynAttrClass_NumberOfPiecesAction], 
	[DynAttrClass].[NumberOfPiecesTolerance] as [DynAttrClass_NumberOfPiecesTolerance], 
	[DynAttrClassDtl].[AttrClassID] as [DynAttrClassDtl_AttrClassID], 
	[DynAttrClassDtl].[AttributeID] as [DynAttrClassDtl_AttributeID], 
	[DynAttrClassDtl].[RelatedToSchemaName] as [DynAttrClassDtl_RelatedToSchemaName], 
	[DynAttrClassDtl].[RelatedToTableName] as [DynAttrClassDtl_RelatedToTableName], 
	[DynAttrClassDtl].[Active] as [DynAttrClassDtl_Active], 
	[DynAttrClassDtl].[Description] as [DynAttrClassDtl_Description], 
	[DynAttrClassDtl].[FieldDataType] as [DynAttrClassDtl_FieldDataType], 
	[DynAttrClassDtl].[FieldFormat] as [DynAttrClassDtl_FieldFormat], 
	[DynAttrClassDtl].[FieldLabel] as [DynAttrClassDtl_FieldLabel], 
	[DynAttrClassDtl].[IncrPrec] as [DynAttrClassDtl_IncrPrec], 
	[DynAttrClassDtl].[InitialCharacter] as [DynAttrClassDtl_InitialCharacter], 
	[DynAttrClassDtl].[InitialDate] as [DynAttrClassDtl_InitialDate], 
	[DynAttrClassDtl].[InitialDecimal] as [DynAttrClassDtl_InitialDecimal], 
	[DynAttrClassDtl].[InitialInteger] as [DynAttrClassDtl_InitialInteger], 
	[DynAttrClassDtl].[InitialLogical] as [DynAttrClassDtl_InitialLogical], 
	[DynAttrClassDtl].[MaxDate] as [DynAttrClassDtl_MaxDate], 
	[DynAttrClassDtl].[MaxDecimal] as [DynAttrClassDtl_MaxDecimal], 
	[DynAttrClassDtl].[MaxInteger] as [DynAttrClassDtl_MaxInteger], 
	[DynAttrClassDtl].[MinDate] as [DynAttrClassDtl_MinDate], 
	[DynAttrClassDtl].[MinDecimal] as [DynAttrClassDtl_MinDecimal], 
	[DynAttrClassDtl].[MinInteger] as [DynAttrClassDtl_MinInteger], 
	[DynAttrClassDtl].[WebAttribute] as [DynAttrClassDtl_WebAttribute], 
	[DynAttrClassDtl].[BizType] as [DynAttrClassDtl_BizType], 
	[DynAttrClassDtl].[UOMAttributeID] as [DynAttrClassDtl_UOMAttributeID], 
	[DynAttrClassDtl].[SortSeq] as [DynAttrClassDtl_SortSeq], 
	[DynAttrClassDtl].[UsedInPlanning] as [DynAttrClassDtl_UsedInPlanning], 
	[DynAttrClassDtl].[IsCalculated] as [DynAttrClassDtl_IsCalculated], 
	[DynAttrClassDtl].[PlanningBaseUOM] as [DynAttrClassDtl_PlanningBaseUOM], 
	[DynAttrClassDtl].[PlanningType] as [DynAttrClassDtl_PlanningType], 
	[DynAttrClassDtl].[MasterDtlLinked] as [DynAttrClassDtl_MasterDtlLinked], 
	[DynAttrClassDtl].[MasterDtlSync] as [DynAttrClassDtl_MasterDtlSync], 
	[DynAttrClassDtl].[IncludeListValueCodeInShortDesc] as [DynAttrClassDtl_IncludeListValueCodeInShortDesc], 
	[DynAttrClassDtl].[IncludeListValueDescriptionInShortDesc] as [DynAttrClassDtl_IncludeListValueDescriptionInShortDesc], 
	[DynAttrClassDtl].[Company] as [DynAttrClassDtl_Company], 
	[DynAttrClassDtlListVal].[Company] as [DynAttrClassDtlListVal_Company], 
	[DynAttrClassDtlListVal].[AttrClassID] as [DynAttrClassDtlListVal_AttrClassID], 
	[DynAttrClassDtlListVal].[AttributeID] as [DynAttrClassDtlListVal_AttributeID], 
	[DynAttrClassDtlListVal].[Code] as [DynAttrClassDtlListVal_Code], 
	[DynAttrClassDtlListVal].[RelatedToSchemaName] as [DynAttrClassDtlListVal_RelatedToSchemaName], 
	[DynAttrClassDtlListVal].[RelatedToTableName] as [DynAttrClassDtlListVal_RelatedToTableName], 
	[DynAttrClassDtlListVal].[Description] as [DynAttrClassDtlListVal_Description], 
	[DynAttrClassDtlListVal].[Active] as [DynAttrClassDtlListVal_Active], 
	[DynAttrClassDtlListVal].[PlanningConvOperator] as [DynAttrClassDtlListVal_PlanningConvOperator], 
	[DynAttrClassDtlListVal].[PlanningConvFactor] as [DynAttrClassDtlListVal_PlanningConvFactor], 
	[DynAttrClassDtlListVal].[WhereAvailable] as [DynAttrClassDtlListVal_WhereAvailable], 
	[DynAttrClassDtlListVal].[TheoreticalUOM] as [DynAttrClassDtlListVal_TheoreticalUOM], 
	(0) as [Calculated_DynAttrClassDtl_IsFinalExpression], 
	('LB') as [Calculated_DynAttrClassDtl_FinalExpressionUOM], 
	(0) as [Calculated_DynAttrClassDtl_IsExpressionDefined], 
	('') as [Calculated_DynAttrClassDtl_Formula], 
	(CASE WHEN DynAttrClassDtl.UsedInPlanning = 1 THEN 'Inventory~Supply~Demand' ELSE NULL END) as [Calculated_DynAttrClassDtl_RequiredAtSelectedCodes], 
	[CTEDynAttrClassDtlReq].[Calculated_RequiredAtTableName] as [Calculated_RequiredAtTableName] 

from Erp.DynAttrClass as [DynAttrClass]
inner join Erp.DynAttrClassDtl as [DynAttrClassDtl] on 
	  DynAttrClass.Company = DynAttrClassDtl.Company
	and  DynAttrClass.AttrClassID = DynAttrClassDtl.AttrClassID
left outer join Erp.DynAttrClassDtlListVal as [DynAttrClassDtlListVal] on 
	  DynAttrClassDtl.Company = DynAttrClassDtlListVal.Company
	and  DynAttrClassDtl.AttrClassID = DynAttrClassDtlListVal.AttrClassID
	and  DynAttrClassDtl.AttributeID = DynAttrClassDtlListVal.AttributeID
left outer join  CTEDynAttrClassDtlReq  as [CTEDynAttrClassDtlReq] on 
	  DynAttrClassDtl.Company = CTEDynAttrClassDtlReq.DynAttrClassDtlReq_Company
	and  DynAttrClassDtl.AttrClassID = CTEDynAttrClassDtlReq.DynAttrClassDtlReq_AttrClassID
	and  DynAttrClassDtl.AttributeID = CTEDynAttrClassDtlReq.DynAttrClassDtlReq_AttributeID
where (not DynAttrClass.AttrClassID IN ('HEAD', 'PLATEnot', 'STRUCTURAL', 'VESSEL')  
and not DynAttrClass.AttrClassID LIKE 'Z%')
order by DynAttrClass.Company, DynAttrClass.AttrClassID, DynAttrClassDtl.PlanningType Desc, DynAttrClassDtl.AttributeID

DMT-58-DynAttrCombined.baq (19.2 KB)

Now if only we could figure out how to DMT the Expression Formulas…

(0) as [Calculated_DynAttrClassDtl_IsFinalExpression],
(‘LB’) as [Calculated_DynAttrClassDtl_FinalExpressionUOM],
(0) as [Calculated_DynAttrClassDtl_IsExpressionDefined],
(‘’) as [Calculated_DynAttrClassDtl_Formula],
(CASE WHEN DynAttrClassDtl.UsedInPlanning = 1 THEN ‘Inventory~Supply~Demand’ ELSE NULL END) as [Calculated_DynAttrClassDtl_RequiredAtSelectedCodes],