Home › Forum › Nuclos Entwicklung › Makros und Regeln › Sortierung bei Suche über Regel
- Dieses Thema hat 8 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre von
Matthias Haake.
-
AutorBeiträge
-
12 Mai 2011 um 19:06 Uhr #3696
Jan Giebels
TeilnehmerHallo,
ob und wie ist es möglich, in einer Regel bei einer Suche eine Sortierung mit anzugeben?Beispiel: Wir suchen in einer Entität den Datensatz mit dem höchsten Wert. Das Attribut ist eine Ganzzahl und wir benötigen nur den Datensatz mit der höchsten Zahl.
Wie ist das zu realisieren?
Danke und Gruß
Jan
13 Mai 2011 um 11:20 Uhr #3698Maik Stüker
TeilnehmerHallo Jan,
damit ist scheinbar das RuleInterface überfordert. Sonst hätten Sie vermutlich auch schon eine Lösung gefudnen 😉
Ich werde Ihnen eine mögliche Lösung vorschlagen, möchte aber auch darauf hinweisen das die von mir verwenden Klassen nicht Teil des Regel Interfaces sind und somit prinzipiell öfter Änderungen unterliegen.
Viele Grüße,
slash [file name=THEMA_Sortierung_bei_Suche_ueber_Regel.txt size=991]https://www.nuclos.de/media/kunena/attachments/legacy/files/THEMA_Sortierung_bei_Suche_ueber_Regel.txt[/file]Attachments:13 Mai 2011 um 12:18 Uhr #3699Jan Giebels
TeilnehmerVielen Dank … damit werde ich mal ein wenig rumexperimentieren und melden, was draus geworden ist *G*
Währe vll auch ein Verbesserungsvorschlag für das RuleInterface.
Gruss
Jan
13 Mai 2011 um 13:20 Uhr #3702Matthias Haake
TeilnehmerHallo,
bislang löse ich sowas immer mittels einer DB-Funktion, die mir die entsprechende ID zurück gibt. Danach kann man mit dem RuleInterface ja das Objekt anhand der ID nachladen. Aber auch nicht wirklich schön – grade wenn man LINQ gewöhnt ist 🙂
Viele Grüße,
Matthias13 Mai 2011 um 13:43 Uhr #3704Jan Giebels
TeilnehmerGut das ich LINQ nie gewohnt sein werde *G*
Aber die Lösung üebr eine DB Funktion scheint mir auch etwas sicherer, zumal so Klassenänderungen nicht so stark da reinspielen dürften.
19 Mai 2011 um 14:22 Uhr #3728Jan Giebels
TeilnehmerIch habe jetzt mal ein wenig herumprobiert und habe bei der Lösung über eine Datenbankfunktion einfach ein besseres Gefühl, da diese unabhägig von irgendwelchen Klassen ist.
Wie kann ich denn nun eine DB Funktion in einer Geschäftsregel aufrufen und die Ergebnisse verarbeiten ?
Danke und Gruß
Jan
19 Mai 2011 um 15:45 Uhr #3729Maik Stüker
TeilnehmerDas RuleInterface hält hierfür eine Methode bereit:
server.callDbFunction(String sFunctionName, Class resultType, Object... oParams)
Also zum Beispiel:
Integer iArtikelNummer = server.callDbFunction("GET_ARTIKELNR", Integer.class, "Erste Parameterübergabe als String", iZweiteÜbergabeAlsInt, "etc...");
Die Params sind optional und können in Ihrer Anzahl variieren.
Viele Grüße,
slash20 Mai 2011 um 12:58 Uhr #3741Jan Giebels
TeilnehmerPrima .. vielen Dank .. wer lesen kann … das ist ja auch in der RuleInterface Doku worhanden *G*
Es funktioniert prima und bringt mich der Buchhaltungsentwicklung etwas nächer. Es erscheint mir auch sicherer, als Klassen zu verwenden, die sich ohne „Vorwarnung“ ändern können.
Gruss
Jan
1 Juni 2011 um 17:59 Uhr #3761Matthias Haake
TeilnehmerHallo Jan,
so sollte es beispielsweise funktionieren, den Datenmsatz mit dem höchsten Wert einer Entität zu laden. Als Paramter habe ich mal noch die aktuelle Objekt-ID mitgegeben, falls man das als Filterkriterium in der DB-Funktion braucht:
Integer parameterId = server.getObjectId();
Integer rowId = server.callDbFunction("DB_FunctionName", Integer.class, parameterId);if (rowId != null)
{
MasterDataVO object = server.getMasterData("entityName", rowId);
// ... ToDo
}Dazu dann die passende DB-Skalarfunktion:
CREATE FUNCTION [dbo].[DB_FunctionName]
(
@id numeric
)
RETURNS NUMERIC
AS
BEGIN
DECLARE @result NUMERIC;SELECT TOP 1 @result = INTID
FROM T_EO_ENTITYTABLE
ORDER BY INTVALUE DESC;RETURN @result;
Viele Grüße und viel Erfolg,
MatthiasPS: Grade gelesen, dass das Problem bereits gelöst ist – aber vielleicht ist der Post ja für andere noch hilfreich.
-
AutorBeiträge