REST-Endpoints
Der GraphQL-Gateway-Server deckt leider nicht alle benötigten Funktionen ab, weshalb wenige Teilfunktionen über eine klassische REST-Schnittstelle gelöst werden müssen. Diese sind aktuell folgende:
Word-Dokument Erstellung
Für die Generierung von Word-Dokumenten gibt es einen Sonderfall für welchen es einen extra REST-Endpunkt geben
musst. Dieser ist unter backend/freda-middleware/src/app.ts konfigurert:
app.post("/einrichteblatt/docx", auth, async (req, res) => {
let date_ob = new Date();
let date = ("0" + date_ob.getDate()).slice(-2);
let month = ("0" + (date_ob.getMonth() + 1)).slice(-2);
let year = date_ob.getFullYear();
let hours = ("0" + date_ob.getHours()).slice(-2);
let minutes = ("0" + date_ob.getMinutes()).slice(-2);
const buffer = await createReport({
template: path.resolve(__dirname, './static/Einrichteblatt_Drehen_PRODAT_Template.docx'),
output: 'buffer',
cmdDelimiter: ['{', '}'],
data: {
...req.body,
date: date + "." + month + "." + year + " " + hours + ":" + minutes + " Uhr"
},
});
res.header('Content-Disposition', 'attachment; name="einrichteblatt.docx"; filename="einrichteblatt.docx"');
res.send(Buffer.from(buffer))
});
Prodat-DMS PDF Webservice Ausgabe
Der von Prodat zur Verfügung gestellte Webservice lädt die geünschte Datei, welche über den URL-Paramter ?pdid angegeben wird, sofort gerunter. Das liegt an der falschen Konfiguration des HTTP-Headers 'Content-Disposition '. Zudem findet keine Authentifizierung-Logik statt. Der REST-Endpunkt schleift die Anfrage zusätzlich über den GraphQl-Gateway-Server und checkt die Authentifizierung und setzt den richtigen 'Content-Disposition'-Header , sodass das Dokument direkt im Browser zur Anzeige gebracht werden kann. '.
app.get("/pdf/:picId", auth, (req, res) => {
try {
http.get(`http://pg.prodat-erp.de:212/dms?key=3F2F07D2-5301-41B5-A552-593218077102&pdid=${req.params.picId}`, function (response) {
let data: any[] = [];
var bodylength = 0;
response.on('data', function (chunk) {
data.push(chunk);
bodylength += chunk.length;
});
response.on('end', function () {
const pdfData = Buffer.concat(data);
let contentDisposition = `inline; name="Doc-${req.params.picId}"; filename="Doc-${req.params.picId}.pdf"`;
if (typeof response.headers['content-disposition'] !== "undefined") {
contentDisposition = response.headers['content-disposition'].toString().replace("attachment", "inline");
}
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Content-Type', 'application/pdf');
res.header('Content-Length', bodylength.toString());
res.header('Content-Disposition', contentDisposition);
res.send(Buffer.from(pdfData))
}).on("error", function (e) {
console.log("error", e);
});
});
} catch (e) {
console.log("error", e);
}
});
