云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

百度云_oracle数据库优点_促销

小七 141 0

本系列的上一篇文章:发现SCP工作流–推荐UI。

本篇文章是本系列的一部分,可在此处找到指南:发现SCP工作流。

现在是从用户任务转移到脚本任务的时候了。到了本系列的这个时候,我们已经到了向用户展示啤酒列表的阶段,推荐啤酒是因为最初签入的啤酒。他们已经在推荐界面中做出了选择,物联网门锁,并点击继续操作按钮继续。

让我们提醒自己这个流程,来自本系列的前一篇文章:发现SCP工作流–工作流定义:

是时候整理用户的选择了,因此,我们可以使用脚本任务。

通过阅读有关脚本任务的文档,我们发现,至少在工作流服务的当前版本中,大数据学习,脚本任务是相对简单和受限的。也就是说,它们是一种非常有用的机制,可以在工作流实例中操作数据,然后再继续执行流程中的进一步步骤。

脚本任务是用JavaScript编写的。但是,请注意,它是ECMAScript(ES)5.1,而不是任何更高版本的JavaScript。出于功能方面的考虑,我倾向于编写大量ES6风格的JavaScript,使用胖箭头语法等,但这在这里是不受支持的

如果你真的编写ES6,你会被linter警告,比如:

ES6在2015年为大多数人出现,但仍然有一些系统还不受支持。这是其中之一。另一个我仍然需要编写ES5代码的主要系统是googleapps脚本。有趣的是,这是另一个基于云的服务器端执行上下文服务。所以这根本不是一个孤立的问题。我的意思是,这并不是一个问题本身-我个人更喜欢ES6。

脚本任务本身,在工作流定义中,非常简单-它只是指向工作流项目中的一个JavaScript文件:

我们很快就会看到该文件的内容。

文档中说"如果希望系统运行,请配置脚本任务"在工作流中执行任务的脚本",这是非常通用的。

考虑到执行JavaScript的沙盒和JavaScript的访问权限,脚本任务目前实际上只有一个主要焦点,那就是访问和操作工作流实例的上下文。

为什么要这样做?嗯,我想到了很多原因:

进行计算并设置值,这些值可以在工作流的进一步步骤中进行测试合并或以其他方式修改现有数据要封送一组属性以准备工作流中的下一步,特别是服务任务步骤

有两个特殊变量可供访问上下文和少量工作流实例元数据:

$.context–这是整个工作流实例上下文$.info–这会公开一些特定于实例的元数据(当前是工作流实例ID、脚本任务本身的ID和工作流定义的ID)

从键盘后退一秒,您可能会想象访问范围会扩展到包含工作流实例中的其他数据。如何能够看到实例中的其他任务,并修改它们的属性,例如用户任务的优先级或服务任务端点的路径?

当然,在动态地改变这些东西,或者在脚本任务的代码中"不透明地"改变这些东西,以及使用我们可以使用的其他工作流定义机制(如网关)使事情更加"明确"之间,需要有一个平衡。当然要看情况了。我确信工作流服务团队正在认真考虑这些问题以及每种方法的优缺点。

回到我们之前考虑的使用脚本任务的原因,我们简单的工作流定义要求准备值,为下一步调用远程服务(服务任务)做准备,我们下次再看。

考虑到我们现在的情况,上下文中有大量的信息,在实例启动时大部分都放在那里。我们还指示用户在任务UI中选择了哪些啤酒,以便包含在他们的愿望列表中。

这些指示表示在类似项目数组中存在一个新属性"\u selected"。让我们提醒自己这可能是什么样子。

这段JSON显示了在签入Westmalle Duplel之后开始的工作流实例的上下文(大量编辑)中的"相似"属性,用户选择了Tripel Karmeliet(啤酒女王!)Trappistes Rochefort 10(一个实心的四元组):

请注意两个"\u selected"属性。

我们要整理所选的建议,以及一些关于签入的原始啤酒的小细节,准备在下一步发送到外部服务。

下面是脚本任务中的完整代码,包含在marshalSel中ectedRecommendations.js文件脚本:

是的,我知道使用ES6胖箭头语法会更好,非常感谢。

这里的关键点,我猜,是代码非常简单,几乎不值得检查太多,除了以下几点:

我们使用$.context变量访问整个上下文我们正在上下文中创建一个名为"wishlistEntry"的新属性,我们将在下一步中使用它很明显,我们只收集选择的建议(通过过滤器调用)

就是这样。在这一点上,我们"放手"并允许流继续进行下一步,这是一个将此愿望发送给外部服务的调用。

你们中的精明者可能会想:"等等,返利机器人怎么做,用户可能没有选择任何建议,然后呢?在这种情况下,大数据分析工具有哪些,我们要在愿望清单后面加一个空的清单吗?"