Benutzerdefinierte Felder in DCM nutzen

esc_hein

Mitglied
Teammitglied
Hallo,

bei der Umstellung eines kleineren PrintAddIns auf die neue Engine konnte ich fast alle Anpassungen (Terminspalte raus etc) per DCM implementieren. An einer Stelle sind meine Versuche bisher aber gescheitert:
Ich möchte einem existieren Label ("Alternativ:") einer Belegposition den Wert eines Benutzerfeldes zuweisen (per Bedingung, wenn Länge > 0). Das funktioniert auch wenn ich das im Entwurf so definiere. Erzeuge ich die Bedingung per Code in der DCM oder weise dem Label das Benutzerfeld direkt zu, bekomme ich folgenden Fehler, der nicht auftritt wenn ich z.B. Bezeichung1 anstelle des Userfeldes nehme:
upload_2017-7-24_13-23-38.png

Gibt es eine besser geeignete DCM, in der die UserFelder schon geladen sind? Ich würde ungern wegen des letztens Punktes eine Kopie des Berichtes anlegen. Erste Versuche mit dem Hinzufügen einer Column zur Datasource waren nicht erfolgreich, dann gibt es zwar keinen Fehler aber das Feld bleibt im Ausdruck auch leer.
 
Hallo Herr Hein,

das ist leider noch eine Unschärfe bei sage :)
In der DCM die Sie verwenden (ich tippe auf ReportBeforeRender oder oder ReportAfterRender), sind die Benutzerdefinierten Klassen noch nicht geladen und die DataSource um die BDF erweitert. Ist bei sage auch bekannt aber Änderungswillig sind sie bisher nicht.

Man nimmt eine Standardspalte die der Kunde nicht verwendet "GrundpreisText" zum Beispiel und da schreibt man beim Befüllen der Tabelle (ich glaube PrintVKArtikelPos ist die DCM) den gewüschten Text aus dem Userfeld rein.
Dann geht man bei der Render DCM hin und blendest das Standardfeld "Grunddpreistext" aus und kann das dann für die Bedingung nehmen oder direkt setzen.

Ein wenig unschön aber es klappt :)

Man könnte auch hingehen und mit dem Feld ZubehoerTextPos arbeiten, da muss man dann nur mit dem RTF ein wenig aufpassen. Oder Referenzbezeichnung1.
 
wäre ja auch zu schön wenn beim Migrieren alles auf Anhieb klappen würde
wie korrekt vermutet nutze ich ReportBeforeRender für die Anpassungen, den Umweg über nicht genutzte Textfelder werde ich in Betracht ziehen
 
einiges rumprobieren mit den Stimulsoft-Objekten hat dann tatsächlich mal zu einer Lösung geführt.

Die Benutzerfelder sind nach folgendem Aufruf verfügbar, was das an Performance kostet bzw. ob Folgeprobleme existieren kann ich nicht abschätzen.

report.Dictionary.DataSources.Item("dtsVKSubPositionAlternativ").SynchronizeColumns()

Funktioniert wohl, weil die Userfelder bereits im SQL-Statement enthalten sind
 
An welcher Stelle wird das denn ausgeführt?
Am Ende von ReportBeforeRender, wenn die DataSource des Feldes gesetzt wurde oder nonch bei einem anderen Einsprung?
 
in ReportBeforeRender (bzw. einer Unterroutine) rufe ich das Synchronize auf bevor ich die Bedingung für das Feld per Code erzeuge.
Dann sind die UserFelder verfügbar, auch VisualStudio hat die dann als geänderte Werte in den entsprechenden Collections angezeigt
 
Zurück
Oben