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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2009, 15:39   #1  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Доступ к SQL
Всю голову себе уже сломал ища решение, подскажите кто знает...
CRM 4.0. Пишу расширение, которое должно напрямую работать с CRM'ной базой MS SQL. Ну а кроме того еще и с CRM-сервисами. К сожалению в данном конкретном расширении не обойтись без работы с SQL - то, что делается запросами нельзя заменить работой сервисов.
Возникла проблема. Под администратором все работает, но если запускать расширение от имени простого пользователя, то возникает ошибка - у простого пользователя нет доступа к SQL.
Можно подключить для расширения олицетворение. Но тогда наоборот есть доступ к SQL но сервисы работать отказываются.

Я вижу несколько путей решения.
1. Коннектиться к SQL с правами админа (или другого пользователя, имеющего доступ к SQL), с этим пока не разбирался, но думаю что это возможно. Но тогда где то как то нужно хранить логин и пароль админа.
2. Отключить для расширения олицетворение. Но тогда нужно иметь имя и пароль пользователя, для того, чтобы создать NetworkCredential при создании подключения к сервисам. Имя текущего пользователя можно было бы получить программно, но пароль... Получается что как и в варианте 1 нужно где то как то хранить логин и пароль.
3. Выделить все части программы, где идет работа с SQL в отдельный веб-сервис и для него отключить олицетворение, чтобы он нормально работал с ДБ. Этот вариант тоже зело геморный да и общая скорость работы пострадает.

Кто как решает подобные проблемы?
Старый 21.01.2009, 15:44   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Post
Цитата:
Сообщение от ZooY Посмотреть сообщение
Всю голову себе уже сломал ища решение, подскажите кто знает...
CRM 4.0. Пишу расширение, которое должно напрямую работать с CRM'ной базой MS SQL. Ну а кроме того еще и с CRM-сервисами. К сожалению в данном конкретном расширении не обойтись без работы с SQL - то, что делается запросами нельзя заменить работой сервисов.
Возникла проблема. Под администратором все работает, но если запускать расширение от имени простого пользователя, то возникает ошибка - у простого пользователя нет доступа к SQL.
Можно подключить для расширения олицетворение. Но тогда наоборот есть доступ к SQL но сервисы работать отказываются.

Я вижу несколько путей решения.
1. Коннектиться к SQL с правами админа (или другого пользователя, имеющего доступ к SQL), с этим пока не разбирался, но думаю что это возможно. Но тогда где то как то нужно хранить логин и пароль админа.
2. Отключить для расширения олицетворение. Но тогда нужно иметь имя и пароль пользователя, для того, чтобы создать NetworkCredential при создании подключения к сервисам. Имя текущего пользователя можно было бы получить программно, но пароль... Получается что как и в варианте 1 нужно где то как то хранить логин и пароль.
3. Выделить все части программы, где идет работа с SQL в отдельный веб-сервис и для него отключить олицетворение, чтобы он нормально работал с ДБ. Этот вариант тоже зело геморный да и общая скорость работы пострадает.

Кто как решает подобные проблемы?
Расширение - какого типа? Плагины или свои асп страницы?

Вот такую тему выкладывал - работает идеально Создание и регистрация плагина на Execute и Retreive

Плюс выложите свои исходники - мож помогу чем.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 21.01.2009, 15:49   #3  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Цитата:
Сообщение от ZooY Посмотреть сообщение
то, что делается запросами нельзя заменить работой сервисов.
Интересно, что ж за запросы-то такие?
Старый 21.01.2009, 15:49   #4  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Да с плагинами то как раз проблем нет, там и с олицетворением все в порядке и работает он от имени Network Service... Проблема в том что это ASP.NET-страница.

Сам код выкладывать смысла нет, он работает, но только под админом, под обычным пользователем - проблема с правами доступа.
Старый 21.01.2009, 15:54   #5  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Гуревич Денис Посмотреть сообщение
Интересно, что ж за запросы-то такие?
Запросы пишут данные напрямую в базу CRM. Да, я знаю что так делать нельзя, но именно такого подхода требует задача.
Старый 21.01.2009, 16:22   #6  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Цитата:
Сообщение от ZooY Посмотреть сообщение
Запросы пишут данные напрямую в базу CRM. Да, я знаю что так делать нельзя, но именно такого подхода требует задача.
Что ж за задача такая, что не остается места старому доброму service.Create?
Старый 21.01.2009, 16:40   #7  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Lightbulb
Цитата:
Сообщение от ZooY Посмотреть сообщение
Всю голову себе уже сломал ища решение, подскажите кто знает...
CRM 4.0. Пишу расширение, которое должно напрямую работать с CRM'ной базой MS SQL. Ну а кроме того еще и с CRM-сервисами. К сожалению в данном конкретном расширении не обойтись без работы с SQL - то, что делается запросами нельзя заменить работой сервисов.
Возникла проблема. Под администратором все работает, но если запускать расширение от имени простого пользователя, то возникает ошибка - у простого пользователя нет доступа к SQL.
Можно подключить для расширения олицетворение. Но тогда наоборот есть доступ к SQL но сервисы работать отказываются.

Я вижу несколько путей решения.
1. Коннектиться к SQL с правами админа (или другого пользователя, имеющего доступ к SQL), с этим пока не разбирался, но думаю что это возможно. Но тогда где то как то нужно хранить логин и пароль админа.
2. Отключить для расширения олицетворение. Но тогда нужно иметь имя и пароль пользователя, для того, чтобы создать NetworkCredential при создании подключения к сервисам. Имя текущего пользователя можно было бы получить программно, но пароль... Получается что как и в варианте 1 нужно где то как то хранить логин и пароль.
3. Выделить все части программы, где идет работа с SQL в отдельный веб-сервис и для него отключить олицетворение, чтобы он нормально работал с ДБ. Этот вариант тоже зело геморный да и общая скорость работы пострадает.

Кто как решает подобные проблемы?
Строку подключения к базе можно хранить в вебконфиге.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 21.01.2009, 18:21   #8  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от a33ik Посмотреть сообщение
Строку подключения к базе можно хранить в вебконфиге.
А пользователь и пароль прописываются в строке подключения? Если да то можно, но пароль нельзя хранить в открытом виде, его нужно шифровать.
Старый 21.01.2009, 20:39   #9  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
А может проще пользователям прав на SQL сервере добавить? Чтобы было как у админа? Все проще, раз уж быдлокод практиковать решили? Права на доступ у пользователей, кстати, должны быть. Хотя возможно, что лишь для чтения.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 21.01.2009, 21:02   #10  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
А может проще пользователям прав на SQL сервере добавить? Чтобы было как у админа? Все проще, раз уж быдлокод практиковать решили? Права на доступ у пользователей, кстати, должны быть. Хотя возможно, что лишь для чтения.
"Быдлокод" - это грубо, мне больше нравиться определение "не поддерживаемый" и "не безопасный", что-нидь в этом роде

Прав на чтение у пользователей, кстати, нету - проверено.

На самом деле есть вариант еще проще - пользователя, под которым работает AppPool добавить в CRM с правами админа, а в приложении выключить олицетворение. Вопрос только в том, на сколько это безопасно?
Старый 22.01.2009, 09:23   #11  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
"Быдлокод" - это убогий и неправильный подход к решению задачи. Ансапорт может быть и элегантным...

Проверьте еще раз! Все пользователи, которым разрешено выполнение отчетов (по умолчанию все) входят в группу безопасности AD ReportingGroup, которой на SQL сервере разрешено выполнять SELECT против фильтрованных представлений и хранимых процедур. Но это если говорить о "поддерживаемом" функционале.

По мне так проще создать на SQL роль с правами на доступ к определенным таблицам и дать ее UserGroup чем какую-то IIS учетку в святая святых допускать. Впрочем, дело ваше. Задача и без того, на мой взгляд надумана, вы уж извините.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 22.01.2009, 15:27   #12  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Задача не надумана. Клиенту нужно иметь возможность менять валюту записей некоторых сущностей, как то: договоров, предложений, возможных сделок. Это жизненно необходимо.Причем это не прихоть одной конкретной фирмы, а специфика работы все области деятельности компании. Кроме как прямым доступом в SQL эту задачу не решить. И на мой взгляд неправильно называть подход к решению задачи "убогим и неправильным" если неизвестна сама задача.

А насчет прав пользователей на чтение из SQL вы правы, доступ есть, это я малость тупонул.

В моем случае одной никому, кроме администратора, не известной, с надежным паролем, записи даются некоторые права для доступа в CRM. Вы же предлагаете всем пользователям с их убогими паролями и стикерами с учетными данными на мониторе дать права на доступ к SQL. Ну даже и не знаю что лучше...

Последний раз редактировалось ZooY; 22.01.2009 в 15:37.
Старый 22.01.2009, 19:40   #13  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
По крайней мере будет понятно кого поломали и можно будет конкретного пользователя за взлом покарать! И все же, почему нельзя воспользоваться сервисом? Вот как сейчас вижу свойство :
Код:
quote.transactioncurrencyid Property
public Lookup transactioncurrencyid {get; set;}
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 22.01.2009, 20:15   #14  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Да, свойство такое есть и оно действительно get/set, но есть оно НО... Задание значения для этого свойства не дает никакого результата. Не выводиться никакой ошибки, просто значение не меняется. Set работает видимо только для создания записи.
Собственно задание этого свойства - это первое что я попробовал, когда начал решение задачи. Но увы...
Старый 22.01.2009, 22:28   #15  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Через веб интерфейс, мне помнится, оно нормально меняется для активных записей. Мне кажется вам следует искать ошибку в коде. Если пришлете пример, уверен, вместе мы разберемся!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 23.01.2009, 12:40   #16  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Ну например вот, простейший код для смены валюты в возможной сделке, только что написал его и проверил.

Код:
string _organizationName = "Rainbow";
string _crmServiceUrl = "http://192.168.1.1:5555/mscrmservices/2007/crmservice.asmx";
// GUID существующей активной возможной сделки
Guid _opportunityGuid = new Guid("{9133C5C5-26E9-DD11-9E20-0003FF25A266}");
// GUID валюты, доллара (у возможной сделки валюта - рубли)
Guid _usdCurrencyGuid = new Guid("{E05CCF2C-5D28-DD11-82AF-0003FF25A266}");

CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = _organizationName;
CrmService service = new CrmService();
service.Url = _crmServiceUrl;
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

opportunity opportunity = new opportunity();

opportunity.opportunityid = new Key();
opportunity.opportunityid.Value = _opportunityGuid;

// Заодно меняется имя, чтобы было видно, что изменение вообще прошло.
opportunity.name = DateTime.Now.ToShortTimeString();
opportunity.transactioncurrencyid = new Lookup();
	
opportunity.transactioncurrencyid.type = EntityName.transactioncurrency.ToString();
opportunity.transactioncurrencyid.Value = _usdCurrencyGuid;
		
service.Update(opportunity);

В результате имеем измененное имя и нетронутую валюту. Возможно конечно есть какие то тонкости смены валюты о которых я не знаю, и приведенного кода мало...
Старый 24.01.2009, 13:44   #17  
Ti1 is offline
Ti1
Участник
 
29 / 11 (1) +
Регистрация: 12.12.2008
Цитата:
Сообщение от ZooY Посмотреть сообщение
Ну например вот, простейший код для смены валюты в возможной сделке, только что написал его и проверил.

Код:
string _organizationName = "Rainbow";
string _crmServiceUrl = "http://192.168.1.1:5555/mscrmservices/2007/crmservice.asmx";
// GUID существующей активной возможной сделки
Guid _opportunityGuid = new Guid("{9133C5C5-26E9-DD11-9E20-0003FF25A266}");
// GUID валюты, доллара (у возможной сделки валюта - рубли)
Guid _usdCurrencyGuid = new Guid("{E05CCF2C-5D28-DD11-82AF-0003FF25A266}");

CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = _organizationName;
CrmService service = new CrmService();
service.Url = _crmServiceUrl;
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

opportunity opportunity = new opportunity();

opportunity.opportunityid = new Key();
opportunity.opportunityid.Value = _opportunityGuid;

// Заодно меняется имя, чтобы было видно, что изменение вообще прошло.
opportunity.name = DateTime.Now.ToShortTimeString();
opportunity.transactioncurrencyid = new Lookup();
	
opportunity.transactioncurrencyid.type = EntityName.transactioncurrency.ToString();
opportunity.transactioncurrencyid.Value = _usdCurrencyGuid;
		
service.Update(opportunity);

В результате имеем измененное имя и нетронутую валюту. Возможно конечно есть какие то тонкости смены валюты о которых я не знаю, и приведенного кода мало...
Попробуй так,
Lookup curencMy = new Lookup
{
Value = new Guid("E05CCF2C-5D28-DD11-82AF-0003FF25A266")
};

opportunity.transactioncurrencyid = curencMy;
Старый 24.01.2009, 21:19   #18  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Ti1, какая интересная конструкция, это из какого языка?
Надо полагать на C# это будет выглядеть так:
Код:
Lookup curencMy = new Lookup();
curencMy.Value = new Guid("E05CCF2C-5D28-DD11-82AF-0003FF25A266");
opportunity.transactioncurrencyid = curencMy;
Собственно не вижу разницы между моим вариантом и этим, но на всякий случай проверил, мало ли что... Так вот в любом случае не работает...
Старый 25.01.2009, 20:07   #19  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Блин, фигня какая-то. Сколько рылся в SDK ничего по этой тебе не нашел. Может быть вместе со сменой валюты надо значения еще каких-то полей менять? Поле Money оно же из 2, фактически, состоит: значение и значение в базовойвалюте. Буду на работе попробую. А если создавать объект программно, то связывание происходит нормально?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 26.01.2009, 01:31   #20  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Попробовал менять предполагаемый доход - результат нулевой.
Если создавать программно, то все нормально, устанавливается, та валюта, которая нужна.

Последний раз редактировалось ZooY; 26.01.2009 в 01:38.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мир CRM: Улучшение Dynamics CRM 4.0 производительности и безопасности данных под SQL Server 2008 Blog bot Dynamics CRM: Blogs 0 03.02.2009 02:07
Доступ к базе данных SQL из плагина ZooY Dynamics CRM: Разработка 11 04.11.2008 10:01
Мир CRM: Новости об одной из составляющих работы Dynamics CRM - Microsoft SQL Server Blog bot Dynamics CRM: Blogs 0 03.11.2008 06:18
ansle: Выпущен SQL Server 2008 Blog bot Dynamics CRM: Blogs 1 07.08.2008 10:34
Microsoft Dynamics CRM Team Blog: Accessing a SQL Database from a Microsoft Dynamics CRM Plug-in Blog bot Dynamics CRM: Blogs 0 14.07.2008 13:05

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

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

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