Como montar instrução SQL para o serviço externo

Na instrução SQL os campos retornados serão automaticamente adicionados no campo “Campos de retornos”, e os parâmetros da instrução serão adicionados automaticamente no campo “Parâmetros” da tela.

Exemplo de SQL montado:

-- Este SQL retorna o nome e a idade dos alunos:
-- De um curso
-- Ou de um curso no período letivo.
 
SELECT PES_NOME AS nome, 
(YEAR(GETDATE()) - YEAR(PES_DATNAS)) AS idade 
FROM TB_PESSOA 
INNER JOIN TB_INGRESSO ON ING_PESID = PES_ID 
INNER JOIN TB_MESTRE_ALUNO ON MAL_INGID = ING_ID 
INNER JOIN TB_TURMA ON TUR_ID = MAL_TURID 
INNER JOIN TB_PERIODO_LETIVO ON PEL_PERID = TUR_PERID
INNER JOIN TB_CURSO ON CUR_ID = TUR_CURID 
WHERE CUR_ID = :curso AND PEL_PERID = COALESCE(:periodo, PEL_PERID)

Quando adicionado esta instrução SQL no serviço, no campo “Campos de retornos” será adicionado o campo PES_NOME com o alias nome e a operação de calcular a idade com o alias idade.
E no campo “Parâmetro” será adicionado o parâmetros :curso e o parâmetro :periodo.

Declarando parâmetros no SQL

Para declarar um parâmetro na consulta sempre deve ser utilizado “ : “.
Exemplo:

WHERE campo = :parametro

Ao salvar a instrução com um parâmetro, ele é adicionado automaticamente no campo “Parâmetros”. Então, depois de salvar o SQL clique no campo e defina o tipo de dados do mesmo.

Utilizando um parâmetro que não é obrigatório

Para utilizar um parâmetro que não é obrigatório deve ser utilizado COALESCE.
O coalesce trabalha da seguinte forma:

WHERE campo = COALESCE(:parametro, campo)

Ele atribui o primeiro valor ao campo, se não encontrar atribui o segundo.
Exemplo: Se o parâmetro ”:parametro” tiver um valor, esse valor será atribuído ao “campo” e se não tiver valor, atribui “campo” para “campo”.


Tipos de retorno para instruções do tipo “Consultar”

Para Instruções SQL do tipo “Consultar”, abaixo da caixa de texto para inserção da query, é solicitado o parâmetro “Retorna apenas primeiro registro”.

Quando marcado, será retornado apenas o primeiro registro encontrado, e o “json” de retorno não estará no formato de lista, exemplo:

{
    "resultado": "SUCESSO",
    "pes_id": 1,
    "pes_nome": "Milena Andressa"
}


Atenção: por questões de performance, quando utilizado para retornar apenas o primeiro registro, é altamente recomendável que utilize-se “TOP / ROWNUM” para limitação dos dados, de acordo com o tipo do banco de dados utilizado. Isso porque o sistema irá executar a query exatamente da forma que foi definida, e posteriormente, pegará apenas o primeiro registro retornado. Neste caso, se não for limitado na query pode pesar, e tornar a consulta demorada.



Quando desmarcado, será retornado todos os registros encontrados, e o “json” de retorno estará no formato de lista, exemplo:

[
    {
        "resultado": "SUCESSO",
        "dados": [
            {
                "pes_id": 1,
                "pes_nome": "Milena Andressa Radtke"
            },
            {
                "pes_id": 8,
                "pes_nome": "Elaine Scoz"
            },
            {
                "pes_id": 10,
                "pes_nome": "Fabiana Beumer Pasqualini"
            },
            {
                "pes_id": 15,
                "pes_nome": "Iara Maria Poffo"
            },
            {
                "pes_id": 19,
                "pes_nome": "Juliana Odorizzi"
            }
        ]
    }
]


Para o tipo “Alteração de dados”, referente à um INSERT

No cadastro de serviço externo, quando o tipo é “Instrução SQL” e a operação é de “Alteração de dados”, onde será informado um “INSERT”, deve-se configurar da seguinte forma:

Na imagem acima, deve-se definir o nome do serviço, e o script que será executado. O nome da consulta é muito importante, pois posteriormente, na chamada deste serviço, ao informar o “body” com os parâmetros, é este nome que deverá ser referenciado na lista. Os parâmetros, assim como nos demais tipos de serviço, devem ser precedidos por “ : ” (dois pontos).

Ao configurar os parâmetros, conforme imagem abaixo, deve-se colocar o parâmetro de lista utilizando no nome o mesmo nome definido anteriormente, e este parâmetro de lista deve ser colocado como “coleção” dos demais parâmetros que serão informados:

Ao realizar a chamada, no json deverá utilizar exatamente o nome dado à coleção, informando os parâmetros desta coleção, conforme exemplo abaixo:

** E quando preciso executar mais de um INSERT ou UPDATE, no mesmo serviço, como fazer?

Para executar mais de um insert/update no mesmo serviço, basta definir um detalhe de comandos. No exemplo abaixo, quero executar dois update alterando o nome dos países. É um exemplo fictício, poderia ter uma tabela envolvida no primeiro script, e outra no segundo, por exemplo. Observe abaixo, que um dos detalhes de execução de sql chama-se “pais”, e o outro detalhe chama-se “outropais”:

Ao acessar os parâmetros, deve-se especificar além do tipo, também a sua respectiva “coleção”:

Para realizar a chamada, deve-se especificar cada um dos detalhes no json (collection), e dentro deles, os seus respectivos parâmetros que estarão sendo utilizados (os quais possuem a collection respectiva como collection no parâmetro).

{
   "pais":[
      {
         "paisid":156
      }
   ],
   "outropais":[
      {
         "outroid":157
      }
   ]
}
  • (edição externa)