CRM 2013: использование значения входного параметра набора параметров в настраиваемом действии рабочего процесса

Я пытался использовать входной параметр набора параметров в пользовательской активности рабочего процесса, поэтому я использовал следующий код:

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 {"Ссылка на объект не указывает на экземпляр объекта."}

пожалуйста, порекомендуйте


person Mostafa Moatassem    schedule 28.02.2014    source источник
comment
Не могли бы вы предоставить скриншот, на котором показан ваш рабочий процесс и как вы передаете параметры этому рабочему процессу?   -  person Andrew Butenko    schedule 01.03.2014


Ответы (2)


Атрибут Default("894330000") не генерирует значение по умолчанию в коде, он только сообщает разработчику рабочего процесса, что предложить в качестве значения. Когда вы устанавливаете значение в динамическое значение на основе вашей записи объекта (что, как я предполагаю, вы делаете), вы должны установить значение по умолчанию в это время. Вот как оно должно выглядеть в вашем редакторе рабочего процесса:

Редактор рабочего процесса настроен для предоставления значения по умолчанию

Вы также можете изменить свой код, чтобы гарантировать, что если значение null будет передано, оно будет использовать желаемое значение по умолчанию:

int preferredLanguage = PreferredLanguage.Get<OptionSetValue>(context) != null
            ? PreferredLanguage.Get<OptionSetValue>(context).Value
            : 894330001;
person Nicknow    schedule 01.03.2014

PreferredLanguage.Get<OptionSetValue>(context) дает объект OptionSetValue.

OptionSetValue является классом и поэтому может быть нулевым.

Мое лучшее предположение: поле itworx_preferredlanguage равно null для данной записи. Попытка получить его свойство .Value приводит к ошибке NullReferenceException.

person Henk van Boeijen    schedule 28.02.2014