Показать сообщение отдельно
Старый 06.04.2020, 21:27   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Прямое сканирование AOT выполняется на основе объекта TreeNode
Список вообще всех элементов AOT можно получить из таблицы UtilElements или UtilIdElements (эта то же самое, но со значениями Id элементов)

Соответственно, возможны 2 варианта получения списка объектов. Каждый способ имеет достоинства и недостатки

X++:
static void job_test(Args _args)
{
    utilElements    utilElements;
    TableId         tableId ;
    DictTable       dictTable;
    int             totalI;
    
    TreeNode        treeNode;
    TreeNode        node;
    ;

    info("Scan AOT");
    totalI = 0;
    treeNode = treeNode::findNode(@"\Data Dictionary\Tables");
    node = treeNode.AOTfirstChild();
    while (node)
    {
        info(strFmt("Name = %1  tableType = %2", node.AOTname(), node.AOTgetProperty("TableType")));
        
        // debug
        totalI++;
        if (totalI > 10) break;
        
        node = node.AOTnextSibling();
    }
    
    info("-----------");
    
    info("Scan UtilElements");
    totalI = 0;
    while select Name 
        from utilElements 
        group by Name 
        where utilElements.RecordType == UtilElementType::Table
    {
        tableId = tableName2id(utilElements.Name);
        dictTable = new dictTable(tableId);
        
        info(strFmt("Name = %1  tableType = %2", utilElements.Name, dictTable.tableType()));
        
        // debug
        totalI++;
        if (totalI > 10) break;
    }
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...