Es kann vorkommen, dass die Berichtsausführung mit einem Fehler aufgrund eines fehlenden Feldes abbricht. Das ist zum Beispiel dann der Fall, wenn in der Abfrage eine Hierarchie verwendet wird, aber nicht immer alle Ebenen der Hierarchie vorhanden sind (nicht balancierte Bäume). Also immer dann, wenn es Blätter auf unterschiedlichen Ebenen gibt.
Um diesen Fehler zur Laufzeit abzufangen, gibt es die IsMissing Eigenschaft. Sie muss im benutzerdefinierten Code getestet werden, um dann an entsprechender Stelle im Bericht aufgerufen werden zu können. Warum im benutzerdefinierten Code und nicht direkt in der Entwurfsansicht des Berichts?
Der folgende Ausdruck führt zu einem Fehler, weil Visual Basic alle Parameter im Aufruf auswertet – und damit auch den Verweis auf das fehlende Feld (Fields!FieldName.Value):
=IIF(Fields!FieldName.IsMissing, „Missing“, Fields!FieldName.Value)
Wie nun also vorgehen?
Die definierten Felder für ein Datenset sind in der Entwurfsansicht in der Feldauflistung aufgeführt. Alle Felder besitzen die beiden Eigenschaften Value und IsMissing. Dabei gibt die IsMissing-Eigenschaft an, ob das Feld zur Laufzeit abgerufen werden kann. Um zu ermitteln, ob ein Feld tatsächlich vorhanden ist, wird die IsMissing-Eigenschaft im benutzerdefinierten Code abgefragt.
Ob das Feld in der Datenset Abfrage vorhanden ist, kann also z. B. über die Funktion IsFieldMissingThenString im Custom Code ermittelt werden:
Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String If (field.IsMissing) Then Return strMessage Else Return field.Value End If End Function
Im Bericht wird an der Stelle, wo das Feld benutzt wird, folgender Ausdruck eingefügt:
=Code.IsFieldMissingThenString(Fields!FieldName,“Missing“)
Es wird also entweder der Feldwert oder der Text “Missing” angezeigt.
Eine andere Möglichkeit ist, mithilfe der IsMissing Eigenschaft die Sichtbarkeit von Elementen zu steuern.
Die Funktion IsFieldMissing liefert einen Boolean Wert:
Public Function IsFieldMissing(field as Field) as Boolean If (field.IsMissing) Then Return True Else Return False End If End Function
Damit kann dann z. B. die Sichtbarkeit von Spalten in der Hidden-Eigenschaft gesteuert werden:
=Code.IsFieldMissing(Fields!FieldName)