Traitement d'un processus : Fermeture automatique

Cet exemple explique comment utiliser un calcul planifié pour faire passer un processus d'un état à un autre. Plus précisément, elle montre comment faire passer un incident résolu depuis 40 heures à l'état Fermé. Vous pouvez modifier le calcul pour qu'il s'applique à d'autres modules ou à d'autres états. Par exemple, vous pouvez modifier le calcul pour qu'il renvoie les appels qui sont restés à l'état Chez le client pendant une durée particulière.

La réalisation de ce calcul comprend trois étapes :

  1. Configuration du calcul planifié
  2. Planification du calcul
  3. Planification d'une action globale pour changer l'état du processus approprié

La première étape consiste à configurer un calcul qui teste l'incident afin de savoir s'il est prêt pour la fermeture. À l'étape 2, nous configurons ce calcul pour qu'il soit effectué chaque nuit, mais il faut d'abord créer une case à cocher où stocker les résultats de ce calcul.

Pour configurer le calcul planifié :
  1. Dans Concepteur d'objet, créez un attribut booléen dans l'objet Gestion des incidents\Incident, appelé Fermeture automatique.
  2. Dans la grille des propriétés, définissez Valeur par défaut sur False (Faux).
  3. Dans la grille des propriétés, définissez Type de calcul sur Planifié.
    La boîte de dialogue Modifier la formule s'affiche.
  4. Entrez la commande suivante dans le champ d'éditeur :
Copier
import System
static def GetAttributeValue(Incident):
    Flag = 'False'
 
    if Incident.Status.Name == 'Resolved':
 
        Resolution = Incident.Resolutions.Latest()
        TimeSinceResolved = Incident.GetBusinessTime(Resolution.CreationDate, DateTime.UtcNow)
        if TimeSinceResolved.TotalHours > 40:
 
            if DateTime.Today.DayOfWeek != DayOfWeek.Saturday and DateTime.Today.DayOfWeek != DayOfWeek.Sunday:
                Flag = 'True'
 
    return Flag

Les deux premières lignes ne sont pas indentées. La ligne Flag = 'False' et la première ligne commençant par if sont indentées d'un espace. Les lignes comprises entre Resolution et la seconde ligne if sont indentées de deux espaces. La ligne contenant le troisième if porte une triple indentation et la ligne située au-dessous (Flag = 'True') est indentée quatre fois. La ligne finale (return Flag) est indentée d'un seul espace.

Initialement, l'indicateur est configuré sur False (Faux), puis le calcul vérifie si l'incident a ou non l'état Résolu. Si l'incident est résolu, le calcul passe à la section de calcul suivante.

Resolution = Incident.Resolutions.Latest() utilise la fonction de collection Latest() pour renvoyer la résolution d'incident portant la date de création la plus récente. Il est alors possible d'utiliser Resolution.CreationDate sur la ligne suivante pour obtenir la date de création de la résolution la plus récente.

TimeSinceResolved = Incident.GetBusinessTime(Resolution.CreationDate, DateTime.UtcNow) utilise la fonction d'objet GetBusinessTime afin de déterminer la différence, en nombre d'heures ouvrables, entre la date de création de la dernière résolution (Resolution.CreationDate) et l'heure actuelle au fuseau UTC (fonction de date/heure DateTime.UtcNow), d'après le calendrier appliqué par le niveau de réponse de l'incident. (La plupart de valeurs de date/heure de la base de données sont stockées au format UTC.)

Si cette valeur dépasse 40 (1 semaine de travail = 5 x 8 = 40 heures), alors le calcul vérifie que le jour de semaine concerné n'est pas (!=) samedi ni dimanche. Si le calcul réussit le test, l'indicateur est réglé sur True (Vrai).

La ligne finale du calcul renvoie la valeur de l'indicateur, qui servira de valeur pour l'attribut Fermeture automatique.

Vous pouvez modifier ce calcul afin qu'il fasse passer un processus d'un état à l'autre en choisissant un état autre que Résolu et en utilisant une autre collection. Par exemple, en utilisant la collection et l'état Chez le client, vous pouvez renvoyer à l'analyste les processus pour lesquelles vous attendez depuis un certain temps une réponse du client.

L'étape suivante consiste à planifier le calcul à exécuter. Cette planification a besoin d'une requête des incidents à tester, il faut donc également la créer.

Pour créer une planification pour le calcul :
  1. Dans Concepteur de requête et de rapport, créez une nouvelle requête système sur la base de l'objet Gestion des incidents\Incident, intitulée Incidents résolus.
  2. Définissez les critères sur État Est égal à (Résolu), puis enregistrez-les.
  3. Dans Gestionnaire de planifications, accédez à l'arborescence Gestion des actions globales, puis cliquez sur Nouvelle action globale planifiée dans la liste Actions.
  4. Dans le champ Nom, entrez Calcul Fermeture automatique.
  5. Configurez la planification pour une exécution quotidienne à l'heure appropriée (hors heures ouvrables, généralement).
  6. Dans la liste Module, sélectionnez Gestion des incidents. Dans la liste Objet d'affaires, sélectionnez Incident. Enfin, dans la liste Requête, sélectionnez Incidents résolus (la requête que nous venons de créer).
  7. Dans la liste Type d'action planifiée, sélectionnez Exécuter le calcul.
  8. Cliquez sur Calculs.
    La boîte de dialogue Sélectionnez les attributs de calcul que vous voulez calculer s'affiche.
  9. Déplacez notre attribut AutoClose (Fermeture automatique) vers la liste Attributs de calcul sélectionnés, puis cliquez sur OK.
  10. Cliquez sur pour enregistrer la planification.

Le calcul planifié que nous venons de créer définit un indicateur dans l'incident sur True (Vrai), mais ne ferme pas réellement l'incident. Pour effectuer l'opération voulue, nous devons créer une action globale afin de fermer tous les incidents dont l'indicateur est configuré sur True. D'abord, il faut créer une requête pour sélectionner les incidents corrects.

Pour planifier l'action Fermer :
  1. Dans Concepteur de requête et de rapport, copiez la requête Incidents résolus et renommez-la Incidents résolus à fermer automatiquement.
  2. Ajoutez le deuxième critère suivant :
    AND AutoClose Est égal à (True).
    Nous pouvons maintenant créer la planification.
  3. Créez une nouvelle action globale planifiée comme précédemment et attribuez-lui le nom Action Fermeture automatique.
  4. Configurez la planification pour une exécution quotidienne, comme précédemment, mais 30 minutes après la planification du calcul créée plus haut.
    Il nous faut une action planifiée qui calcule et configure les indicateurs AutoClose (Fermeture automatique) des incidents sur Terminé avant d'exécuter cette action planifiée, puis qui ferme les incidents avec indicateur.
  5. Dans la liste Module, sélectionnez Gestion des incidents. Dans la liste Objet d'affaires, sélectionnez Incident. Enfin, dans la liste Requête, sélectionnez Incidents résolus à fermer automatiquement.
  6. Dans la liste Type d'action planifiée, sélectionnez Exécuter l'action.
  7. Dans la liste Actions, cliquez sur Fermer.
  8. Cliquez sur Données de fenêtre.
    La fenêtre Fermeture s'affiche.
  9. Remplissez les champs de la fenêtre Fermeture selon vos besoins, puis cliquez sur .
    La planification est enregistrée.

Vous pouvez utiliser cette technique pour toutes les actions, pas seulement pour Fermer. Toutefois, vérifiez que les processus sélectionnés par la requête offrent bien les actions voulues pour l'état en cours.