Цитата:
Сообщение от
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 - могут быть разнесены.