Pratiques conseillées pour la rédaction de scripts de flux de travail

Cette section décrit les meilleures pratiques pour écrire des scripts de flux de travail et s’assurer que les scripts s’exécutent comme prévu.

Dans cette rubrique :

Vérifier les types de valeur avant de les utiliser

Les valeurs de différents types se comportent différemment dans les différentes déclarations. Pour éviter des résultats imprévisibles, vérifiez les types de valeur avant d’utiliser les valeurs.

  • Vérifiez le type de valeur si vous n’êtes pas sûr.

    Par exemple, pour vérifier le type de valeur du champ ID de l’anomalie (BG_BUG_ID) :

    Copy code
    var valuetype = typeof Bug_Fields("BG_BUG_ID").Value;
    //Print it in console or show message dialog directly
    console.log(valuetype);
    //MesgBox(valuetype)
  • Utilisez une égalité souple (==) si vous ne souhaitez pas vérifier entre la chaîne et le nombre.

    Par exemple, l’instruction suivante est exécutée lorsque la valeur est la chaîne 10 ou le nombre 10.

    Copy code
    if (Bug_Fields)("BG_BUG_ID").Value == 10
  • Utilisez l’égalité stricte (===) si vous êtes sûr du type de valeur.

    Par exemple, l’instruction suivante est exécutée uniquement lorsque la valeur est la chaîne 10.

    Copy code
    if (Bug_Fields)("BG_BUG_ID").Value === '10'

Retour en haut

Vérifier si une valeur est vide

Pour éviter les erreurs, vérifiez que toutes les valeurs ne sont pas vides avant de tenter de les utiliser.

Par exemple, supposons que la valeur du champ de l’utilisateur personnalisé BG_USER_01 est un tableau. Pour vérifier si la valeur est vide, utilisez l’instruction suivante :

Copy code
var userField = Bug_Fields("BG_USER_01");
var value = userField.Value;
var isMultiple = userField.IsMultiValue;
if (isMultiple && Array.isArray(value)) && value.length > 0) {
//Execute something
}

Retour en haut

Convertir les chaînes de date en objets de date avant la comparaison

Divers formats de chaîne de date sont acceptés à condition d’être valides. Si vous souhaitez comparer des dates, nous vous recommandons de remplacer d’abord chaque chaîne de date par un objet de date, puis de comparer ces objets de date.

Par exemple, pour configurer l’affichage d’une boîte de message lorsque la date de détection d’un bogue est antérieure à une date spécifique, vous pouvez écrire les scripts suivants :

Copy code
function Bug_MoveTo() {
    var detectionDate = new Date(Bug_Fields("BG_DETECTION_DATE").Value);
    var toComparedDate = new Date('2023/12/12');
    if (detectionDate  < toComparedDate) {
        MsgBox(Bug_Fields("BG_BUG_ID").Value);
    }
}

Retour en haut

Ajouter des instructions switch pour basculer et fournir une action par défaut

Si vous utilisez des instructions switch pour effectuer différentes actions en fonction de différentes conditions, assurez-vous d’ajouter également des instructions break et une clause default.

  • Instruction break. Le break après la case switch est utilisé pour éviter les erreurs dans les instructions switch.

  • Clause default. S’il n’y a pas de correspondance, le bloc de code dans la clause default est exécuté.

Par exemple :

Copy code
functionBug_FieldChange(fieldName) {
  var StatusFieldName = 'BG_STATUS';
  if (fieldName == StatusFeildName) {
    var value = Bug_Fields(StatusFieldName).Value;
    switch (value) {
      case 'New':
        // add code block to define what to execute if the status is changed to New.
        break;
      case 'Open'
        // // add code block to define what to execute if the status is changed to Open.
        break;
      default:
        // // add code block to define what to execute if there is no match.
        break
      }
     return;
}
// add code block to define what to execute if the changed field is not Status.
}

Retour en haut

Distinguer les boîtes de dialogue Nouvelle entité et de Détails de l’entité

Avant d’ajouter des scripts de flux de travail à un événement, vérifiez si l’événement est déclenché lorsqu’un utilisateur crée une entité ou ouvre une entité.

Dans l’exemple suivant, l’événement Bug_FieldChange est déclenché lorsqu’un utilisateur crée une anomalie.

Copy code
function Bug_FieldChange(fieldName) {
  if (ActiveDialogName === 'New Bug') {
    //add code to define what to execute when a user creates a defect.
  } else {
    //add code to define what to execute when a user edits a defect.
  }
  
}

Retour en haut

Évitez de définir des variables ou des fonctions en double

Si vous définissez une variable ou une fonction dans une section et que vous ajoutez ensuite une autre variable ou fonction portant le même nom dans une autre section, des conflits se produisent. L’une des variables ou fonctions n’est pas exécutée.

Pour éviter des conflits imprévisibles lors de la définition de variables ou fonctions, vérifiez toujours si une autre variable ou fonction portant le même nom existe déjà dans votre projet.

Retour en haut

À propos de l’utilisation de la boîte de message

Lorsque vous utilisez la fonction MsgBox pour faire apparaître une boîte de message, elle ne bloque pas l’exécution des opérations restantes. Si vous souhaitez bloquer les opérations jusqu’à ce qu’une interaction utilisateur soit effectuée dans la boîte de message, vous pouvez utiliser des promesses ou une fonction await/async.

Note : MsgBox ne s’applique pas aux scripts de projet avancés.

Par exemple, si vous personnalisez l’événement Bug_New comme suit sans utiliser de promesses ou une fonction await/async, la boîte de message puis la boîte de dialogue Nouvelle anomalie s’ouvrent en même temps lorsqu’un utilisateur crée une anomalie.

Copy code
function Bug_New()  {
    MsgBox('Show this message');
    Bug_Fields("BG_ACTUAL_FIX_TIME").Value = 50;
}

Si vous utilisez une promesse ou une une fonction await/async comme suit, lorsqu’un utilisateur crée une anomalie, la boîte de message apparaît, puis uniquement lorsque l’utilisateur clique sur OK dans la boîte de message, la boîte de dialogue Nouvelle anomalie apparaît.

Copy code
function Bug_New()  {
    return MsgBox('Show this message before new dialog').then(function() {
    Bug_Fields("BG_ACTUAL_FIX_TIME").Value = 50;
});
}
Copy code
async function Bug_New()  {
    await MsgBox('Show this message before new dialog');
    Bug_Fields("BG_ACTUAL_FIX_TIME").Value = 50;
}

Note : La fonction Await/async présente une exigence plus élevée pour votre version de navigateur. Avant d’utiliser une fonction await/async, vérifiez qu’elle est prise en charge par votre navigateur.

Retour en haut

Définir le niveau de journalisation sur débogage pour le dépannage

Applicable à : Scripts de projet avancés.

Pour faciliter le dépannage lors de l’exécution de scripts de projet avancés, définissez le niveau de journalisation sur débogage, afin d’enregistrer les événements les plus utiles pour le débogage.

Pour plus d’informations sur la définition du niveau de journalisation, voir Configurer les paramètres des fichiers journaux du serveur.

Retour en haut