Scripts de campo útil
Casos de uso comuns para scripts de personalização de campo.
Aviso:
A personalização descrita aqui foi desenvolvida para uso em instâncias específicas e não é compatível com Now Support. Este método é fornecido no estado em que se encontra e deve ser testado cuidadosamente antes da implementação. Publique todas as perguntas e comentários sobre esta personalização no fórum da nossa comunidade.
Para obter mais informações, consulte Referência da API do servidor.
Preencher um campo automaticamente
O exemplo a seguir mostra como usar um client script para preencher automaticamente uma Descrição Resumida com base na Subcategoriaselecionada.
Nesse caso, se a tabela tiver um registro com Subcategoria = Senha e Descrição resumida = Redefinição de senha. Quando o usuário seleciona a Subcategoria de Senha no formulário de Incidente, um client script pesquisa o registro correspondente e define a Descrição resumida como Redefinição de senha.
Configurações de client script:
- Type = onChange
- Table name = incidente
- Field name = Subcategoria
function onChange(control, oldValue, newValue, isLoading){
if(isLoading){return;}
var newrec = gel('sys_row');
//Check if new record
if (newrec.value == -1) {
var lookup = new GlideRecord('u_short_desc_lookup');
lookup.addQuery('u_subcategory', g_form.getValue('subcategory'));
lookup.query();
var temp; //temp var - reusable
if(lookup.next()){
temp = lookup.u_short_description;
if(null != temp) {
//Set the form value from lookup if there is a lookup value
g_form.setValue('short_description', temp);
} else {
g_form.setValue('short_description',"");
}
} else {
//If a lookup record does not exist based on lookup.addQuery
//Then set to UNDEFINED or NULL depending on type
g_form.setValue('short_description',"");
}
}
}Desabilitar marcadores HTML em descrições
Este código desabilita os marcadores HTML nos campos Descrição e Descrição resumida, substituindo os marcadores por versões sem execução.
doit();
function doit(){
var desc = current.description.toString();
var shdesc = current.short_description.toString();
if(desc.indexOf('script>')>-1|| shdesc.indexOf('script>')>-1){
desc = desc.replace(/<script>/g,"(script)");
current.description = desc.replace(/<\/script>/g,"(\/script)");
shdesc = shdesc.replace(/<script>/g,"(script)");
current.short_description = shdesc.replace(/<\/script>/g,"(\/script)");}
}Eliminar espaços iniciais e finais em campos
Este exemplo do script apara espaços à direita e à esquerda nos campos FirstName e LastName do sys_user.
doit();
function doit(){
var now_GR =new GlideRecord('sys_user');
gr.query();
while(gr.next()){
if((gr.first_name.toString().length!= gr.first_name.toString().trim().length)||(gr.last_name.toString().length!= gr.last_name.toString().trim().length)){
gr.first_name= gr.first_name.toString().trim();
gr.last_name= gr.last_name.toString().trim();
gr.autoSysFields(false);
gr.update();}}
}Fazer um rótulo de campo piscar
O exemplo de client script a seguir é para o campo de número no incidente. O rótulo pisca por dois segundos.
g_form.flash("incident.number","#FFFACD",0);Os argumentos para o método flash são os seguintes:
- tablename.fieldname
- Cor RGB ou cor CSS aceitável, como "azul" ou "tomate"
- Número inteiro que determina por quanto tempo o rótulo pisca:
- 2 para um flash de 1 segundo
- 0 para um flash de 2 segundos
- -2 para um flash de 3 segundos
- -4 para um flash de 4 segundos
Nota:
Não especifique este argumento se quiser que o rótulo do campo seja colorido com a cor especificada.
Tornar um rótulo de campo em negrito
Este client script torna o rótulo de um campo específico em negrito. Nesse caso, o campo é a Descrição Resumida na Tabela de Incidentes.
function onLoad(){
var l = g_form.getLabel('incident.short_description');
l.style.fontWeight = 'bold';}Tornar campos somente leitura
Este client script onLoad torna os seguintes campos na tabela Incident [incident] somente leitura:
- Estado do incidente
- Impacto
- Urgência
- Prioridade
- Item de configuração
- Atribuído a
O script também remove a lupa dos Campos de referência somente leitura (Item de configuração e Atribuído a).
function onLoad(){
var incidentState = g_form.getValue('incident_state');
if( incidentState == '6'|| incidentState == '7'){
g_form.setReadonly('incident_state',true);
g_form.setReadonly('impact',true);
g_form.setReadonly('urgency',true);
g_form.setReadonly('priority',true);
g_form.setReadonly('cmdb_ci',true);
g_form.setReadonly('assigned_to',true);}}Definir data/hora atual no campo
Você pode definir valores de data e hora em client scripts e inclusões de script.
- Script de cliente
- Você pode usar as duas linhas a seguir para definir a data e a hora atuais em um campo de data/hora. Essa abordagem ignora o problema de obter o valor no formato e fuso horário apropriados.
var ajax = new GlideAjax('MyDateTimeAjax'); ajax.addParam('sysparm_name','nowDateTime'); ajax.getXML(function(){ g_form.setValue('put your field name here', ajax.getAnswer());}); - Inclusão de script do sistema
// Be sure the "Client callable" checkbox is checked var MyDateTimeAjax = Class.create(); MyDateTimeAjax.prototype = Object.extendsObject(AbstractAjaxProcessor,{ nowDateTime:function(){ return gs.nowDateTime();}});
Alternar o campo de temporizador por nome de campo
O client script a seguir alterna o campo do temporizador com base em um nome de campo específico.
function toggleTimerByFieldName(fieldName){
//Step 1: Find the timer object
//timeObjectName: the timer objects name as it would normally be referenced
//timeObjectHidden: the hidden input node in the field td
//timeObjectParent: the parent td node containing the field and it's constituent nodes
//timeObjectFields: anchor tag with onclick to stop timer
var timeObjectName = fieldName;
var timeObjectHidden = gel(timeObjectName);
//Step 2: simulate click stop button
var timeObjectParent;
var timeObjectFields;
//verify that we got the correct object
if(timeObjectHidden.type=="hidden"){
//Get Parent td node
timeObjectParent = timeObjectHidden.parentNode;
//Get input fields
timeObjectFields = timeObjectParent.getElementsByTagName("input");
//simulate click of stop button
var timerTestString ="paused";
var timerImg;
//loop through input objects looking for the pause timer object
for(var elIt=0; elIt < timeObjectFields.length; elIt++){
if(timeObjectFields[elIt].id.match(timerTestString)){
if(timeObjectFields[elIt].value=="false"){
timeObjectFields[elIt].value="true";
timerImg = timeObjectParent.getElementsByTagName("img")[0];
timerImg.src="images/timer_start.gifx";}
elseif(timeObjectFields[elIt].value=="true"){
timeObjectFields[elIt].value="false";
timerImg = timeObjectParent.getElementsByTagName("img")[0];
timerImg.src="images/timer_stop.gifx";}}}}}Modificar o valor do campo GlideDateTime
O exemplo a seguir usa um script do lado do servidor para acessar um campo GlideDateTime.
O exemplo de script do lado do servidor a seguir mostra como modificar valores usando a API GlideDateTime. O mesmo conceito também se aplica ao objeto GlideDate.
//You first need a GlideDateTime object
//this can be from instantiating a new object "var gdt = new GlideDateTime()"
//or getting the object from a GlideDateTime field
//getting the field value (for example: var gdt = current.start_date)
//only returns the string value, not the object
//to get the object use var gdt = current.start_date.getGlideObject();
//now gdt is a GlideDateTime object
var gdt = current.start_date.getGlideObject();
//All methods can use negative values to subtract intervals
//add 1 hour (60 mins * 60 secs)
gdt.addSecondsLocalTime(3600);
//add 1 day
gdt.addDaysLocalTime(1);
//subtract 1 day
gdt.addDaysLocalTime(-1);
//add 3 weeks
gdt.addWeeksLocalTime(3);
//subtract 6 months.
gdt.addMonthsLocalTime(-6);
//add 1 year, representing the date and time using the UTC timezone instead of the local user's timezone.
gdt.addYearsUTC(1);