logo

NJP

Get variable name from UI Macro

Import · Jul 06, 2020 · article

Variable name definitions are stored in g_form.nameMap array. The entity name of the form is required to identify the definition. So you need to search g_form.nameMap by jvar_question_name.

Also, the default value can be obtained from jvar_question_value.

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
    <script>
        // 動的生成のフォーム名称(jvar_question_name)からカタログ定義本来の変数名を取得する
        function showVarName(value, controlName){
            // 実体名と変数名の対応が格納されているg_form.nameMapから実体名が一致する定義を取得する
            var nameMap = g_form.nameMap.filter( function(map){
                return map.realName == controlName;
                });

            if(nameMap.length ==0)
                alert("definition not found");

            // Result dialog
            var msg = "value:     " + value
            msg +=  "\nvar_name:  " + nameMap[0].prettyName;
            msg +=  "\nvar_sysid: " + nameMap[0].questionID;
            alert(msg);
        }        
    </script>

    <j:set var="jvar_value" value="${jvar_question_value}" />      <!-- jvar_question_valueにdefault_valueが入ってくる -->
    <j:set var="jvar_control_id" value="${jvar_question_name}" />  <!--  動的に作られるform上の実体名を取得する(カタログとnavigaterで動き違う)-->

    <g:sc_button img="" classes="request_catalog_button header_button" 
         id="btnViewing" 
         label="View"
         title="View" 
         isPrimary="true"
         onclick="showVarName('${jvar_value}', '${jvar_control_id}');" 
    />
</j:jelly>

image

View original source

https://www.servicenow.com/community/developer-articles/get-variable-name-from-ui-macro/ta-p/2311555