Показать сообщение отдельно
Старый 06.09.2007, 12:17   #5  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,495 / 1070 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
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();
}
За это сообщение автора поблагодарили: Wamr (4), aidsua (1), gl00mie (5), Андрей К. (1), Kabardian (4), Hammer (1).