Показать сообщение отдельно
Старый 14.09.2010, 20:14   #1  
Dicora is offline
Dicora
Участник
 
109 / 15 (1) ++
Регистрация: 12.07.2010
Странное исключение при создании (назначении) нового действия в CRM 4.0
Здравствуйте, пишу по такому вопросу, намаялся с этой ошибкой уже - ничего не получается.

Вот собственно сама ошибка, возникает она при создании любого действия (Звонок, Факс, Задача и т.д.) как напрямую из рабочей области так из объекта (Контакт, Интерес, Организация и т.д.) т.е. каждый раз при создании действия.



А вот лог этой ошибки из Trace:

X++:
[2010-09-14 19:32:57.0] Process: w3wp |Organization:2768dbac-48b7-4ee6-a3cc-de1d36049146 |Thread:    7 |Category: Exception |User: f7345b57-872e-4dda-ad61-c54343120c7a |Level: Error | CrmException..ctor
        at CrmException..ctor(String message, Int32 errorCode)
        at CrmSecurityException..ctor(String message, Int32 errorCode)
        at SecurityLibrary.CheckPrivilege(Guid user, Guid privilege, ExecutionContext context)
        at DefaultSecuritySqlGenerator.CheckPrivilege(Guid user, Guid organizationId, EntityMetadata entityMetadata, ExecutionContext context)
        at DefaultSecuritySqlGenerator.CreateSecuritySqlForRetrieveMultipleHelper(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
        at DefaultSecuritySqlGenerator.CreateSecuritySqlForRetrieveMultiple(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
        at SecurityExtension.CreateSecuritySql(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
        at SecurityExtension.AddSecuritySql(Guid user, EntityExpression entityExpression, ExecutionContext context)
        at SecurityExtension.PreRetrieveMultipleHandler(ExtensionEventArgs e)
        at SecurityExtension.PreRetrieveMultipleHandler(Object sender, ExtensionEventArgs e)
        at PreRetrieveMultipleEventHandler.Invoke(Object sender, ExtensionEventArgs e)
        at BusinessProcessObject.RetrieveMultiple(EntityExpression entityExpression, ExecutionContext context)
        at RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
        at RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
        at RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
        at RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
        at LogicalMethodInfo.Invoke(Object target, Object[] values)
        at InternalOperationPlugin.Execute(IPluginExecutionContext context)
        at PluginStep.Execute(PipelineExecutionContext context)
        at Pipeline.Execute(PipelineExecutionContext context)
        at MessageProcessor.Execute(PipelineExecutionContext context)
        at InternalMessageDispatcher.Execute(PipelineExecutionContext context)
        at ExternalMessageDispatcher.Execute(String messageName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, PropertyBag fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
        at RequestBase.Process(Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
        at RequestBase.Process(CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
        at CrmServiceInternal.Execute(RequestBase request, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
        at InProcessCrmService.Execute(Object request)
        at PlatformCommand.ExecuteInternal()
        at RetrieveMultipleCommand.Execute()
        at Queue.RetrieveQueueByObject(Guid entityId, EntityType entityType, QueryExpression query)
        at Queue.RetrieveQueueByObject(Guid entityId, EntityType entityType, String[] columns)
        at AssignRouteOnCreateUpdateListener.RouteEntity(Entity entity, LookupValue owner)
        at AssignRouteOnCreateUpdateListener.AssignRouteEntity(Entity entity, LookupValue owner)
        at AssignRouteOnCreateUpdateListener.HandlePostEvent(PlatformCommand command, Response response, Boolean wasForUpdate)
        at CommunicationListener.HandlePostEvent(PlatformCommand command, Response response)
        at PlatformCommand.ExecuteInternal()
        at UpdateCommand.Execute()
        at EntityProxy.Update(Boolean performDuplicateCheck)
        at EntityProxy.Update()
        at AppForm.HandleFormEventAssign(Boolean gridRefreshCallbackAdded)
        at AppForm.RaiseDataEvent(FormEventId eventId)
        at EndUserForm.Initialize(Entity entity)
        at CustomizableForm.Execute(Entity entity, String formType)
        at CustomizableForm.Execute(Entity entity)
        at BasicActivityPage.ConfigureForm()
        at FaxDetailPage.ConfigureForm()
        at AppUIPage.OnPreRender(EventArgs e)
        at Control.PreRenderRecursiveInternal()
        at Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
        at Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
        at Page.ProcessRequest()
        at Page.ProcessRequestWithNoAssert(HttpContext context)
        at Page.ProcessRequest(HttpContext context)
        at korusconsulting_activities_fax_edit_aspx.ProcessRequest(HttpContext context)  c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\fcc31ff6\e77f4ed8\App_Web_mu_dzo7_.0.cs
        at CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
        at HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
        at ApplicationStepManager.ResumeSteps(Exception error)
        at HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
        at HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
        at HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
        at ISAPIRuntime.ProcessRequest(IntPtr ecb, Int32 iWRType)
>Crm Exception: Message: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: a0cb17c4-ad26-df11-9050-003048be732d and PrivilegeId: b140e729-dfeb-4ba1-a33f-39ff830bac90, ErrorCode: -2147220960
[2010-09-14 19:32:57.0] Process: w3wp |Organization:2768dbac-48b7-4ee6-a3cc-de1d36049146 |Thread:    7 |Category: Platform |User: f7345b57-872e-4dda-ad61-c54343120c7a |Level: Error | MessageProcessor.Execute
>MessageProcessor fail to process message 'RetrieveMultiple' for 'queue'.
[2010-09-14 19:32:57.0] Process: w3wp |Organization:2768dbac-48b7-4ee6-a3cc-de1d36049146 |Thread:    7 |Category: Application |User: 00000000-0000-0000-0000-000000000000 |Level: Error | ErrorInformation.LogError
>MSCRM Error Report:
--------------------------------------------------------------------------------------------------------
Error:    .

Error Number: 0x80040220

Error Message: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: a0cb17c4-ad26-df11-9050-003048be732d and PrivilegeId: b140e729-dfeb-4ba1-a33f-39ff830bac90

Error Details: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: a0cb17c4-ad26-df11-9050-003048be732d and PrivilegeId: b140e729-dfeb-4ba1-a33f-39ff830bac90

Source File: Not available

Line Number: Not available

Request URL: http://crmsrv02:5555/OrgName/activities/fax/edit.aspx?id={D2E8B6A7-0FC0-DF11-9EE4-003048BE732D}

Stack Trace Info: [CrmSecurityException: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: a0cb17c4-ad26-df11-9050-003048be732d and PrivilegeId: b140e729-dfeb-4ba1-a33f-39ff830bac90]
    Microsoft.Crm.BusinessEntities.SecurityLibrary.CheckPrivilege(Guid user, Guid privilege, ExecutionContext context)
    Microsoft.Crm.BusinessEntities.SecurityExtension.DefaultSecuritySqlGenerator.CheckPrivilege(Guid user, Guid organizationId, EntityMetadata entityMetadata, ExecutionContext context)
    Microsoft.Crm.BusinessEntities.SecurityExtension.DefaultSecuritySqlGenerator.CreateSecuritySqlForRetrieveMultipleHelper(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
    Microsoft.Crm.BusinessEntities.SecurityExtension.DefaultSecuritySqlGenerator.CreateSecuritySqlForRetrieveMultiple(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
    Microsoft.Crm.BusinessEntities.SecurityExtension.CreateSecuritySql(Guid user, EntityMetadata entityMetadata, FilterExpression criteriaNodeForSecurityFilter, ExecutionContext context, Boolean noLock)
    Microsoft.Crm.BusinessEntities.SecurityExtension.AddSecuritySql(Guid user, EntityExpression entityExpression, ExecutionContext context)
    Microsoft.Crm.BusinessEntities.SecurityExtension.PreRetrieveMultipleHandler(ExtensionEventArgs e)
    Microsoft.Crm.BusinessEntities.SecurityExtension.PreRetrieveMultipleHandler(Object sender, ExtensionEventArgs e)
    Microsoft.Crm.BusinessEntities.BusinessProcessObject.PreRetrieveMultipleEventHandler.Invoke(Object sender, ExtensionEventArgs e)
    Microsoft.Crm.BusinessEntities.BusinessProcessObject.RetrieveMultiple(EntityExpression entityExpression, ExecutionContext context)

[TargetInvocationException:    .]
    System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    System.Web.Services.Protocols.LogicalMethodInfo.Invoke(Object target, Object[] values)
    Microsoft.Crm.Extensibility.InternalOperationPlugin.Execute(IPluginExecutionContext context)
    Microsoft.Crm.Extensibility.PluginStep.Execute(PipelineExecutionContext context)
    Microsoft.Crm.Extensibility.Pipeline.Execute(PipelineExecutionContext context)
    Microsoft.Crm.Extensibility.MessageProcessor.Execute(PipelineExecutionContext context)
    Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute(PipelineExecutionContext context)
    Microsoft.Crm.Extensibility.ExternalMessageDispatcher.Execute(String messageName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, PropertyBag fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
    Microsoft.Crm.Sdk.RequestBase.Process(Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
    Microsoft.Crm.Sdk.RequestBase.Process(CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
    Microsoft.Crm.Sdk.CrmServiceInternal.Execute(RequestBase request, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId)
    Microsoft.Crm.Sdk.InProcessCrmService.Execute(Object request)
    Microsoft.Crm.Application.Platform.ServiceCommands.PlatformCommand.ExecuteInternal()
    Microsoft.Crm.Application.Platform.ServiceCommands.RetrieveMultipleCommand.Execute()
    Microsoft.Crm.Application.Platform.Queue.RetrieveQueueByObject(Guid entityId, EntityType entityType, QueryExpression query)
    Microsoft.Crm.Application.Platform.Queue.RetrieveQueueByObject(Guid entityId, EntityType entityType, String[] columns)
    Microsoft.Crm.Application.Platform.CommunicationListeners.AssignRouteOnCreateUpdateListener.RouteEntity(Entity entity, LookupValue owner)
    Microsoft.Crm.Application.Platform.CommunicationListeners.AssignRouteOnCreateUpdateListener.AssignRouteEntity(Entity entity, LookupValue owner)
    Microsoft.Crm.Application.Platform.CommunicationListeners.AssignRouteOnCreateUpdateListener.HandlePostEvent(PlatformCommand command, Response response, Boolean wasForUpdate)
    Microsoft.Crm.Application.Platform.CommunicationListeners.CommunicationListener.HandlePostEvent(PlatformCommand command, Response response)
    Microsoft.Crm.Application.Platform.ServiceCommands.PlatformCommand.ExecuteInternal()
    Microsoft.Crm.Application.Platform.ServiceCommands.UpdateCommand.Execute()
    Microsoft.Crm.Application.Platform.EntityProxy.Update(Boolean performDuplicateCheck)
    Microsoft.Crm.Application.Platform.EntityProxy.Update()
    Microsoft.Crm.Application.Forms.AppForm.HandleFormEventAssign(Boolean gridRefreshCallbackAdded)
    Microsoft.Crm.Application.Forms.AppForm.RaiseDataEvent(FormEventId eventId)
Самое интересно что в интернете ПоГуглив эту ошибку нахожу не очень много информации по этой теме: - много мусора, но здесь есть правильная схема отладки:
http://mmcrm.ru/?p=1303

пошел по первому пути через SQL Management Studio получил привилегию с которой возникала ошибка.

Зашел в настройки ролей и поставил зеленый кружочек на чтение "Списки ожидания".

Оказывается есть такой баг, что если убрать чтение объекта Queue (Списки ожидания), то пользователи не смогу создавать задачи и назначать их другим пользователям, даже если права на назначение, создание, запись, удаление, добавление, добавление к, Общий доступ стоят на уровне "Организация".

В дополнение к функции Назначение в объекте Действия необходимо ставить права на Чтение объекта Списки ожидания.

Я ведь почему этот объект вообще изначально скрыл, т.к. посчитал что ненужная функциональность пользователям ник чему.... теперь придется системным (UNSPPORT-ным методом) из рабочей области убирать "Списки ожидания".

Кто поможет как это сделать??

Заранее спасибо!