Web pris en chargePrestations de service

SAVON

LeFragment language prend en charge les services Web basés sur SOAP via le processus de génération d'un proxy. Studiodoit être utilisé pour générer le proxy qui est ensuite enregistré en tant que DLL .NET dans leCXone système de fichiers. Tous les proxys de service Web doivent être enregistrés dans le dossier racine de l'unité commerciale qui l'utilisera. Il est possible pour un administrateur système de créer un proxy sous l'unité commerciale 3 pour une utilisation partagée, bien que cela n'ait pas encore été fait en production.

Les services Web basés sur SOAP déclinent à mesure que les services Web RESTful prennent leur place. Notre processus de génération de proxy de service Web SOAP est susceptible d'être interrompu à un moment donné. Aucune nouvelle amélioration n'est prévue dans un avenir prévisible.

Dans le processus de génération de proxy, certaines fonctionnalités sont ajoutées à l'objet proxy afin qu'il fonctionne bien avecCXone. Une de ces capacités supplémentaires est la possibilité de sérialiser dans un flux binaire. Tous les types, y compris le proxy, doivent pouvoir être sérialisés pour que la redondance VC et la capacité de marshaling de script fonctionnent. Alors leStudio un processus de génération de proxy est requis.

En plus de la capacité de sérialisation, le proxy est également configuré pour que le moteur d'exécution VC utilise correctement le pool de threads en attendant la fin d'un appel de service Web. Sans cette fonctionnalité, le pool de threads VC ne sera pas utilisé correctement et, par conséquent, les clients peuvent être affectés négativement. Il est essentiel que le pool de threads approprié soit utilisé.

La capacité finale ajoutée par leStudio processus est la capacité de suivre l'utilisation du service Web. Comme le proxy est appelé pour effectuer des appels de service Web externes, des compteurs et des suiveurs de temps sont utilisés pour enregistrer l'utilisation et l'impact. Ces mesures sont enregistrées plusieurs fois au cours de la journée dans une table de base de données à des fins d'administration.

Les usages

Dans un extrait de code, la commande USES permet à un extrait de code d'inclure une DLL de proxy de service Web à utiliser dans l'extrait de code. Le fichier DLL doit se trouver soit dans le dossier racine de l'unité commerciale actuelle sur le serveur de fichiers, soit dans le dossier racine de l'unité commerciale 3 (pour une utilisation partagée). Syntaxe:

UTILISE "<proxy> .dll" 

Exemples:

UTILISE "sf.dll" cStart = "{now}" sforce = new SforceService () session = new SessionHeader () loginResult = sforce.login ("demo@ucn.net", password6 ") sforce.sessionheadervalue = session session.sessionid = loginResult.sessionid sforce.url = loginresult.serverUrl t = new Task () t.ActivityDate = # "8/20/2050" t.Description = "Appel passé par {first} {Last}." t.Subject = "Call @ {cStart}" t.Status = "Completed" t.CallType = "Outbound" t.OwnerId = SF_Agent_ID t.ReminderDateTime = "{cStart}" SWITCH Type {CASE "CON" {t.WhoId = SF_Obj_ID} CASE "LEA" {t.WhoId = SF_Obj_ID} CAS "ACC" {t.WhatId = SF_Obj_ID} CASE "OPP" {t.WhatId = SF_Obj_ID} CASE "CAS" {t.WhatIdult = SF_Obj_ID} sforce.create (t) 

REMARQUE: avant qu'une DLL de proxy de service Web puisse être utilisée sur la plate-forme (en dehors deStudio tests), il doit être autorisé. Le processus d'autorisation consiste aujourd'hui à ajouter le nom de la DLL à un fichier texte d'autorisation situé sur le serveur COR (où le VC s'exécute). Utilisez la page Résumé de l'administrateur Web et vérifiez le paramètre de configuration AuthorizedAssemblies pour vérifier l'emplacement. Le format de l'entrée est BUS <busno> \ <proxy> .dll. Par exemple: BUS4 \ LCWS.dll. Chaque DLL distincte doit être sur une nouvelle ligne. Si une DLL est mise à jour après avoir été utilisée dans un script, le seul moyen d'obtenir la DLL mise à jour à utiliser est de redémarrer le VC.

Reposant

LeFragment language fonctionne avec les services Web RESTful via quelques services intégrés. Le premier est le service RestProxy qui peut être utilisé en créant une nouvelle instance de cette manière:

proxy = GetRESTProxy () 

RestProxy fournit une poignée de propriétés et de méthodes pour interagir avec des serveurs Web distants. La méthode clé pour faire une demande est appelée MakeRestRequest. Une description complète de toutes les propriétés et méthodes sera fournie ci-dessous. Lors de l'échange d'informations avec un service Web RESTful, RestProxy prend en charge un format de définition de données structurées dynamiques appelé type DynamicData. Le type DynamicData peut recevoir des données au format XML et JSON et fournir des modèles d'accès orientés objet pour lire les données. Il peut également permettre la génération dynamique d'un objet qui peut être converti en XML ou JSON.

Pour créer un nouvel objet DynamicData, utilisez la commande DYNAMIC:

DYNAMIC <nom> [FROM '<chaîne>' | <var>] 

Le <nom> est le nom d'une nouvelle variable de script et doit être compatible avec la spécification de script inControl (pas de nombres de début ou de caractères spéciaux à l'exception du trait de soulignement '_', se terminant éventuellement par un signe dollar '$'). Si la clause FROM facultative est utilisée, le texte peut être une chaîne JSON ou XML explicite (entre guillemets simples) ou le nom d'une variable de script contenant JSON ou XML. L'initialisation est fournie pour simplifier les tests uniquement et n'est pas fournie comme un moyen général d'initialiser des variables dynamiques. Une seule ligne de texte est autorisée. Si un saut de ligne est rencontré avant le guillemet simple de fermeture, une erreur est générée.

Membres et sous-membres

Les variables dynamiques dans ce langage sont des entités spécialement conçues qui ont un large éventail de capacités utiles. En surface, ce sont des objets qui peuvent avoir des membres créés dynamiquement. Par exemple, dans un extrait de code, une variable dynamique peut être déclarée et plusieurs membres créés:

Employé DYNAMIQUE employee.Name = "John Smith" employee.Phone = "8005551212" employee.Address = "1234 Clay Street 

Au fur et à mesure que chaque membre est adressé, il est automatiquement créé. Alors leNom,Téléphone , etAdresse les membres agiront désormais comme propriétés de la variable employee.

Les membres de variables dynamiques sont sensibles à la casse. AlorsNom de l'employé n'est pas la même chose que Nom de l'employé. Ceci est différent du comportement normal duCXone Plate-forme. Cependant, en raison de la nécessité d'interagir avec des systèmes externes - dont la plupart dépendent du cas correct - cette décision a été prise et ne s'applique qu'aux variables dynamiques.

Les sous-membres peuvent également être créés à la volée:

employee.Department.Code = 942 employee.Department.Location = "Olive City" 

Là encore, à mesure que les sous-membres sont adressés, ils sont automatiquement ajoutés à la structure. Désormais, avec une seule expression, une référence à la structure peut être affectée à une autre variable de script dynamique:

John = employé 

Un point important à reconnaître est que l'employé et «John» référenceront les mêmes données physiques. Si vous changez un membre de l'un, vous changerez les deux. Pour copier des données, utilisez la fonction de copie intégrée. Le suivantFragment l'exemple le démontre:

DYNAMIQUE x x.Name = "Jean" y = x y.Name = "Sam" 

Le résultat est indiqué ci-dessous:

Exemple de fonction de copie intégrée.

Avec la fonction de copie, y obtient une copie unique et peut la modifier sans affecter x:

DYNAMIQUE x x.Name = "John" y = copier (x) y.Name = "Sam" 

Image affichant un exemple d'une fonction de copie.

Vous pouvez également copier des membres enfants:

DYNAMIQUE x x.Name.First = "Jean" x.Name.Last = "Smith" y = copie (x.Name) y.First = "Sam" 

Image affichant un exemple de membres enfants.

Concernant la fonction de copie: elle effectue une copie profonde en convertissant l'objet en une représentation textuelle, puis de nouveau en objet. Cela coûte plus cher sur les ressources de la plateforme que la simple copie d'une référence. Les objets très volumineux peuvent générer beaucoup de surcharge et ralentir potentiellement l'exécution des scripts. Utilisez-le si nécessaire, mais essayez de ne pas en abuser.

Les variables dynamiques peuvent également gérer des tableaux. Soit l'objet lui-même peut être traité comme un tableau de niveau supérieur, soit un membre peut être traité comme un tableau:

Employés DYNAMIQUES employés [1] = John ou employés.Personne [1] = John 

Important!! Tous les tableaux commencent à l'index 1. Si vous référencez un index de tableau qui n'existe pas encore, il le créera. Si les éléments sous le nouvel index référencé n'existent pas, ils seront également créés. Par conséquent, méfiez-vous, car la spécification accidentelle de l'index 100 créera des éléments vides pour les index 1 à 99. Pour obtenir le nombre d'éléments dans un tableau, utilisez la fonction count (): x = count (Employees.Person).

Voici l'onglet Inspecteur dansStudiodeFragment éditeur de propriétés. Il montre une variable dynamique avec un tableau de niveau supérieur:

Image affichant une variable dynamique avec un tableau de niveau supérieur.

En déplaçant les éléments dans un membre enfant appelé Name, voici à quoi il ressemble:

Image affichant des exemples d'éléments enfants.

Il existe une différence entre une variable dynamique qui est un tableau de niveau supérieur et une variable de script ordinaire qui est un tableau de variables dynamiques. L'exemple suivant illustre ceci:

DYNAMIQUE a DYNAMIQUE b DYNAMIQUE c a.Name = "John" b.Name = "Sam" c.Name = "Arnold" x [1] = ax [2] = bx [3] = c DYNAMIC yy [1] = ay [2] = par [3] = c 

Les 2 variables à examiner sont x et y. Le premier, x, est une variable de script normale contenant un tableau de variables dynamiques. La seconde, y, est une variable dynamique qui est un tableau de niveau supérieur. Les deux se ressemblent dans l'inspecteur:

Image affichant un exemple de variable dynamique.

Bien qu'ils se ressemblent, ils ne sont pas les mêmes. La section suivante traite du concept de sérialisation pour les variables dynamiques. Le point important est que dans l'exemple ci-dessus, X ne peut pas être utilisé pour interagir avec un système distant de la même manière que Y le peut. X n'est pas sérialisable, Y l'est.

Sérialisation

Avant de discuter de la sérialisation, il serait utile de montrer comment interagir avec les variables dynamiques par rapport aux variables de script normales. Les variables normales ont une longue liste de méthodes intégrées pour permettre des choses comme l'analyse de chaînes, la conversion en date, le tri, etc. Cliquez sur la liste déroulante suivante pour afficher de nombreux exemples d'interaction avec les variables dynamiques.

L'un des avantages de l'utilisation de variables dynamiques est la puissance de la sérialisation. Il s'agit de la possibilité de convertir l'objet dans un format textuel adapté à la transmission sur le Web. 2 formats sont actuellement pris en charge: XML et JSON. Si vous utilisez RestProxy (décrit plus haut dans cette section), le processus de sérialisation se déroulera automatiquement. Si vous devez générer manuellement la chaîne sérialisée, 2 méthodes de chaîne sont proposées:

<var> .asjson () <var> .asxml () 

À utiliser dans un contexte de chaîne pour générer la version sérialisée de l'objet:

text = "{y.asjson ()}" 

Ce qui suit est ce quetexte peut contenir en supposant que la valeur de y ressemble à l'exemple précédent:

{"Nom": [{"First": "Sam", "Last": "Smith"}, {"First": "Bill", "Last": "Smith"}]} 

De même, la méthode .asxml produit une sortie comme celle-ci:

<? xml version = "1.0" encoding = "utf-16" standalone = "yes"?> <DynamicDataObject><Name><First>Sam</First<Last>Smith</Last> </Name> <Name> <First>Bill</First><Last>Smith</Last></Name> </DynamicDataObject> 

Membres RestProxy

Le RestProxy, obtenu en appelant GetRestProxy (), fournit les services pour communiquer avec un serveur Web distant en utilisant les conventions de service Web RESTful. Lorsque vous utilisez l'éditeur d'extraits de code Studio, les propriétés et méthodes disponibles peuvent être affichées lors de la saisie. Déclarez simplement une nouvelle instance de proxy:

proxy = GetRESTProxy () 

Puis sur une nouvelle ligne, tapez proxy suivi du point (.):

Image affichant l'exemple RESTProxy.

Le système Intelli-Prompt affichera automatiquement une zone de liste contenant les membres disponibles. Une fois la méthode choisie, taper la parenthèse ouvrante activera à nouveau le système Intelli-Prompt pour révéler les paramètres:

Image affichant le système Intelli-Prompt montrant une litbox contenant les membres disponibles.

Propriétés

Biens Des détails
StatusCode Contient le code d'état HTTP suite à un appel à MakeRestRequest ().
Statut Description Contient la description de l'état HTTP suite à un appel à MakeRestRequest ().
ContentType Permet le remplacement de l'en-tête de type de contenu par défaut. La valeur par défaut est «Form-urlencoded». Si vous envoyez JSON, vous devez le changer en 'application / json' par exemple.
ProxyTimeoutSecondes Permet de modifier le délai d'expiration de la demande par défaut. La valeur par défaut est de 10 secondes.

Méthodes

Méthode Des détails
string urlencode (valeur de chaîne)
Description Méthode d'assistance pour coder une chaîne au format de codage Url.
MakeRestRequest Exécute une requête HTTP vers l'URL désignée.
ClearHeaders Efface tous les en-têtes personnalisés ajoutés avec AddHeader.
AddHeader Ajoute un en-tête personnalisé à la requête HTTP.
MakeTwitterOauthRequest Construit une demande spéciale pour communiquer avec Twitter.
GetSalesForceOAuthToken Génère un jeton d'autorisation spécial requis par SalesForce.com.