Home Forum Nuclos Konfiguration Vorgänge und Objekte Berechnende Referenzfelder Aw: Berechnende Referenzfelder

#5624
Matthias Haake
Teilnehmer

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