簡體   English   中英

UI 頁面(果凍)——如何在 g:evaluate 中使用動態數據

[英]UI page (jelly) - how to use dynamic data in g:evaluate

TLDR:如何訪問 ie 變量或輸入字段中的值 -評估中?

你好:)

簡而言之,我有一個帶有輸入字段的 UI 頁面(由 UI 操作打開的模式)。 在更改時,該字段需要運行一些服務器端代碼來驗證該字段。 主要問題實際上是訪問評估中的輸入數據。 似乎無法訪問變量或 HTML 字段。 我可以使用 RP 通過 setpreferences 獲取模式中設置的變量,但輸入數據是在頁面內創建的,而不是 UI 操作。

有沒有辦法將數據傳遞給評估,或者至少讓它自己獲取數據? 我正在認真考慮只創建一個腳本,包括通過 glideajax 調用來完成這項工作。

幫助將不勝感激。 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>創建)並且不嘗試在更改時運行代碼時才會派上用場。 但是,這可能很有用,具體取決於您何時需要進行服務器端調用和您的實際用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM