Web suportada Serviços

SABONETE

o Snippet O idioma suporta serviços Web baseados em SOAP através do processo de geração de um proxy. Studio deve ser usado para gerar o proxy, que é salvo como uma DLL .NET no diretório CXone sistema de arquivo. Todos os proxies de serviço da web devem ser salvos na pasta raiz da unidade de negócios que o usará. É possível que um administrador do sistema crie um proxy na unidade de negócios 3 para uso compartilhado, embora isso ainda não tenha sido feito na produção.

Os serviços web baseados em SOAP estão diminuindo à medida que os serviços web RESTful estão tomando seu lugar. É provável que nosso processo de geração de proxy de serviço da Web SOAP seja interrompido em algum momento. Não há novas melhorias planejadas para o futuro próximo.

Dentro do processo de geração de proxy, certos recursos são adicionados ao objeto proxy para que ele funcione bem com CXone. Um desses recursos adicionais é a capacidade de serializar em um fluxo binário. Todos os tipos, incluindo o proxy, devem poder serializar para que o recurso de redundância de VC e empacotamento de script funcione. Então o Studio processo de geração de proxy é necessário.

Além do recurso de serialização, o proxy também é configurado para que o mecanismo de execução do VC utilize adequadamente o conjunto de encadeamentos enquanto aguarda a conclusão de uma chamada de serviço da web. Sem esse recurso, o pool de encadeamentos VC não será usado corretamente e, como resultado, os clientes poderão ser afetados negativamente. É fundamental que o pool de encadeamentos adequado seja usado.

A capacidade final adicionada pelo Studio processo é a capacidade de rastrear o uso de serviços da web. Como o proxy é chamado para fazer chamadas externas de serviço da Web, contadores e rastreadores de tempo são utilizados para registrar o uso e o impacto. Essas métricas são salvas algumas vezes ao longo do dia em uma tabela de banco de dados para uso administrativo.

Usos

Dentro de um snippet, o comando USES permite que um snippet inclua uma DLL de proxy de serviço da web para uso dentro do snippet. O arquivo DLL deve estar localizado na pasta raiz da unidade de negócios atual no servidor de arquivos ou na pasta raiz da unidade de negócios 3 (para uso compartilhado). Sintaxe

USOS "<proxy> .dll" 

Exemplos:

USES "sf.dll" cStart = "{now}" sforce = nova sessão SforceService () = nova sessão SessionHeader () loginResult = sforce.login ("demo@ucn.net", senha6 ") sforce.sessionheadervalue = sessão session.sessionid = loginResult.sessionid sforce.url = loginresult.serverUrl t = nova tarefa () t.ActivityDate = # "20/8/2050" t.Description = "Chamada feita por {primeiro} {último}." t.Subject = "Chamada @ {cStart}" t.Status = "Concluído" t.CallType = "Saída" t.OwnerId = SF_Agent_ID t.ReminderDateTime = "{cStart}" Tipo de comutador {CASE "CON" {t.WhoId = SF_Obj_ID} CASO "LEA" {t.WhoId = SF_Obj_ID} CASO "ACC" {t.WhatId = SF_Obj_ID} CASO "OPP" {t.WhatId = SF_Obj_ID} CASO "CAS" {t.WhatId = SF_Obj_ID}} sforce.create (t) 

NOTA: Antes que qualquer DLL de proxy de serviço da Web possa ser usada na plataforma (fora de Studio teste), deve ser autorizado. O processo de autorização hoje envolve adicionar o nome da DLL a um arquivo de texto de autorização localizado no servidor COR (onde o VC é executado). Use a página Resumo do administrador da Web e verifique a configuração de AuthorizedAssemblies para verificar o local. O formato da entrada é BUS <busno> \ <proxy> .dll. Por exemplo: BUS4 \ LCWS.dll. Cada DLL distinta deve estar em uma nova linha. Se uma DLL for atualizada após ter sido usada em um script, a única maneira de obter a DLL atualizada a ser usada é reiniciar o VC.

Repousante

o Snippet O idioma funciona com serviços da Web RESTful por meio de alguns serviços internos. O primeiro é o serviço RestProxy, que pode ser usado criando uma nova instância desta maneira:

proxy = GetRESTProxy () 

O RestProxy fornece várias propriedades e métodos para interagir com servidores da Web remotos. O método-chave para fazer uma solicitação é chamado MakeRestRequest. Uma descrição completa de todas as propriedades e métodos será fornecida abaixo. Ao trocar informações com um serviço da Web RESTful, o RestProxy suporta um formato de definição de dados estruturados dinâmico chamado tipo DynamicData. O tipo DynamicData pode receber dados formatados em XML e JSON e fornecer padrões de acesso orientado a objetos para ler os dados. Também pode permitir a geração dinâmica de um objeto que pode ser convertido em XML ou JSON.

Para criar um novo objeto DynamicData, use o comando DYNAMIC:

DINÂMICO <name> [FROM '<string>' | <var>] 

O <name> é o nome de uma nova variável de script e deve ser compatível com a especificação de script inControl (nenhum número inicial ou caracteres especiais, exceto o sublinhado '_', opcionalmente terminando com um sinal de dólar '$'). Se a cláusula FROM opcional for usada, o texto poderá ser uma sequência JSON ou XML explícita (entre aspas simples) ou o nome de uma variável de script que contenha JSON ou XML. A inicialização é fornecida para simplificar apenas o teste e não é fornecida como um meio geral de inicializar variáveis dinâmicas. Somente uma linha de texto é permitida. Se um avanço de linha for encontrado antes da aspas simples de fechamento, um erro será gerado.

Membros e Sub-membros

Variáveis dinâmicas nesse idioma são entidades especialmente projetadas que possuem uma ampla variedade de recursos úteis. Na superfície, eles são objetos que podem ter membros criados dinamicamente. Por exemplo, em um Snippet, uma variável dinâmica pode ser declarada e vários membros criados:

Funcionário DINÂMICO employee.Name = "John Smith" employee.Phone = "8005551212" employee.Address = "1234 Clay Street 

À medida que cada membro é endereçado, ele é criado automaticamente. Então o Nome, telefone e Endereço os membros agora atuarão como propriedades da variável empregado.

Os membros da variável dinâmica diferenciam maiúsculas de minúsculas. assim nome do empregado não é o mesmo que nome do empregado. Isto é divergente do comportamento normal do CXone plataforma. No entanto, devido à necessidade de interoperar com sistemas externos - a maioria dos quais depende do caso correto -, essa decisão foi tomada e se aplica apenas a variáveis dinâmicas.

Os sub-membros também podem ser criados dinamicamente:

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

Novamente, à medida que os sub-membros são abordados, eles são adicionados automaticamente à estrutura. Agora, com uma única expressão, uma referência à estrutura pode ser atribuída a outra variável de script dinâmico:

John = funcionário 

Um ponto importante a reconhecer é que empregado e "João" farão referência aos mesmos dados físicos. Se você alterar um membro de um, alterará ambos. Para copiar dados, use a cópia da função incorporada. Os seguintes Snippet O exemplo demonstra isso:

DINÂMICO x x.Nome = "João" y = x y.Nome = "Sam" 

O resultado é mostrado abaixo:

Exemplo de função de cópia incorporada.

Com a função de cópia, y obtém uma cópia exclusiva e pode alterá-la sem afetar x:

DINÂMICO x x.Nome = "João" y = cópia (x) y.Nome = "Sam" 

Imagem exibindo exemplo de uma função de cópia.

Você também pode copiar membros filhos:

DINÂMICO x x.Nome.Primeiro = "João" x.Nome.Último = "Smith" y = cópia (x.Nome) y.Primeiro = "Sam" 

Imagem exibindo exemplo de membros filhos.

Em relação à função de cópia: ele executa uma cópia profunda convertendo o objeto em uma representação textual e, em seguida, novamente em um objeto. Isso é mais caro nos recursos da plataforma do que simplesmente copiar uma referência. Objetos muito grandes podem gerar muita sobrecarga e potencialmente retardar os scripts em execução. Use-o quando necessário, mas tente não abusar.

Variáveis dinâmicas também podem manipular matrizes. O próprio objeto pode ser tratado como uma matriz de nível superior ou um membro pode ser tratado como uma matriz:

Funcionários DINÂMICOS funcionários [1] = joão ou funcionários.Person [1] = joão 

Importante!! Todas as matrizes começam no índice 1. Se você referenciar um índice de matriz que ainda não existe, ele será criado. Se os elementos abaixo do índice referenciado recentemente não existirem, eles também serão criados. Portanto, tenha cuidado, pois a especificação acidental do índice 100 criará elementos vazios para os índices 1 a 99. Para obter o número de elementos em uma matriz, use a função count (): x = count (employee.Person).

Aqui está a guia Inspetor em Studioé Snippet editor de propriedades. Ele mostra uma variável dinâmica com uma matriz de nível superior:

Imagem exibindo uma variável dinâmica com uma matriz de nível superior.

Movendo os elementos para um membro filho chamado Nome, eis a aparência:

Imagem exibindo exemplos de elementos filhos.

Há uma diferença entre uma variável dinâmica que é uma matriz de nível superior em comparação com uma variável de script regular que é uma matriz de variáveis dinâmicas. O exemplo a seguir ilustra isso:

DINÂMICO a DINÂMICO b DINÂMICO c a.Name = "John" b.Name = "Sam" c.Name = "Arnold" x [1] = axe [2] = bx [3] = c DINÂMICO aa [1] = ay [2] = por [3] = c 

As 2 variáveis a serem examinadas são x e y. O primeiro, x, é uma variável de script normal que contém uma matriz de variáveis dinâmicas. O segundo, y, é uma variável dinâmica que é uma matriz de nível superior. Ambos parecem semelhantes no Inspetor:

Imagem exibindo exemplo de variável dinâmica.

Embora pareçam semelhantes, não são iguais. A próxima seção discute o conceito de serialização para variáveis dinâmicas. O ponto importante é que, no exemplo acima, X não pode ser usado para interoperar com um sistema remoto da mesma maneira que Y. X não é serializável, Y é.

Serialização

Antes de discutir a serialização, seria útil mostrar como interagir com variáveis dinâmicas em comparação com variáveis de script normais. As variáveis normais têm uma longa lista de métodos internos para permitir coisas como análise de string, conversão para uma data, classificação e assim por diante. Clique no menu suspenso a seguir para ver muitos exemplos de como interagir com variáveis dinâmicas.

Uma das vantagens do uso de variáveis dinâmicas é o poder da serialização. Essa é a capacidade de converter o objeto em um formato de texto adequado para transmissão na Web. No momento, há dois formatos suportados: XML e JSON. Se você usar o RestProxy (discutido anteriormente nesta seção), o processo de serialização ocorrerá automaticamente. Se você precisar gerar a sequência serializada manualmente, existem 2 métodos de sequência oferecidos:

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

Use dentro de um contexto de sequência para gerar a versão serializada do objeto:

texto = "{y.asjson ()}" 

O seguinte é o que texto pode conter assumindo que o valor de y se assemelha ao exemplo anterior:

{"Nome": [{"Primeiro": "Sam", "Último": "Smith"}, {"Primeiro": "Bill", "Último": "Smith"}]} 

Da mesma forma, o método .asxml produz resultados como os seguintes:

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

Membros RestProxy

O RestProxy, obtido chamando GetRestProxy (), fornece os serviços para se comunicar com um servidor da Web remoto usando as convenções de serviço da Web RESTful. Ao usar o Studio Snippet Editor, as propriedades e métodos disponíveis podem ser visualizados durante a digitação. Simplesmente declare uma nova instância de proxy:

proxy = GetRESTProxy () 

Em uma nova linha, digite proxy seguido do ponto (.):

Imagem exibindo exemplo RESTProxy.

O sistema Intelli-Prompt mostrará automaticamente uma caixa de listagem contendo os membros disponíveis. Depois que um método é escolhido, digitar o parêntese de abertura ativará novamente o sistema Intelli-Prompt para revelar os parâmetros:

Imagem exibindo o sistema Intelli-Prompt mostrando uma caixa de litro contendo membros disponíveis.

Propriedades

Propriedade Detalhes
StatusCode Contém o código de status HTTP após uma chamada para MakeRestRequest ().
Descrição de status Contém a descrição do status HTTP após uma chamada para MakeRestRequest ().
Tipo de conteúdo Permite a substituição do cabeçalho do tipo de conteúdo padrão. O padrão é 'Form-urlencoded'. Se estiver enviando JSON, é necessário alterar isso para 'application / json', por exemplo.
ProxyTimeoutSeconds Permite alterar o tempo limite padrão da solicitação. O padrão é 10 segundos.

Métodos

Método Detalhes
urlencode da string (valor da string)
Descrição Método auxiliar para codificar uma sequência no formato de codificação de URL.
MakeRestRequest Executa uma solicitação HTTP para o URL designado.
ClearHeaders Limpa todos os cabeçalhos personalizados adicionados com o AddHeader.
AddHeader Adiciona um cabeçalho personalizado à solicitação HTTP.
MakeTwitterOauthRequest Constrói uma solicitação especial para se comunicar com o Twitter.
GetSalesForceOAuthToken Gera um token de autorização especial exigido pelo SalesForce.com.