UI页面(果冻)-如何在g:evaluate中使用动态数据



TLDR:如何在 中访问即变量或说值评估?

你好:)

简而言之,我有一个带有输入字段的UI页面(由UI操作打开的模式)。在更改时,该字段需要运行一些服务器端代码来验证该字段。主要问题实际上是在求值中访问输入数据。访问变量或HTML字段似乎是不可能的。我可以使用RP通过setpreferences获取模态中设置的变量,但是输入数据是在页面中创建的,而不是在UI操作中创建的。

是否有一种方法可以将数据传递给求值,或者至少让它自己获取数据?我正在认真考虑创建一个通过glidejax调用的脚本来完成这项工作。

帮助将是非常感激的。Brgds .

尝试从客户端脚本和HTML id中获取g:evaluate中的变量。

HTML/果冻代码:

<g:cs_ui_text_field class="p" name="input_field_value" id="input_field_value" value="" onchange="validateRequest();" /> <!-- Dont mind the macro name, its just a text field (input). -->
<g2:evaluate var="jvar_gr" jelly="true">
var return_value = '${input_field_value}'; // Attempting to fetch field value wont work.
return_value ;
</g2:evaluate>

客户端脚本:

function validateRequest() { 
// ValidateRequest calls evaluate jvar_gr, and alerts the return value.
alert('$[jvar_gr]');
}

据我所知,您需要通过您在客户端脚本中提到的GlideAjax调用来做到这一点。果冻代码用于执行服务器端呈现。这意味着当浏览器从ServiceNow请求UI页面时,ServiceNow的服务器将运行果冻代码。这包括在g2:evaluate标签内运行代码,以及用浏览器可以理解的原始HTML替换宏(浏览器不理解果冻,它只知道如何渲染HTML)。然后将原始HTML发送到浏览器以显示UI页面。

所以你的<g2:evaluate></g2:evaluate>标签内的代码运行之前,用户甚至看到你的页面,并有机会开始与之交互。因此,您需要在UI页面的客户端脚本组件中执行服务器端调用。要使用客户机脚本访问输入值,可以使用gel:

function validateRequest() { 
var gr = gel("input_field_value").value; // read the value from the input
var ga = new GlideAjax(/* your script include */);
ga.addParam('sysparm_name', /* method name */);
ga.addParam(/* param name */, gr);
ga.getXMLAnswer(function(answer) {
// do what you need to do to update your UI.
});
}

请记住,UI页面的处理脚本也可以运行服务器端代码,并可以访问输入变量。但这通常只有在您提交表单(使用<g:form>创建)并且不尝试运行更改代码时才会派上用场。然而,这可能是有用的,这取决于您何时需要进行服务器端调用和您的实际用例。

相关内容

  • 没有找到相关文章

最新更新