top of page

Falsche Filterung bei "Date" Datentyp / wrong filtering with data type "date"

(alle Versionen/all versions)

Mittwoch, 4. Januar 2023


Hintergrund/Background

Fehler Sage / Error Sage

Ursache und Lösungsmöglichkeiten / Reason and possible solutions

Option 1

Option 2



Hintergrund/Background


Angenommen sei eine AppDesigner-Datenquelle mit Verweis auf SQL-Abfrage, die xRM-Vorgangsfelder "Wiedervorlagedatum" und "Erfassung" aus der SQL-Datenbank abfragt.

Assume an AppDesigner data source with reference to SQL Query that queries xRM process fields "Wiedervorlagedatum" and "Erfassung" from the SQL database.


Definition SQL Server:

ree




Definition AppDesigner:


"Erfassung":

ree







"Termin":

ree







Man beachte, dass das zweite Feld "Termin" (Verweis auf "Wiedervorlagedatum") im AppDesigner als Datentyp "Date" deklariert wurde!


Note that the second field "Termin" (reference to "Wiedervorlagedatum") was declared as data type "Date" in the AppDesigner!



Fehler Sage / Error Sage


Die Datenquelle hat Datensätze mit "Termin" aufgrund AppDesigner-Datentyp "Date" z.B. nur "21.04.2020" in der Anzeige im AppDesigner (was so sicherlich in der Praxis oft gewünscht ist!). Siehe nachfolgender Screenshot.


The data source has data records with "Termin" due to the AppDesigner data type "Date", e.g. only "21.04.2020" in the display in the AppDesigner (which is certainly often desired in practice!). See following screenshot.


ree















Der Anwender kann aufgrund AppDesigner-Datentyp "Date" foglich zur Laufzeit in den AppDesigner-Masken auch konsequenterweise nur ohne Uhrzeit filtern, was das folgende Beispiel demonstriert.


Due to the AppDesigner data type "Date", the user can consequently only filter without time in the AppDesigner masks at runtime, which the following example demonstrates.


ree

Für den Anwender entsteht somit der Eindruck, dass Uhrzeiten keine Rolle spiele und dass somit ausschließlich die Datumsteile von Feldern abgefragt werden.

Das von Sage präsentierte Datenergebnis/Filerergebnis ist jedoch falsch, weil die o.g. Datensätze mit Datum "21.04.2020" werden wider Erwarten des Anwenders nicht angezeigt. Siehe nachfolgender Screenshot.


This gives the user the impression that times are irrelevant and that only the date parts of fields are queried.

However, the data result/filer result presented by Sage is incorrect because the above-mentioned data records with the date "21.04.2020" are not displayed, contrary to the user's expectations. See following screenshot.


ree

Gut zu sehen, dass etwas fehlt: Wenn wie im o.g. Screenshot kleiner/gleich (<=) gefiltert wird , wäre aus Anwendersicht eindeutig zu erwarten, dass die o.g. Datensätze wie "21.04.2020" sehr wohl in der Liste erscheinen!


Easy to spot something is missing: If less than/equal to (<=) is filtered as in the above screenshot, it would be clearly to be expected from the user's point of view that the above data records like "21.04.2020" should definitely appear in the list!






Ursache und Lösungsmöglichkeiten / Reason and possible solutions


Ursache ist, dass Sage den AppDesigner-Datentyp "Date" ausschließlich für die Anzeige / die Formatierung im AppDesigner-Fenster heranzieht.

SQL-seitig wird jedoch falsch gefiltert bzw. die Eintellung "Date" im AppDesigner nicht berücksichtigt.

Unter diesen Gesichtspunkten der Sage Vorgehensweise ist es somit "gefährlich" Datenfelder im AppDesigner als "Date" zu deklarieren, wenn die darunterliegenden SQL-Datenfelder auch eine Uhrzeit enthalten, da es wie oben zu sehen zu falschen Filter-Ergebnissen kommen kann!


The reason is that Sage only uses the AppDesigner data type "Date" for the display/formatting in the AppDesigner window.

On the SQL side, however, incorrect filtering is used / the "Date" setting in the AppDesigner is not taken into account.

Thus, considering this Sage approach, it is "dangerous" to declare data fields in the AppDesigner as "Date" if the underlying SQL data fields also contain a time since incorrect filter results can occur, as shown above!


Option 1

Formatieren Sie die Datenquelle SQL-seitig derart, dass die Daten vom SQL-Server tatsächlich ausschließlich den Datumsteil des "DateTime"-SQL-Feldes liefern, also ohne Uhrzeit.

Das ist SQL-seitig recht einfach möglich.

Nachfolgende Syntax verwendet eine Option, die auch in älteren SQL-Server-Versionen möglichst performant zum Ergebnis führt. Siehe nachfolgendes SQL-Beispiel.


Format the data source on the SQL side in such a way that the data from the SQL server actually only supplies the date part of the "DateTime" SQL field, i.e. without the time.

This is quite easy to do on the SQL side.

The following syntax uses an option that leads to the result with the best possible performance, even in older SQL server versions. See following SQL example.


https://www.officium-inservio.com/ms-sql/parsedatetonly


Tip:

Massive Vorteile ergeben sich, wenn man in den AppDesigner-Datenquellen als primäre Datenquelle eine SQL-View verwendet!

Für solche o.g. Probleme kann man dann sehr schnell eine Lösung auch im laufenden Betrieb herbeiführen, weil in diesen Fällen lediglich die SQL-View geändert werden und man nicht erst "umständlich" eine neue AppDesigner-Lösung ausrollen muss!

Durch eine SQL-View hat man außerdem weitere Möglichkeiten der SQL-seitigen Performance-Optimierungen.


Utilising an SQL view as the primary data source in the AppDesigner data sources results in massive advantages!

A solution can then be found very quickly for such problems as mentioned above, even during operation, because in these cases, only the SQL view is changed, and you don't first have to "cumbersomely" roll out a new AppDesigner solution!

An SQL view also gives you further options for optimizing the performance of the SQL.



Option 2

Wenn die darunterliegenden SQL-Datentypen vom Typ "DateTime" sind und auch Uhrzeiten enthalten, ist der AppDesigner-Datentyp "Date" eher uneeignet.

Um o.g. Filter-Probleme zu vermeiden, sollte die Einstellung des AppDesigner-Datentyps daher mit dem Datentyp der SQL-Datenquelle übereinstimmen bzw. zum Inhalt der Daten passen (also "DateTime" im AppDesigner anstelle "Date")!


If the underlying SQL data types are of the "DateTime" type and also contain times, the AppDesigner "Date" data type is somewhat inappropriate.

In order to avoid the filter problems mentioned above, the setting of the AppDesigner data type should therefore match the data type of the SQL data source or match the content of the data (i.e. "DateTime" in the AppDesigner instead of "Date")!




bottom of page