Scripts de planification utiles
Un script de règle métier spécifie les actions entreprises par la règle métier. Les scripts incluent généralement des variables globales prédéfinies pour référencer des éléments de votre système, tels que l’enregistrement actuel. Les variables globales sont disponibles pour toutes les règles métier.
Calculer la durée selon une planification
Type : avant mettre à jour/insérer une règle métier.
Description : une durée d’activité calcule la durée d’ouverture à fermeture d’un incident en fonction de la création et de l’utilisation de calendriers particuliers. S’il n’y a pas de calendrier spécifié, le script utilisera simplement le premier calendrier renvoyé par la requête.
Exemple 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()));
}Vérifier les dates d’arrêt à venir
Type : script planifié.
Description : ce script vérifie tous les soirs les dates de résiliation des contrats arrivant à échéance dans 90, 50 ou 10 jours (selon le champ de durée du contrat).
Exemple 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();
}
}- Comparaison de deux champs de date.
- Analyse des charges utiles XML.
- Abandon d’une action de base de données dans une règle métier
- Spécifiez l’opération qui déclenche la règle métier.
- Utilisez le bloc-notes avec les règles métier d’affichage pour modifier les valeurs du formulaire juste avant qu’un utilisateur ne charge le formulaire.
- Utilisez la condition OU comme vous le feriez dans un générateur de conditions.
Vous pouvez également utiliser la fonctionnalité de scripting du système disponible pour les scripts côté serveur.
Vous pouvez utiliser les options du formulaire Règles métier pour créer des conditions, définir des valeurs de champ et afficher des messages d’alerte sans avoir besoin d’écrire un script.
Abandonner une action de base de données dans une règle métier
Pendant un script avant la règle métier, vous pouvez annuler ou abandonner l’action de base de données actuelle à l’aide de la méthode current.setAbortAction(true).
Par exemple, si la règle métier Avant est exécutée lors d’une action d’insertion et que le script contient une condition qui appelle current.setAbortAction(true), le nouvel enregistrement stocké dans la règle actuelle n’est pas créé dans la base de données.
Ajouter une fonctionnalité de remplissage automatique
L’ajout d’une fonctionnalité de remplissage automatique est également appelé modèle d’incident, affectations automatiques, appels rapides, script d’appel ou remplissage automatique.
Supposons que vous souhaitiez remplir automatiquement votre description brève en fonction de la sous-catégorie sélectionnée. Tout d’abord, créez une table de recherche, puis renseignez le champ clé, dans ce cas Sous-catégorie et le champ renseigné automatiquement, Brève description. Supposons que votre table ait un enregistrement avec Sous-catégorie = Mot de passe et Description brève = Réinitialisation du mot de passe. Lorsque l’utilisateur sélectionne la sous-catégorie de mot de passe sur le formulaire d’incident, un script client recherche l’enregistrement correspondant et définit une description brève égale à Réinitialisation du mot de passe. Paramètres du script client... Type = onChange, nom de table = incident, nom de champ = sous-catégorie.
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', ""); } }
}Vous pouvez remplir de nombreux champs ou même insérer des questions de script d’appel dans le champ Commentaires afin que le personnel du centre d’appel recueille de bonnes informations à transmettre à un technicien. Il existe déjà des règles d’affectation, des modèles et des assistants intégrés qui exécutent des fonctions similaires.
Exemple de script : règle métier par défaut avant requête
Vous pouvez utiliser une règle métier de requête qui s’exécute avant que la requête de base de données ne soit effectuée pour empêcher les utilisateurs d’accéder à certains enregistrements.
Prenons l’exemple suivant tiré d’une règle métier par défaut qui limite l’accès aux enregistrements d’incidents.
| Nom | Table | Quand |
|---|---|---|
| Requête d’incident | Incident | avant, requête |
Exemple 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 calendrier pour les jours de la semaine
Type : Règles métier/Scripts clients.
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)
}Définir le champ de date en fonction de la date actuelle
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);
}Pour valider l’entrée de tous les champs de date/heure, vous pouvez utiliser ce qui suit dans un script de validation (). Étant donné que le format date/heure est codé en dur dans ce script, il doit correspondre au format date/heure de votre instance. Si le format de date/heure de votre instance change, vous devez mettre à jour votre script de validation.
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;}