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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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).
Теги
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, время: 13:04.