15.01.2009, 16:55 | #1 |
Участник
|
Создание company, domain, virtual company из X++
День добрый, уважаемые!
Есть следующая задача-проблема. Мне нужно с помощью вызова методов X++ (через .NET BC) выполнить примерно следующее: создать Company, создать для нее Domain, "поместить" Company в уже существующий Domain, добавить в созданную Company уже имеющуюся Virtual Company, создать пользователя (роль) для данного Domain с определенными правами (таких ролей может быть несколько, естественно), т.е. настроить RLS. Кто-нибудь делал нечто подобное? p.s.: Почему это необходимо? нужно минимизировать участие во всем процессе интегратора Dynamics - все это будет происходить по нажатию на кнопку определенным пользователем из ASP.NET приложения. Заранее спасибо за совет и помощь. |
|
15.01.2009, 18:01 | #2 |
Модератор
|
Дмитрий, извини, конечно, не могу согласиться никак. Очень странная задача, даже для вертикального решения.
Сделать-то не сложно - там все на уровне таблиц. Надо просто создать класс на Х++, который создаст новую компанию. Потом создат домен или добавит в существующий. Потом некоторые таблицы объеденит в общие таблицы. Потом создаст виртуальную компанию или добавит новую компанию в существующую. Вы представляете кол-во аргументов? Есть еще путь. Написать методы - обертки работы с компаниями. Тогда можно будет вызывать метод за методом, с конечным числом аргументов. Но еще роли... Вы когда-нибудь настраивали права доступа? А копировали их программно? А Вы знаете, что есть еще настройки пользователя? Рекомендую Вам сначала разобраться со стандартным механизмом. И все это для чего?? Зачем писать кучу классов - оберток, внешнее приложение, тестировать все это когда можно просто зайти в настройки и создать?? Короче, задача - удалить гланды. Условие - через рот нельзя. |
|
15.01.2009, 18:13 | #3 |
Участник
|
Цитата:
Сообщение от George Nordic
Дмитрий, извини, конечно, не могу согласиться никак. Очень странная задача, даже для вертикального решения.
Сделать-то не сложно - там все на уровне таблиц. Надо просто создать класс на Х++, который создаст новую компанию. Потом создат домен или добавит в существующий. Потом некоторые таблицы объеденит в общие таблицы. Потом создаст виртуальную компанию или добавит новую компанию в существующую. Вы представляете кол-во аргументов? Цитата:
Сообщение от George Nordic
Есть еще путь. Написать методы - обертки работы с компаниями. Тогда можно будет вызывать метод за методом, с конечным числом аргументов.
Но еще роли... Вы когда-нибудь настраивали права доступа? А копировали их программно? А Вы знаете, что есть еще настройки пользователя? Рекомендую Вам сначала разобраться со стандартным механизмом. И все это для чего?? Зачем писать кучу классов - оберток, внешнее приложение, тестировать все это когда можно просто зайти в настройки и создать?? Короче, задача - удалить гланды. Условие - через рот нельзя. |
|
15.01.2009, 18:23 | #4 |
MCITP
|
Цитата:
Сообщение от DmitrySincerity
День добрый, уважаемые!
Есть следующая задача-проблема. Мне нужно с помощью вызова методов X++ (через .NET BC) выполнить примерно следующее: создать Company, создать для нее Domain, "поместить" Company в уже существующий Domain, добавить в созданную Company уже имеющуюся Virtual Company, создать пользователя (роль) для данного Domain с определенными правами (таких ролей может быть несколько, естественно), т.е. настроить RLS. Кто-нибудь делал нечто подобное? p.s.: Почему это необходимо? нужно минимизировать участие во всем процессе интегратора Dynamics - все это будет происходить по нажатию на кнопку определенным пользователем из ASP.NET приложения. Заранее спасибо за совет и помощь. Не думаю, что это правильный подход, но не такой уж он и нереальный, мне кажется. Сам не делал, но кой-чего для начала подсказать могу - начните с этого: X++: static void JobZVVTestCompany(Args _args) { DataArea dataArea; DomainInfo domainInfo; CompanyDomainList companyDomainList; VirtualDataAreaList virtualDataAreaList; ; ttsBegin; // Обычная компания dataArea.clear(); dataArea.name = 'ZVVCompany'; dataArea.id = 'ZVV'; dataArea.isVirtual = NoYes::No; dataArea.insert(); // Виртуальная компания dataArea.clear(); dataArea.name = 'ZVVVirtualCompany'; dataArea.id = 'ZVT'; dataArea.isVirtual = NoYes::Yes; dataArea.insert(); // Домен DomainInfo.name = 'ZVVDomain'; DomainInfo.id = 'ZVVDom'; DomainInfo.insert(); // Домен в компанию companyDomainList.companyId = 'ZVV'; companyDomainList.domainId = 'ZVVDom'; companyDomainList.insert(); // Компанию в вирт. компанию virtualDataAreaList.Id = 'ZVV'; virtualDataAreaList.virtualDataArea = 'ZVT'; virtualDataAreaList.insert(); /* // Ну и так далее по аналогии: //USERInfo - пользователи (проблемы - там целая куча неизвестных настроечных полей, с которыми нужно доразбираться и как-то заполнять, в том числе зашифрованное поле "пароль", но правда его можно оставить пустым - прокатывает. Лучше найти какое-то стандартные механизмы. ) //USERGroupInfo - группы (роли) (2 поля: Id, Name) //USERGroupList - Группы по пользователям (2 поля: UserId, GroupId) //SYSRecordLevelSecurity - RLS (проблема - сами правила в MEMO-поле. Лучше найти какое-то стандартные механизмы. ) Возможно надо ещё какие-то настроечные таблицы заполнять. Придётся пробовать методом тыка и разбираться. */ ttsCommit; }
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: DmitrySincerity (1). |
15.01.2009, 18:29 | #5 |
Участник
|
|
|
15.01.2009, 18:59 | #6 |
Боец
|
И не забываем перед каждым .insert() вызывать validateWrite(), и делать это всегда и везде
X++: If (!table.validateWrite()) throw error ('XXX'); |
|
15.01.2009, 19:17 | #7 |
Участник
|
|
|
16.01.2009, 18:02 | #8 |
Administrator
|
И еще надо не забыть рестартануть АОС после создания компании и до создания в компании 1-й записи в любой из таблиц.
__________________
Возможно сделать все. Вопрос времени |
|
16.01.2009, 18:13 | #9 |
MCITP
|
А иначе?
__________________
Zhirenkov Vitaly |
|
16.01.2009, 18:17 | #10 |
Administrator
|
Иначе Аксапта не сможет создать запись в компании.... Хотя в общем-то это 100% справедливо для форм (до рестарта АОСа данные не видны) - но что-то есть предчувствие что могут быть грабли и при созданиии записи из кода
__________________
Возможно сделать все. Вопрос времени |
|
|
|