use cfhttp in cfscript version

With the cfhttp Tag (Definition: „Generates an HTTP request and handles the response from the server“) you can easily get content from other URIs.
Here’s a short example how to use cfhttp inside in CFScript, that worked for me very well.
Please note that this example works properly with getting content from username / password protected URIs, too. I’ve tested my Code with Railo 3.3.1 final


//get cfhttp result
string function getCfHttpResult(required string targetUri="") output="false" access="private" hint="returns http result for a given uri" {
try {
http = new http();
http.setMethod("get");
http.setURL("#arguments.targetUri#");
http.setUsername("#getUsername()#");
http.setPassword("#getPassword()#");.
ret = http.send().getPrefix().FileContent;
}
catch (any e) {
ret = 0;
}
}

cfc calling in browsers

If you ever asked yourself how to take a quick look inside a coldfusion cfc directly in a browser, check this out. If your cfc is in the webroot you can call it of course in a browser as usual:

http://www.domain.com/path/example.cfc

If you call a cfc this way the „cfc explorer“ appeares on stage and shows you auto-generated documentation of the cfc.
Additonally you can invoke a function directly in a browser:

http://www.domain.com/example.cfc?method=examplefunction

A request like this will actually invoke the method specified as url-parameter „method“.
Take care: the cffunction access-attribute must be specified as remote.

quick tutorial: more memory for tomcat/railo-server

Here’s a short howto for upping tomcat/railo-server’s memory:

The secret’s in tomcat’s JAVA_OPTS variable (java runtime options), which is defined in the catalina-startup-script.
You should be able to find this catalina.sh named script in /<tomcat-install-dir>/bin/catalina.sh
Have a look at the file and grep for JAVA_OPTS, you’ll find the following line:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

Now you can add some startup-parameters like this:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms128m -Xmx512m"

Look for more detailed information at this wiki-section at apache.org

Hier geht es zur deutschen Version dieser Anleitung.

Tutorial: Tomcat und Railo 3.1 mehr Speicher zuweisen

Fix gemacht, hier eine kleine Anleitung, wie man Railo/Tomcat mehr Speicher spendiert:

Das Geheimnis liegt in der JAVA_OPTS Variable (Java runtime options) vom Tomcat-Server. Diese wird in definiert im Catalina Startup-Script, das man normalerweise unter dem Pfad /<Tomcat-Installationsverzeichnis>/bin/catalina.sh finden können sollte. Sucht man in der Datei nun nach JAVA_OPTS, findet man schnell die richtige Stelle:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

Diese Zeile kann jetzt durch Start-Parameter erweitert werden:

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms128m -Xmx512m"

Für alle Interessierten gibt’s hier bei apache.org noch detaillierte Informationen.

Here’s the english version of this post.

Coldfusion: Dubletten in einer Liste entfernen (CFML)

Aus aktuellem Anlass, weil ich’s grad mal wieder benötigt habe: ein kleines Code-Snippet zum Eliminieren von Dubletten in Listen. Es kommt ja immer wieder vor, dass man eine Liste hat, die doppelte Werte enthält. Manchmal benötigt man aber zum Weiterverarbeiten eine Liste, in der keine doppelten Einträge mehr vorhanden sind.
Das geht einfach und fix mit einem Loop über ein Struct:

<cfset myListWithDoubles = "1,1,5,4,6,1,4,6,12,4,5" />
<!--- elimate double values via struct --->
<cfset myStruct = StructNew()>
<cfloop index="idx" list="#myListWithDoubles#">
<cfset myStruct[idx] = "">
</cfloop>
<!--- convert back to a list --->
<cfset myListWithoutDoubles = StructKeyList(myStruct)>

CFML-Dokumentation jetzt als AIR-Applikation

Drüben bei cfmldocs.com gibt es nun eine wirklich sehr praktische Sache: eine CFML-Language-Referenz als AIR-Applikation.
Schlicht und schnörkellos, perfekt übersichtlich gemacht und mit schöner Suche, die direkt bei der ersten Buchstabeneingabe alle Funktionen und Tags filtert. Das Teil schlägt alle mir bekannten Online-Docs um Längen, man kommt pfeilschnell zum gesuchten Ziel.

Also unbedingt hinsurfen und installieren: http://cfmldocs.com/air/index.html
Schneller war nachschlagen nie.

AIr-Applikation CFML-Docs

AIr-Applikation CFML-Docs

Verzeichnis auflisten mit cfdirectory und mehrfachen Datei-Filtern

Aus aktuellem persönlichen Anlass hier ein Tipp zum Tag <cfdirectory>, das hat mich durchaus etwas Zeit gekostet: wenn man den Tag verwendet, will man oft auch einen Filter auf bestimmte Dateitypen setzen. Zum ersten Mal musste ich nun nicht nur nach einer Dateiendung, sondern nach mehreren Dateiendungen filtern. Die Lösung hierbei ist das Pipe-Symbol. Das nachstehende Beispiel zeigt die Funktionalität, klappt sowohl unter Railo als auch unter Adobe Coldfusion:

<cfset myPath = ExpandPath( './' ) />
<cfdirectory action="list" name="qFiles" directory="#myPath#" filter="*.txt|*.rtf">
<cfdump var="#qFiles#">

Das Beispiel extrahiert alle .txt- und .rtf-Dateien aus dem aktuellen Verzeichnis.

Reblog this post [with Zemanta]

richtig machen: XML-Objekt mit Coldfusion erzeugen

Ich habe öfters den Eindruck, dass die XML-Funktionen und -Tags, die man in CFML verwenden kann, nicht wirklich das Gelbe vom Ei sind. Wahrscheinlich kann man da drüber streiten, auf jeden Fall wollte ich Euch meine Optimal-Lösung für die Erzeugung eines richtigen XML aus einer Query nicht vorenthalten. Das Beispiel funktioniert sowohl unter Railo als auch unter Adobe Coldfusion:

<cfsilent>
<cfquery name="getCustomers" datasource="#request.datasource#">
select * from customers
</cfquery>
<!--- save xmlstring --->
<cfsavecontent variable="xmlString">
<customerlist>
<cfoutput query="getCustomers">
<customer id="#pkcustomers#">
<firstname><![CDATA[#Trim(firstname)#]]></firstname>
<lastname><![CDATA[#Trim(lastname)#]]></lastname>
</customer>
</cfoutput>
</customerlist>
</cfsavecontent>
<!--- save xml object --->
<cfxml variable="resultXml">
<cfoutput>#xmlString#</cfoutput>
</cfxml>
</cfsilent>
<cfdump var="#resultXml#">

Das Beispiel eignet sich hervorragend, um als Snippet abgelegt zu werden, viel Spass damit

Datepicker für Formulare mit jQuery UI

Immer wieder gestaltet man als Webworker Formulare für Websites, die Felder für Datumswahl beinhalten. Ich zeige in diesem Blogpost auf, wie man diese Aufgabe schnell und elegant mit Hilfe von jQuery UI löst.

Als erstes braucht man natürlich die jQuery-Javascript-Bibliothek in der Applikation (http://jquery.com/), für den produktiven Einsatz wird selbstverständlich die minimierte Version eingesetzt. Zusätzlich benötigt man den UI-Core, der bei Google Code unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.core.js erhältlich ist und zum guten Schluss das Datepicker-Plugin unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.datepicker.js.

Auf der HTML-Seite werden die JS-Files nun im Header eingebunden. Ausserdem bindet Ihr ein CSS ein, das Ihr Euch am besten direkt von http://blog.jqueryui.com/2010/02/jquery-ui-download-builderthemeroller-status/ holt:

<html>
<head>
<title>jquery ui form test</title>
<script type="text/javascript" src="/js/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="/js/jquery.ui.core.js"></script>
<script type="text/javascript" src="/js/jquery.ui.datepicker.js"></script>
<link rel="stylesheet" href="/styles/ui_sunny.css" type="text/css" media="all" />
</head>

Im Body wird das Formular gecodet. Das Vor-Belegen der beiden Formularfelder mit dem aktuellen Datum (und dem aktuellen Datum plus 1 Tag), sowie das Handling für Formular anzeigen/Formular bearbeiten habe ich hier mit Coldfusion gelöst, kann man ja jeweils auch in der Lieblings-Sprache seiner Wahl umsetzen:

<body>
<cfset currentDateFrom = createODBCDate(now()) />
<cfset currentDateFrom = DateFormat(currentDateFrom,"dd-mm-yyyy") />
<cfset currentDateTo = createODBCDate(now()) + 1 />
<cfset currentDateTo = DateFormat(currentDateTo,"dd-mm-yyyy") />


<cfif cgi.REQUEST_METHOD eq "POST">
<cfdump var="#form#">
<cfelse>

<script type="text/javascript">
$(function() {
$("#datepickerFrom").datepicker({ dateFormat: 'dd-mm-yy' });
$("#datepickerTo").datepicker({ dateFormat: 'dd-mm-yy' });
});
</script>
<form name="DateForm" method="post" action="#cgi.script_name#">
<p>
<label for="datepickerFrom">Start-Datum:</label>
<input class="inputDate" id="datepickerFrom" name="datepickerFrom" style="width:100px" value="<cfoutput>#currentDateFrom#</cfoutput>" />
</p>
<p>
<label for="datepickerTo">Ende-Datum:</label>
<input class="inputDate" id="datepickerTo" name="datepickerTo" style="width:100px" value="<cfoutput>#currentDateTo#</cfoutput>" />
</p>
<p><input type="submit" value="Auswertung starten" /></p>
</form>
</cfif>
</body>
</html>

Hier ist der Aufruf des Datepickers an die Formular-Elemente mit den ID’s „datepickerFrom“ und „datepickerTo“ gebunden, als zusätzlicher Paramter wird das Datum in einem bestimmten Format festgelegt. Ein schöne Übersicht aller möglichen Attribute, Events und Methoden ist unter http://jqueryui.com/demos/datepicker/ zu finden. Unter dieser Adresse gibt es auch eine Demo von allen möglichen schicken UI-Themes.

Als Ergebnis erhalten wir also nun ein Formular mit 2 Datumswahl-Feldern, nach dem Abschicken wir nur ein Dump des Formular-Objekts angezeigt. Das sollte als Grundgerüst für den weiteren Ausbau genügen – viel Spass damit.

perfektes Paging von Ergebnissen mit der Pagination.cfc

Abteilung super-praktisch: die Paging-Komponente von Nathan Strutz. Das seitenweise Durchblättern durch Ergebnisse einer Datenbank-Abfrage (oder eines Array, eines Struct), gehört zu den Aufgaben, die für Programmierer immer wiederkehren. Ich selbst habe solche Paging-Funktionalitäten in veschiedenen Ausführungen oft selber entwickelt, das Thema Code-Reuse hatte ich nicht weiter berücksichtigt. Continue reading