16. Februar 2016 15:11
Hallo Gemeinde,
zuallerst möchte ich mich für die vielen umfangreichen Antworten bedanken. Ich habe mir jetzt folgendermaßen geholfen:
Ich habe eine Template Feld Tabelle (
TemplateField) angelegt welche als Primärschlüssel den Code unseres Kunden (Dienstleistungsbeansprucher), Sprachcode und die Feldbezeichnung des Templatefeldes besitzt. Dazu kommt ein Wert Feld welches den eigentlichen Inhalts des Feldes besitzt und ein Boolean Feld welches anzeigt ob es sich um ein Bild handelt (aber dazu später mehr
)
Somit wäre ein Beispieleintrag:
CustCode,LangCode,FieldName,Value,IsPicture'ABC KUNDE', 'DEU', 'field_email_address',
'abc@def.gh',false
'ABC KUNDE', 'DEU', 'field_logo_big', 'LOGO_BIG', true
Zum Beispiel im Rechnung Report hol ich mir die Informationen zu
CustCode und
LangCode vom z.B. "Sales Invoice Header" im OnAfterGetRecord-Trigger:
- Code:
Sales Invoice Header - OnAfterGetRecord()
...
CustCode_G := "Sales Invoice Header".CustCode;
LangCode_G := "Sales Invoice Header".LangCode;
...
Zusätzlich habe ich ein Funktion welche mir anhand des Feldnamens (
FieldName) aus der Template Feld Tabelle den jeweiligen Wert holt:
- Code:
GetFieldValue(FieldName_P : Text[50]) : Text[250]
IF TemplateField.GET(CustCode_G, LanCode_G, FieldName_P) THEN BEGIN
EXIT(TemplateField.Value);
END ELSE BEGIN
ERROR(STRSUBSTNO('Missing template fields for %1 - %2 - %3', CustCode_G, LangCode_G, FieldName_P));
END;
Im Dataset des Reports ruf ich als Source für das entsprechende Feld dann immer die Funktion GetFieldValue auf. Soweit so gut. Mit Textfeldern funktioniert dies hervorragend. Das Layout bleibt auch für alle immer gleich so dass Felder wie Rechnungsnummer, Menge etc. nicht separat pro Kunden gepflegt werden müssen. Im Prinzip alles super, wären da nicht die Bilder.
Ich benötige Bilder im Kopf und Fuß des Dokuments. Diese sind als Blob auch in der Datenbank gespeichert (auch eine separate Tabelle), welche als Primärschlüssel den Wert eines Feldes entspricht (z.B
LOGO_BIG weiter oben). Die Blobs werden im OnAfterGetRecord des Sales Invoice Header initialisiert und sind auch vorhanden. Wechseln auch je nach Kunden, habe mir die Datasets angeschaut.
Die Daten hole ich mir in den Kopf bzw. Fuß des Reports mit Hilfe der SetData und GetData Herangehensweise, welche in diesem Forum beschrieben ist und sehr gut funktioniert. Um die Blob-Daten zu transferieren benutze ich die Funktionen Convert.ToBase64String und Convert.FromBase64String. Klappt im Prinzip auch alles wunderbar. Jetzt kommt aber leider doch ein Problem:
Das Bild im Kopf hat folgende Eigenschaften:
Bildquelle: Datenbank
Feld: =Convert.FromBase64String(Code.GetData(2))
MIME = image/bmp
Wenn ich nur eine Rechnung drucke klappt dies wunderbar. Sobald es mehrere werden, speziell wenn es Unterschiede bei den Logos gibt, dann bleibt das erste Logo immer erhalten, also dass was zuerst angezeigt wurde. Ich habe mir auch mal den Base64 String in einer Textbox ausgeben lassen und dieser ändert sich je nach Bild. Das Bild selbst bleibt aber leider gleich. Ich habe mir auch folgenden Forenbeitrag durchgelesen:
http://www.msdynamics.de/viewtopic.php?f=64&t=28474 allerdings sind im HeaderLogo Report mehrere Bildelemente im Kopf und ich möchte ja lieber eines welches sich ändert. Die Größen wären auch immer gleich bzw. auf ein Maß genormt.
Hab ich da noch etwas falsch verstanden oder ist es schlichtweg nicht möglich mit NAV2013 dynamische Inhalte für Bilder festzulegen? Vielen Dank im voraus.