繁体   English   中英

需要在 NetSuite 工作流期间提示用户输入文本

[英]Need to prompt user for text during NetSuite Workflow

业务逻辑:当审批者拒绝费用报告时,必须向创建者发送电子邮件。 这封电子邮件必须包含拒绝的原因。

现有设置:已设置多状态工作流,通过两个单独的批准发送费用报告。 每个审批人都可以批准或拒绝工作流。 拒绝工作流将其发送回提交状态以供创建者更正。 我的任务是获取拒绝文本并创建外发电子邮件。

明显的解决方案被拒绝:

  • 发送电子邮件工作流操作——此 WF 操作仅允许发送样板电子邮件(带有一些参数化)。 从用户的角度来看,没有什么可以定制的。
  • 工作流操作脚本——此脚本上下文不允许使用 JavaScript 对话框演示,例如 window.confirm() 或 window.prompt()。 工作流操作面板中有类似的弹出窗口,但仅限于 confirm() 或 alert()——没有 prompt()。 不幸的是,工作流操作脚本的技术要求和限制被记录得很糟糕,所以这个结果是在花了几天时间研究和编写脚本后才知道的。
  • 在费用报告上添加一个跟踪字段,必须在报告被拒绝之前填写该字段。 但是,这需要解锁记录,这是审计关注的一个问题。 它还必须在适当的状态下可见和隐藏,并且只能与一组操作按钮相邻。
  • 新状态不是结束状态,因此电子邮件生成不像结束状态那样自动生成。 我们只想要类似的功能。

我看到的唯一其他可能性是定位一个新页面,例如 Suitelet。 但是,我只需要来自用户的单个字符串。 Suitelet 似乎有点矫枉过正,而且它使返回正确报告的工作流程更加复杂。

任何人可能拥有的任何见解或想法都将是最有帮助的。

好吧,我尝试了其他几种解决方案,但这些似乎都不起作用:

  1. 在状态退出触发器上重定向(通过 WFA 脚本中的 nlapiSetRedirectURL())到一个 Suitelet,它接受从用户输入拒绝文本的工作流传递的参数; 然后重定向到费用报告。 这将失败,因为报告状态实际上并没有改变。
  2. 做同样的事情,但是来自新状态的 Entry 触发器。 需要一些更详细的参数处理,但这也不起作用。 显然,从 UI 体验的任何部分重定向都会取消工作流转换。
  3. 在工作流操作上设置“用户界面”上下文也不起作用; 重定向仍然会终止转换。
  4. 即使在操作上设置了 UI 上下文,nlapiTriggerWorkflow() 函数似乎也没有效果。 没有生成错误或调试文本。

用户可能只需要接受手动行为,例如添加注释和发送预制电子邮件。 这似乎是一个主要的功能漏洞,无论是有意还是无意。 请注意,有一个确认和一个显示消息操作,但没有提示。 那为什么不呢? 没有细节,我猜就处理它。

最终解决方案:

  • 脚本运行的单独工作流状态。 工作流上的新按钮重定向到此新状态。
  • 处于这些特殊状态的工作流操作脚本,其参数设置会根据它们在工作流中的位置进行更改。 此脚本重定向到suitelet(下一个),这会中断工作流转换并使项目保持相同状态。
  • 在 textarea 中获取用户文本的套件,以及一个非提交操作按钮。 不想使用提交按钮,因为这会重新加载同一个页面,创建一个额外的步骤。
  • 一个客户端脚本,它从套件按钮事件中获取参数,创建电子邮件,并重定向回原始记录(与以前处于相同的工作流状态)。

这当然是不雅的。 用户必须按下一个按钮来创建电子邮件,并按下一个单独的按钮来转换到正确的状态。 它满足了用户的需求,但要求他们记住按一个按钮来创建电子邮件原因文本,并按另一个按钮来实际拒绝记录。

之所以需要这种复杂的解决方案,是因为 NetSuite 设计中存在所有障碍:

  • 无法提示来自服务器端 WF 操作脚本的文本。 我们可以 confirm() 给出 Y/N (Ok / Cancel) 答案,但以某种方式不允许返回字符串。
  • 如果 WF 操作脚本重定向到另一个页面,则无法完成转换。
  • Suitelet 提交按钮重新加载同一页面,因此我们需要一个客户端脚本来完成最后的电子邮件创建工作。

功能孔多吗?

工作流有一个限制,即它不能接受用户的输入。 因此,我们需要针对这种情况继续定制解决方案。 我已经在多个 NetSuite 项目中实现了这一点。 这是有效的解决方案 (1) 有一个工作流动作脚本可以调用套件。 有关工作流操作脚本,请参阅下面的脚本示例

 define(['N/record','N/runtime','N/redirect'], function (record,runtime,redirect){ function callSuitelet(context) { try { var currentRecord = context.newRecord; var vendorId = currentRecord.id; var vendorNumber = currentRecord.getValue('entityid'); redirect.toSuitelet({ scriptId: 'customscript_call_rejection_reason', deploymentId: 'customdeploy_call_rejection_reason', parameters: {'recid':vendorId,'vbTransactionNo':vendorNumber, trantype: context.newRecord.type} }); } catch (err) { log.error("Error while calling Suitelet", err); throw err; } } return { onAction: callSuitelet }; });

(2) 设计一个suiteLet 来捕获“拒绝原因” (a) 在套件表单上添加一个标记为“拒绝原因”的字段 (FieldType.TEXTAREA) (b) 添加一个“提交”按钮,将数据添加到交易记录 (c) 单击“提交”按钮后,将套件重定向回交易记录

这应该可以解决上述问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM