Web compatibleServicios

JABÓN

losRetazo language admite servicios web basados en SOAP a través del proceso de generación de un proxy. Studiodebe usarse para generar el proxy que luego se guarda como una DLL .NET en elCXone sistema de archivos. Todos los servidores proxy de servicios web deben guardarse en la carpeta raíz de la unidad de negocio que los utilizará. Es posible que un administrador del sistema cree un proxy en la unidad de negocio 3 para uso compartido, aunque esto todavía no se ha hecho en producción.

Los servicios web basados en SOAP están disminuyendo a medida que los servicios web RESTful están ocupando su lugar. Es probable que nuestro proceso de generación de proxy de servicio web SOAP se suspenda en algún momento. No se planean nuevas mejoras para el futuro previsible.

Dentro del proceso de generación de proxy, se agregan ciertas capacidades al objeto de proxy para que funcione bien conCXone. Una de esas capacidades agregadas es la capacidad de serializar en un flujo binario. Todos los tipos, incluido el proxy, deben poder serializarse para que funcione la redundancia de VC y la capacidad de clasificación de secuencias de comandos. Entonces elStudio Se requiere un proceso de generación de proxy.

Además de la capacidad de serialización, el proxy también está configurado para que el motor de ejecución de VC utilice correctamente el grupo de subprocesos mientras espera a que se complete una llamada de servicio web. Sin esta capacidad, el grupo de subprocesos de VC no se utilizará correctamente y, como resultado, los clientes pueden verse afectados negativamente. Es fundamental que se utilice la agrupación de subprocesos adecuada.

La capacidad final agregada por elStudio proceso es la capacidad de rastrear el uso del servicio web. A medida que se llama al proxy para realizar llamadas a servicios web externos, se utilizan contadores y rastreadores de tiempo para registrar el uso y el impacto. Estas métricas se guardan varias veces durante el día en una tabla de base de datos para uso administrativo.

Usos

Dentro de un fragmento, el comando USES permite que un fragmento incluya una DLL de proxy de servicio web para su uso dentro del fragmento. El archivo DLL debe estar ubicado en la carpeta raíz de la unidad de negocios actual en el servidor de archivos o en la carpeta raíz de la unidad de negocios 3 (para uso compartido). Sintaxis:

UTILIZA "<proxy> .dll" 

Ejemplos:

UTILIZA "sf.dll" cStart = "{ahora}" 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 = "Llamada realizada por {first} {Last}." t.Subject = "Call @ {cStart}" t.Status = "Completed" t.CallType = "Outbound" t.OwnerId = SF_Agent_ID t.ReminderDateTime = "{cStart}" Tipo de interruptor {CASE "CON" {t.WhoId = SF_Obj_ID} CASE "LEA" {t.WhoId = SF_Obj_ID} CASE "ACC" {t.WhatId = SF_Obj_ID} CASE "OPP" {t.WhatId = SF_Obj_ID} CASE "CAS" {t.WhatId = SF_Objult_ID} sforce.create (t) 

NOTA: Antes de que se pueda utilizar cualquier DLL de proxy de servicio web en la plataforma (fuera deStudio pruebas), debe ser autorizado. El proceso de autorización actual implica agregar el nombre de la DLL a un archivo de texto de autorización ubicado en el servidor COR (donde se ejecuta el VC). Utilice la página Resumen de Web Admin y verifique la configuración de AuthorizedAssemblies para verificar la ubicación. El formato de la entrada es BUS <busno> \ <proxy> .dll. Por ejemplo: BUS4 \ LCWS.dll. Cada DLL distinto debe estar en una nueva línea. Si una DLL se actualiza después de haber sido utilizada dentro de un script, la única forma de utilizar la DLL actualizada es reiniciar el VC.

Sosegado

losRetazo language funciona con servicios web RESTful a través de un par de servicios integrados. El primero es el servicio RestProxy que se puede usar creando una nueva instancia de esta manera:

proxy = GetRESTProxy () 

RestProxy proporciona un puñado de propiedades y métodos para interactuar con servidores web remotos. El método clave para realizar una solicitud se llama MakeRestRequest. A continuación se proporcionará una descripción completa de todas las propiedades y métodos. Al intercambiar información con un servicio web RESTful, RestProxy admite un formato de definición de datos estructurados dinámicos llamado tipo DynamicData. El tipo DynamicData puede recibir datos con formato XML y JSON y proporcionar patrones de acceso orientados a objetos para leer los datos. También puede permitir la generación dinámica de un objeto que se puede convertir en XML o JSON.

Para crear un nuevo objeto DynamicData, use el comando DYNAMIC:

DYNAMIC <nombre> [FROM '<cadena>' | <var>] 

<nombre> es el nombre de una nueva variable de secuencia de comandos y debe ser compatible con la especificación de secuencia de comandos de inControl (sin números iniciales ni caracteres especiales, excepto el guión bajo '_', que opcionalmente termina con un signo de dólar '$'). Si se utiliza la cláusula FROM opcional, el texto puede ser una cadena JSON o XML explícita (entre comillas simples) o el nombre de una variable de secuencia de comandos que contenga JSON o XML. La inicialización se proporciona solo para simplificar las pruebas y no se proporciona como un medio general para inicializar variables dinámicas. Solo se permite una línea de texto. Si se encuentra un salto de línea antes de la comilla simple de cierre, se genera un error.

Miembros y submiembros

Las variables dinámicas dentro de este lenguaje son entidades especialmente diseñadas que tienen una amplia gama de capacidades útiles. En la superficie, son objetos que pueden tener miembros creados dinámicamente. Por ejemplo, en un Snippet se puede declarar una variable dinámica y crear varios miembros:

DYNAMIC employee employee.Name = "John Smith" employee.Phone = "8005551212" employee.Address = "1234 Clay Street 

A medida que se dirige a cada miembro, se crea automáticamente. Entonces elNombre,Teléfono , yDirección los miembros ahora actuarán como propiedades de la variable de empleado.

Los miembros de variables dinámicas distinguen entre mayúsculas y minúsculas. Entoncesnombre de empleado no es lo mismo que nombre de empleado. Esto es divergente del comportamiento normal de laCXone plataforma. Sin embargo, debido a la necesidad de interoperar con sistemas externos, la mayoría de los cuales dependen del caso correcto, se tomó esta decisión y solo se aplica a variables dinámicas.

Los submiembros también se pueden crear sobre la marcha:

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

Nuevamente, a medida que se direccionan los submiembros, se agregan automáticamente a la estructura. Ahora, con una sola expresión, se puede asignar una referencia a la estructura a otra variable de secuencia de comandos dinámica:

John = empleado 

Un punto importante a reconocer es que el empleado y "John" harán referencia a los mismos datos físicos. Si cambia un miembro de uno, cambiará ambos. Para copiar datos, utilice la función de copia incorporada. El seguimientoRetazo ejemplo demuestra esto:

DINÁMICO x x.Name = "John" y = x y.Name = "Sam" 

El resultado de lo cual se muestra a continuación:

Ejemplo de función de copia incorporada.

Con la función de copia, y obtiene una copia única y puede cambiarla sin afectar a x:

DYNAMIC x x.Name = "John" y = copy (x) y.Name = "Sam" 

Imagen que muestra un ejemplo de una función de copia.

También puede copiar miembros secundarios:

DYNAMIC x x.Name.First = "John" x.Name.Last = "Smith" y = copy (x.Name) y.First = "Sam" 

Imagen que muestra un ejemplo de miembros secundarios.

En cuanto a la función de copia: realiza una copia profunda convirtiendo el objeto en una representación textual y luego de nuevo en un objeto. Esto es más caro en los recursos de la plataforma que simplemente copiar una referencia. Los objetos muy grandes pueden generar mucha sobrecarga y potencialmente ralentizar la ejecución de los scripts. Úselo cuando sea necesario, pero trate de no abusar de él.

Las variables dinámicas también pueden manejar matrices. O el objeto en sí puede tratarse como una matriz de nivel superior o un miembro puede tratarse como una matriz:

DYNAMIC empleados empleados [1] = juan o empleados.Persona [1] = juan 

¡¡Importante!! Todas las matrices comienzan en el índice 1. Si hace referencia a un índice de matriz que aún no existe, lo creará. Si los elementos debajo del índice recién referenciado no existen, también se crearán. Por lo tanto, tenga cuidado, ya que especificar accidentalmente el índice 100 creará elementos vacíos para los índices del 1 al 99. Para obtener el número de elementos en una matriz, use la función count (): x = count (empleados.Persona).

Aquí está la pestaña Inspector enStudio'sRetazo editor de propiedades. Muestra una variable dinámica con una matriz de nivel superior:

Imagen que muestra una variable dinámica con una matriz de nivel superior.

Al mover los elementos a un miembro secundario llamado Nombre, así es como se ve:

Imagen que muestra ejemplos de elementos secundarios.

Existe una diferencia entre una variable dinámica que es una matriz de nivel superior en comparación con una variable de secuencia de comandos normal que es una matriz de variables dinámicas. El siguiente ejemplo lo ilustra:

DINÁMICO a DINÁMICO b DINÁMICO c a.Name = "John" b.Name = "Sam" c.Name = "Arnold" x [1] = ax [2] = bx [3] = c DYNAMIC yy [1] = ay [2] = por [3] = c 

Las 2 variables a examinar son x e y. La primera, x, es una variable de secuencia de comandos normal que contiene una matriz de variables dinámicas. La segunda, y, es una variable dinámica que es una matriz de nivel superior. Ambos se ven similares en el Inspector:

Imagen que muestra un ejemplo de variable dinámica.

Aunque se ven similares, no son lo mismo. La siguiente sección analiza el concepto de serialización para variables dinámicas. El punto importante es que en el ejemplo anterior, X no se puede utilizar para interoperar con un sistema remoto de la misma forma que Y. X no es serializable, Y lo es.

Publicación por entregas

Antes de discutir la serialización, sería útil mostrar cómo interactuar con variables dinámicas en comparación con las variables de secuencia de comandos normales. Las variables normales tienen una larga lista de métodos integrados para permitir cosas como el análisis de cadenas, la conversión a una fecha, la clasificación, etc. Haga clic en el siguiente menú desplegable para ver muchos ejemplos de cómo interactuar con variables dinámicas.

Una de las ventajas de utilizar variables dinámicas es el poder de la serialización. Esta es la capacidad de convertir el objeto en un formato textual adecuado para su transmisión a través de la web. Actualmente se admiten 2 formatos: XML y JSON. Si usa RestProxy (discutido anteriormente en esta sección), el proceso de serialización ocurrirá automáticamente. Si necesita generar la cadena serializada manualmente, se ofrecen 2 métodos de cadena:

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

Úselo dentro de un contexto de cadena para generar la versión serializada del objeto:

text = "{y.asjson ()}" 

Lo siguiente es lo quetexto podría contener asumiendo que el valor de y se parece al ejemplo anterior:

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

Asimismo, el método .asxml produce un resultado como el siguiente:

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

Miembros RestProxy

RestProxy, obtenido al llamar a GetRestProxy (), proporciona los servicios para comunicarse con un servidor web remoto utilizando las convenciones del servicio web RESTful. Al usar Studio Snippet Editor, las propiedades y métodos disponibles se pueden ver mientras se escribe. Simplemente declare una nueva instancia de proxy:

proxy = GetRESTProxy () 

Luego, en una nueva línea, escriba proxy seguido del punto (.):

Imagen que muestra el ejemplo de RESTProxy.

El sistema Intelli-Prompt mostrará automáticamente un cuadro de lista que contiene los miembros disponibles. Una vez que se elige un método, al escribir el paréntesis de apertura, se activará nuevamente el sistema Intelli-Prompt para revelar los parámetros:

Imagen que muestra el sistema Intelli-Prompt que muestra una caja de luz que contiene miembros disponibles.

Propiedades

Las propiedad Detalles
Código de estado Contiene el código de estado HTTP que sigue a una llamada a MakeRestRequest ().
Descripción de la Situación Contiene la descripción del estado HTTP después de una llamada a MakeRestRequest ().
Tipo de contenido Permite anular el encabezado de tipo de contenido predeterminado. El valor predeterminado es 'Form-urlencoded'. Si envía JSON, debe cambiarlo a 'application / json', por ejemplo.
ProxyTimeoutSeconds Permite cambiar el tiempo de espera de solicitud predeterminado. El valor predeterminado es 10 segundos.

Métodos

Método Detalles
string urlencode (valor de cadena)
Descripción Método auxiliar para codificar una cadena en formato de codificación de URL.
MakeRestRequest Realiza una solicitud HTTP a la URL designada.
ClearHeaders Borra los encabezados personalizados agregados con AddHeader.
AddHeader Agrega un encabezado personalizado a la solicitud HTTP.
MakeTwitterOauthRequest Construye una solicitud especial para comunicarse con Twitter.
GetSalesForceOAuthToken Genera un token de autorización especial requerido por SalesForce.com.