The other day I found a couple of EDTs with broken table relations and wrote a script that found even more EDTs with the same problem.
Broken relations look like this:
static void findBrokenRelationsInEDTs(Args _args)
Output:
Broken relations look like this:
static void findBrokenRelationsInEDTs(Args _args)
{
#AOT
#TreeNodeSysNodeType
TreeNodeIterator iterator;
TreeNode edtTreeNode;
TreeNode relationsNode;
TreeNode relationNode;
;
iterator = TreeNode::findNode(#ExtendedDataTypesPath).AOTiterator();
if (iterator == null)
{
throw error("Cannot create tree node iterator");
}
edtTreeNode = iterator.next();
while (edtTreeNode != null)
{
relationsNode = edtTreeNode.AOTfindChild('Relations');
if (relationsNode.AOTchildNodeCount() == 0
|| edtTreeNode.AOTname() like "DEL_*")
{
edtTreeNode = iterator.next();
continue;
}
relationNode = relationsNode.AOTfirstChild();
while (relationNode != null)
{
if (relationNode.sysNodeType() == #NT_DBTYPENORMALREFERENCE
&& (relationNode.AOTgetProperty('Table') == ''
|| relationNode.AOTgetProperty('RelatedField') == ''))
{
error(edtTreeNode.AOTname());
break;
}
relationNode = relationNode.AOTnextSibling();
}
edtTreeNode = iterator.next();
}
}
Output: