Beispiel Serienbrief

Aus Limbas Wiki

Wechseln zu: Navigation, Suche

<-- zurück zu Admin-Dokumentation / <-- zurück zur Hauptseite


Um einen anpassbaren Serienbrief zu erzeugen benötigt man einerseits einen Bericht mit den allgemeinen Inhalten wie Briefkopf, Anrede, Fuß usw. Dieser kann wie gewohnt mit dem Berichtseditor erzeugt werden. Der Bericht sollte für die Tabelle generiert werden aus der der Bericht erzeugt wird, also im Normalfall Kunde oder Person. Als zweites benötigen wir eine neue Tabelle "Briefvorlagen". Die Tabelle beinhaltet ein Textfeld "Name" und einen Textblock (long) "Inhalt" mit Wysiwyg-Funktion. Im Textfeld würde dann der Name der Vorlage stehen und im Longfeld der Inhalt. ALs nächstes fügen wir dem Bericht ein Element des Typs Formel hinzu und fügen nachfolgenden Beispiel-Code ein:

$arg_result=MyExt_reportLetterVal($report_ext);

Über das Formelelement wird nun die Funktion "MyExt_reportLetterVal" aufgerufen welche die Abfrage auf die Tabelle "Briefvorlagen" erledigt und das Ergebnis zurück liefert. Die Funktion wird als "Erweiterung" in die Datei "ext_report.inc" im Verzeichnis "EXTENSIONS" geschrieben. Dabei ist es egal in welchem Unterordner zu "EXTENSIONS" sich die Datei befindet. Weitergehend ist es auch möglich den Wysiwyg Text vor der Ausgabe nochmal zu parsen und mit festgelegten Platzhaltern Teile in Feldinhalte zu ersetzen. Das ist hier allerdings nicht beschrieben.


  • ext_report.inc
function MyExt_reportLetterVal($ID){
	if($ID){
		$myExt_gresult = get_gresult(MYEXT_TABLE_ID_VORLAGE,1,null,null,null,array(MYEXT_FIELD_ID_INHALT),$ID);
		if($myExt_gresult[MYEXT_TABLE_ID_VORLAGE]["id"][0]){
			return $myExt_gresult[MYEXT_TABLE_ID_VORLAGE][MYEXT_FIELD_ID_INHALT][0];
		}
	}
}

Als letztes müssen wir noch das Berichtmenü erweitern um die gewünschte Berichtsvorlage auswählen zu können. Dazu benötigen wir ein div Element welches die Liste der Berichtsvorlagen und den richtigen Link zur Erstellung des Berichts anzeigt. Außerdem erweitern wir noch das ursprüngliche Berichtsmenü um diese Auswahl öffnen zu können. Die Funktionen schreiben wir in die Datei "ext_gtab_erg.inc" welche die Tabellenliste erweitert.


  • ext_gtab_erg.inc

Javascript Komponente

<Script language="JavaScript">
function myExt_sendLetterPost(userows,vorlageID) {
	if(userows > 500){
		alert('Es sind mehr als 500 Personen selektiert! Bitte grenzen Sie die Liste ein!');
		return;
	}
	send=confirm(userows+' Personen selektiert!\nSoll an '+userows+' Personen ein Brief versendet werden?');
	if(!send){
		document.form1.use_record.value = ;
		return;
	}
	document.getElementById('myExtForms').innerHTML = "<input type='hidden' name='myExt_vorlageId' value='"+vorlageID+"'>";
	send_form(1);
}
</Script>


div element

echo "<div id='myExt_limbasDivLetter' class='lmbContextMenu' style='visibility:hidden;z-index:993' onclick='activ_menu = 1;'>";
pop_top('myExt_limbasDivLetter');
$myExt_gresult = get_gresult(MYEXT_TABLE_ID_VORLAGE,1,null,null,null,array(MYEXT_FIELD_ID_VORLAGE_NAME));

pop_left();
echo "<table>";
if($myExt_gresult[MYEXT_TABLE_ID_VORLAGE]["id"]){
foreach ($myExt_gresult[MYEXT_TABLE_ID_VORLAGE]["id"] as $myExt_key => $myExt_ID){
	$myExt_value = $myExt_gresult[MYEXT_TABLE_ID_VORLAGE][MYEXT_FIELD_ID_VORLAGE_NAME][$myExt_key];
	echo "<tr>
	<td nowrap><a href='javascript:myExt_sendLetter(2,$myExt_ID)'>".$myExt_value."</a></td>
	</tr>";
}}
echo "</table>";
pop_right();
pop_bottom();
echo "</div>";


Menüerweiterung

function myExt_Letter($gtabid,$formid,&$gresult) {
	pop_line();
	pop_submenu(1002,,);
}

$gLmbExt["menuListCReport"][KP_GTABID] = "myExt_Letter";