Orchard自定义表单和工作流 - 决策节点中脚本的语法

时间:2014-03-06 05:41:35

标签: forms content-management-system workflow orchardcms orchardcms-1.7

在Orchard 1.7.1.0中,我有一个带有下拉列表的自定义联系表单:

首选位置: 北办公室 |南办事处

我需要能够根据联系表单中的选择向相关办公室发送电子邮件。简单是啊??

我在工作流程中创建了一个决策节点,但我不确定基于令牌的规则语法..?令牌类似于{Content.Fields.ContactUsForm.PreferredLocation}

帮助文本是“您可以使用ContentItem,Services,WorkContext和T()。调用SetOutcome(字符串结果)来定义活动的结果。”但我似乎无法在语法上找到更多其他内容 - 我认为它只是接受C#,因为我在博客文章中看到过这个,但我似乎无法运行一个简单的条件语句。

我遇到的问题? ..什么都没发生..没有结果被解雇。如果我只是像SetOutcome(“北办公室”)那样;在脚本字段中进行操作。

这与这篇文章类似,但是作者并没有跟进他是如何进行的,他被建议使用规则,所以可能与1.7.1 Orchard无关。 Orchard Custom Form DropDownLists

所以无论如何,这是我的工作流程,代码如下。

Workflow

感谢您的任何建议..

我正在使用的脚本,因为我使用的是令牌,我已经用#

作为前缀
if (  #{Content.Fields.ContactUsForm.PreferredLocation} == "North Office") { 
SetOutcome("North Office");  }
else if  (  #{Content.Fields.ContactUsForm.PreferredLocation} == "South Office") {
SetOutcome("South Office");  }

2 个答案:

答案 0 :(得分:4)

发现解决方案是在令牌周围添加引号。

    if (  "#{Content.Fields.ContactUsForm.PreferredLocation}" == "North Office") { SetOutcome("North Office");  }
else if  (  "#{Content.Fields.ContactUsForm.PreferredLocation}" == "South Office") { SetOutcome("South Office");  }

甚至更简单:

SetOutcome("{Content.Fields.ContactUsForm.PreferredLocation}");

答案 1 :(得分:1)

在令牌周围添加引号将解决问题。原因如下......您的代码最终将传递给Mono.CSharp.Evaluator类并运行。但是,在此之前,令牌#{Content.Fields.ContactUsForm.PreferredLocation} 将替换为其值。值结果是字符串类型。如果您不添加引号,则字符串替换会将令牌值直接删除到您的代码中。

此代码:

if (  "#{Content.Fields.ContactUsForm.PreferredLocation}" == "North Office") { SetOutcome("North Office");  }
else if  (  "#{Content.Fields.ContactUsForm.PreferredLocation}" == "South Office") { SetOutcome("South Office");  }

在评估时,实际上会以此代码执行:

 if (  "North Office" == "North Office") { SetOutcome("North Office");  }
else if  (  "North Office" == "South Office") { SetOutcome("South Office");  }

这样做的一个好处是你可以使用你想要的任何字符串方法。 ex / .ToLower(),. CONTins()等。这是一个帮助评估用户输入的示例。在这种情况下有点轻浮,因为数据来自下拉列表。

if (  "#{Content.Fields.ContactUsForm.PreferredLocation}".ToLower() == "north office") { SetOutcome("North Office");  }
else if  (  "#{Content.Fields.ContactUsForm.PreferredLocation}".ToLower() == "south office") { SetOutcome("South Office");  }