X++:
// собрать список объектов АОТ без ключей доступа, у которых они должны быть, в проект
static void Edd_ListAOTObjectsWithoutSecurity(Args _args)
{
ProjectNode ProjectNode;
SysProjectFilterRunBase Project = new SysProjectFilterRunBase();
boolean existCustomization(UtilElementType _UtilElementType, identifiername _name)
{
UtilElements UtilElements;
;
select UtilElements
where UtilElements.recordType == _UtilElementType
&& UtilElements.utilLevel >= UtilEntryLevel::bus
&& UtilElements.name == _name;
return (UtilElements.RecId != 0);
}
UtilElements findTreeNode(TreeNode _treeNode)
{
UtilElements utilElements;
TreeNode utilNode = _treeNode;
identifiername name;
int parentId;
UtilElementType recordType;
UtilEntryLevel utilLevel;
MemberFunction memberFunctionNodeType;
classId memberFunctionClassId = classIdGet(memberFunctionNodeType); // as a constant
while (utilNode && !sysTreeNode::isApplObject(utilNode))
{
utilNode = utilNode.aotParent();
}
if (utilNode && sysTreeNode::isApplObject(utilNode))
{
name = utilNode.treeNodeName();
recordType = utilNode.applObjectType();
utilLevel = utilNode.applObjectLayer();
if (utilNode.AOTparent())
{
if ((recordType == UtilElementType::TableInstanceMethod) ||
(recordType == UtilElementType::TableStaticMethod) ||
(recordType == UtilElementType::TableRelation) ||
(recordType == UtilElementType::TableField) ||
(recordType == UtilElementType::TableFieldGroup) ||
(recordType == UtilElementType::TableIndex))
{
parentId = utilNode.aotParent().aotParent().applObjectId();
}
else
{
if ((recordType == UtilElementType::ClassStaticMethod) ||
(recordType == UtilElementType::ClassInstanceMethod))
{
parentId = utilNode.aotParent().applObjectId();
}
}
}
select firstonly utilElements
where utilElements.name == name &&
utilElements.recordType == recordType &&
utilElements.parentId == parentId &&
(utilElements.utilLevel == utilLevel ||
utilElements.utilLevel == utilLevel - 1);
return utilElements;
}
return null;
}
void TableList()
{
DictTable DictTable;
treeNode treeNode;
xInfo xInfo = new xInfo();
securityKeyId securityKeyId;
;
treeNode = xInfo.rootNode();
treeNode = treeNode.AOTfindChild("Data Dictionary");
treeNode = treeNode.AOTfindChild("Tables");
treeNode = treeNode.AOTfirstChild();
while (treeNode)
{
DictTable = new DictTable(tablename2id(treeNode.AOTname()));
if (!DictTable.securityKeyId() && !DictTable.isTmp() && existCustomization(UtilElementType::Table, treeNode.AOTname()))
{
securityKeyId = DictTable.securityKeyId();
info(strfmt("%1 %2", treeNode.AOTname(), DictTable.label()));
Project.doUtilElements(findTreeNode(treeNode));
}
treeNode = treeNode.AOTnextSibling();
}
}
void MenuItemOutputList()
{
treeNode treeNode;
xInfo xInfo = new xInfo();
str Properties;
int pos1, pos2;
;
treeNode = xInfo.rootNode();
treeNode = treeNode.AOTfindChild("Menu Items");
treeNode = treeNode.AOTfindChild("Output");
treeNode = treeNode.AOTfirstChild();
while (treeNode)
{
Properties = treeNode.AOTgetProperties();
pos1 = findPropertyPos(Properties, "SecurityKey") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::OutputTool, treeNode.AOTname()))
{
pos1 = findPropertyPos(Properties, "Label") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1)));
Project.doUtilElements(findTreeNode(treeNode));
}
treeNode = treeNode.AOTnextSibling();
}
}
void MenuItemActionList()
{
treeNode treeNode;
xInfo xInfo = new xInfo();
str Properties;
int pos1, pos2;
;
treeNode = xInfo.rootNode();
treeNode = treeNode.AOTfindChild("Menu Items");
treeNode = treeNode.AOTfindChild("Action");
treeNode = treeNode.AOTfirstChild();
while (treeNode)
{
Properties = treeNode.AOTgetProperties();
pos1 = findPropertyPos(Properties, "SecurityKey") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::ActionTool, treeNode.AOTname()))
{
pos1 = findPropertyPos(Properties, "Label") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1)));
Project.doUtilElements(findTreeNode(treeNode));
}
treeNode = treeNode.AOTnextSibling();
}
}
void MenuItemDisplayList()
{
treeNode treeNode;
xInfo xInfo = new xInfo();
str Properties;
int pos1, pos2;
;
treeNode = xInfo.rootNode();
treeNode = treeNode.AOTfindChild("Menu Items");
treeNode = treeNode.AOTfindChild("Display");
treeNode = treeNode.AOTfirstChild();
while (treeNode)
{
Properties = treeNode.AOTgetProperties();
pos1 = findPropertyPos(Properties, "SecurityKey") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
if ((pos2 - pos1) == 0 && existCustomization(UtilElementType::DisplayTool, treeNode.AOTname()))
{
pos1 = findPropertyPos(Properties, "Label") + 21;
pos2 = strscan(Properties,"\n",pos1,100);
info(strfmt("%1 %2", treeNode.AOTname(), substr(Properties, pos1, pos2 - pos1)));
Project.doUtilElements(findTreeNode(treeNode));
}
treeNode = treeNode.AOTnextSibling();
}
}
;
ProjectNode = SysTreeNode::createProject("ndn_SecurityKeyNeeded");
Project.parmProjectNode(ProjectNode);
Project.grouping(SysProjectGrouping::AOT);
setprefix("Таблицы");
TableList();
setprefix("Отчеты");
MenuItemOutputList();
setprefix("Формы");
MenuItemDisplayList();
setprefix("Действия");
MenuItemActionList();
Project.write();
}