static void THK_FindAndDeleteIdenticalObjects(Args _args)
{
/*
Delete Identical Objects
Job to remove the identical copy from VAR layer.
For some unknown reason, some AOT objects are touched in VAR layer but actually are identical copy.
When the developer compared the VAR layer object with the one in lower layer (BUS, SYS etc.),
AX showed it was an identical copy.Here is the example on how you can remove the identical copy in X++ code:
*/
SysTreeNode comparable1, comparable2;
TreeNode curLevelTreeNode, upperLevelTreeNode;
UtilIdElements utilElements, joinUtilElements;
;
if(!box::yesNo("Are you sure delete Identical Objects",dialogbutton::No,"delete Identical Objects"))
return;
while select UtilElements
where UtilElements.utilLevel == UtilEntryLevel::var &&
(
UtilElements.recordType == UtilElementType::Form ||
Utilelements.recordType == UtilElementType::Report ||
Utilelements.recordType == UtilElementType::Table ||
Utilelements.recordType == UtilElementType::Class ||
Utilelements.recordType == UtilElementType::Enum ||
Utilelements.recordType == UtilElementType::ExtendedType
)
{
//Should use join if for a normal table, but not applicable for UtilElements
//Performance hit if use exists join
select firstonly recid from joinUtilElements
where joinUtilElements.utilLevel != UtilElements.utilLevel &&
joinUtilElements.name == UtilElements.name &&
joinUtilElements.recordType == UtilElements.recordType;
if (joinUtilElements.RecId)
{
curLevelTreeNode = SysTreeNode::findNodeInLayer( UtilElements.recordType,
UtilElements.name,
UtilElements.parentId,
UtilElements.utilLevel);
upperLevelTreeNode = SysTreeNode::getLayeredNode(curLevelTreenode, 1);
comparable1 = SysTreeNode::newTreeNode(curLevelTreeNode);
comparable2 = SysTreeNode::newTreeNode(upperLevelTreeNode);
if(SysCompare::silentCompare(comparable1, comparable2))
{
info(strFmt("Element name: %1, Element type: %2",
UtilElements.name,
enum2str(UtilElements.recordType)));
//Remove the node
//curLevelTreeNode.AOTdelete();
}
}
}
}
没有评论:
发表评论