06.10.2004, 11:07 | #1 |
Участник
|
Список полей таблиц на базе конкретного EDT
AXAPTA 2.5 SP3
Как получить список полей таблиц, созданных на базе конкретного EDT? Точнее так: Есть EDT-base, на его основе может быть создано множестов EDT-child, на основе каждого EDT-child также могут быть созданы множество EDT-child-child Так вот, мне надо получить список всех полей созданных на базе либо EDT-base, либо на базе любых EDT-наследников от EDT-base Перекрестные ссылки, в принципе, использовать можно, но это большой напряг: -) Выводится список вообще всех объектов имеющих ссылки на EDT и фильтрации эта куча не поддается! Точнее, попытка настроить фильтр приводит к пустой выборке. -) Показывается список объектов только непосредственно искомого EDT, а не его наследников. Для каждого из них надо повторять поиск по перекрестным ссылкам AXAPTA 2.5 SP3 |
|
06.10.2004, 11:43 | #2 |
Модератор
|
А зачем, если не секрет?
Если, допустим, просто для переименования, то в 3,0 (не знаю как в 2,5) есть функция renamePrimaryKey. По идее, она должна находить и переименовывать все узлы. Возможно, есть что-либо похожее... Иначе, имхо, все равно придеться лазить по перекрестным ссылкам С Уважением, Георгий. |
|
06.10.2004, 11:52 | #3 |
Участник
|
типа может так?
X++: static void LookPropertiesInTables1(Args _args) { TreeNode tablesRoot; TreeNode newTable, newField; AOTTableFieldList newTableFields; TreeNode tableField; int edtPos; str properties; str tablename; UtilIdElements UtilIdElements; ; tablesRoot = TreeNode::findNode("\\Data Dictionary\\Tables"); newTable = tablesRoot.AOTfirstChild(); while (newTable) { newField = newTable.AOTfindChild("Fields"); newField = newField.AOTfirstChild(); while (newField) { properties = newField.AOTgetProperties(); edtPos = strlen(properties); if(strscan(properties, "tableId",1,strlen(properties))) { print newTable.treeNodeName(); } newField = newField.AOTnextSibling(); } newTable = newTable.AOTnextSibling(); } } |
|
06.10.2004, 12:00 | #4 |
Участник
|
Да не секрет, конечно.
Проблема в следующем: когда создали нашу базу данных, то оставили выравнивание по правому краю (Adjustment = Right). В результате, база данных уже имеет немеренный размер (на сегодня 130ГБ) и после каждого закрытия склада подрастает примерно на 10ГБ. Это без учета регулярного пополнения базы в рабочем порядке. Просто сделать выравнивание по левому краю в EDT Num - не получится Кроме всего прочего, номера заказов и закупок (да и вообще всех документов) - это просто числа без префиксов. Выравнивание по левому краю нарушит порядок следования. Идея заключается в том, чтобы сделать выравнивание по левому краю хотя бы для тех полей, где порядок следования не имеет значения, но эти поля занимают существенную часть базы данных. Например, номер лота (InventTransId) Проблема в том, что в базу вводилось масса дополнительных полей и я просто не уверен, что во всех новых полях, которые должны хранить ссылку на номер лота в качестве EDT использовался именно InvetTransId или InventTransIdBase. Вполне возможно, что там использовался напрямую NUM или какие-то его наследники. Вот я и хотел получить список всех полей, которые были созданы на базе NUM или его наследников. В идеале, получить вообще полный список полей с выравниванием по правому краю (не все они наследники от NUM). И дальше уже смотреть как и что надо менять. |
|
06.10.2004, 12:06 | #5 |
Модератор
|
Да, печальная задача.... Чем-то напоминает Авгиевы конюшни
|
|
06.10.2004, 13:03 | #6 |
Участник
|
Нормальная задача, одна из многих, которые мы делаем для оптимизации базы. Пока это только исследование эффективности данного решения на размер БД и скорость обработки запросов.
|
|
06.10.2004, 14:12 | #7 |
Administrator
|
Re: Список полей таблиц на базе конкретного EDT
Цитата:
Изначально опубликовано Владимир Максимов
-) Выводится список вообще всех объектов имеющих ссылки на EDT и фильтрации эта куча не поддается! Точнее, попытка настроить фильтр приводит к пустой выборке. \\Data Dictionary\\Tables\\*\\Fields\\* Вообще, проще, по-моему, все-таки с таблицами перекрестных ссылок поработать, чем все поля в произведении со всеми типами перебирать.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
06.10.2004, 14:20 | #8 |
Участник
|
ddadream
Спсибо за намек. Написал Job который выводит все что нужно. Maxim Gorbunov Опять забыл, что слэш - это управляющий символ. Указание двойного слэша при настройке условия фильтра помогло. Спасибо. |
|
06.10.2004, 14:37 | #9 |
Модератор
|
вот, на коленке собрано
PHP код:
|
|
|
За это сообщение автора поблагодарили: Yprit (1). |
06.10.2004, 14:43 | #10 |
Участник
|
Vadik
Спасибо. Я сделал примерно то же самое, только за основу взял перебор в дереве AOT, как показал ddadream. PS: Поле без типа - это, например, поле на базе ENUM. Так что не обязательно это неаккуратность. |
|
06.10.2004, 14:45 | #11 |
Модератор
|
Цитата:
Изначально опубликовано Владимир Максимов
Поле без типа - это, например, поле на базе ENUM. Так что не обязательно это неаккуратность. |
|