[Gelöst] DELETE-Funktion in Verbindung mit Table Contacts

26. März 2007 16:09

Hallo Allerseits,

seit Januar diesen Jahres bin ich in unserer Firma mit für die Entwicklung / Betreuung von MBS 3.70.B zuständig (also noch relativ neu).
Ich habe einen Report geschrieben, der alle Kontakte aus der Tabelle Contacts ausgibt, die im Nachnamen mit einem "z" beginnen (Kennzeichen eines Adressabgleiches aus I-Series). Soweit so prima. Nun will ich die erkannten Kontakte im selben Zuge mit dem Report löschen und bin über die Fehlermeldung:
"Delete ist keine Funktion, und nur Funktionen können mit '(...' aufgerufen werden." gestoßen.
Diese Fehlermeldung wird nur von MBS produziert, wenn ich "DELETE(TRUE)" (ausführen des On-Delete Triggers in "Contacts") benutze. Auch ohne das Attribut "True" wird die Funktion nicht ausgeführt. Der Test mit anderen Tabellen ("Items") hat wunderbar funktioniert. Ich habe auch schon nach Tabelleneigenschaften gesucht, die das Ausführen von bestimmten Funktionen verhindern, bin aber leider nicht fündig geworden.

Code:
IF Bemerkung='' THEN BEGIN
    IF Contact.DELETE(TRUE) THEN
        MESSAGE('%1 %2 wurde gelöscht.', TABLECAPTION, Nr_1)
    ELSE
        MESSAGE('%1 %2 wurde nicht gelöscht.', TABLECAPTION, Nr_1);
END;


Habt ihr eine Idee an was es denn scheitern könnte? Ich kann mir irgendwie nicht vorstellen, daß das Ausführen von Funktionen Tabellenabhängig gestaltet ist. Alle Benutzerrechte sind außerdem vorhanden. Schonmal viuelen Dank im Vorraus.

mfg Fabian
Zuletzt geändert von fabster am 27. März 2007 08:23, insgesamt 1-mal geändert.

26. März 2007 16:13

In der Variable Contact steht zum Fehlerzeitpunkt ein Datensatz (speziell: eine Kontaktnr.), den es in der Tabelle Contact nicht (mehr) gibt.

Wie füllst du denn Contact? Ist Contact schlicht leer?
Dies findest du am einfachsten mit Hilfe des Debuggers heraus (falls du ihn noch nicht kennst: benutze mal die Forensuche, wir hatten letztens eine ähnliche Fragestellung).

26. März 2007 17:38

Hallo Fabian,

für mich hört sich das so an, als ob die Variable Contact doppeldeutig ist. Z. B. tritt diese Fehlermeldung auf, wenn du innerhalb der Variable Contact ein Feld Contact hast.

Solltest Du nun z. B. in dem Trigger OnAfterGetRecord mit der Variablen Contact arbeiten brauchst Du das aktuelle Objekt nicht auszuschreiben (genauso wie Du die Hilfsvariable "Rec" in Tabellen, Forms, etc. nicht schreiben muss. Also denkt der Compiler nun Du meinst mit Contac das Feld Contact.Contact. (So ein Feld müsste jedoch in eurer Version zusätzlich eingefügt worden sein)

Schau dir nochmal deine Variablen und die Felder in der Tabelle Contact an, ob hier doppeldeutigkeiten vorkommen. Sollte das so sein, gieb dem Record Contact einfach einen anderen Namen.

Gruß
Frank

26. März 2007 20:20

Ich glaube eher, dass es in der Tabelle Contact ein Feld namens Delete gibt und somit in Konflikt mit dem C/AL-Befehl steht.

27. März 2007 08:19

Moin Moin,

habe tatsächlich ein Feld namens "Delete" in Contacts gefunden, welches in Zusammenhang mit einem Adressabgleich steht. Vielen Dank!! Da wäre ich höchstwarscheinlich noch eine Weile mit Suchen beschäftigt gewesen...
Aber fand ich schön, dass das Error-Handling von C/SIDE wenigstens erkannt hat, dass es sich nicht um eine Funktion handelt ;)

mgf Fabian

27. März 2007 20:03

Also Feld umbenennen und gut ist ;-)