我遇到的问题是我的插件没有显示所显示的异常(虽然它正在正常运行,因为它没有保存),但仅限于一种情况。这是场景:
我们有一个实体,每个业务部门只能存在一个这样的实体。我有插件来检测激活,分配和创建,它们都检查该块的拥有业务单元,如果它是重复的则抛出异常。
这适用于创建,激活和分配 WHEN 分配是通过按顶部的分配按钮或按所有者字段旁边的放大镜来调用的。下面的图片工作。
但是,如果用户在文本框中键入新的所有者名称并选择用户,则按下保存,调用assign插件,并阻止更改,但不会显示异常消息框。我使用了我们的内部日志记录系统,看到异常行被命中,但仍未显示。
Public Class OurEntityPreAssign
Implements IPlugin
Public Sub Execute(ByVal serviceProvider As System.IServiceProvider) Implements Microsoft.Xrm.Sdk.IPlugin.Execute
Dim context As IPluginExecutionContext = CType(serviceProvider.GetService(GetType(IPluginExecutionContext)), IPluginExecutionContext)
Dim factory As IOrganizationServiceFactory = CType(serviceProvider.GetService(GetType(Microsoft.Xrm.Sdk.IPluginExecutionContext)), IOrganizationServiceFactory)
Dim service As IOrganizationService = factory.CreateOrganizationService(context.UserId)
Dim entity As Entity
' Get Assignee
' Compare it to the PreImage
' If Same BUID, do nothing
' Else check for duplicate
ErrorLogUtil.WriteToFile("PreAssign") '--> This gets logged
If context.InputParameters.Contains("Assignee") AndAlso TypeOf context.InputParameters("Assignee") Is EntityReference Then
Dim assigneeER As EntityReference = CType(context.InputParameters("Assignee"), EntityReference)
entity = service.Retrieve(assigneeER.LogicalName, assigneeER.Id, New Microsoft.Xrm.Sdk.Query.ColumnSet(True))
Dim er As EntityReference = CType(entity.Attributes("businessunitid"), EntityReference)
Dim initialBusinessUnit As EntityReference = CType(context.PreEntityImages("PreImage").Attributes("owningbusinessunit"), EntityReference)
ErrorLogUtil.WriteToFile("initialBusinessUnitID:" & initialBusinessUnit.Id.ToString & ", assigneeER: " & er.Id.ToString)' -->These values are different, which means we need to check to see if the new one already has a record
If Not er.Id = initialBusinessUnit.Id Then
If Not er.Name = "Disabled Users" Then
If OurEntity.isDuplicate(er.Id, service, context.PreEntityImages("PreImage").LogicalName) Then
ErrorLogUtil.WriteToFile("ExceptionThrown") '-->This is being hit, which means that the throw call should also be hit, or some other error should appear
Throw New InvalidPluginExecutionException("My Message Here")
End If
End If
End If
End If
End Sub
End Class
就是这样,很明显,我已经看过this post并且它没有任何答案,这确实是一个不同的问题,因为提问者至少收到某种错误信息。
有没有其他人经历过这个?
答案 0 :(得分:0)
不确定为什么没有收到错误框。一种解决方案是在更新消息上注册您的插件。 当用户分配记录时,更新消息在分配消息之前触发。 您可以检查“Target”实体是否包含ownerid字段。如果确实运行了比较检查并抛出错误。
HTH
答案 1 :(得分:0)
您是否尝试过使用InvalidPluginExecutionException的构造函数来接受邮件和异常?
所以而不是:
Throw New InvalidPluginExecutionException("My Message Here")
类似的东西:
Throw New InvalidPluginExecutionException("My Message Here", new FaultException<OrganizationServiceFault>())