我有一个工作流,它基于一个名为“ QuoteWerks Prepared by”的字段来重新分配所有者。
我似乎无法在StackOverflow中发布屏幕截图,所以请在https://community.dynamics.com/crm/f/117/p/358168/941269#941269
的另一个论坛中查看我的屏幕截图。“ KED365”步骤是自定义工作流程活动,并使用下面的代码。
此步骤的“设置属性”部分将字段设置为“ QuoteWerks销售代表”。
下一步,将记录分配给上一步中返回的用户。
但是,工作流程突然停止工作。我收到以下错误: 没有提供所有者。 插件跟踪:
[Microsoft.Xrm.Sdk.Workflow:Microsoft.Xrm.Sdk.Workflow.Activities.AssignEntity] [Microsoft.Xrm.Sdk.Workflow(9.0.0.0):Microsoft.Xrm.Sdk.Workflow.Activities.AssignEntity]
错误消息:
未处理的异常: 异常类型:System.ArgumentException 消息:未提供所有者
-结束堆栈跟踪-
异常类型:Microsoft.Crm.CrmArgumentException 消息:未提供所有者 在Microsoft.Crm.Workflow.Services.AssignActivityService.Execute(ActivityContext执行上下文,AssignEntity AssignEntity) 在System.Activities.CodeActivity.InternalExecute处(ActivityInstance实例,ActivityExecutor执行程序,BookmarkManager书签管理器) 在System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor执行程序,BookmarkManager书签管理器,位置resultLocation) -结束堆栈跟踪-
我看到错误提示“未提供所有者”,但是我无法弄清为什么突然停止工作或如何修复它。直到大约一周前,工作流程都工作良好。解决此问题的任何帮助将不胜感激。
谢谢!
namespace KED365.Workflows
{
using System;
using System.Activities;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using Microsoft.Xrm.Sdk.Query;
using System.Linq;
public sealed class GetUserByFullName : WorkFlowActivityBase
{
[Input("User Full Name")]
public InArgument<string> UserFullName { get; set; }
[Output("Prepared By")]
[ReferenceTarget("systemuser")]
public OutArgument<EntityReference> PreparedBy { get; set; }
[Output("IsSuccess")]
public OutArgument<bool> IsSuccess { get; set; }
[Output("Message")]
public OutArgument<string> Message { get; set; }
protected override void Execute(CodeActivityContext activityContext,
IWorkflowContext workflowContext, IOrganizationService CrmService,
ITracingService trace)
{
try
{
string userName = UserFullName.Get(activityContext);
if (string.IsNullOrWhiteSpace(userName))
{
IsSuccess.Set(activityContext, false);
Message.Set(activityContext, "User's Full Name is not provided");
return;
}
var QEsystemuser = new QueryExpression("systemuser");
QEsystemuser.ColumnSet.AddColumns("fullname");
QEsystemuser.Criteria.AddCondition("fullname", ConditionOperator.Equal,
userName);
var results = CrmService.RetrieveMultiple(QEsystemuser);
if (results == null || !results.Entities.Any())
{
IsSuccess.Set(activityContext, false);
Message.Set(activityContext, "User with " + userName + " not found") ;
return;
}
if (results.Entities.Count > 1)
{
IsSuccess.Set(activityContext, false);
Message.Set(activityContext, "Multiple users found with same name : " +
userName);
return;
}
(activityContext, true);
PreparedBy.Set(activityContext,
results.Entities.Single().ToEntityReference());
}
catch (Exception ex)
{
IsSuccess.Set(activityContext, false);
Message.Set(activityContext, "An error occurred trying to find user : " +
ex.Message);
}
}
}
}
--------------