Usar fluigAPI em JavaScript (.js) externo

É possível utilizar a fluigAPI em um javascript externo?

Estou desenvolvendo um workflow. Ele tem um formulário relacionado. No meu formulário, tenho um javascript a parte, que estão no arquivo funcoes.js:

formulario.html:


    <head>
        <link type="text/css" rel="stylesheet" href="/style-guide/css/fluig-style-guide.min.css"/>
        <script type="text/javascript" src="/portal/resources/js/jquery/jquery.js"></script>
        <script type="text/javascript" src="/portal/resources/js/jquery/jquery-ui.min.js"></script>        
        <script type="text/javascript" src="/portal/resources/js/mustache/mustache-min.js"></script>
        <script type="text/javascript" src="/style-guide/js/fluig-style-guide.min.js" charset="utf-8"></script>
        <script type="text/javascript" src="/webdesk/vcXMLRPC.js"></script>
        <script type="text/javascript" src="funcoes.js"></script>        
    </head>

No formulário, tenho um botão que irá chamar um Webservice REST e apresentar os resultados num textarea deste formulário.

Para fazer isto, estou tentando rodar o fluigAPI.getAuthorizeClientService() conforme orientado no link abaixo:

https://tdn.totvs.com/pages/releaseview.action?pageId=239041233#OAuth1--2101383534

Porém ao clicar no botão, apresenta o seguinte erro no console:


ReferenceError: fluigAPI is not defined
    at restProtheus (funcoes.js:306)
    at HTMLButtonElement.onclick (?WDCompanyId=1&WDNrDocto=0&WDNrVersao=0&WDParentDocumentId=8655&WKNumProces=0&processID=cadastro_produto&WKNumState=0&WKManagerMode=false&WKDef=cadastro_produto&WKVersDef=9&taskUserId=fluig.ti:1013)

Acredito que o erro ocorra pois não estou chamando o fluigAPI de um Evento de Formulário ou um Evento de Processo.

Preciso chamar deste meu javascript externo. É possível? Preciso declarar mais algum src no head do meu html?

A função que chamo no botão é esta:



function restProtheus() {

    try{
        var clientService = fluigAPI.getAuthorizeClientService();        

        var data = {                                                   
            companyId : getValue("WKCompany") + '',
            serviceCode : 'MeuServicoREST',                     
            endpoint : '/urbfluig/F_PROD',  
            method : 'put', // 'delete', 'patch', 'post', 'get'                                        
            timeoutService: '120', // segundos
            params : {                                             
                    teste : 'teste'                    
            }                                                      
        }                                                          
        var vo = clientService.invoke(JSON.stringify(data));

        if(vo.getResult()== null || vo.getResult().isEmpty()){
            //throw new Exception("Retorno está vazio");

            console.log('Retorno está vazio ...');

        }else{
            console.log(vo.getResult());
        }
    } catch(err) {
        //throw new Exception(err);

        console.log(err);

    }


}

Grato

A fluigAPI é somente para uso no Backend. Não tem como utilizá-la no Frontend (ao menos ainda não descobri como seria possível).

No seu caso você precisará usar a WCMAPI.Create (que nada mais é do que uma função que usa a $.ajax, então pode usar fetch ou outra lib Ajax) para chamar o WS.

Dependendo da requisição pode ser interessante você criar um Dataset para isso. Aí no front você simplesmente chama esse Dataset passando os parâmetros via Constraints.

Documentação do Fluig sobre usar WS em Widget/Formulário (front) https://tdn.totvs.com/display/public/fluig/Consumo+de+um+WS+SOAP+de+um+Widget

Alterei para usar a WCMAPI.Create.
Porém apresentou o mesmo erro:


Uncaught ReferenceError: WCMAPI is not defined
    at restProtheus (funcoes.js:305)
    at HTMLButtonElement.onclick (?WDCompanyId=1&WDNrDocto=0&WDNrVersao=0&WDParentDocumentId=8655&WKNumProces=0&processID=cadastro_produto&WKNumState=0&WKManagerMode=false&WKDef=cadastro_produto&WKVersDef=9&taskUserId=fluig.ti:1009)

Teria que incluir mais algum src no head do html?

Grato

Quando você está no Formulário precisa usar parent.WCMAPI, pois o form é carregado dentro de um iframe.

Com o parent.WCAPI rodou, mas apresentou o mesmo erro (CORS) de quando rodei com o $.ajax():


Access to XMLHttpRequest at 'http://10.0.0.1/urbfluig/F_PROD' from origin 'http://201.24.78.138:8180' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


wcm_global_pt_BR.js?v=1.7.0-200901:3 POST http://10.0.0.1/urbfluig/F_PROD net::ERR_FAILED

Foi por este motivo que não usei o ajax e tentei achar alguma API para rodar.

Obrigado!

Então, se o CORS não está habilitado o navegador vai recusar mesmo. Aí você pode usar jsonp pra tentar contornar isso se não puder habilitar o CORS. Ou fazer o esquema do seu navegador usar a DatasetFactory.getDataset, chamando um Dataset que faça essa requisição no backend.

Mas talvez outra pessoa tenha uma solução melhor pra essa situação.