OFFICIUM INSERVIO
Your reliable partner for your business software...
"CFN_Call" Limitierungen / limits of "CFN_Call"
(alle Versionen/all versions)
Montag, 1. Juni 2020
Stellungnahme von Sage/Response from Sage
Vorgehensweise generell "bedenklich"? / Approach generally "questionable"?
Hintergrund/Background
Die Methode "CFN_Call" kann dazu benutzt werden, um beispielsweise in Datenquellen Aufrufe von eigenen .net-Funktionen zu realisieren.
Nachfolgend ein Beispiel aus Sage Datenquelle "dtsLieferantUmsatz.Sage.Wawi".
The "CFN_Call" method can be used, for example, to implement calls to your own .net functions in data sources.
See following example from Sage data source "dtsLieferantUmsatz.Sage.Wawi".
(SELECT CFN_Call('Sagede.OfficeLine.Shared.RealTimeData.dll','Sagede.OfficeLine.Shared.RealTimeData.PlaceholderHandler.Zeitachse.FieldExpression',@PartGuid,'KHKMandantenPerioden.Jahr','KHKMandantenPerioden.Periode','') AS ZeitraumSage arbeitet in diesem Zusammenhang mit dem Interface "IPlaceholderHandler".
Es ist jedoch nicht möglich, in diesen Ausdrücken über Feldplatzhalter auf Inhalte von anderen Datenfeldern zuzugreifen.
Gerade das wäre aber in Datenquellen äußerst sinnvoll, um dynamische SQL zu generieren, die sich jeweils der Datensituation anpasst.
In this context, Sage works with the "IPlaceholderHandler" interface.
However, it is not possible to access the contents of other data fields in these expressions using field placeholders.
However, that would be extremely useful in data sources in order to generate dynamic SQL that adapts to the data situation.
Stellungnahme von Sage/Response from Sage
Beim Ersetzen der Call-Parameter sind die Datenquellen bzw. Data-Records noch nicht ausgeführt. Daher können im Attribut SQL-Abfrage eines Feldes grundsätzlich keine Fieldvalues ermittelt werden. Uns ist noch nicht so ganz klar, was Sie mit dem Call-Platzhalter auf Feldebene erreichen wollten. Wäre es nicht eventuell dieser Fall: im "OnCurrent" Ereignis des Data-Edit-Elementes das Makro AufrufenDll ausführen. Hier können Sie die aktuellen Feldwerte übergeben und den "korrekten" Feldwert des Feldes, welches Sie jetzt mit dem Call-Platzhalter ansprechen, zurückgeben.
The data sources or data records are not yet executed when the call parameters are replaced. Therefore, no field values ​​can be determined in the attribute SQL query of a field. We're not quite sure what you're trying to achieve with the field-level call placeholder. Suppose this case: execute the AufrufenDll macro in the "OnCurrent" event of the data edit element. Here you can transfer the current field values ​​and return the "correct" field value of the field that you are now addressing with the call placeholder.
Vorgehensweise generell "bedenklich"? / Approach generally "questionable"?
Es stellt sich in diesem Zusammenhang die Frage, in wieweit o.g. Konstrukte in Datenquellen überhaupt sinnvoll und "zukunftsfähig" sind.
Sollte Sage im Hinblick auf zukünftige Cloud-Versionen der Sage 100 beispielsweise auf MS "Azure SQL" wechseln, so ist davon auszugehen, dass Aufrufe von DLL-Dateien aus SQL-Statements als "kritisch" bewertet und entfernt bzw. nicht zugelassen werden.
In this context, the question arises as to what extent the above-mentioned constructs in data sources make sense and are "sustainable" at all.
Should Sage switch to MS "Azure SQL" with regard to future cloud versions of the Sage 100, for example, it can be assumed that calls to DLL files from SQL statements will be rated as "critical" and removed or not permitted.
