/ X++

# [X++] Alternative: Get rid of BP error 839: Only foreign key constraints are allowed on this table

## Property EnforceFKRelation

When creating new tables in Dynamics AX 2012, there is a hidden property in the background called EnforceFKRelation.
This property defines if the tables enforces ForeignKey Relations or not and is set to 1 (True) on newly created tables.

This property does not appear anywhere in the AOT, so to check it the table needs to be exported as an XPO file. Open it with the editor of your choice:

In line 11 you can see the property.

## Related BP error 839

#### BestPractice error Message

Only foreign key constraints are allowed on this table

#### Example scenario

Let's assume we created a new table CustCollectionLetterLineTranslation and want to make a RecId relation to the standard table CustCollectionLetterLine.

###### CustCollectionLetterLine PrimaryKey

The PrimaryKey on the table CustCollectionLetterLine consists of three fields:

So a relation would use those three fields to find exactly one record on this table.
There is no RecId index on this table!

###### Relation on new table

Although there is no RecId index on the table CustCollectionLetterLine we want to create a relation using the RecId field. This would give us said best practice error.

###### The alternative way to make this relation a ForeignKey relation

Export the table as XPO file, open it with the editor of your choice and modify the section of the relation to have REFERENCETYPE PKFK
OLD:

...
REFERENCES
REFERENCE #CustCollectionLetterLine
PROPERTIES
Name                #CustCollectionLetterLine
Table               #CustCollectionLetterLine
RelatedTableCardinality   #ExactlyOne
Cardinality         #OneMore
RelationshipType    #Aggregation
UseDefaultRoleNames #Yes
ENDPROPERTIES

FIELDREFERENCES
REFERENCETYPE NORMAL
PROPERTIES
Field               #CustCollectionLetterLine
RelatedField        #RecId
ENDPROPERTIES

ENDFIELDREFERENCES
ENDREFERENCE
...

NEW:

...
REFERENCES
REFERENCE #CustCollectionLetterLine
PROPERTIES
Name                #CustCollectionLetterLine
Table               #CustCollectionLetterLine
RelatedTableCardinality   #ExactlyOne
Cardinality         #OneMore
RelationshipType    #Aggregation
UseDefaultRoleNames #Yes
ENDPROPERTIES

FIELDREFERENCES
REFERENCETYPE PKFK
PROPERTIES
Field               #CustCollectionLetterLine
RelatedField        #RecId
ENDPROPERTIES

ENDFIELDREFERENCES
ENDREFERENCE
...

Import it et voila, the best practice error is gone!

#### Robin

Software Engineer / Application Developer

[X++] Alternative: Get rid of BP error 839: Only foreign key constraints are allowed on this table