我试图在自定义工作流活动中使用optionset输入参数,所以我使用了以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Activities;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using Microsoft.Xrm.Sdk.Query;
using System.Globalization;
namespace ITWorx.VisitManagement.Workflows
{
public class FormatDate : CodeActivity
{
[Input("Preferred Language")]
[AttributeTarget("contact", "itworx_preferredlanguage")]
[Default("894330000")]
public InArgument<OptionSetValue> PreferredLanguage { get; set; }
protected override void Execute(CodeActivityContext context)
{
IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = context.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId);
int preferredLanguage = PreferredLanguage.Get<OptionSetValue>(context).Value;
}
}
}
但下面的行中会抛出异常:
int preferredLanguage = PreferredLanguage.Get<OptionSetValue>(context).Value;
例外: 的NullReferenceException {&#34;对象引用未设置为对象的实例。&#34;}
请告知
答案 0 :(得分:5)
Default("894330000")
属性不会在代码中生成默认值,它只会告诉工作流设计器将什么建议为值。当您将值设置为动态值时,根据您的实体记录(我假设您正在执行此操作),您必须在此时设置默认值。这在工作流程编辑器中应该是这样的:
您还可以修改代码,以确保如果传递null
值,它将使用您所需的默认值:
int preferredLanguage = PreferredLanguage.Get<OptionSetValue>(context) != null
? PreferredLanguage.Get<OptionSetValue>(context).Value
: 894330001;
答案 1 :(得分:0)
PreferredLanguage.Get<OptionSetValue>(context)
会产生OptionSetValue
个对象。
OptionSetValue
是一个类,因此可以为null。
我最好的猜测:对于给定的记录,字段itworx_preferredlanguage为null。尝试获取其.Value属性会抛出NullReferenceException
。