Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Ошибка в диаграммах (charts) при использовании группировки по дате
Запись от Артем Enot Грунин размещена 23.08.2013 в 11:21
Недавно я столкнулся с ошибкой при отображении некоторых (в том числе стандартных!) диаграмм:
Сперва я грешил на кривые запросы или раздачу прав доступа, но позже выяснилось, что проблема наблюдается только на производственном сервере. Я отловил запрос, который запускается при прорисовке диаграммы при помощи SQL Profiler и запустил его выполнение вручную. Результат превзошел все мои ожидания:
Старая добрая ошибка от хранимых CLR процедур, о которой я уже писал недавно: Проблемы с SSIS после обновлений .NET. Вы могли бы спросить, причем же тут CLR? Ответ хранится в запросе к базе: в нем используются CLR функции, например fn_GetFiscalPeriodAndYearCLR. Однако радоваться было рано! Это оказалась не известная мне проблема несовпадения версий, так как в GAC нет сборки microsoft.crm.sqlclr.helper! Проблема уходит глубоко в неисследованную мной тему безопасности SQL Server: http://support.microsoft.com/kb/918040.
Решение заключается в том чтобы прописать базе корректного dbowner и сделать ее trustworthy. Сразу скажу, что владелец и так был вполне себе корректный, и все рабочие базы ни разу не trustworthy. Как бы там ни было, приведенный в статье базы знаний запрос решил проблему:
Попытка выключить trustworthy приведет к возвращению ошибки
Сперва я грешил на кривые запросы или раздачу прав доступа, но позже выяснилось, что проблема наблюдается только на производственном сервере. Я отловил запрос, который запускается при прорисовке диаграммы при помощи SQL Profiler и запустил его выполнение вручную. Результат превзошел все мои ожидания:
Цитата:
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65536. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:
System.IO.FileLoadException: Could not load file or assembly 'microsoft.crm.sqlclr.helper, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Exception from HRESULT: 0x80FC80F1
System.IO.FileLoadException:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
System.IO.FileLoadException: Could not load file or assembly 'microsoft.crm.sqlclr.helper, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Exception from HRESULT: 0x80FC80F1
System.IO.FileLoadException:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
Решение заключается в том чтобы прописать базе корректного dbowner и сделать ее trustworthy. Сразу скажу, что владелец и так был вполне себе корректный, и все рабочие базы ни разу не trustworthy. Как бы там ни было, приведенный в статье базы знаний запрос решил проблему:
X++:
ALTER DATABASE Org_MSCRM SET trustworthy ON
USE Org_MSCRM
EXEC sp_changedbowner 'DOMAIN\login'
Всего комментариев 0