创建自定义流程操作

如果要在系统中实现一系列命令的自动化,请使用自定义流程操作。 自定义流程操作扩展可供开发人员表达业务流程的词汇。 自定义流程操作使用系统提供的核心动词(例如创建、更新、删除和分派),创建更有表现力的动词,例如批准、升级、传送或日程安排。 如果业务流程的定义发生变化,并非开发人员用户可以编辑自定义流程操作,从而无需更改代码。

备注

如果要写入插件以实现自定义流程操作的逻辑(而不是使用工作流设计器),您应该改用自定义 API。 详细信息:比较自定义流程操作和自定义 API

创建自定义流程操作

重要提示

如果要创建将包括在要分发的解决方案中的自定义流程操作,请在该解决方案的上下文中创建它。 转到设置>解决方案,并找到要包括此操作的非托管解决方案。 然后,在菜单栏中选择新建>流程。 这将确保与操作的名称关联的自定义前缀将与解决方案中的其他组件保持一致。 在创建了操作之后,将无法更改前缀。

与工作流程一样,自定义流程操作在创建流程对话框中具有以下属性:

  • 流程名称

    在输入一个唯一流程名称后,将通过移除流程名称中的所有空格或特殊字符为其创建唯一名称。

  • 类别

    此属性确立这是一个操作流程。 保存流程后,就不能更改此属性。

  • 表

    通过操作流程,可以选择一个表来为工作流提供上下文(就像其他类型的流程一样),但您还可以按需要选择无(全局)。 如果您的操作不需要特定表的上下文,请使用此属性。 保存流程后,就不能更改此属性。

  • 类型

    使用此属性选择是从头开始创建新的自定义流程操作,还是从现有模板开始。

与工作流流程不同,不需要设置以下选项:

  • 启动时间:当代码调用为操作生成的消息时,启动操作。

  • 范围:操作始终在发出调用的用户的上下文中运行。

  • 在后台运行:操作始终是实时工作流。

自定义流程操作还有一些工作流程没有的内容 - 输入参数和输出参数。

备注

您可以从工作流启用自定义流程操作,而无需编写代码。 详细信息:从工作流中调用自定义流程操作

编辑自定义流程操作

在编辑自定义流程操作之前,必须将其停用。

您可以编辑作为非托管解决方案一部分创建的或包括在组织中安装的解决方案中的自定义流程操作。 如果解决方案是托管解决方案,则可能无法对其编辑。 解决方案发布商可以选择编辑托管属性,以便可以编辑随托管解决方案安装的操作。

保存操作时,将根据流程名称生成一个唯一名称。 该唯一名称有根据解决方案发布商添加的自定义前缀。 这是将开发人员将在其代码中使用的消息的名称。

在编辑操作时,可以使用以下选项:

  • 流程名称

    在创建了流程并根据流程名称生成了唯一名称之后,可以编辑流程名称。 您可能需要应用命名约定,以便更轻松地查找特定流程。

  • 唯一名称

    保存操作时,将根据流程名称生成一个唯一名称。 该唯一名称有根据解决方案发布商添加的自定义前缀。 这是将开发人员将在其代码中使用的消息的名称。 如果流程已激活,并且已实施的代码将使用唯一名称调用操作,则不能更改此名称。

    重要提示

    在激活操作并编写代码以使用唯一名称之后,更改唯一名称的同时必须同时更改引用该名称的代码。

  • 启用回滚

    通常,如果支持事务的流程的任何部分失败,则将“撤销(即回滚)整个操作。 此情况有一些例外。 开发人员在自定义流程操作引发的代码中执行的一些操作可能不支持事务。 例如,代码执行操作所在的其他系统超出了事务的范围。 在应用中运行的操作无法将这些操作回滚。 平台中的有些消息不支持事务。 但是,您通过操作的用户界面就能做的任何事情都将支持事务。 实时工作流中的所有操作都会在事务中得到考虑,但是,有了操作,您可以选择放弃此操作。

    您应向要使用此消息的开发人员咨询,确定此消息是否必须在事务中。 通常,如果业务流程执行的操作仅在所有操作都成功完成的情况下才有意义,则操作应在事务中。 典型的例子是在两个银行帐户间转帐。 如果您从一个帐户中提款,就必须在另一个帐户中存款。 如果任一事务失败,则必然两种事务都失败。

    备注

    如果自定义流程操作是直接从工作流调用的,则无法启用回滚。 如果操作是 Power Apps Web 服务消息触发的,则可启用回滚。

  • 激活类型

    像所有流程一样,您可以激活流程作为模板,然后将其用作遵循类似模式的流程的高级起点。

  • 定义流程参数

    在此区域中,您将指定操作预期开始的任何数据,以及要从操作中传出的数据。 更多信息:定义进程参数

  • 添加阶段和步骤

    与其他流程一样,您要指定要执行的操作以及执行操作的时间。 更多信息:添加阶段和步骤

定义流程参数

开发人员使用消息时,他们可以用一些能传递到消息中的数据开始。 例如,要创建新的案例行,就可能会有将作为输入参数传递的案例标题值。

消息完成时,开发人员可能需要在其代码中将一些可能发生更改或由消息生成的数据传递给其他操作。 此数据是输出参数。

输入和输出参数都必须有名称、类型以及一些有关是否始终需要参数的信息。 您还可以提供说明。

消息的名称以及有关所有流程参数的信息表示消息的签名。 在激活自定义流程操作并将其用于代码中之后,就不能更改该签名。 更改该签名将导致使用消息的代码失败。 对此的唯一例外可能是:更改其中的一个参数,使其成为非始终必需的参数。

通过对参数排序或者上下移动更改参数顺序不会造成差别,因为参数是用名称标识的,而不是顺序。 更改描述也不会破坏使用消息的代码。

操作流程参数类型

下表介绍了操作流程类型参数。

类型 说明
布尔 true 值或 false 值。
日期时间 存储日期和时间信息的值。
十进制 有小数精度的数值。 在精度极其重要的情况下使用。
表 指定表的行。 在选择表时,将启用下拉列表,使您可以选择表类型。
entityCollection 表行的集合。
entityReference 一个对象,包含唯一标识它的表行的名称、ID 和类型。 在选择 entityReference 时,将启用下拉列表,使您可以选择表类型。
Float 有小数精度的数值。 在数据来自不绝对精确的度量时使用。
整型 整数。
金额 存储与金额有关的数据的值。
选择列表 代表 OptionSet 属性的一个选项的值。
String 文本值。

备注

entityCollection 参数值不能在条件或操作的用户界面中设置。 这些参数是提供给开发人员在自定义代码中使用的。 详细信息:创建自己的消息

添加阶段和步骤

自定义流程操作是一种与实时工作流非常相似的流程类型。 可以在实时工作流中使用的所有步骤都可在操作中使用。 有关可以用于实时工作流和操作的步骤的信息,请参阅工作流阶段和步骤。

除了可用于实时工作流的步骤,操作还有分派值步骤。 在操作中,这些步骤仅能用于设置输出参数。 可以使用窗体助理将输出参数设置为特定值,但设置的值更可能来自于对其运行操作的行、与具有多对一关系的行相关的行、在之前步骤中创建的行,也可以设置属于流程本身的值。

托管属性

自定义流程操作具有两个相关的托管属性

可自定义

Is Customizable 受管属性控制是否允许安装包含自定义流程操作的受管解决方案的用户编辑或删除该操作。 如果希望自定义流程操作包括在托管解决方案中时可进行编辑或删除,应该将此属性设置为 true。

允许其他发布者执行自定义处理步骤

允许其他发布者执行自定义处理步骤托管属性控制第三方插件开发人员是否可以对自定义流程操作创建的消息注册插件步骤。 如果这设置为 true,此消息上任何人注册的插件都将运行,并可以修改自定义流程操作的行为。 如果为 false,则只运行相同解决方案发布商在解决方案内注册的插件步骤。

后续步骤

调用工作流中的自定义流程操作