Home › Forum › Nuclos Konfiguration › Vorgänge und Objekte › Berechnende Referenzfelder › Aw: Berechnende Referenzfelder
Hallo Frank,
die Lösung kann man aber nicht 1:1 übernehmen, da sie ja von der eigenen Datenstruktur abhängt.
Aber vielleicht hilft der folgende symbolische Code einer geänderten VIEW weiter:
ALTER VIEW [dbo].[V_EO_BESTELLUNG](
INTID,
INTID_STRPROJEKT,
INTID_STRAUFTRAG
STRVALUE_STRPROJEKT,
STRVALUE_STRAUFTRAG
) AS SELECT
t.INTID,
dbo.GetProjectIdByOrder(t.INTID),
t.INTID_STRAUFTRAG,
fk1.STRPROJEKTNAME,
fk2.AUFTRAGSNUMMER
FROM
T_EO_BESTELLUNG t
LEFT OUTER JOIN T_EO_PROJEKT fk1 ON (dbo.GetProjectIdByOrder(t.INTID) = fk1.INTID
LEFT OUTER JOIN T_EO_AUFTRAG fk2 ON (t.INTID_STRAUFTRAG = fk2.INTID)
Im Beispiel (von Hugos ersten Post) würde die obige VIEW zur Entität „Bestellung“ gehören. Diese Bestellung hätte zwei Referenzen: Einmal die Referenz zum Auftrag und zum anderen die Referenz zum Projekt. Letztere soll berechnet werden, daher würde man als erstes den JOIN zum Projekt anpassen: Den ID-Wert der Spalte t.INTID_STRPROJEKT einfach ignorieren und statt dessen eine skalare DB-Funktion aufrufen. Deren Rückgabewert (eine Projekt-ID) wird dann für den JOIN mit der Projektentität verwendet.
Wie nuclosian schrieb, gehören 2 Werte dazu. Daher muss die oben genannte DB-Funktion auch den Wert INTID_STRPROJEKT im SELECT ersetzen.
Die DB-Funktion selbst ist irgendwas wie dies hier:
ALTER FUNCTION [dbo].[GetProjectIdByOrder]
(
@OrderId NUMERIC(20,0)
)
RETURNS NUMERIC(20,0)
AS
BEGIN
DECLARE @result NUMERIC(20,0);
SELECT TOP 1 @result = INTID_STRPROJEKT
FROM T_EO_AUFTRAG a INNER JOIN T_EO_BESTELLUNG b ON b.INTID_STRAUFTRAG = a.INTID
WHERE b.INTID = @OrderId;
RETURN @result;
END
Wie gesagt – der Code ist jetzt so runtergetippt und nicht getestet. Daher bitte Vorsicht walten lassen, Backup machen usw. Ich vermute mal, spätestens hier endet die Gewährleistung von Novabit 😉
Viele Grüße,
Matthias