Dynamics crm 如何在MS Dynamics CRM中创建操作和调用操作?

Dynamics crm 如何在MS Dynamics CRM中创建操作和调用操作?,dynamics-crm,action,Dynamics Crm,Action,如何在MS Dynamics CRM中逐步创建操作并调用操作? 在MS Dynamics CRM中有多少种调用操作的方法? 操作代替工作流/插件有什么好处?操作 操作是Microsoft Dynamics 365中的一种进程类型。您可以直接从工作流或对话框调用操作,包括自定义操作,而无需编写代码!更多信息:从工作流或对话框调用自定义操作 还可以通过运行使用Microsoft Dynamics 365 Web服务的自定义代码来调用操作 您可以调用以下操作: 它可以从客户端和服务器端调用,支持单点方

如何在MS Dynamics CRM中逐步创建操作并调用操作? 在MS Dynamics CRM中有多少种调用操作的方法?
操作代替工作流/插件有什么好处?

操作

操作是Microsoft Dynamics 365中的一种进程类型。您可以直接从工作流或对话框调用操作,包括自定义操作,而无需编写代码!更多信息:从工作流或对话框调用自定义操作

还可以通过运行使用Microsoft Dynamics 365 Web服务的自定义代码来调用操作

您可以调用以下操作:

它可以从客户端和服务器端调用,支持单点方法(实现一次,在任何地方使用),例如:-从插件中执行的代码、自定义工作流和任何C#代码。 来自放置在应用程序中的命令,并使用JavaScript代码执行操作。 可以直接接收输入参数并返回输出参数,类似于组织级Web服务 与另一个使用Microsoft Dynamics 365 web服务的系统集成。 来自使用Microsoft Dynamics 365 web服务的自定义客户端应用程序

为什么要使用动作?

操作为组合业务逻辑提供了一系列可能性。在采取行动之前,实现业务流程的主要方式仅限于插件或自定义工作流活动。通过操作,您可以执行操作,例如创建、更新、删除、分配或执行操作。在内部,操作会创建自定义Dynamics 365消息。通过操作,您可以创建自定义消息(例如:submitquote、leadtoax等)。定义并激活操作后,开发人员可以像使用Microsoft Dynamics 365平台提供的任何其他消息一样使用该消息

假设您在报价表上有一个按钮,它将信息从CRM发送到另一个平台(例如,另一个平台是AX)

创建并激活自定义操作(设置>过程)

现在,您可以在某个事件(OnLoad、OnSave等)上从JavaScript调用此操作(ofs_submitquotetax)。在本例中,我从报价表单上的SUBMIT QUOTE按钮调用此操作,该按钮将报价信息发送到其他系统(AX)

e、 对于此事件,您可以注册并触发插件并接收输入参数(在本例中,我们将输入参数键作为EntityRef发送,其中发送entityName和entityId)

参数:操作唯一名称、输入参数(数组)、成功回调(函数)、错误回调(函数)、CRM基本URL(表单/视图上不需要)

每个输入参数对象应包含键、值和类型。类型由进程定义。类型枚举。EntityReference值应为包含id和entityType的对象

成功回调函数应该接受一个参数,该参数是一个输出参数数组,每个参数都包含键和值

您可以按以下方式编写插件并访问输入参数

protected override void ExecuteCrmPlugin(LocalPluginContext localContext)

    {   // Register the plugin in PreValidation stage as this plugin will trigger from Javascript (Action)

        if (localContext == null)

        {

            throw new InvalidPluginExecutionException("localContext");

        }



        IPluginExecutionContext context = localContext.PluginExecutionContext;

        if (context.Depth > 1) { return; }



        IOrganizationService service = localContext.OrganizationService;

        ITracingService trace = localContext.TracingService;



        Entity quoteEntity = null;

        EntityReference qEntity = null;



        if (context.InputParameters.Contains("EntityRef") && context.InputParameters["EntityRef"] is EntityReference)

        {

            //if (context.PrimaryEntityName.ToLower() != "quote") { return; }

             qEntity = context.InputParameters["EntityRef"] as EntityReference;



            if (qEntity.LogicalName.ToLower().Equals("quote"))

            {                 

                try

                {

                    quoteEntity = service.Retrieve("quote", qEntity.Id, new ColumnSet("ofs_parentaccountid", "quotenumber", "revisionnumber", "ofs_well"));

              // Execute Your logic

                }

                catch (Exception ex)

                {

                    trace.Trace(string.Format("Exception Quote_Create_AXIntegration Plugin: {0}", new[] { ex.ToString() }));

                }

            }

        }

        else { return; }

    }
注册你的插件,然后以下面的方式注册步骤,你可以在下面的屏幕截图“ofs_submitquoteax”中看到你的自定义消息名


Ref:

你看过文档了吗?:D它很好地回答了你所有的问题是的,但不明白..事实上我是ms crm的新手…@SRM你能不能把它标记为已解决。这也会帮助其他人。你能给我一个小例子吗(比如我显示动作触发器的内部警报框)如何通过插件调用操作?什么是多选查找?如何在Dynamics CRM中创建多选查找?
protected override void ExecuteCrmPlugin(LocalPluginContext localContext)

    {   // Register the plugin in PreValidation stage as this plugin will trigger from Javascript (Action)

        if (localContext == null)

        {

            throw new InvalidPluginExecutionException("localContext");

        }



        IPluginExecutionContext context = localContext.PluginExecutionContext;

        if (context.Depth > 1) { return; }



        IOrganizationService service = localContext.OrganizationService;

        ITracingService trace = localContext.TracingService;



        Entity quoteEntity = null;

        EntityReference qEntity = null;



        if (context.InputParameters.Contains("EntityRef") && context.InputParameters["EntityRef"] is EntityReference)

        {

            //if (context.PrimaryEntityName.ToLower() != "quote") { return; }

             qEntity = context.InputParameters["EntityRef"] as EntityReference;



            if (qEntity.LogicalName.ToLower().Equals("quote"))

            {                 

                try

                {

                    quoteEntity = service.Retrieve("quote", qEntity.Id, new ColumnSet("ofs_parentaccountid", "quotenumber", "revisionnumber", "ofs_well"));

              // Execute Your logic

                }

                catch (Exception ex)

                {

                    trace.Trace(string.Format("Exception Quote_Create_AXIntegration Plugin: {0}", new[] { ex.ToString() }));

                }

            }

        }

        else { return; }

    }