|
|
|
|
#1 |
|
Administrator
|
Нашел в своих загашниках "джобик" Class_ReplaceDataAreaId.xpo (оформленный как класс-наследник RunBase) по перебивке dataAreaId. Запрашиваются следующие параметры:
Компания с данными - невиртуальная компания с данными. Это компания ИЗ Виртуальная компания - виртуальная компания с данными. Это компания В Имя таблицы - имя таблицы в АОТ, в которой перебиваются данные. Точное соответствие - Да, если указывается точное имя таблицы. Нет, если в поле Имя таблицы будет указано к примеру Invent* - т.е. обработать все таблицы, начинающиеся на Invent Джобик грамотно перебивает поле dataareaid и также перебивает поле RecID (поэтому обработка построчная). Для изменения записей используются команды вне AX. Есть отдельная врезка кода для Oracle и для SQL Server, т.е. джобик, несмотря на то, что обращения идут к БД - поддерживает обе платформы. Джобик не умеет перебивать связанные RecId. Т.е. если перебивается табличка, на RecId которой ссылаются какие-то записи, то эта связь будет потеряна после применения джобика. Джобик писался изначально для 3.0 и был успешно оттестирован на: 3.0 SP3 CU1 + SQL Server 2000 3.0 SP3 CU1 + Oracle 10i 4.0 SP2 + Oracle 10i Предполагаю, что на SQL Server 2005 он также будет работать Обновлено: В файл добавлена корректная обработка разрешений
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 16.10.2009 в 16:58. Причина: Замена XPO |
|
|
|
|
#2 |
|
MCITP
|
офтоп...
да уж... а если напрямую в БД, это был бы небольшой скриптик на несколько строчек... ))
__________________
Zhirenkov Vitaly |
|
|
|
|
#3 |
|
Administrator
|
Цитата:
Оформлено это просто в класс - чтобы можно было этот код убрать из ветки Jobs, как код, полезный при постепенном внедрении. Ну и конечно - добавлен интерфейс указания компаний для возможности использования консультантами этого джобика. Пункт меню сделан (в xpo я его не стал вкладывать)
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 14.10.2009 в 23:36. |
|
|
|
|
#4 |
|
Administrator
|
Ну я ж сказал
Цитата:
(C)\Classes\ReplaceDataAreaId\updateTableRows - line 31 вставить new SqlStatementExecutePermission('sql-запрос').assert(); а после строчки - CodeAccessPermission::revertAssert(); Либо отключить параметр caslevel (установить его в значение disable) в конфигурации АОСа (это в реестре) и перезапустить АОС. Лучше первый вариант - он правильнее. Опять-таки - джоб предлагался на условии идеи - т.е. на первых порах мы пермишны отключили, а потом джоб забыли поднять ![]() Проверю -отпишусь
__________________
Возможно сделать все. Вопрос времени |
|
|
|
| За это сообщение автора поблагодарили: Poleax (3). | |
|
|
#5 |
|
Участник
|
Еще нужно учесть, что SqlStatementExecutePermission разрешен только на стороне сервера, поэтому нужно в классе изменить свойство RunOn = Server, либо добавить статический серверный конструктор...
|
|
|
|
|
#6 |
|
Участник
|
Цитата:
Судя по строке "(C)\Classes\ReplaceDataAreaId\updateTableRows ", ваш класс работает на клиенте. Дело в том, что statement - это серверный класс, и выполняется он всегда на сервере, а permission вы даете на стороне клиента... Последний раз редактировалось Bishop; 16.10.2009 в 19:16. |
|
|
|
|
#7 |
|
Administrator
|
Цитата:
. Иначе есть шанс его потерять.
__________________
Возможно сделать все. Вопрос времени |
|
|
|
| За это сообщение автора поблагодарили: Alexx7 (1). | |
| Теги |
| update_recordset, законченный пример, как правильно, полезное, системые поля |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|