Scripts de programação úteis
Um script de regra de negócio especifica as ações que a regra de negócio executa. Os scripts geralmente incluem variáveis globais predefinidas para fazer referência a itens em seu sistema, como o registro atual. As variáveis globais estão disponíveis para todas as regras de negócio.
Calcular a duração de acordo com uma programação
Tipo: antes de atualizar/inserir regra de negócio.
Descrição: uma duração de negócios calcula a duração de aberto a fechado em um incidente com base nos cronogramas específicos de criação e uso. Se não houver programação especificada, o script simplesmente usará a primeira programação retornada pela consulta.
Exemplo de script:
var gr_rec = new GlideRecord('incident');
gr_rec.get('ed92e8d173d023002728660c4cf6a7bc');
if (gr_rec.incident_state == 6) {
var dur = calcDurationSchedule(gr_rec.opened_at, gr_rec.sys_updated_on);
}
function calcDurationSchedule(start, end){
// Get the user
var usr = new GlideRecord('sys_user');
usr.get(gs.getUserID());
// Create schedule - pass in the sys_id of your standard work day schedule and pass in the users timezone
var sched = new GlideSchedule('08fcd0830a0a0b2600079f56b1adb9ae',usr.time_zone);
// Get duration based on schedule/timezone
return(sched.duration(start.getGlideObject(), end.getGlideObject()));
}Verificar as próximas datas de rescisão
Tipo: script programado.
Descrição: este script verifica todas as noites as datas de rescisão em contratos que vencem em 90, 50 ou 10 dias (dependendo do campo de duração do contrato).
Exemplo de script:
function contractNoticeDue(){
var now_GR = new GlideRecord("contract");
now_GR.addQuery("u_contract_status","Active");
now_GR.query();
while(now_GR.next()){
if((now_GR.u_termination_date<= gs.daysAgo(-90))&&(now_GR.u_contract_duration=="Long")){
now_GR.u_contract_status="In review";}
elseif((now_GR.u_termination_date<= gs.daysAgo(-50))&&(now_GR.u_contract_duration=="Medium")){
now_GR.u_contract_status="In review";}
elseif((now_GR.u_termination_date <= gs.daysAgo(-10))&&(now_GR.u_contract_duration=="Short")){
now_GR.u_contract_status="In review";}
now_GR.update();
}
}- Comparando dois campos de data.
- Analisando cargas XML.
- Anulação de uma ação de banco de dados em uma regra de negócio.
- Especifique a operação que aciona a regra de negócio.
- Use o bloco de anotações com regras de negócio de exibição para alterar os valores do formulário antes que um usuário carregue o formulário.
- Use a condição OR como você faria em um construtor de condições.
Você também pode utilizar a funcionalidade de script do sistema disponível para scripts do lado do servidor.
Você pode usar opções no formulário Regras de negócio para criar condições, definir valores de campo e exibir mensagens de alerta sem precisar escrever um script.
Anular uma ação de banco de dados em uma regra de negócio
Durante um script de regra de negócio anterior, você pode cancelar ou anular a ação do banco de dados atual usando o método current.setAbortAction(true).
Por exemplo, se a regra de negócio anterior for executada durante uma ação de inserção e você tiver uma condição no script que chama current.setAbortAction(true), o novo registro armazenado em atual não será criado no banco de dados.
Adicionar funcionalidade de preenchimento automático
A funcionalidade Adicionar preenchimento automático também é chamada de modelo de incidente, atribuições automáticas, chamadas rápidas, script de chamada ou preenchimento automático.
Digamos que você queira preencher automaticamente sua Descrição Resumida com base na Subcategoria selecionada. Primeiro, crie uma tabela de pesquisa e preencha o campo-chave, neste caso, Subcategoria e o campo preenchido automaticamente, Descrição resumida. Digamos que sua tabela tenha 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... Tipo = onChange, Nome da tabela = incidente, Nome do campo = 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', ""); } }
}Você pode preencher muitos campos ou até mesmo inserir perguntas de script de chamada no campo Comentários para que a equipe do call center reúna informações úteis para passar para um técnico. Já existem regras de atribuição, modelos e assistentes integrados que executam funções semelhantes.
Script de exemplo: uma regra de negócio padrão antes da consulta
Você pode usar uma regra de negócio de consulta que é executada antes que a consulta ao banco de dados seja feita para impedir que os usuários acessem determinados registros.
Considere o exemplo a seguir de uma regra de negócio padrão que limita o acesso a registros de incidentes.
| Nome | Tabela | Quando |
|---|---|---|
| consulta de incidente | Incidente | antes, consulta |
Exemplo de script
if(!gs.hasRole("itil")&& gs.isInteractive()){
var u = gs.getUserID();
var qc = current.addQuery("caller_id", u).addOrCondition("opened_by", u).addOrCondition("watch_list","CONTAINS", u);
gs.print("query restricted to user: "+ u);}
Script de programação para dias de semana
Tipo: Regras de negócio/Client scripts.
var go ='false';
var now =new Date();
// Correct time zone, which is by default GMT -7
now.setHours(now.getHours()+8);
var day = now.getDay();
// No go on Saturday or Sunday
if(day !=0&& day !=6){
// (your script here)
}Definir campo de data de acordo com a data atual
function setCabDate(){
var today =new Date();
var thisDay = today.getDay();
//returns 0 for Sunday, 1 for Monday, etc. thru 6 for Saturday.
var thisMon =new GlideDateTime();
thisMon.setDisplayValue(gs.beginningOfThisWeek());
var nextMon = thisMon.getNumericValue();
nextMon +=(1000*60*60*24*7);
if((thisDay <4)&&(thisDay >0))
//if today is Mon thru Wed (thisDay = 1, 2, or 3), set cab to this coming Monday.
current.u_req_cab_rev_date.setDateNumericValue(thisMon.getNumericValue());
elseif((thisDay >=4)||(thisDay ==0))
//if today is Thurs thru Sun (thisDay = 4, 5, 6, or 0), set cab to next Monday.
current.u_req_cab_rev_date.setDateNumericValue(nextMon);
}Para validar a entrada de todos os campos de data/hora, você pode usar o seguinte em um script de validação (). Como o formato de data/hora está codificado neste script, ele deve corresponder ao formato de data/hora da sua instância. Se o formato de data/hora da sua instância mudar, você deverá atualizar o script de validação.
function validate(value){
// empty fields are still valid dates
if(!value)returntrue;
// We "should" have the global date format defined always defined. but there's always that edge case...
if(typeof g_user_date_time_format !=='undefined')return isDate(value, g_user_date_time_format);
// if we don't have that defined, we can always try guessing
return parseDate(value)!==null;}