amazon.de Geschenkgutscheine

Hotfix für die ColdFusion 8 FCKEditor Sicherheitslücke

Nachdem es erst nur einen workaround für die Sicherheitslücke im FCKEditor, der Bestandteil von ColdFusion 8.0 und 8.0.1 ist, gab, existiert ab sofort ein Hotfix:

http://www.adobe.com/support/security/bulletins/apsb09-09.html

Excel (XLS) Dateien mit ColdFusion 8 einlesen

Dauernd muss für irgendwelche Projekte dieses Excel-Format eingelesen werden... Bislang hab ich mir mit dem guten alten cfx_excel2query geholfen... Das versagt mir aber unter ColdFusion 8 seinen Dienst...

Also hilft man sich selbst mit dieser wundervollen UserDefinedFunction (UDF) um aus einem Excel-Sheet ein Query zu machen:

 <cfscript>
     function readXLS(filename,sheetnum) {
         // Admin-API f�r debug zwecke: adminapi.dump(varname);
 
        var adminapi = createObject("component","cfide.adminapi.base");
         // Source File
 
        var infile = createObject('java','java.io.FileInputStream').init(filename);
         // Apache POI paket zum lesen von Excel-Dateien
 
        var fs = createObject('java','org.apache.poi.poifs.filesystem.POIFSFileSystem').init(infile);
         // Excel-Workbook
10  
        var wb = createObject('java','org.apache.poi.hssf.usermodel.HSSFWorkbook').init(fs);
11          // Arbeitsblatt
12  
        var sheet = wb.getSheetAt(0);
13          // Anzahl Rows
14  
        var noRows = sheet.getLastRowNum();
15          // Erste Row (Columnnames)
16  
        var row = sheet.getRow(0);
17          // Anzahl Columns
18  
        var noCols = row.getLastCellNum();
19          // sonstiges Variablen
20  
        var i = 0;
21          var j = 0;
22          var cell = "";
23          var value = "";
24          var columnnames = "";
25          var q = "";
26  
27          // Spaltennamen holen
28  
        for (j = 0;j LT noCols;j = j + 1) {
29              try {
30                  cell=row.getCell(JavaCast('short','#j#'));
31                  // je nach Typ Daten numerisch oder als string holen
32  
                if (cell.getCellType() is 1) {
33                      columnnames = listappend(columnnames,cell.getStringCellValue());
34                  }
35                  else if (cell.getCellType() is 0) {
36                      columnnames = listappend(columnnames,cell.getNumericCellValue());
37                  }
38              } catch (Any expt) {
39                  // nothing happens
40  
            }
41          }
42          columnnames = replace(columnnames," ","","all");
43          // Query erstellen
44  
        q = querynew(columnnames);
45          // Daten holen ab Row 2
46  
        for (i = 1;i LTE noRows;i = i + 1) {
47              row=sheet.getRow(JavaCast('int','#i#'));
48              // Row hinzuf�gen
49  
            queryAddRow(q);
50              for (j = 0;j LT noCols;j = j + 1) {
51                  try {
52                      cell=row.getCell(JavaCast('short','#j#'));
53                      if (cell.getCellType() is 1) {
54                          value=cell.getStringCellValue();
55                      }
56                      else if (cell.getCellType() is 0) {
57                          value=cell.getNumericCellValue();
58                      }
59                  } catch (Any expt) {
60                      value="ups";
61                  }
62                  // Wert in Query schreiben
63  
                QuerySetCell(q,listGetAt(columnnames,j + 1),value);
64              }
65          }
66          // Datei schlie�en
67  
        infile.close();
68          // Ergebnis zur�ckgeben
69  
        return q;
70      }
71  
</cfscript>

ColdFusion Report Builder und die Maßeinheiten

Ich bin nun wirklich ein überzeugter Anhänger von ColdFusion. Dank ColdFusionWeekly (der Podcast ruhe in Frieden) bin ich sogar Besitzer eines ColdFusion 8 Servers.

Für ein aktuelles Projekt brauche ich nun eine gute Stange Berichte und (Serien-)Druckvorlagen. Da das ganze hinterher auf einem Linux-Server läuft, fällt Crystal-Reports fürs Reporting raus. Somit bleiben mir cfdocument und cfreport.

Da ich nun keine Lust hatte, jeden Report als Webseite zu bauen, fiel meine Wahl auf den ColdFusion Report Builder. Dieses lustige Tool ist wirklich intiutiv zu bedienen, wenn man mit anderer Reporting-Software bereits Kontakt hatte. Allerdings ist es auch noch einen ganz großen Schritt entfernt von deren Funktionalität.

Was mich nun aktuell fast in den Wahnsinn getrieben hat, war eine simple horizontale Linie. Und sowas kommt ja durchaus des öfteren vor, wenn man nicht gerade simple Serienbriefe bastelt.

Die horizontale Linie war leider nie wirklich horizontal. Was im Editor noch gut aussah, entpuppte sich im generierten pdf (wie auch im Ausdruck) als leicht abschüssiger Strich. Und alles was ich auch versuchte, um diesem blöden Tool beizubringen, dass die Höhe dieses Objekte 0,0cm zu sein hat - immer setzte er mir Werte wie 0,00375 cm ein.

Langer Rede kurzer Sinn: Man ändere Einfach die Maßeinheit, mit der der CFRB arbeitet auf px statt cm, und schon hat dieses Programm keine Probleme mehr mit geraden Linien...

Sowas sagt einem natürlich keiner... :)

P.S.: Falls jemand einen Vorschlag für ein anderes gutes Reporting-Tool hat - immer her damit.

Ordentliche XML Config-Files mit ColdFusion

Bevor man heutzutage irgendwas grundlegendes selber schreibt, konsultiert man ja bekanntlich die Suchmaschine seines Vertrauens.

Da ich nun in der Situation war, für eine Applikation eine Konfigurationsmöglichkeit bereitstellen zu müssen, für die man nicht unbedingt ColdFusion Code lesen können muss, bin ich auf config.cfc gestossen.

Genau was ich brauche :)
Einlesen der config bei Appstart bzw. korrektem URL-Param und XML-artiges Config-File für den Endbenutzer.

Sehr sehr schick!

UTF-8 mit ColdFusion und MySQL

Eine Kombination aus einer unicode MySQL Datenbank, ColdFusion und Apache kann einen schon manchmal verzweifeln lassen.

Um alles letztendlich im Browser korrekt dargestellt zu bekommen, bedarf es folgender Anpassungen:

[Mehr]

Default Locale bei ColdFusion ändern

Ich liebe ColdFusion... und seit CF8 sogar noch ein bissl mehr...
Und noch viel mehr seit ich bei ColdFusion-Weekly eine Version gewonnen habe :)

Nun hat mans als Deutscher mit US-Produkten ja nicht immer ganz einfach... Das Ding steht per default auf der englischen Locale (en_US)... Wo aber holt der sich das her? Und wie ändert man das dauerhaft, um nicht in jeder Anwendung setlocale("German (Standard)") schreiben zu müssen?

Ein wenig Recherche brachte dann

  • die Locale zieht ColdFusion aus der JVM
  • die JVM zieht diese wiederum aus dem Betriebssystem

Um nun ColdFusion beizubringen, dass er sich bitteschön deutsch zu verhalten hat (im Umgang mit Formaten!!!), gibt man der JVM einfach zwei Paramter mit:

 -Duser.language=de -Duser.region=DE

Dafür hat man zwei Möglichkeiten:

  • Man trägt sie im ColdFusion-Administrator unter Settings -> Java and JVM im Feld JVM Args ein.
  • Man trägt sie in die Datei %CFROOT%\runtime\bin\jvm.config unter java.args= ein.

Die Werte für beide Parameter müssen sich übrigens an die ISO-Codes für Language und Region halten.

In jedem Fall ist ein Neustart des ColdFusion-Server-Dienstes angesagt. Manchmal hilft sogar nur ein kompletter Reboot, da sich die Java-Settings gerne auch mal fest einnisten.

ColdFusion 8 auf einem VPS installieren

Auch wenn es sich hier um ein etwas älteres Problem handelt, möchte ich trotzdem die Lösung hier festhalten.

Problem: Man mietet sich einen Virtual-Private-Server (VPS) bei einem der vielen Anbieter. Möchte man hier nun einen Adobe ColdFusion 8 Server installieren, so läuft dessen Java VM praktisch als VM in einer VM...
Java findet das wenig lustig und gibt dann den Fehler aus:

 Error occurred during initialization of VM
 Could not reserve enough space for object heap
 Could not create the Java virtual machine.

Zum einen benötigt man die Java-Umgebungsvariable

 _JAVA_OPTIONS="-Xms16m -Xmx32m"

z.B. fügt man in seine /etc/profile ein

 _JAVA_OPTIONS="-Xms16m -Xmx32m"
 export _JAVA_OPTIONS

damit startet dann wenigstens Java schonmal überhaupt, und auch der Connector kann sich während der installation einhängen.

Dann bearbeitet man die /opt/coldfusion8/bin/jvm.config und ändert folgende Zeile auf diese Werte (128MB)

 java.args=-server -Xmx128m -Dsun.io.useCanonCaches=false -XX:MaxPermSize=128m -XX:+UseParallelGC -Djava.awt.headless=true .........

und schon läuft ColdFusion prima... Die Performance auf einem VPS ist aber nicht zu vergleichen mit einem "richtigen" Server der ebenfalls auf 512MB beschränkt ist... Mögen die Zeiten der 2GB VPS für 20€ schnell kommen :)

BlogCFC was created by Raymond Camden. This blog is running version 5.9.5. Contact Blog Owner
Stoppt die Vorratsdatenspeicherung! Jetzt klicken &handeln! Willst du auch an der Aktion teilnehmen? Hier findest du alle relevanten Infos
und Materialien: