Boa tarde.
Não tenho muita experiência com APIs, criando minha primeira API para o Sankhya, com (CRUDServiceProvider.loadRecords) e tentando buscar dados através de uma View pois no (CRUDServiceProvider.loadRecords) não tem como fazer ligações entre tabelas e preciso buscar informações de várias tabelas.
Mas parece que este serviço também não aceita consultas por view. alguém consegue me dar uma ideia de como proceguir?
Agradeço desde já.
Obrigado.
View:
SELECT C.NUNOTA, C.NUMNOTA, C.DTNEG, C.VLRNOTA, C.CODPARC, P.NOMEPARC, P.CGC_CPF,T.AD_FUSION
FROM TGFCAB C
INNER
JOIN
TGFPAR P
ON P.CODPARC = C.CODPARC
INNER
JOIN
TGFTOP T
ON T.CODTIPOPER = C.CODTIPOPER
AND T.DHALTER = (
SELECT
MAX(T2.DHALTER)
FROM
TGFTOP T2
WHERE
T2.CODTIPOPER = C.CODTIPOPER
)
WHERE
T.AD_FUSION = 'S'
Meu server.js:const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors()); app.use(express.json()); app.use(express.static('public')); const PORT = 3000; // 🔗 URL Sankhya const BASE_URL = "http://topcesta.fwc..."; // 🔐 USUÁRIO DO SANKHYA const USER = "MEUUSU"; const PASS = "MINHASENHASANKHYA"; // 🔥 COOKIE DE SESSÃO let cookie = ""; // ========================= // LOGIN SANKHYA // ========================= async function login() { console.log("🔐 Fazendo login no Sankhya..."); const payload = { serviceName: "MobileLoginSP.login", requestBody: { NOMUSU: { $: USER }, INTERNO: { $: PASS } } }; const res = await fetch(`${BASE_URL}?serviceName=MobileLoginSP.login&outputType=json`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); cookie = res.headers.get("set-cookie"); console.log("✅ Login realizado"); } // ========================= // HEALTH // ========================= app.get('/api/health', (req, res) => { res.json({ status: "OK" }); }); // ========================= // CONSULTA // ========================= app.post('/api/notas', async (req, res) => { try { if (!cookie) { await login(); } const { cpf, page = 0 } = req.body; const documento = (cpf || "").replace(/\D/g, ''); console.log("🔎 Documento:", documento); const payload = { serviceName: "CRUDServiceProvider.loadRecords", requestBody: { dataSet: { rootEntity: "VW_NOTAS_FUSION", includePresentationFields: "N", offsetPage: page.toString(), entity: { fieldset: { list: "NUNOTA,NUMNOTA,DTNEG,VLRNOTA,CODPARC,NOMEPARC,CGC_CPF" } }, criteria: { expression: { $: ` this.CGC_CPF = '${documento}' OR this.CGC_CPF LIKE '%${documento}%' ` } } } } }; console.log("📤 Consultando Sankhya..."); const response = await fetch(`${BASE_URL}?serviceName=CRUDServiceProvider.loadRecords&outputType=json`, { method: "POST", headers: { "Content-Type": "application/json", "Cookie": cookie }, body: JSON.stringify(payload) }); const text = await response.text(); console.log("📥 Retorno:", text); res.json(JSON.parse(text)); } catch (err) { console.error("❌ Erro:", err); res.status(500).json({ erro: err.message }); } }); // ========================= // START // ========================= app.listen(PORT, async () => { console.log(`🚀 Servidor rodando em http://localhost:${PORT}`); await login(); });
Retorno no Terminal do VSCode:
PS D:\0-VS - CODE\Testes\TESTES SANKHYA\Docs html\FMG-Diversos\ApiSankhyaGetsSets\StatusPedidos> npm start> [email protected] start
> node server.js
🚀 Servidor rodando em http://localhost:3000
🔐 Fazendo login no Sankhya...
✅ Login realizado
🔎 Documento: 55230253720
📤 Consultando Sankhya...
📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"0","pendingPrinting":"false","transactionId":"791CB96184E95CC49C831B05165210D7","statusMessage":"N�o foi encontrado objeto de acesso a dados para este BMP: mge-dwf:VW_NOTAS_FUSION"}
📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"0","pendingPrinting":"false","transactionId":"791CB96184E95CC49C831B05165210D7","statusMessage":"N�o foi encontrado objeto de acesso a dados para este BMP: mge-dwf:VW_NOTAS_FUSION"}
🔎 Documento: 55230253720
📤 Consultando Sankhya...
📥 Retorno: {"serviceName":"CRUDServiceProvider.loadRecords","status":"3","pendingPrinting":"false","transactionId":"4B984F27BD4A8CEF0F4F8FB91D1E0890","statusMessage":"N�o autorizado."}