Scripts de programação úteis
Um script de regra de negócio especifica as ações que a regra de negócio realiza. Os scripts geralmente incluem variáveis globais predefinidas para fazer referência a itens em seu sistema, como o registro atual. Variáveis globais estão disponíveis para todas as regras de negócio.
Calcular 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 abertura para fechamento em um incidente com base em Como criar e usar programaçõesespecíficas. Se não houver nenhuma 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 dos 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ócios.
- Especifique a operação que aciona a regra de negócios.
- Use o bloco de anotações com regras de negócios de exibição para alterar valores de formulário antes que um usuário carregue o formulário.
- Use a condição OR como em um construtor de condição.
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 de Regras de negócios 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 current 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, em seguida, 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 Password Reset. 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 do script de chamada no campo Comentários para que a equipe do call center reúna informações úteis para passar a um técnico. Já existem Regra de atribuição, Modelos e Assistentes internos que executam funções semelhantes.
Script de exemplo: uma regra de negócio antes da consulta padrão
Você pode usar uma regra de negócios de consulta que é executada antes que a consulta do banco de dados seja feita para impedir que os usuários acessem determinados registros.
Considere o exemplo a seguir de uma regra de negócios 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 da 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;}