Integração Protheus X Fluig (widget)

Boa tarde, pessoal!

Estou com uma dúvida, gostaria de saber se algum de vocês já realizou integração com o protheus através de alguma widget;

Pensei em fazer da seguinte forma:

Utilizar o script de integração gerado no ServiceTask de algum fluxo dentro de um dataset personalizado;
Mas ele retornou alguns erros de conexão com rest etc.

Atualmente estamos na versão 12.24.10 do Protheus, que exige autenticação no rest;

Através de formulárioe fluxo ele executa corretamente o serviço de integração, imagino que seja por rodar no backend;

O Dataset roda em back-end, então deveria funcionar caso esteja fazendo igual ao que está no seu fluxo.

1 curtida

Consegui!

Segue o código:

function createDataset(fields, constraints, sortFields) {
    try {
        var oSolicitacaoRequest = new Object();
        var userFluig =  'ARTUR ALVES DE SOUZA';
        var obs1 = "teste";
        var obs2 = "teste";
        var filialEmpresa = '0101';
        var empresa = '01';

        oSolicitacaoRequest.filial = filialEmpresa;
        oSolicitacaoRequest.empresa = empresa;
        oSolicitacaoRequest.tipo_sc = 'normal';
        oSolicitacaoRequest.idFluig = '73864';
        oSolicitacaoRequest.usuario = userFluig;
        oSolicitacaoRequest.cc = '2009';
        oSolicitacaoRequest.observ = "OBS APROV:" + obs1 + " | OBS SOLIC:" + obs2;

        oSolicitacaoRequest.itens = [];

        var qtditens = 1;
        oSolicitacaoRequest.nitens = qtditens;

        for (var i = 1; i <= qtditens; i++) {
            var ItensSC = new Object();
            ItensSC.produto = '52M00900289';
            ItensSC.classificacao = '1010049';
            ItensSC.dt_nec = '05/06/2025';
            ItensSC.qtd = 1;
            ItensSC.valor = 736.39;
            ItensSC.itemctb = 'G31';

            oSolicitacaoRequest.itens.push(ItensSC);
        }

        var clientService = fluigAPI.getAuthorizeClientService();
        var compID = '01';
        var stringRequest = JSON.stringify(oSolicitacaoRequest);

        var data = {
            companyId : compID,
            serviceCode : 'serviceCode ',
            endpoint : '/endpoint ',
            method : 'post',
            timeoutService: '360',
            headers: {
                "tenantId" : empresa + ',' + filialEmpresa
            },
            params : {
                FlgGeraSC: JSON.parse(stringRequest)
            }
        };

        var vo = clientService.invoke(JSON.stringify(data));

        if (!vo || !vo.getResult()) {
            throw "Sem resposta da integração.";
        }

        var oRetorno = JSON.parse(vo.getResult());

        var dataset = DatasetBuilder.newDataset();
        dataset.addColumn("STATUS");
        dataset.addColumn("MENSAGEM");

        if (oRetorno.errorMessage) {
            dataset.addRow(["ERRO", oRetorno.errorMessage]);
        } else if (oRetorno.CTYPEMSG == "S") {
            dataset.addRow(["SUCESSO", oRetorno.CMESSAGE]);
        } else {
            dataset.addRow(["ERRO", oRetorno.CMESSAGE || "Erro desconhecido"]);
        }

        return dataset;

    } catch (erro) {
        var dataset = DatasetBuilder.newDataset();
        dataset.addColumn("STATUS");
        dataset.addColumn("MENSAGEM");

        dataset.addRow(["ERRO", erro.message || erro]);
        return dataset;
    }
}

function getConstraintValue(constraints, fieldName) {
	if (constraints != null) {
		for (var i = 0; i < constraints.length; i++) {
			if (constraints[i].fieldName == fieldName) return constraints[i].initialValue;
		}
	}
	return "";
}

Esse código ele já retorna se deu sucesso ou erro no momento da integração!

Defini os campos com valores fixos para testes, mas é a mesma lógica das contraints para pegar os valores da widget.
No fron você constrói uma constraint e passa através da execução do dataset da seguinte forma:

Definidas por variaveis:

if (constraints != null){
		for(var i=0;i<constraints.length;i++){
			log.info("### constraint = " + constraints[i].fieldName);
			if(constraints[i].fieldName == "ATIVO"){
				cod_ativo = constraints[i].getInitialValue().toUpperCase();
			}
		}
	}

Definidas no próprio campo:

var userFluig = getConstraintValue(constraints, "userFluig");
1 curtida