CRM 2013:在自定义工作流活动中使用选项集输入参数的值

时间:2014-02-28 19:18:54

标签: c# dynamics-crm crm dynamics-crm-2013

我试图在自定义工作流活动中使用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;}

请告知

2 个答案:

答案 0 :(得分:5)

Default("894330000")属性不会在代码中生成默认值,它只会告诉工作流设计器将什么建议为值。当您将值设置为动态值时,根据您的实体记录(我假设您正在执行此操作),您必须在此时设置默认值。这在工作流程编辑器中应该是这样的:

Workflow Editor Configured to provide a Default Value

您还可以修改代码,以确保如果传递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