Как добавить заполнитель в текстовое поле на сервисном портале servicenow?

Мне нужно добавить заполнитель в текстовое поле в элементе каталога на сервисном портале при загрузке страницы, я пробовал в клиентском скрипте каталога с jquery и angular / document, но безуспешно, и обнаружил, что он не поддерживает какие-либо другие альтернативные soln?

Клиентский скрипт каталога:

function onLoad() {


    var elm = angular.element(element.getElementsByClassName("form-control"));
    //when I use angular I get this error:

js_includes_sp.jsx? v = 08-28-2017_0947 & lp = Mon_Aug_28_11_44_06_PDT_2017 & c = 2_42: 63808 (g_env) [SCRIPT: EXEC] Ошибка при выполнении клиентского скрипта «Скрипт-заполнитель»: TypeError: «Невозможно прочитать элемент свойства».

 jQuery("#sp_formfield_IO:5cdafd764f02030007b03fb28110c70b").attr("placeholder","hello world");

   // if I use jquery or $jq I get below error

(g_env) [SCRIPT: EXEC] Ошибка при запуске клиентского скрипта «Скрипт-заполнитель»: TypeError: jQuery не является функцией

}

Вот как HTML создается в servicenow:

<span ng-switch-default="true" class="ng-scope">
<!-- ngIf: !field.max_length || 256 > field.max_length -->
<input ng-model="field.stagedValue" ng-change="stagedValueChange()" 
maxlength="" autocomplete="off" name="IO:5cdafd764f02030007b03fb28110c70b" 
id="sp_formfield_IO:5cdafd764f02030007b03fb28110c70b" data-type="string" 
placeholder="" ng-if="!field.max_length || 256 > field.max_length" 
class="form-control ng-pristine ng-untouched ng-valid ng-scope ng-empty ng-
valid-maxlength" ng-model-options="{allowInvalid: true}" ng-
disabled="field.isReadonly()" aria-invalid="false"><!-- end ngIf: 
!field.max_length || 256 > field.max_length --><!-- ngIf: field.max_length 
>= 256 --></span>

введите описание изображения здесь


person Light    schedule 31.10.2017    source источник


Ответы (2)


Эй,

Короткий ответ заключается в том, что на портале обслуживания нет общепринятого способа сделать это. Это потому, что манипуляции с DOM строго заблокированы. Однако гораздо более длинный ответ заключается в том, что действительно есть способ сделать это в Service Portal. Я написал об этом статью, которую вы можете найти на здесь.

Вам понадобится сценарий CatItemVariables Script Include из этого сообщения, который переводит переменные каталога в sys_ids. Поскольку сценарии пользовательского интерфейса не запускаются на портале службы (даже глобальные, которые я проверял в последний раз), вам также необходимо создать сценарий пользовательского интерфейса и установить его как JS Include, который вы включаете как часть темы для своей службы. Портал. (Как это сделать подробно описано в посте.)

В сценарии пользовательского интерфейса вы захотите получить переменные элемента cat с помощью запроса REST и этого сценария Include.


Также может быть способ попроще:

  1. Настройте сценарии включения, упомянутые в статье.
  2. В клиентском сценарии onLoad используйте Script Include, чтобы получить sys_ID всех переменных, связанных с элементом каталога, с помощью GlideAjax для вызова вызываемого клиентом сценария Include.
  3. Используйте объект this в качестве замены для окна и помните, что документ является элементом окна:

    this.document.getElementsByName ('IO:' + itemVars ['var_name']) [0];

В приведенном выше примере itemVars - это имя переменной, которая содержит результирующие объекты переменных элемента каталога, а 'var_name' - имя переменной.

На самом деле он не делает то, что вы ищете, но вы также можете рассмотреть поле словаря «текст-заполнитель» в самом словаре поля.

person Tim Woodruff    schedule 31.10.2017

Если вы хотите просто заполнить placeholder для переменной без необходимости его динамического задания, вы можете использовать поле Пример текста в самой переменной.

введите описание изображения здесь

Это будет заполнено как placeholder в форме

введите описание изображения здесь

person Kirk    schedule 31.10.2017
comment
Мне нужно динамически установить заполнитель - person Light; 01.11.2017
comment
какой тип поля вы выбрали, мне не удалось найти пример текста - person Light; 01.11.2017
comment
В моем примере это однострочная текстовая переменная - person Kirk; 01.11.2017
comment
Мой ответ дает вам единственный способ сделать это. - person Tim Woodruff; 02.11.2017