客户门户中自定义对象的表单验证

时间:2014-05-07 10:54:53

标签: javascript oracle validation crm rightnow-crm

我越深入研究CP文档,就越能意识到我的假设有多少是错误的。为了有效地理解系统,我希望构建一个仅包含自定义对象(非事件/非应答/非接触)的表单,然后在客户门户上尝试使用它

为了简单起见,我试图做的就是有一个2字段形式(两个文本框)和一个提交按钮作为前端。以下是我试图做的事情:

  • <rn:widget .... />的形式使用输入文本框,以便我可以 使用requiredvalidate_on_blur等属性。我不是 确定这些属性是否也可以用于自定义对象,但是 我们稍后会谈到。
  • 使用已定义的表单验证方法 标准物品(如果可能的话),所以我不必这样做 重新发明轮子。
  • 成功验证后,将表单数据发布到我的自定义 我可以保存那些数据的控制器。

我很快意识到我无法使用标准input/FormInput(生成文本框)小部件来自定义对象。我还发现我也无法使用标准input/TextInput小部件。在一些R&amp; D之后,我终于通过从头创建一个小部件并在其视图中添加适当的HTML来设法找到解决方案。

到目前为止一切顺利。我的第一步是照顾。我能够使用

<rn:widget path="/custom/nl/custom_input" name="Packagename$Objectname.c$Fieldname" required = "true" />

在表单的视图页面中。

下一步,表单验证,是让我感到困惑的一点。我无法理解文档中给出的代码,因此决定在此处提出一个主题。

我遇到了this,但遗憾的是没有多少帮助。我还遇到了另一个线程(似乎无法找到URL),其中OP使用了一个自定义小部件,该小部件正在扩展input/TextInput小部件,并想知道如何将验证应用于该文本框。给出的答案是覆盖onValidate的{​​{1}}函数,如果错误则返回false,如果成功则返回事件对象。

我是否正确地假设我可以采用类似的方法?由于我使用的是新的小部件,是否有类似的方法可以覆盖并返回true或false?如果是的话,该功能的名称是什么?任何帮助非常感谢。

2 个答案:

答案 0 :(得分:1)

您使用的是CP2或CP3以及RightNow的哪个版本?我会假设这是CP2。

你的问题几乎是两部分:1)我可以使用哪个小部件,以及2)如何扩展验证?

由于听起来您只想使用requiredvalidate_on_blur标准小部件属性,我认为您的第一种方法更好。您应该能够通过开箱即用的功能实现您所描述的内容。

使用标准小部件

尝试使用点符号再次使用标准窗口小部件来访问该字段;类似于ROQL中的方法:

<rn:widget path="input/FormInput" name="Packagename.Objectname.Fieldname" required = "true" />

自定义对象没有自定义字段,因为对象本身是自定义的。因此,访问自定义对象上的字段没有c$前缀。该表示法仅适用于标准对象上的自定义字段。

另外值得注意的是,FormInput窗口小部件只是其他输入窗口小部件的包装器,包括TextInput

创建窗口小部件验证

如果您想使用自定义窗口小部件,则需要覆盖{1}}文件中的相应方法。根据您创建自定义窗口小部件,onValidate或您的验证方法的方式,实际上可能不是该文件中的方法;你必须创造它。在这种情况下,您需要为文本字段设置事件侦听器,然后对事件执行操作。如果你想使用模糊,它将类似于以下(基本上是标准输入小部件的功能)

logic.js

CP3方法略有不同,特别是因为有强大的自定义小部件继承。因此,如果您正在使用CP3并且仍想使用自定义窗口小部件路径,请返回。

此外,所有标准小部件代码都应通过WebDAV中的src文件夹向您公开。如果您可以通过自己的配置文件访问WebDAV,那么您应该在开发CP时使用它,然后您可以查看标准窗口小部件的工作方式并将相同的原则应用于您的代码。

答案 1 :(得分:0)

我通过一系列试错方法弄明白了。我所做的是在Rightnow.Field文件中使用logic.js扩展我的自定义输入。

Custom.Widgets.nl.custom_input = RightNow.Field.extend({
    overrides: {            
        constructor: function() {               
            this.parent();

            /* Call a custom function on form submit */
            this.parentForm().on("submit", this.onValidate, this);
        }
    },

以下函数取自SiteInfologic.js文件(CP文档中提供的自定义对象示例代码),并包含在我的输入logic.js文件中完成验证过程。

  • 的OnValidate
  • _displayError
  • _toggleErrorIndicator

使整个过程自动化并且验证得到了解决。好吧,至少对于文本框......