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:
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"
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"
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:
Movendo os elementos para um membro filho chamado Nome, eis a aparência:
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:
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.

Sintaxe
<variável> .method (<parameters>) Exemplos: name = "sam" g = name.length () h = name.trim () i = name.mid (2,3) j = name.contains ("sam" ) k = nome.índice ("sam")
Quando variáveis dinâmicas são usadas, a simples referência a um membro cria automaticamente esse membro, se ele não existir. Se Y for uma variável dinâmica, a expressão y.length fará referência a um membro chamado “length” e o criará automaticamente (já que ele ainda não existe), impedindo assim o uso do método length. Para gerenciar isso, um membro variável dinâmico especial chamado $ value é usado. O membro $ value não criará um novo membro dinâmico. Em vez disso, ele retornará o valor da string literal do membro no qual $ value está sendo usado. A partir de $ value, você pode usar o conjunto normal de métodos, ilustrado a seguir:
Nome DINÂMICO nome.Primeiro = "sam" g = nome.Primeiro. $ Value.length () h = nome.Primeiro. $ Value.trim () i = nome.Primeiro. $ Value.mid (2,3) j = nome.Primeiro. $ value.contains ("sam") k = nome.Primeiro. $ value.indexof ("sam")
Observe que você não pode ter uma variável dinâmica que contenha apenas um valor simples (name = "sam" transformará o nome em uma variável de script comum). Além disso, você não pode atribuir o membro $ value. É uma propriedade somente leitura de uma variável dinâmica. Se você tentar atribuir nome. $ Value = "sam", você receberá um erro. O membro $ value também serve a outro propósito importante. Ao copiar membros de variáveis dinâmicas para variáveis de script regulares, sem usar $ value, você simplesmente criará uma nova variável dinâmica:
Nome DINÂMICO name.First = "Sam" x = name.First
Porque Primeiro é membro de uma variável dinâmica, x se torna automaticamente uma variável dinâmica (isso pode ser útil se você planeja estender x com membros adicionais ou mais comum, se o membro que você está atribuindo tiver sub-membros próprios). O exemplo a seguir ilustra o problema:
c = x.indexof ("a") // Falha ao compilar! c = x. $ value.indexof ("a") // funciona
Mas se name.First. $ Value for usado, a nova variável será normal:
Nome DINÂMICO name.First = "Sam" x = name.Primeiro. $ Value c = x.indexof ("a") // Funciona! c = x. $ value.indexof ("a") // Falha ao compilar
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 (.):
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:
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. |