Jump to content

Trigger


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Forum,

 

ich kämpfe mich gerade ein bißchen mit der MS SQL Datenbank unseres ERP Anbieters herum. Vorab: Ich programmiere nur aus Hobby, würde aber gern zur Lösung unseres Problems beitragen.

 

Folgende Sachlage: In unserem ERP bleiben ungewollt Vorgänge im Status "Offen" und verfäschen Auswertungen.

Beispiel: Es wird ein Angebot für einen Interessenten geschrieben (Angebot 1), doch der Interessent hat Änderungswünsche. Nun muss das Angebot 1 zu Angebot 2 kopiert werden, dort finden die Anpassungen statt. Leider bleibt das Quellangebot im Status "offen". Es gibt nun zwei offene Angebote, obwohl das erste eigentlich nicht mehr gültig ist. Es müsste also einen anderen Status (abgelehnt) erhalten. Uns macht das bei der Ressourcenplanung unheimlich Schwierigkeiten.(unser ERP Anbieter will uns da wohlnicht helfen)

 

Nun mal mein gedanklicher Ansatz: Wenn ich einen Trigger hätte, der beim einfügen eines Datensatzes nachsieht ob es für die betroffen Projektnummer ein Altes Angebot gibt und dies im Status ändert, wäre mir ohne teure ERP Änderungen geholfen.

 

Die Tabelle hat dazu nur ein paar relevante Felder

 

Nummer - eindeutiger Datensatzschlüssel

Projekt - Textfeld mit unserer Projektbezeichnung

Vorgangsart - Textfeld (hier Relevant ANGEBOT)

Status -Integer, zu verändernder Wert.

 

Wir nun ein neues Angebot angelegt müsste es doch über einen Trigger möglich sein die "Alt-Angebote" upzudaten, oder. Mein Ansatz:

 

-- Höchste Nummer eines Angebots aus dem bearbeiteten Projekt holen

select max(nummer) from Projektzweige
where projekt ='10824'
And Vorgangsart ='Angebot'

 

die "irgendwie" merken

 

---alle anderen Angebote im Status ändern

Update Projektzweige
Set Status = 1
where projekt ='10824'
And Vorgangsart ='Angebot'
and Nummer not in (select max(nummer) from Projektzweige
where projekt ='10824'
And Vorgangsart ='Angebot')
 

Wie bekommt man das in einen Trigger? Und ums insteressant zu machen: Es gibt schon einen insert Trigger auf der Tabelle. kann einfach ein weiterer eingefügt werden? Mein vorrangigstes gedankliches Problem ist es das Projekt zu greifen...

 

Jeder Tipp ist willkommen...

 

 

 

 

 

Link zu diesem Kommentar

Hallo,

einen Trigger hätte, der beim einfügen eines Datensatzes nachsieht ob es für die betroffen Projektnummer ein Altes Angebot gibt und dies im Status ändert,

=> wie kann der Trigger den entscheiden, ob ein Angebot "alt" ist und somit nicht mehr gültig sei?

Es kann doch sein, das ein Interessent / Kunde auch mehr als ein paralleles / sep. Angebot erhält, oder?

Was soll der Trigger dann machen?

 

Ich denke, so "einfach mal" was reinprogrammieren macht dir / euch mehr Probleme als Nutzen.

Fragt doch besser direkt beim Hersteller mal an oder auch einen Partner dazu.

Oder besuch zumindest eine Programmierschulung des ERP-Systems, in der dir auch die Grundstrukturen beigebracht werden.

 

Gruß Sanches

 

PS: In den meisten Systemen nennt man den Vorgang "Versionierung von Angeboten", welche viele (wohl nicht alle) ERP-Systeme meistens in der Basis schon anbieten ...

Link zu diesem Kommentar

=> wie kann der Trigger den entscheiden, ob ein Angebot "alt" ist und somit nicht mehr gültig sei?

 Es kann immer nur ein gültiges Angebot existieren.  Jedes Angebot das neu zu einem Projekt hinzukommt macht also das vorher erstellte Angebot ungültig. Dieses Angebot erhält dann den Status "abgelehnt". Was ja auch völlig korrekt ist, denn der Kunde möchte ja ein anderes Angebot erhalten bzw. erhält ein verändertes. Alle Angebote bleiben so erhalten und es gibt immer nur ein, nämlich das jüngste, gültiges Angebot. Soviel zum Prozess...

 

Der Trigger kann also über das Feld NUMMER erkennen welche Angebote auf "abgelehnt" gestellt werden müssen, nämle alle Angebote in em Projekt mit kleinerer Nummer als das gerade eingefügte. Ich stehe vor der Aufgabe, oder besser denke an diesen Lösungsweg, dies mit einem Trigger zu tun.

 

Welchen ERP Anbieter? Darüber schweige ich lieber mal. Zum einen würde ich dem Hersteller vielleicht etwas Unrecht tun, denn das System wird bei uns schon 14 Jahre eingesetzt und passt schon lange nicht mehr zur Unternehmensgröße. Der Supportpartner der uns betreuen sollte aber sollte eigentlich vom Markt genommen werden. Vielleicht erkennt ja einer am Tabellennamen das ERP System. ;)

Link zu diesem Kommentar

Moin,

 

- ja, du kannst mehrere Insert Trigger in einer Tabelle installieren (Auswirkung, Nebenwirkung?).

- ja, du kannst mittels Trigger alte Angebote updaten

 

Aber,

- du kannst ganz schnell (schneller als einem lieb ist) die Daten der Tabelle komplett schrotten!

- bei einem Strukturupdate funktioniert das ganze nicht mehr

 

Ich empfehle hier Lektüre oder Onlinehilfe bezüglich Trigger mit seinen

Hilfstabellen INSERTED und DELETED, das lohnt sich wirklich.

 

So schön Trigger auch sind (ich benutze sie auch), ist ein genaues Wissen inkl. Tests

nötig, z.B. beim Insert-Trigger das testen von

einfügen von keinem, einem und mehreren Datensätzen.

 

Noch als Warnung, bei einem schlechten Test des Trigges fällt Dir evtl. ein Fehler erst später auf, weil dann eine

Bedingung eintritt die du nicht bedacht hast und der Trigger mehr geändert hat, als er sollte. Ergebnis: Tabellendaten sind Schrott

 

Gruß Kai

bearbeitet von hh2000
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...