Dialog中的变量和输入参数

在以前的博客Dialog Part 1和Dialog Part 2中,我们讲述了Microsoft Dynamics CRM 2011中的新功能Dialog。Dialog支持变量(Variables)和输入参数(Input Arguments)。在这篇博客中,我将介绍他们是什么,如何使用它们。Dialog编辑器中有一个区域可以定义变量和输入参数,如下图所示:

 

 图1:变量和输入参数区域

 

什么是变量?

变量被用来在Dialog运行时提供临时数据存储。你可以在图1中的变量区域点击Add来创建一个新的变量。每个变量都有名称、类型和值。当创建一个变量时,你按照下图来填入相应值。在这里,我们创建了一个变量叫做CustomerName, 类型是单行文本,默认值为John Doe。默认值是这个变量最初的值。

 

 

 

 图2:创建新变量

 

什么是输入参数?

输入参数和子Dialog(Child Dialog)一起使用。当你希望从一个Dialog转向控制另一个Dialog,这时就可以使用子Dialog。之前运行的Dialog叫做父Dialog(Parent Dialog),得到控制的Dialog叫做子Dialog。考虑这样一种情况,你希望创建多个Dialog,他们的最后几步都是相同的。这时,最好为这些相同步骤创建一个单独的子Dialog。这样,如果你要修改这些相同的步骤,就不必去修改多个Dialog。你只需要修改这个子Dialog而不需要修改父Dialog。在父子Dialog之间传递控制时,可能需要传递数据,这就是通过输入参数来实现的。在创建Dialog时,你可以在Available to run区域中来指定这是一个子Dialog,如图1所示:

 · 勾选As a child process

· 去掉As an on-demand process

这样,你就可以创建输入参数来指定希望从父Dialog得到什么数据。可以点击图1中Input Arguments section的区域的Add链接来创建输入参数。跟变量一样,输入参数也有名称、类型和值。配置输入参数属性的用户界面和创建变量的界面很相似。对于输入参数来说,当父Dialog没有指定任何值时,子Dialog就会使用默认值。

 

在创建父Dialog时,你需要将它连接到子Dialog。你可以在编辑器中点击Link Child Dialog步骤来实现。你可以查找到子Dialog进行链接,如图3所示:

 

图3:链接到子Dialog

当然,你可以点击Set Properties按钮来设置链接的属性(图3所示)。在设置属性UI中,你可以为每个输入参数设置一个值。你也可以使用动态值,例如一个变量或者dialog运行在的CRM记录的一个属性。唯一需要注意的是,两种数据类型必须相同(或者能够转换)。图4是链接属性的一个截图。在这里输入参数Name(显示为String_Name)是从当前account所关联的Primary contact的Full Name属性传递来,输入参数Age是从用户对于Request for age的输入传递来,输入参数DiscountRate是从父dialog中定义的变量DiscountRate的值传递而来。

 

 图4:设置子dialog的属性

 

其他注意事项

除了使用目的,变量和输入参数还有一些共通的特性。这一小节,我将介绍一些他们之间共通的特性。之前曾提到过,每一个变量/输入参数都有名称、类型和值。

· 名称:在一个dialog中,一个变量的名称必须是唯一的。而且,名称不能设为变量或者输入参数。名称的长度限制在1000个字符以内,仅能包括字母、数字或下划线“_”。

· 类型:变量和输入参数支持三种类型:单行文本、整数和浮点数。整数支持的范围为2,147,483,648 至 2,147,483,647;浮点数支持的范围为-100,000,000,000 至 100,000,000,000。

· :创建变量时,你可以给它设置一个默认值。你可以将其值更改为一些操作的结果,例如Append With (若变量的类型为单行文本),或者更改为运行dialog的用户所输入的值。你可以在需要赋值的时候使用/引用变量的值:创建/更新记录或显示提示信息。当给变量或输入参数赋值时,其数据类型必须和变量或输入参数的数据类型兼容。下表列出了可能的组合:

变量或输入参数的类型

所赋值的类型

Single Line of Text

Single Line of Text, Whole Number, and Floating Point Number

Whole Number

Whole Number, and Floating Point Number (after rounding)

Floating Point Number

Whole Number, and Floating Point Number

· 在创建dialog时,在删除变量或输入参数时要注意,如果它们被一些其他步骤所引用(如Prompt and Response步骤),那么这些步骤会失效(disabled)。 因此,建议在删除变量/输入参数之前移除这些引用关系。

· 一旦创建了变量或输入参数,他们的类型就不能被改变。

· 链接到子dialog的步骤必须是父dialog中的最后一步。Link child dialog步骤会将控制传递给子dialog。在运行父dialog时,一旦控制传递给了子dialog,就无法回到父dialog中之前的步骤了。

· 使用数字类型的变量和输入参数时没有溢出保护。需要再创建dialog时候注意这点。

· 如果在父dialog发布以后更改了子dialog中的输入参数, 那么父dialog不会自动更新。这可能会导致运行父dialog时出现错误。

 

谢谢!

 

Jackie Chen

 

https://blogs.msdn.com/b/crm/archive/2011/02/15/dialogs-using-variables-and-input-arguments.aspx