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 dans 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 règle métier Mettre à jour/Insérer.
Description : une durée d’activité calcule la durée d’ouverture à fermeture d’un incident en fonction des éléments particuliers de création et d’utilisation de calendriers. Si aucun calendrier n’est 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 à venir 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.
- Indiquez 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 d’un 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 script 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
Dans le cas d’un script avant 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 before est exécutée lors d’une action d’insertion et que vous avez une condition dans le script qui appelle current.setAbortAction(true), le nouvel enregistrement stocké dans current n’est pas créé dans la base de données.
Ajouter la fonctionnalité de remplissage automatique
L’ajout de la 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. Commencez par créer une table de recherche, puis renseignez le champ clé, dans ce cas la 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 de 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 renseigner de nombreux champs ou même importer des questions de script d’appel dans le champ Commentaires afin que le personnel du centre d’appels 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 avant requête par défaut
Vous pouvez utiliser une règle métier de requête qui s’exécute avant la requête de base de données pour empêcher les utilisateurs d’accéder à certains enregistrements.
Prenons l’exemple suivant 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, interroger |
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 les éléments suivants 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;}