在Orchard 1.7.1.0中,我有一个带有下拉列表的自定义联系表单:
首选位置: 北办公室 |南办事处
我需要能够根据联系表单中的选择向相关办公室发送电子邮件。简单是啊??
我在工作流程中创建了一个决策节点,但我不确定基于令牌的规则语法..?令牌类似于{Content.Fields.ContactUsForm.PreferredLocation}
帮助文本是“您可以使用ContentItem,Services,WorkContext和T()。调用SetOutcome(字符串结果)来定义活动的结果。”但我似乎无法在语法上找到更多其他内容 - 我认为它只是接受C#,因为我在博客文章中看到过这个,但我似乎无法运行一个简单的条件语句。
我遇到的问题? ..什么都没发生..没有结果被解雇。如果我只是像SetOutcome(“北办公室”)那样;在脚本字段中进行操作。
这与这篇文章类似,但是作者并没有跟进他是如何进行的,他被建议使用规则,所以可能与1.7.1 Orchard无关。 Orchard Custom Form DropDownLists
所以无论如何,这是我的工作流程,代码如下。
感谢您的任何建议..
我正在使用的脚本,因为我使用的是令牌,我已经用#
作为前缀if ( #{Content.Fields.ContactUsForm.PreferredLocation} == "North Office") {
SetOutcome("North Office"); }
else if ( #{Content.Fields.ContactUsForm.PreferredLocation} == "South Office") {
SetOutcome("South Office"); }
答案 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"); }