E ai pessoal, seguinte: cadastrei um serviço REST no painel de controle e testei o mesmo com sucesso.
Porém, não consigo fazer a chamada corretamente no evento de processo. Na documentação https://tdn.totvs.com/pages/releaseview.action?pageId=239041233 há alguns exemplos de chamada no qual em determinado trecho do código apresenta a linha de comando: var vo = clientService.invoke(JSON.stringify(data));
Porém se eu executar isso dá um erro no log do servidor informando que o comando toJSON não é valido. Utilizei então o comando JSONUtil.toJSON( data ), mas acredito que este transforma para objeto JSON e o comando do tutorial transforma o JSON para Stringify.
Com este comando também não funciona: var vo = clientService.invoke(JSONUtil.toJSONString( data ));
Alguém sabe como posso resolver este problema e conseguir fazer a chamada ao serviço REST cadastrado?
Olá,
Creio que desta forma funcione, eu utilizo algo semelhante a isso.
var docid = '1234',
try{
var tenantId = '01';
var clientService = fluigAPI.getAuthorizeClientService();
var data = {
companyId : getValue("WKCompany")+'', //codigo da empresa
serviceCode : 'FILE_URL_SERVICE', //Codigo do seu serviço cadastrado
endpoint : 'api/public/ecm/document/downloadURL/'+docid, //endpoint da api desejada (URI)
method : 'get',
timeoutService : '100',
}
var vo = clientService.invoke(JSON.stringify(data));
if(vo.getResult()== null || vo.getResult().isEmpty()){
log.info("Sem registros");
}else{
log.info("Resposta:"+vo.getResult());
}
} catch(e){
log.info("Erro ao se comunicar com o serviço: "+e.message);
}
Olá Francis, Eu utilizei também desta forma que mencionaste, porém apresenta o erro na linha: var vo = clientService.invoke(JSON.stringify(data));
Este é o erro apresentado no log: ERRO AO EXECUTAR SCRIPT -> NOK - Java class "[Ljava.lang.reflect.Constructor;" has no public instance field or method named "toJSON".
Já tentei utilizar o comando: var vo = clientService.invoke(JSONUtil.toJSONString( data ));
Mas também não funciona.
Tenta JSONUtil.toJSON(data)
Francis, estou tentando fazer a requisição igual ao código que você mencionou acima.
Como você cadastrou o serviço no Fluig? Acredito que meu erro foi nisso.
Seguinte, primeiro você deve criar um Provider para esta API, e em seguida criar um OAuth Application que consome esse Provider, este link pode te ajudar a fazer esta configuração: Fluig API - TOTVS Fluig - TDN
Depois disso criei o serviço no menu de serviços do fluig, e adicionei a URL da API, e informei o metodo de autenticação OAuth passando o token/ secret gerados no meu OAuth Application.
Dado o erro
Java class "[Ljava.lang.reflect.Constructor;"
Eu sugiro você se certificar se o JSON montado está correto.
Nos campos strings eu uso geralmente o data assim:
var data = {
"campo1": variavel1 +"",
"campo2": variavel2 +"",
}
Várias vezes só funcionou depois que eu usava aspas duplas e adicionava o +""
No meu caso só consegui resolver concatenando os parâmetros como uma string de texto, ficando dessa forma:
var parametros = "?IDENT=&DESC="+titulo+"&CODSOL="+loginSolicitante+"&SOLIC="+nomeSolicitanteUTF";
var clientService = fluigAPI.getAuthorizeClientService();
var data = {
companyId : getValue("WKCompany")+"", //codigo da empresa
serviceCode : 'PROTHEUS_REST', //Codigo do seu serviço cadastrado
endpoint : "/rest/CADASTROCM"+parametros+"", //endpoint da api desejada (URI)
method : 'get',
timeoutService : '10000',
options : {
"encoding" : "UTF-8",
"mediaType": "application/json"
},
headers: {
"Content-Type": "application/json;charset=UTF-8"
}
}
var vo = clientService.invoke(JSON.stringify(data));
if(vo.getResult()== null || vo.getResult().isEmpty()){
//o que fazer em caso de erro
}else{
log.info("Resposta:"+vo.getResult());
var retorno = JSON.parse(vo.getResult());
}
Porém, tive que fazer uma alteração também na string de texto enviada pois se houver um espaço em branco ele quebra o JSON enviado, ou seja, mesmo colocando que o encoding era UTF8 ele não está respeitando.
Para solucionar este problema usei a função encodeURIComponent(variável);
exemplo:
var titulo = hAPI.getCardValue("titulo"); //título com espaços em branco
var tituloMudancaUTF = encodeURIComponent(tituloMudanca); //titulo que encoda caracteres como espaço em branco