Показать сообщение отдельно
Старый 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.