Tips & Tricks - Importing files

With the "FileUCHelper", any number of files can be imported into an Intrexx application as a file attachment. In this example, a time-controlled process that uses Groovy will be used to search through a directory for .png files and then write these to an application as an attachment. You can download an example application, process and four PNG image files here. Unzip the downloaded file. Here, you find the directory "image-files-png" that contains four PNG files, which you can use for testing, and the file "advanced-techniques-import-files-app-process.zip". These can be imported as usual.

Click here for more information about the class "FileUCHelper".

In principle, the following methods are available:

  • copyFileToIntrexx()

    copies files to Intrexx, without altering them at the file system level

  • deleteFileFromIntrexx()

    deletes files from Intrexx

  • moveFileToIntrexx()

    removes files from the file system and adds them to Intrexx

The example application possesses a data group that uses a GUID as the data type of the primary key.

This data type can be selected when you create a new data group.

Furthermore, the data group has a file data field.

The Overview page has a table that is connected to the data field from the data group.

The example process has a timer with the corresponding timer event handler and a Groovy script action. The properties dialog of the Groovy script action can be opened by double-clicking on it. There, switch to the "Script" tab and open the Intrexx editor. You will find the following Groovy script there.

//Der FileUCHelper muss importiert werden, da er nicht direkt
//in Groovy zur Verfügung steht.

import de.uplanet.lucy.server.businesslogic.util.FileUCHelper
import groovy.io.FileType

// Verbindung zur Portal-Datenbank

def conn = g_dbConnections.systemConnection

// Quell-Verzeichnis

def path = 'c:/img/'

// das Quell-Verzeichnis soll in einer Tiefe von drei Unterverzeichnissen
// nach .png und .PNG durchsucht werden

new File(path).traverse(
	type:FileType.FILES,
	nameFilter:~/.+\.(?i)png$/,
	maxDepth:3
){ pngFile ->

// in der Closure steht jede .PNG-Datei als java.io.File
// unter der Variablen pngFile zur Verfügung
// für jede Datei wird ein Datensatz angelegt, dem die Dateien
// später als Anhang beigefügt werden
// die GUID ist die GUID der Datengruppe aus der Applikation

def id = newGuid()

g_dbQuery.executeUpdate(conn, "INSERT INTO DATAGROUP('B78B96ADA0A81927B7ED013946ED7DC0331CCEC2') (STRID) VALUES (?)") {
		setString(1, id)
	}
// jetzt kann die Datei dem Datensatz als Anhang beigefügt werden, dabei entspricht
// die GUID der GUID vom Datei-Datenfeld
// die Quelldatei wird verschoben, befindet sich also anschließend nicht mehr
// im Quell-Verzeichnis

	FileUCHelper.moveFileToIntrexx(g_context, pngFile, "185C69FFD1D97C10F3C09BC1D0D2C1633BEAE039", id, false)
}

Replace the path "c:/img/" with the name of the directory where the images, which you would like to import, are stored. You can, of course, import other file types such as PDF files. The script then needs to be adjusted accordingly.

The executor of the portal service must have write access to the directory where the files are located. This is especially important for network drives. If a directory contains more than just png files, the file extensions need to be checked.

Replace the GUIDs for the data group and data field in the Groovy script with the corresponding GUIDs from your application. You can select your target application in the area Application structure and determine the respective GUIDs there. After you have done that, close the editor and the properties dialog of the Groovy script action by clicking on "OK". Save the process and start the timer from the context menu or via the Edit menu.

Below, you can see the files in the target application.