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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.10.2008, 00:25   #1  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Доступ к базе данных SQL из плагина
CRM 4.0
В плагине нужно получить данные, но не с помощью CrmService, а с помощью обращения к базе SQL. Для подключения к базе нужно как минимум знать ее имя.
По началу сделал так:
Код:
...
string databaseName = сontext.OrganizationName + "_MSCRM";
string connectionString = 
    "Data Source=localhost;Initial Catalog=" + databaseName +
    ";Integrated Security=SSPI";
...
Думал что для всех баз CRM имя базы - есть имя организации плюс суфикс _MSCRM. Но в одной конторе столкнулся с проблемой: имя, используемое в имени базы данных не совпалает с именем компании.
Собственно вопрос: можно ли каким нибудь образом получить имя базы данных CRM?
Будь вместо плагина обычная ASP.NET страничка, я бы не парился и вбил имя базы в web.config, а вот что делать с плагином - ума не приложу...
Старый 31.10.2008, 06:30   #2  
Bakai Madybaev is offline
Bakai Madybaev
Участник
 
201 / 16 (1) ++
Регистрация: 22.04.2008
При регистрации плагина можно использовать поля Unsecure / Secure Configuration, куда можно записывать настройки (можно в виде xml).
http://blogs.msdn.com/crm/archive/20...-plug-ins.aspx
Старый 31.10.2008, 08:14   #3  
Артем 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
А чем плох CrmService?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 31.10.2008, 10:37   #4  
Alir is offline
Alir
Участник
 
47 / 14 (1) ++
Регистрация: 02.08.2008
Адрес: Санкт-Петербург
ZooY
В плагине же можно писать любой код .NET Framework'a. Соотвественно можно погуглить код, где идет обращение к серверу и скачиание всех имен баз. Соотвестевенно потом разбираешь.

Я делал еще проще (мож у тебя есть возможность сделать также). Сделал для плагина xml-ый конфиг и туда вписал имя базы. В коде считал его и вперед.


Артем Enot Грунин
Ну как минимум тем, что не умеет с датой и временем работать, есть ограничения на Order, да и вообще не всякий sql запрос опишешь в объектам CrmServic'a, а иногда и легче sql написать, нежели создавать тучу объектов...
За это сообщение автора поблагодарили: ZooY (1).
Старый 31.10.2008, 11:14   #5  
Артем 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
Что там что там с датой и временем? Какие ограничения на Order?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 31.10.2008, 11:48   #6  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
У меня SQL-запрос, который ищет максимальное значение номера, с учетом того, что номер содержит префикс и некоторое количество нулей перед самим числом. Не думаю что такой запрос можно сделать для CrmService (только если выбрать все записи, а потом перебирать их по одной ища нужное, но это не вариант).

С XMLным конфигом идея хорошая, в крайнем случае придется пользовать ее.
Но появилась мысля о реестре, там нет имени базы? И вообще на сколько это правильно использовать реестр для получения например имени сервера CRM и других данных?
Старый 31.10.2008, 14:18   #7  
Alir is offline
Alir
Участник
 
47 / 14 (1) ++
Регистрация: 02.08.2008
Адрес: Санкт-Петербург
Артем Enot Грунин с датой, на сколько мне известно, при работе с CrmService нельзя проделывать всякие арифметичемкие операции с конкретными частями времени из даты, делить дату на части (DatePart и т.д.), а используя Order нельзя упорядочить данные по значениям связанной записи.

ZooY
Хм.. Имхо в реестре такие вещи не храняться, а если и да, то как-то это неочень и будет как-то неординарно . Но может была такая практика...
Старый 31.10.2008, 14:36   #8  
Артем 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
А не проще хранить значения счетчиков в отдельной сущности? Не вижу принципиальной разницы в переборе всей базы и переборе всей базы с последующим поиском максимального. Если этот вариант не нравится сделайте запрос на выборку нужного атрибута с сортировкой от максимального к минимальному и укажите, что нужно вернуть только 1 запись.
Читайте SDK и откроете для себя много нового. Рекомендую изучить цепочку RetrieveMultiple, QueryExpression, PageInfo.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 31.10.2008, 15:23   #9  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Если этот вариант не нравится сделайте запрос на выборку нужного атрибута с сортировкой от максимального к минимальному и укажите, что нужно вернуть только 1 запись.
Читайте SDK и откроете для себя много нового. Рекомендую изучить цепочку RetrieveMultiple, QueryExpression, PageInfo.
Как RetrieveMultiple отсортирует следующий набор значений:
FE-1
FE-3
FE-10
Полагаю, что результатом будет:
FE-3
FE-1
FE-10
как и положено при сравнее строк. И результат очевидно бует неправильным.
Но собственно мы отклонились от темы. Вопрос не в том, как лучше организовать нумерацию, а в том как узнать имя базы данных CRM.
Старый 01.11.2008, 09:29   #10  
Артем 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
Эти настройки хранятся в базе MSCRM_CONFIG. Таблица Organization. Если есть необходимость сделать универсально, можно читать отсюда.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 03.11.2008, 13:50   #11  
ZooY is offline
ZooY
Участник
Аватар для ZooY
 
379 / 46 (2) +++
Регистрация: 24.06.2008
Адрес: Россия, Москва
Да, таблицу Organization я нашел. Возникает только вопрос - от чьего имени выполняется плагин. Попробовал обратиться к базе MSCRM_CONFIG из простого ASP.NET-расширения - не все пользователи могут читать эту базу. Попробовал создать плагин. Вроде бы при инициализации плагина простым пользователем доступ к базе есть, но хотелось бы все таки уточнить...
Старый 04.11.2008, 10:01   #12  
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
->
Цитата:
Сообщение от ZooY Посмотреть сообщение
CRM 4.0
В плагине нужно получить данные, но не с помощью CrmService, а с помощью обращения к базе SQL. Для подключения к базе нужно как минимум знать ее имя.
По началу сделал так:
Код:
...
string databaseName = сontext.OrganizationName + "_MSCRM";
string connectionString = 
    "Data Source=localhost;Initial Catalog=" + databaseName +
    ";Integrated Security=SSPI";
...
Думал что для всех баз CRM имя базы - есть имя организации плюс суфикс _MSCRM. Но в одной конторе столкнулся с проблемой: имя, используемое в имени базы данных не совпалает с именем компании.
Собственно вопрос: можно ли каким нибудь образом получить имя базы данных CRM?
Будь вместо плагина обычная ASP.NET страничка, я бы не парился и вбил имя базы в web.config, а вот что делать с плагином - ума не приложу...
Тоже сталктвался с такой проблемой. Решил её так:

Код:
RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
						
//Retreive MSCRM DataBase connection string
						
string configDBConnectionString = key.GetValue("configdb").ToString();
						
//next part - i connect to config db and retreive data to config connection to client db
						
DataSet clientDBConnectionData = new DataSet();
						
using(SqlConnection connection = new SqlConnection(configDBConnectionString))
{
        connection.Open();
							
        using (SqlCommand cmd = new SqlCommand())
	{
		cmd.Connection = connection;
		cmd.CommandType = CommandType.Text;
		cmd.CommandText = string.Format("Select SqlServerName, DatabaseName From Organization Where UniqueName = '{0}'", crmOrganizationName);
								
		using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
			adapter.Fill(clientDBConnectionData);
         }
							
	connection.Close();
}
						
if (clientDBConnectionData.Tables.Count == 0 || clientDBConnectionData.Tables[0].Rows.Count == 0)
	throw new Exception("Check your config parameters!");

string connectionString = string.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI",
								new object[] { (string)clientDBConnectionData.Tables[0].Rows[0]["SqlServerName"], 
											   (string)clientDBConnectionData.Tables[0].Rows[0]["DatabaseName"]});
В результате - строка подключения к требуемой клиентской базе. Из параметров - собственно название организации - crmOrganizationName.

PS харкодинг localhost-a - не хороший стиль, потому что Application Server и DB Server - могут быть разнесены.

Последний раз редактировалось a33ik; 04.11.2008 в 10:10.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Доступ к SQL ZooY Dynamics CRM: Разработка 30 05.02.2009 00:50
Мир CRM: Улучшение Dynamics CRM 4.0 производительности и безопасности данных под SQL Server 2008 Blog bot Dynamics CRM: Blogs 0 03.02.2009 02:07
Мир 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, время: 00:26.