wir haben immer mal den Fall, dass wir ein Projekt in ein PDF exportieren oder im Designer laden wollen, im IDataProvider aber ein Feld bzw. eine Variable fehlt. Dies führt zu einer Exception, was auch in Ordnung ist.
Nun würden wir aber gerne vorab prüfen, ob der Data Provider alle nötigen Daten enthält um den Nutzer direkt mitteilen zu können welche Identifier fehlen.
Für die Projekt-Dateien können wir uns mittels LlGetUsedIdentifiers alle Identifier holen, die erwartet werden. Gibt es bereits etwas vergleichbares für IDataProvider? Wir bräuchten eine Funktion, die alle deklarierten Felder/Variablen auflistet damit wir einen Abgleich machen können.
Da ich nichts dazu gefunden habe wollte ich erst nachfragen, ehe wir eine eigene Lösung implementieren
das ist immer auch ein stückweit abhängig vom Datenprovider selbst. Aber ganz eigentlich funktioniert das Pattern im IDataProvider so, dass die Implementierung des Datenproviders (bspw. ObjectDataProvider) vom nativen List & Label Core mitgeteilt bekommt, welches denn die UsedIdentifiers sind die berücksichtigt werden sollen, damit dann der Datenprovider seine Datenstrukturen entsprechend abfraget, aufbaut, optimiert usw. Und der List & Label Core fragt an dieser Stelle selbst die zu druckende/exportierende Projektdatei nach LlGetUsedIdentifiers, damit diese Info dann dem Datenprovider mitgeteilt wird - siehe auch ICanHandleUsedIdentifiers.SetUsedIdentifiers. Das hat dann zur Laufzeit den Vorteil, dass bspw. nicht alle Tabellen einer Datenbank mit all den Feldern angemeldet werden müssen - schlankere und schnellere Abfragen etc. sind somit das Resultat, weil nur das gefragt wird, was auch wirklich im Projekt verwendet wird.
Ich vermute daher zunächst eher ein anderes “Problem” in der skizzierten Anforderung und man sollte versuchen herzuleiten, wie denn in der Projektdatei Tabelle, Variable, Felder etc. landen können während der Designzeit (oder auch via DOM?!), die dann beim Drucken/Exportieren aber nicht in der Datenquelle landen können?! Ist es vielleicht möglich, dass in der Anwendung mehrere Pfade existieren die unter Umständen auch unterschiedliche Datenquellen(-Strukturen) für/mit List & Label verwenden und es daher dann nicht passt?
Beispiel: Designer-Fall verwendet JSON aus Web-Shop. Für den Druck kommt dann aber das JSON nicht mehr direkt vom Web-Shop selbst, sondern wird zur Laufzeit in der Business-Logik der Anwendung vermeidlich identisch aufbereitet. Beides zwar JSON als Datenquelle - aber eben mit möglich unterschiedlicher Datenstrukturen?
Das sind nur so meine Erfahrungen und Gedanken zu diesem Thema. Vielleicht helfen sie aber bereits dabei den richtigen/passenden Ansatz zu finden.
Es ist bei uns tatsächlich so, das ein Nutzer eine beliebige Kombination aus Projekt und Datenquelle (bei uns immer XML Dateien via XmlDataProvider) an einen Dienst schicken kann, der das Projekt dann mit der angegebenen Quelle öffnen und z.B. einen PDF Export macht.
Das XML nutzt immer die gleichen Strukturen und Namen, es kann aber trotzdem mal zu einem fehlenden Identifier kommen. Das ist nicht der Regelfall, kommt vor allem während der Entwicklung immer mal vor.
Letztendlich suchen wir “nur” eine Möglichkeit dem Aufrufer eine genauere Fehlerbeschreibung zu liefern, die auch den Namen des fehlenden Identifiers enthält.
Wenn in der Datenquelle wirklich ein Feld fehlt, das im Designer verwendet wird wird das ja im Klartext beim Öffnen des Designers angezeigt. Wenn ihr das auch beim Druck abfangen/anzeigen wollt könntet ihr einen Handler für den ExpressionError Event schreiben und dort die Fehlermeldungen sammeln und nach dem fehlgeschlagenen Druckstart anzeigen. Würde das helfen ?