Extraits de code pour utiliser dans la configuration des champs

Articles reliés

Introduction

L'option avancé de configuration des champs permet de rendre obligatoire ou en lecture seulement la quasi totalité des champs dans Octopus.

En utilisant cette option, vous prenez le contrôle d'éléments qui peuvent impacter le comportement normal d'Octopus. Il est très important d'utiliser cette option avec prudence et d'effectuer vos tests dans un environnement qui n'est pas en production.  

Cet article contient des exemples de code à utiliser dans l'éditeur de code pour la configuration des champs requis.

Extraits de code

Extraits de code pouvant être utilisés dans la configuration des champs. La plupart des exemples sont interchangeable pour REQUIRED ou READONLY. Veuillez noter que ces exemples sont isolés et qu'il est possible de combiner plusieurs conditions.

Services disponibles dans le code

  • injector : l'objet par lequel on peut avoir tous les services.
  • entity : la donnée en cours de sauvegarde.
  • OnlyIf() : fonction qui fait que lorsque la condition est fausse, le système prend la décision par défaut.
  • Vous pouvez mettre var util = injector.GetInstance() pour accéder à ces fonctions
    • util.CurrentUser : utilisateur courant.

    • util.Break() : permet à un développeur de déboguer une règle.

ReadOnly si l'utilisateur courant n'a pas le rôle X

Exemple sur CI - Centre de coûts :

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var role = "nom du rôle"; 
var isInRole = util.CurrentUser.UserTeamInfoForCurrentTeam.Roles.Any(g => g.Role.NameFR == role); 
return OnlyIf(!isInRole);

Readonly si l'utilisateur n'a la permission d'administrer Octopus

Exemple (version 4.1)

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var hasPermission = util.CurrentUser.HasPermission(ESI.Octopus.Constants.Enums.Permission.CanAdministerHelpDesk); 
return OnlyIf(!hasPermission);

Exemple (version 4.2)

var teamID = 1; 
var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var hasPermission = util.CurrentUser.HasPermission(teamID, ESI.Octopus.Constants.Enums.Permission.CanAdministerHelpDesk); 
return OnlyIf(!hasPermission);

Readonly si le champ a déjà une valeur

On ne peut assigner la valeur qu'une seule fois.

Exemple sur Incident - Description :

var original = entity.GetOriginalValue("FullDescription"); 
return OnlyIf(original.IsNotNull());

Requis si le champ a déjà une valeur

Une fois la valeur saisie, il est impossible de l'effacer; elle peut être modifiée, mais ne peut être mis vide. 

Exemple sur Incident - Description:

var original = entity.GetOriginalValue("FullDescription"); 
return OnlyIf(original.IsNotNull());

Requis si l'état du CI est En Service

Exemple sur CI - No. d'inventaire :

var inService = entity.StatusID == (int)ESI.Octopus.Constants.Enums.ConfigurationItemStatus.InService; 
return OnlyIf(inService);

Champs requis sauf si l'utilisateur courant a la licence Batch

Permet de laisser une porte ouverte pour les programmes de type batch.

Exemple sur CI - No. d'inventaire :

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var isBatch = util.CurrentUser.LicenseType.NameFR == "Traitement en lot"; 
return OnlyIf(!isBatch);

Normalement ceci serait combiné avec une autre règle. Par exemple, No. d'inventaire requis si CI en service.

Exemple sur CI - No. d'inventaire :

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var isBatch = util.CurrentUser.LicenseType.NameFR == "Traitement en lot"; 
var inService = entity.StatusID == (int)ESI.Octopus.Constants.Enums.ConfigurationItemStatus.InService; 

return OnlyIf(!isBatch && inService);

Intervenant requis si le groupe est X

Si on a un groupe pour lequel on veut toujours un intervenant pour combler le fait qu'il n'y a pas de concept de queue de traitement.

Exemple sur Incident - Intervenant :

var group = "Spécialistes Applicatifs"; 
return OnlyIf(entity.IsOpened && entity.Group.DescrFr == group);

Rendre un champs obligatoire si un autre est rempli

Si le champ Coût d'achat n'est pas vide, alors le champ Centre de coûts est requis. 

Exemple sur CI - Centre de coûts :

return OnlyIf(entity.PurchasePrice.IsNotNull());

Rendre un champs obligatoire pour un type de CI en particulier

La catégorie est obligatoire pour un CI de type Serveur.

Exemple sur CI - Catégorie : 

return OnlyIf(entity.Type.DescrFR == "Serveur");

Rendre un champs obligatoire si un autre champs est vide

Il faut au mois un Numéro de série ou un Numéro d'inventaire. Ceci se fait en mettant deux règles, une sur chaque champ.

Exemple sur CI - Numéro d'inventaire

return OnlyIf(entity.SerialNumber.IsNull());


Exemple sur CI - Numéro de série

return OnlyIf(entity.InventoryNumber.IsNull());

Rendre un État ReadOnly si l'utilisateur n'est dans le groupe responsable du CI

...sauf si le CI n'a pas de groupe responsable.

Exemple sur CI - État

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 

var canWrite = entity.MaintenanceGroup.IsNull() || entity.MaintenanceGroup.HasMember(util.CurrentUser.ID); 
return OnlyIf(!canWrite);

Rendre un État ReadOnly si l'utilisateur n'est dans le groupe Centre de service

var serviceDeskGroupID = 1; 
var groupService = injector.GetInstance<ESI.Octopus.Entities.Service.Interface.IGroupService>(); 

var group = groupService.GetEntity(serviceDeskGroupID); 

var util = injector.GetInstance<ESI.Octopus.Core.ScriptUtility>(); 
var canWrite = group.HasMember(util.CurrentUser.ID); 
return OnlyIf(!canWrite);
X
Aidez-nous à améliorer l’article