Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function createDataset(fields, constraints, sortFields) {
  2.     // Constantes
  3.     var RESPONSE_FIELDS = { // Nomes dos campos possíveis da resposta da requisição
  4.         records: "Registros",
  5.         errorCode: "errorCode",
  6.         errorMessage: "errorMessage"
  7.     }
  8.  
  9.     var PROTHEUS = {
  10.         company: "", // ID da empresa no Protheus
  11.         branch: ""   // ID da filial no Protheus
  12.     }
  13.  
  14.     // Novo dataset
  15.     var dataset = DatasetBuilder.newDataset();
  16.  
  17.     // Configuração global
  18.     var config = getConfig();
  19.     var services = config.getAsJsonObject("services");
  20.     var consultas = services.getAsJsonObject("consulta");
  21.     var consultaGenerica = consultas.getAsJsonObject("protheus");
  22.  
  23.     // Constraints
  24.     var table  = "";
  25.     var cod    = "";
  26.     var comp   = "";
  27.     var loja   = "";
  28.     var fields = "";
  29.     var where  = '';
  30.  
  31.     // Autorização do cliente (fluig)
  32.     var clientService = fluigAPI.getAuthorizeClientService();
  33.  
  34.     // JSON libs
  35.     var gson = new com.google.gson.Gson();
  36.     var parser = new com.google.gson.JsonParser();
  37.  
  38.     // Leitura e aplicação de constraints
  39.     if (constraints && constraints.length) {
  40.         for (var i = 0; i < constraints.length; i++) {
  41.             var c = constraints[i];
  42.  
  43.             if (c.fieldName == "table") {
  44.                 table = c.initialValue;
  45.             } else if (c.fieldName == "cod") {
  46.                 cod = c.initialValue;
  47.             } else if (c.fieldName == "loja") {
  48.                 loja = c.initialValue;
  49.             } else if (c.fieldName == "fields") {
  50.                 fields = c.initialValue;
  51.                 fields = fields.replace(' ', '');
  52.                 fields = fields.replace('[', '');
  53.                 fields = fields.replace(']', '');
  54.                 fields = fields.split(',');
  55.             } else if (c.fieldName == "comp") {
  56.                 comp = c.initialValue;
  57.             } else if (c.fieldName == "where") {
  58.                 where = c.initialValue + " AND ";
  59.             } else if (c.fieldName == "branch") {
  60.                 PROTHEUS.branch = c.initialValue;
  61.             } else if (c.fieldName == "company") {
  62.                 PROTHEUS.company = c.initialValue;
  63.             }
  64.         }
  65.     }
  66.  
  67.     // Dados da requisição
  68.     var data = {
  69.         companyId: '' + getValue("WKCompany"),
  70.         serviceCode: consultaGenerica.get("serviceCode").getAsString(),
  71.         endpoint: consultaGenerica.get("endpoint").getAsString(),
  72.         method: 'post',
  73.         timeoutService: '100',
  74.         params: {
  75.             "CABECALHO": [{
  76.                 "EMPRESA": PROTHEUS.company,
  77.                 "FILIAL": PROTHEUS.branch
  78.             }],
  79.             "INFORMACOES": []
  80.         }
  81.     }
  82.  
  83.     try {
  84.         // Testes gerais de erro
  85.         checkTable(table);
  86.  
  87.         // Define o código de pesquisa no where pela tabela
  88.         where += makeWhere(table, cod, loja, comp);
  89.  
  90.         // Informações da consulta
  91.         var infoStr =
  92.             '{ "TABELA": "' + table +
  93.             '", "WHERE": "' + where +
  94.             '", "CAMPOS": {';
  95.  
  96.         // Adiciona os campos exigidos na infoStr
  97.         for (var i = 0; i < fields.length; i++) {
  98.             if (i > 0) {
  99.                 infoStr += ', ';
  100.             }
  101.  
  102.             infoStr += '"C' + i + '":"' + fields[i] + '"';
  103.         }
  104.  
  105.         infoStr += '}}';
  106.  
  107.         // Transforma a string de fornecedor em formato JSON
  108.         var infoObj = parser.parse(infoStr);
  109.  
  110.         // Coloca os produtos nos dados da requisição
  111.         data.params["INFORMACOES"].push(infoObj);
  112.  
  113.         // Faz a requisição do data em JSON
  114.         var vo = clientService.invoke(gson.toJson(data));
  115.  
  116.         // JsonObject de resposta
  117.         var result = parser.parse(vo.getResult()).getAsJsonObject();
  118.  
  119.         // Se encontrou registros
  120.         if (result.has(RESPONSE_FIELDS.records)) {
  121.             var records = result.getAsJsonArray("Registros");
  122.  
  123.             for (var i = 0; i < records.size(); i++) {
  124.                 var record = records.get(i).getAsJsonObject();
  125.                 var entrySet = record.entrySet().toArray();
  126.                 var row = [];
  127.  
  128.                 // Para cada par de valroes
  129.                 for (j = 0; j < entrySet.length; j++) {
  130.                     if (i == 0) {
  131.                         var column = entrySet[j].getKey();
  132.                         dataset.addColumn(column);
  133.                     }
  134.  
  135.                     var value = entrySet[j].getValue().getAsString();
  136.                     row.push(value);
  137.                 }
  138.  
  139.                 dataset.addRow(row);
  140.             }
  141.  
  142.         } else if (result.has(RESPONSE_FIELDS.errorCode) && result.has(RESPONSE_FIELDS.errorMessage)) {
  143.             dataset.addColumn(RESPONSE_FIELDS.errorCode);
  144.             dataset.addColumn(RESPONSE_FIELDS.errorMessage);
  145.             dataset.addRow([
  146.                 result.get(RESPONSE_FIELDS.errorCode).getAsString(),
  147.                 result.get(RESPONSE_FIELDS.errorMessage).getAsString()
  148.             ]);
  149.  
  150.         } else {
  151.             dataset.addColumn(RESPONSE_FIELDS.errorCode);
  152.             dataset.addColumn(RESPONSE_FIELDS.errorMessage);
  153.             dataset.addRow(["Erro", "Nenhum registro encontrado"]);
  154.         }
  155.  
  156.     } catch (e) {
  157.         dataset.addColumn('erro');
  158.         dataset.addRow([e.message]);
  159.     }
  160.  
  161.     return dataset;
  162. }
  163.  
  164. function checkTable(table) {
  165.     if (table == "") {
  166.         throw "Tabela não informada";
  167.     }
  168. }
  169.  
  170. function makeWhere(table, cod, loja, comp) {
  171.     if (cod == "" && comp == "") {
  172.         return "D_E_L_E_T_=''";
  173.     }
  174.  
  175.     var where = ' ';
  176.     var idField = '';
  177.  
  178.     if (table == "SA1") {
  179.         idField = "A1_COD";
  180.     } else if (table == "SA2") {
  181.         idField = "A2_COD";
  182.     } else if (table == "SB1") {
  183.         idField = "B1_COD";
  184.     } else if (table == "SG1") {
  185.         idField = "G1_COD";
  186.     }
  187.  
  188.     if (cod != "") {
  189.         where += idField + "=\'" + cod + "\'";
  190.     }
  191.  
  192.     if (comp != "") {
  193.         if (cod) where += " and ";
  194.         where += "G1_COMP=\'" + comp + "\'";
  195.     }
  196.  
  197.     if (loja != "") {
  198.         if (comp || cod) where += " and ";
  199.         where += "A2_LOJA=\'" + loja + "\'";
  200.     }
  201.  
  202.     return where + " AND D_E_L_E_T_=\'\'";
  203. }
  204.  
  205. function getConfig() {
  206.     var CONFIG_DATASET = {
  207.         name: "ds_ef_protheus_config",
  208.         column: "config"
  209.     };
  210.  
  211.     var configDataset = DatasetFactory.getDataset(CONFIG_DATASET.name, null, null, null);
  212.     var configString = configDataset.getValue(0, CONFIG_DATASET.column);
  213.  
  214.     var parser = new com.google.gson.JsonParser();
  215.     var configObj = parser.parse(configString).getAsJsonObject();
  216.  
  217.     // Gson -> JsonObject:
  218.     // https://javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/JsonObject.html
  219.     return configObj;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement