Im Zuge eines Individualprojektes, wo es um die Ablöse einer MS-Access Lösung ging, wurden wir unlängst mit der Aufgabe konfrontiert, verschiedene PDF-Dokumente zusammenzufassen. Hintergrund war der, dass es verschiedene Projekte gab und diesen unterschiedliche PDFs zugeordnet wurden. Bei einer anberaumten Sitzung wurden in weiterer Folge mehrere Projekte zum Besprechen ausgewählt und jeder Sitzungsteilnehmer sollte vorab die notwendigen Informationen per PDF zusammengefasst bekommen. Da MD-Premium.NET über PDF-Funktionalität aufgrund des Archivierungsmoduls verfügt, beschlossen wir, dies einfach mittels einer Funktion zu lösen, die einen RefCursor zurückgibt. Wir erstellten daher zuerst die entsprechende Datenbankfunktion mit einem Out-Parameter, der die notwendigen Dokumente aus der Tabelle MDDOC selektiert (hier nur ein einfacher Select, der aber im Wesentlichen die Funktionalität abbildet):
CREATE or replace PROCEDURE Ind_GetPDFs (p_RefCursor out sys_refcursor) IS
BEGIN
OPEN p_RefCursor FOR
select Titel, Document, Datum from mddoc where Klient_ID='1' and INSTR(Document_Name,'.pdf') > 0 order by SID;
END;
Nach dem Erstellen der Funktion musste nur mehr das Command in der entsprechenden RWI-Datei erstellt und mit der Datenbankfunktion verknüpft werden:
<Command Name="Ind.MergePDF" Title="Merge PDFs" Mode="Procedure" Type="MultiData.Infrastructure.Common.DocumentServer.PdfServer, MultiData.Infrastructure.Common" Action="MergePDFs">
<Parameters>
<mdc:Parameter Name="funcName" Value="Ind_GetPDFs" />
<mdc:Parameter Name="theBlob" DataType="Blob" ParameterType="ReturnValue" />
</Parameters>
<AfterExecute>
<Command Name="Cmd.BlobReturnTest1.SaveAs" Mode="Procedure" Type="MultiData.Utility.FileUtil, MultiData.Utility" Action="SaveToTmpFile" >
<Parameters>
<mdc:Parameter Name="content" Value="{theBlob}" />
<mdc:Parameter Name="ext" Value="pdf" />
<mdc:Parameter Name="retVal" ParameterType="ReturnValue" />
</Parameters>
<AfterExecute>
<Command Name="Cmd.BlobReturnTest1.SaveAs.Open" Mode="External" Action="cmd.exe;0;/c start {retVal}"/>
</AfterExecute>
</Command>
</AfterExecute>
</Command>
Dazu wurde die .NET Funktion "MergePDFs" verwendet (ab Version 5.2.040.0001), die als Parameter den Funktionsnamen erwartet und das fertig gemergte PDF-Dokument zurückliefert. In diesem Beispiel sichern wir den Rückgabewert in eine temporäre Datei und öffnen diese anschließend mit dem zugeordneten Programm des Betriebssystems.