Как получить класс WorkFlowActivityBase в Visual Studio? - PullRequest
0 голосов
/ 24 июня 2019

Я создаю пользовательский рабочий процесс в Microsoft Dynamics CRM для автоматического обновления поля при сохранении записи.

Разработчик на форуме предоставил следующий исходный код;но он не отвечает на мои вопросы.

public class SalesRepActivity2 : WorkFlowActivityBase
{
    [Input("Sales Rep Name")]
    public InArgument<string> SalesRepName { get; set; }

    [Output("Sales Rep")]
    [ReferenceTarget("systemuser")]
    public OutArgument<EntityReference> SalesRep { 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 salesRepName = SalesRepName.Get(activityContext);

            if (string.IsNullOrWhiteSpace(salesRepName))
            {
                IsSuccess.Set(activityContext, false);
                Message.Set(activityContext, "Sales Rep Name not provided");
            }


            var QEsystemuser = new QueryExpression("systemuser");
            QEsystemuser.ColumnSet.AddColumns("salesrepname");
            QEsystemuser.Criteria.AddCondition("salesrepname", ConditionOperator.Equal, salesRepName);

            var results = CrmService.RetrieveMultiple(QEsystemuser);

            if (results == null || !results.Entities.Any())
            {
                IsSuccess.Set(activityContext, false);
                Message.Set(activityContext, "User with " + salesRepName + " not found");
                return;
            }

            if (results.Entities.Count > 1)
            {
                IsSuccess.Set(activityContext, false);
                Message.Set(activityContext, "Multiple users found with same name : " + salesRepName);
                return;
            }


            IsSuccess.Set(activityContext, true);
            SalesRep.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);
        }

    }

Я пытаюсь получить код для компиляции на моей машине.

Я установил следующие пакеты NuGet, которые позволили устранить большинство ошибок: Microsoft.Xrm.Sdk.Workflow.2015 Microsoft.Xrm.Sdk.2015

Но мой проект не может разрешить класс WorkFlowActivityBase.

Есть ли ссылка, которую я должен установить, или пакет NuGet, который я должен установить, чтобы решить эту проблему?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 24 июня 2019

Код, который вы разместили, не подходит для вас, потому что он интенсивно использует проприетарные объекты.Зив предоставил хорошую информацию о расширении класса CodeActivity, но я не рекомендую начинать там.Вместо этого прочитайте о том, как разрабатывать пользовательские действия рабочего процесса, и напишите рабочий процесс, используя базовые классы Microsoft, чтобы вы поняли, как они работают:
https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/workflow/workflow-extensions

Как только у вас появится некоторый опыт создания пользовательских рабочих процессов, иВы понимаете ограничения базовых объектов, затем возвращаетесь и реализуете что-то более причудливое.

0 голосов
/ 25 июня 2019

Здесь в примере из документации :

namespace Microsoft.Crm.Sdk.Samples
{
    public sealed class SimpleSdkActivity : CodeActivity
    {
        protected override void Execute(CodeActivityContext executionContext)
        {
            //Create the tracing service
            ITracingService tracingService = executionContext.GetExtension<ITracingService>();

            //Create the context
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
           ...
           var systemUsers = service.RetrieveMultiple(QEsystemuser)
       }
   }
}
0 голосов
/ 24 июня 2019

WorkFlowActivityBase - это пользовательский базовый класс, который реализует CodeActivity (System.Activities), который может написать каждый, это не официальный класс Dynamics. Йон может найти дюжину лжи, что в сети. По сути, вы должны использовать CodeActivity. вот как пример:

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/workflow/sample-create-custom-workflow-activity

...