【问题标题】:Need to prompt user for text during NetSuite Workflow需要在 NetSuite Workflow 期间提示用户输入文本
【发布时间】:2018-01-09 21:44:14
【问题描述】:

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

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

明显的解决方案被拒绝:

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

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

任何人可能拥有的任何见解或想法都会非常有帮助。

【问题讨论】:

  • 我们有类似的工作流程审批设置。当按下拒绝按钮时,我们只有一个拒绝原因字段,这是必需的。
  • 此时您的记录是否已锁定?如果记录被锁定,如何在字段中输入数据?或者也许这不是问题?
  • 我们有包含所有这些信息的“原因”记录。因此,当他们拒绝记录时,工作流会创建一个新的拒绝原因记录,其中包含所需的所有信息。该记录与原始记录相关联。然后,一旦保存该记录,工作流就会更新原始记录的状态,您可以通过我们添加的子选项卡查看任何拒绝原因。这也允许对所有内容进行良好的记录审计跟踪。

标签: javascript workflow netsuite


【解决方案1】:

好吧,我尝试了其他几种解决方案,但似乎都没有效果:

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

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

【讨论】:

    【解决方案2】:

    最终解决方案:

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

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

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

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

    特征孔有多少?

    【讨论】:

      【解决方案3】:

      工作流有一个限制,它不能接受用户的输入。因此,我们需要为这种情况提供定制的解决方案。我已经在多个 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) 有一个套件设计来捕捉“拒绝原因” (a) 在套件表单上添加一个标记为“拒绝原因”的字段 (FieldType.TEXTAREA) (b) 添加“提交”按钮,将数据添加到交易记录 (c) 单击“提交”按钮后,将套件重定向回事务记录

      这应该可以解决上述问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多