AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2007, 15:47   #1  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Замена inventDimId во всех таблицах
Существует inventDim.InventdimId == "сан1"
Как Заменить во всех таблицах в базе этот inventDimId на другой ,
например сан2?
Может сталкивался кто?
Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables);
Но что-то совсем запуталась...
Заранее спасибо...
Старый 26.07.2007, 15:58   #2  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
неужели никто не сталкивался?
Да не поверю, что никто ничего такого не изменял значение поля по всем таблицам...;-)
Старый 26.07.2007, 16:00   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от fialka Посмотреть сообщение
Существует inventDim.InventdimId == "сан1"
Как Заменить во всех таблицах в базе этот inventDimId на другой ,
например сан2?
Может сталкивался кто?
Пробую через tablesRoot = TreeNode::findNode(\\Data Dictionary\\Tables);
Но что-то совсем запуталась...
Заранее спасибо...
Вы решили взять все таблицы и пробежать по ним. А если в них поле будет называться не InventDim, а какой нибудь InventDimTo. Не самое простое не городить. А привести Сан1 к сан2 только номер оставить.
Старый 26.07.2007, 16:02   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fialka Посмотреть сообщение
Но что-то совсем запуталась...
Пример
http://forum.mazzy.ru/index.php?showtopic=3668
__________________
полезное на axForum, github, vk, coub.
Старый 26.07.2007, 16:14   #5  
rINT is offline
rINT
Участник
 
31 / 21 (1) +++
Регистрация: 16.11.2004
Попробуйте такую обработку. Меняет значения по любому EDT
X++:
//обработка заменяет значения полей в полях таблиц, имеющих определенный расширенный тип.
static void changeValueByEDTId()
{
    str         oldValue = "сан1";
    str         newValue = "сан2";

    Dictionary  dictionary = new Dictionary();
    DictTable   dictTable;
    DictField    dictField;

    counter     counter;

    int         i, j;

    #define.EDT_Id(1564) //в скобках указан идентификатор расширенного типа InventDimId, возможно у Вас он другой.

    void update(TableId _tableId, FieldId _fieldId)
    {
        Query                   q = new Query();
        QueryBuildDataSource    qbds;
        QueryRun                qr;
        Common                  common;
        ;

        qbds = q.addDataSource(_tableId);

        qbds.update(true);

        qbds.addRange(_fieldId).value(strfmt('\"%1\"', oldValue));

        qr = new QueryRun(q);

        while (qr.next())
        {
            common = qr.getNo(1);

            common.(_fieldId) = newValue;

            common.doUpdate();

            counter++;
        }
    }
    ;

    ttsbegin;

    for (i = 1; i <= dictionary.tableCnt(); i++)

    {
        dictTable = new DictTable(dictionary.tableCnt2Id(i));

        if (!dictTable.isTmp() && !dictTable.isSystemTable() && !dictTable.isView() && !dictTable.isMap())

        {

            for (j = 1; j <= dictTable.fieldCnt(); j++)

            {

                dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(j));

                if (dictField.typeId() == #EDT_Id)
                {
                    counter = 0;
                    update(dictTable.id(), dictField.id());
                    if (counter)
                        info(strfmt("Обработана таблица %1 поле %2 <%3> записей", dictTable.name(), dictField.name(), counter));
                }
            }

        }

    }

    ttscommit;

    info(strfmt('Проведена замена значения %1 на %2', oldValue, newValue));

}
За это сообщение автора поблагодарили: mazzy (5), miklenew (1), Sergey Petrov (1).
Старый 26.07.2007, 16:55   #6  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от rINT Посмотреть сообщение
Попробуйте такую обработку. Меняет значения по любому EDT
спасибо... единственное ещё нужно учесть, что в InventDim самой не меняем...
сейчас попробую прицепить к своему классу и посмотрим,что получится..).
Старый 27.07.2007, 00:17   #7  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
А чем вас не устроил

inventDim.renamePrimaryKey();

?
__________________
С уважением,
glibs®
Старый 20.08.2007, 16:29   #8  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Только, скорее всего, не renamePrimaryKey(), а merge(). В смысле, если такая комбинация аналитик уже существует и где-то используется, то делать надо merge(), предварительно прочитав в System documentation, как это работает и чем это грозит. Особенно обратите внимание на вот это:
Цитата:
A duplicate key condition during the merge causes a runtime error and a ttsabort.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: belugin (3), NetBus (1).
Теги
aot, inventdim, reflection, renameprimarykey, законченный пример, отражение, таблица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление поля с определённым типом во всех таблицах. Corel DAX: Программирование 1 20.12.2008 13:37
Как получить метки всех элементов всех форм (DAX 4) Qaz Qwerty DAX: Программирование 1 09.08.2008 05:39
Нужно подсчитать количество записей во всех таблицах Аксапты? Hidden DAX: Программирование 7 11.11.2005 15:20
Блокировка всех таблиц DreamCreator DAX: Администрирование 1 09.08.2005 16:07
Настройки пользователя для всех пользователей DreamCreator DAX: Программирование 1 27.01.2005 10:51
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:09.