Cet exemple illustre l’intégration entre ServiceNow et CoreView afin de traiter une demande d’utilisateur final pour la création d’une boîte aux lettres partagée.
Dans ce scénario, l’utilisateur qui demande la création de la boîte aux lettres partagée accède à un formulaire de catalogue en libre-service dans ServiceNow. Il peut saisir le nom de la boîte aux lettres et indiquer les utilisateurs auxquels l’accès doit être accordé.
Partie 1 : création d’un flux de travail dans CoreView
La première étape consiste à créer un flux de travail dans CoreView. Si vous ne savez pas comment créer un flux de travail, vous pouvez consulter la documentation ou vous entraîner avec ce tutoriel.
Le flux de travail permettant de créer une boîte aux lettres partagée comprend plusieurs étapes pouvant être omises ou personnalisées selon les processus métier de votre organisation. Dans cet exemple, les étapes d’approbation ont été omises pour simplifier le flux de travail.
Éléments du flux de travail
Dans CoreView, créez un flux de travail composé des entrées d’exécution et des actions suivantes :
Consulter les éléments du flux de travail
Entrées
Nom | Type | Description |
---|---|---|
SharedMailboxName | String | Le nom de la boîte aux lettres partagée à créer |
GroupMembers | String | Le ou les membres à ajouter pour accéder à la boîte aux lettres partagée |
ServiceNowID | String | Le sys_id de l’élément de demande ServiceNow utilisé pour mettre à jour la demande |
ServiceNowRequestID | String | Le sys_id de la demande ServiceNow utilisé pour mettre à jour l’enregistrement de la demande |
Actions
Nom | Description |
---|---|
CreateSharedMailbox | Crée la boîte aux lettres partagée selon le nom transmis depuis ServiceNow |
AddMailboxPermissions | Ajoute le ou les membres transmis par ServiceNow, avec les droits FullAccess sur la SharedMailbox. Cet exemple utilise un appel de flux de travail imbriqué afin de simplifier. |
UpdateTableRecord | Met à jour et clôture l’élément de demande (RITM) dans ServiceNow |
UpdateTableRecord | Met à jour et clôture la demande dans ServiceNow |
Le résultat attendu doit être le suivant :

Explication de l’action Update Table Record
Pour la communication vers ServiceNow, l’action Update Table Record dans CoreView effectue un appel API afin d’accéder à des tables spécifiques dans ServiceNow. Elle met alors à jour ou modifie les enregistrements qui correspondent au sys_id de la table concernée.
Le code de la règle métier dans ServiceNow inclut le sys_id de l’élément de demande et de la demande comme paramètres du flux de travail, avec d’autres paramètres nécessaires. Cela permet de cibler l’enregistrement spécifique à mettre à jour.
Il est important de noter que la propriété personnalisée de l’action Update Table Record utilise le nom de la propriété, qui suit généralement la convention des minuscules dans ServiceNow. Il s’agit d’un champ distinct de l’étiquette ou du nom d’affichage, qui peut inclure une majuscule et des espaces.
Mettre à jour l’enregistrement de la table : sc_req_item
- Nom de la table : sc_req_item
- Sys_id : INPUT|ServiceNowID
- Propriété personnalisée 1
- Clé : state
- Valeur : 3
- Propriété personnalisée 2
- Clé : close_code
- Valeur : Solved (CoreView) _personnalisé_
- Propriété personnalisée 3
- Clé : close_notes
- Valeur : Shared Mailbox (INPUT|SharedMailboxName) Created via CoreView

Mettre à jour l’enregistrement de la table : sc_request
- Nom de la table : sc_request
- Sys_id : INPUT|ServiceNowRequestID
- Propriété personnalisée 1
- Clé : request_state
- Valeur : closed_complete
- Propriété personnalisée 2
- Clé : close_notes
- Valeur : Shared Mailbox (INPUT|SharedMailboxName) Created by CoreView

Partie 2 : intégrer ServiceNow
Étape 1 : insérer le Script Include
Le Script Include sert de base à toutes les exécutions de flux de travail de ServiceNow vers CoreView. Il permet de gagner du temps de développement en évitant de devoir répéter et dépanner l’appel d’API dans de multiples formulaires de demande.

Ce Script Include contient deux fonctions :
- une pour les appels généraux
- et une autre spécialement conçue pour les règles métier
Afficher le bloc de code du Script Include
//NOTE: the following details need amending in the script: authUrl, authToken, companyID, workflowUrl
var CoreViewWorkflowCall = Class.create();
CoreViewWorkflowCall.prototype = Object.extendsObject(AbstractAjaxProcessor, {
CVWorkflowCall :function(){
var CVWorkflowID = this.getParameter('sysparm_CVWorkflowID');
var CVWorkflowParams = this.getParameter('sysparm_CVWorkflowParams');
//Building the CoreView workflow call
var authUrl = 'https://www.loginportal.online/api/auth'; //url to auth to CoreView
var authToken = '**********m1K-PAFbI4lAaO'; //CoreView api auth token
var companyId = '**********bdfe1a974a345ea3042d4b'; //internal CoreView ID for company tennat
//Get an access token from CoreView
var jwtRequest = new sn_ws.RESTMessageV2();
jwtRequest.setEndpoint(authUrl);
jwtRequest.setHttpMethod('post');
jwtRequest.setRequestHeader("Accept","Application/json");
jwtRequest.setRequestHeader("Content-type", "Application/json"); //needed for CoreView workflow v2
jwtRequest.setRequestBody('{}');
jwtRequest.setRequestHeader("Authorization", "Bearer " + authToken);
var jwtResponse = jwtRequest.executeAsync();
jwtResponse.waitForResponse(60);
var jwtBody = jwtResponse.getBody();
var jwtToken = JSON.parse(jwtBody);
var jwt = jwtToken.bearerToken;
// Workflow call Variables
var workflowUrl = 'https://coreflowusapi.coreview.com';
var workflowPath = '/api/executions/';
var workflowId = CVWorkflowID; //workflow being called in CoreView passed from glideajax in client script
//Execute the call back to the CoreView api to run the workflow
var request = new sn_ws.RESTMessageV2();
request.setEndpoint(workflowUrl + workflowPath + workflowId);
request.setHttpMethod("post");
request.setRequestHeader("Accept", "Application/json");
request.setRequestHeader("Authorization", "Bearer " + jwt);
request.setRequestHeader("x-scompany", companyId);
request.setRequestHeader("Content-type", "Application/json"); //needed for CoreView workflow v2
request.setRequestBody(CVWorkflowParams); //workflow params passed from glideajax in client script, JSON was stringified before the call
var response = request.executeAsync();
response.waitForResponse(60);
var responseBody = response.getBody();
},
CVWorkflowCall_BR :function(CVWorkflowID, CVWorkflowParams){
//Building the CoreView workflow call
var authUrl = 'https://www.loginportal.online/api/auth'; //url to auth to CoreView
var authToken = '**********m1K-PAFbI4lAaO'; //CoreView api auth token
var companyId = '**********bdfe1a974a345ea3042d4b'; //internal CoreView ID for company tennat
//Get an access token from CoreView
var jwtRequest = new sn_ws.RESTMessageV2();
jwtRequest.setEndpoint(authUrl);
jwtRequest.setHttpMethod('post');
jwtRequest.setRequestHeader("Accept","Application/json");
jwtRequest.setRequestHeader("Content-type", "Application/json"); //needed for CoreView workflow v2
jwtRequest.setRequestBody('{}');
jwtRequest.setRequestHeader("Authorization", "Bearer " + authToken);
var jwtResponse = jwtRequest.executeAsync();
jwtResponse.waitForResponse(60);
var jwtBody = jwtResponse.getBody();
var jwtToken = JSON.parse(jwtBody);
var jwt = jwtToken.bearerToken;
// Workflow call Variables
var workflowUrl = 'https://coreflowusapi.coreview.com';
var workflowPath = '/api/executions/';
var workflowId = CVWorkflowID; //workflow being called in CoreView passed from glideajax in client script
//Execute the call back to the CoreView api to run the workflow
var request = new sn_ws.RESTMessageV2();
request.setEndpoint(workflowUrl + workflowPath + workflowId);
request.setHttpMethod("post");
request.setRequestHeader("Accept", "Application/json");
request.setRequestHeader("Authorization", "Bearer " + jwt);
request.setRequestHeader("x-scompany", companyId);
request.setRequestHeader("Content-type", "Application/json"); //needed for CoreView workflow v2
request.setRequestBody(CVWorkflowParams); //workflow params passed from glideajax in client script, JSON was stringified before the call
var response = request.executeAsync();
response.waitForResponse(60);
var responseBody = response.getBody();
},
type: 'CoreViewWorkflowCall'
});
Étape 2 : configurer le formulaire de demande de l’élément du catalogue
Ce formulaire de demande simple utilise une zone de texte pour le nom de la boîte aux lettres partagée et un ensemble de variables multi-lignes pour la composition du groupe.

Une fois que l’utilisateur final a renseigné le formulaire et clique sur « Order Now/Submit », la règle métier effectue le traitement une fois l’élément créé dans la table [sc_req_item].
Étape 3 : configurer la règle métier
La règle métier traite la demande dès qu’un enregistrement est créé dans la table [sc_req_item].
Le code de la règle métier récupère les variables de la demande et les transmet à CoreView pour traitement. Le code de cette règle est spécifique à cet exemple de demande et sera donc différent pour chaque cas. La structure reste la même : recueillir les valeurs des champs, les convertir au format JSON puis appeler la fonction du Script Include pour exécuter l’appel API.
Afficher la configuration de la règle métier
- Nom : Request M365 Shared Mailbox
- Table : Request Item [sc_req_item]
- Moment d’exécution
- Quand : après
- Insertion : coché
- Conditions de filtrage
- L’élément est ‘Request M365 Shared Mailbox’ _il s’agit du nom de l’élément du catalogue créé_

Afficher le code de la règle métier
(function executeRule(current, previous /*null when async*/) {
// Add your code here
var ritmGR = new GlideRecord('u_m365users'); //creating pointer to user table to get user properties
var rowCount = current.variables.distributiongroupmembers.getRowCount();
var groupMembers = []; //storing the upn here
//build the array of upns for workflow input variables
for(var i = 0; i < rowCount; i++) {
ritmGR.get(current.variables.distributiongroupmembers[i].GroupMember); //goes to the record in the user table according to the sys_id of the GroupMember
groupMembers[i] = ritmGR.getValue('u_userprinciplename'); //add upn to array for use later
}
var workflowParams = {
SharedMailboxName: current.variables.DistributionGroupName.getValue(),
GroupMembers: groupMembers,
ServiceNowID: current.getUniqueValue(), //gets the sys_id of the catalog item
ServiceNowRequestID: current.request.getValue() //get the sys_id of the parent request
};
var WorkflowID = "******725-a784-23d0c1ab8c50"; //ID of workflow to execute in CoreView
var wfcall = new CoreViewWorkflowCall();
wfcall.CVWorkflowCall_BR(WorkflowID, JSON.stringify(workflowParams));
})(current, previous);