реализовать пользовательский рабочий процесс в функциях Azure с временным триггером в динамике 365 в указанное время - PullRequest
0 голосов
/ 20 мая 2019

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

public class Email_Attachments_to_Regarding_Document_Store : CodeActivity
{
    protected override void Execute(CodeActivityContext executionContext)
    {
        ITracingService tracer = executionContext.GetExtension<ITracingService>();
        IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
        IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
        IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

        try
        {
            //Retrieve Email the workflow is running against from Dynamics
            Email email = service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, new ColumnSet(true)).ToEntity<Email>();

            //Retrieve the attachment mimes related to the email
            DataCollection<Entity> mimes = service.RetrieveMultiple(new QueryExpression
            {
                EntityName = ActivityMimeAttachment.EntityLogicalName,
                ColumnSet = new ColumnSet(true),
                Criteria =
                {
                    Conditions =
                    {
                        //Filter by related Email, 'objectid' is the related email.
                        new ConditionExpression("objectid", ConditionOperator.Equal, email.Id)
                    }
                }
            }).Entities;

            foreach(ActivityMimeAttachment mime in mimes)
            {
                Annotation note = new Annotation
                {
                    AnnotationId = Guid.NewGuid(),
                    DocumentBody = mime.Body,
                    IsDocument = true,
                    FileName = mime.FileName,
                    MimeType = mime.MimeType,
                    ObjectTypeCode = email.RegardingObjectId.LogicalName,
                    ObjectId = email.RegardingObjectId
                };
                note.IsDocument = true;
                service.Create(note);

            }
        }
        catch (Exception e)
        {
            throw new InvalidPluginExecutionException(e.Message);
        }

    }

Этот код копирует вложения электронной почты в заметки.Однако я не могу запустить этот код в указанное время дня.Приведенный ниже код является функцией Azure, которая подключается к динамике

 public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
    {
        log.Info($"C# Timer trigger function executed at: {DateTime.Now}");


        IServiceManagement<IOrganizationService> orgServiceManagement = 
            ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri("https://disco.crm11.dynamics.com/XRMServices/2011/Discovery.svc"));


        AuthenticationCredentials authCredentials = new AuthenticationCredentials();
        authCredentials.ClientCredentials.UserName.UserName = "xxx@s.co.uk";
        authCredentials.ClientCredentials.UserName.Password = "xxxxx";
        AuthenticationCredentials tokenCredentials = orgServiceManagement.Authenticate(authCredentials);

        //Retreive the service

        IOrganizationService service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);



    }
}

. Я хочу, чтобы функция Azure реализовала / запустила пользовательский рабочий процесс, но я не знаю, как

1 Ответ

0 голосов
/ 29 мая 2019

Надеюсь, это не слишком поздно. Когда мне нужно сделать что-то подобное, я создаю действие в динамике. Действие вызовет активность рабочего процесса.

Затем я вызываю действие из кода приложения-функции Azure следующим образом.

 OrganizationRequest req = new OrganizationRequest([insert action name here]);

 //execute the request
 OrganizationResponse response = organizationService.Execute(req);

Также я бы не стал вводить учетные данные в код Azure. Для этого лучше всего использовать Azure Key Vault. Вы можете сослаться на этот пост для способов сделать это. Аутентификация функции Azure в Dynamics CRM с использованием хранилища ключей Azure

...