FrEDA

FrEDA

  • Docs
  • Tutorial
  • Demo

›Backend

Präambel

  • Architektur
  • MonoRepo Struktur

External

  • PostgreSQL / Postgraphile
  • GraphiQL

Backend

  • GraphQL Server
  • GraphQL-Modules
  • TypeGraphQL
  • GraphQL-Playground
  • Besonderheiten
  • REST-Endpoints

Frontend

  • FrEDA ReactJS-Basics
  • Common Frontend-Library
  • CLI-Tools

Deploy

  • Deployment

Roadmap

  • geplante Weiterentwicklung

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);
  }
});
← BesonderheitenFrEDA ReactJS-Basics →
  • Word-Dokument Erstellung
  • Prodat-DMS PDF Webservice Ausgabe
FrEDA
Docs
Getting StartedFrontendBackendFrEDA Users
Tutorial
RequirementsSetup DevelopmentQuick run
Mehr
Prodat-SQLHochschule MittweidaDEVTIM IT Softwareentwicklung
Facebook Open Source
Copyright © 2021 Prodat-SQL. Built with ❤ and Docusaurus.