[Gelöst]HASLINKS liefert falschen Wert

26. Mai 2009 10:23

Hallo alle!

Ich habe ein Problem mit HASLINKS in der Kontaktkarte.
Ich habe auf dem Kontaktformular einen Button platziert, der folgenden Code ausführt:
Code:
IF ISCLEAR(wshShell) THEN CREATE(wshShell);
wshShell.SendKeys('^l');

Das öffnet das Links-Formular.
Nachdem man einen Link hinzufügt/löscht liefert HASLINKS im Formular allerdings einen falschen Wert.
Wenn ich zum nächsten Datensatz wechsle und dann wieder zurück, dann stimmt der Wert.
Ich schätze, es ist irgendein Refresh-Problem...

Was kann ich da machen?

LG Gerald
Zuletzt geändert von BadGer am 2. Juni 2009 10:24, insgesamt 2-mal geändert.

Re: HASLINKS liefer falschen Wert

26. Mai 2009 11:09

Außer einer Timer-gesteuerten Funktion zum Zählen bzw. Suchen der Links fällt mir da nix ein.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 11:21

Hallo!

Danke für die rasche Antwort!

Ich denke, das Problem liegt daran, dass 'Rec' im Formular nicht aktualisiert wird, nachdem das Links-Fenster geschlossen wurde.
Wie kann ich im Timer-Trigger den Datensatz aktualisieren?
Zuletzt geändert von BadGer am 26. Mai 2009 12:54, insgesamt 1-mal geändert.

Re: HASLINKS liefer falschen Wert

26. Mai 2009 11:28

Das Thema hatten wir doch erst gestern (?).

Du kannst in der Record Link nachschauen, ob oder wieviele Datensätze dort eingetragen sind. Die RecordID, die du da brauchst, kriegst du über eine RecordRef.

Ist aber seltsam, dass eine Form nicht den OnDeactivate- und OnActivate-Trigger durchläuft, wenn man von dort aus das normale Links-Formular öffnet. Sonst könnte man ja einfach im OnActivate etwas hinterlegen.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 11:29

OnActivate ist eine gute Idee!
Mal sehen...
Zuletzt geändert von BadGer am 26. Mai 2009 12:55, insgesamt 1-mal geändert.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 11:40

Nein, leider wird der OnActivate-Trigger beim schließen des Link-Formulars nicht ausgelöst.
Zuletzt geändert von BadGer am 26. Mai 2009 12:55, insgesamt 1-mal geändert.

Re: HASLINKS liefer falschen Wert

26. Mai 2009 11:42

Hab ich doch gesagt? :wink:

Re: HASLINKS liefert falschen Wert

26. Mai 2009 12:01

Aja - sorry :roll: ... wirke ich getresst? :wink:

Sonst noch jemand eine Idee?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 13:11

Also, ich greife jetzt nochmal das Thema "RecordID" auf.

In der Kontaktkarte habe ich als SourceTable 'Contact'.
Wenn ich nun vom aktuellen Datensatz die Record ID haben möchte, wie schreibe ich das dann?
Etwa so:
Code:
currRecID := Rec.RECORDID;

Oder so:
Code:
tmpCustomer := Rec;
currRecID := tmpCustomer.RECORDID;

Da erhalte ich aber jew. einen Fehler:
"Sie haben eine unbekannte Variable angegeben.

RECORDID

Definieren Sie die Variable unter 'C/AL Globale Variablen'."

Was mache ich falsch? :-?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 13:24

Nochmal: du musst eine RecordRef auf das Record setzen, dessen RecordID du haben möchtest. Also sowas wie
Code:
DeinRec.SetRange(blabla);
RecRef.Open(Database::DeinTable);
RecRef.SetView.DeinTable(GetView);
Recref.findfirst;
message('%1',Recref.RecordID);

Hab´s nicht getestet - müsste aber gehen.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 13:49

Im OnAfterGetRecord-Trigger der Kontaktkarte habe ich nun folg. Code:
Code:
contact.SETRANGE("No.");
contactRecRef.OPEN(DATABASE::Contact);
contactRecRef.SETVIEW(contact.GETVIEW);
IF (contactRecRef.FINDFIRST = TRUE) THEN BEGIN
  recordLink.SETRANGE("Record ID",contactRecRef.RECORDID);
  IF (recordLink.FINDFIRST = TRUE) THEN BEGIN
    MESSAGE('Link vorhanden');
  END;
END;

Variablen:
Code:
Name            DataType    Subtype
contact         Record      Contact
contactRecRef   RecordRef
recordLink      Record      Record Link

Die Message erscheint aber nicht, auch wenn Links vorhanden sind.
Dh, recordLink.FINDFIRST gibt FALSE zurück.
Warum?
(sorry für die dämlichen Fragen - bin ein ein NAV Anfänger :wink: )

Re: HASLINKS liefert falschen Wert

26. Mai 2009 13:54

Schätzungsweise wegen dieser Zeile:
Code:
contact.SETRANGE("No.");

Das setzt keinen Filter, sondern löst ihn.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:02

Gut, jetzt weiß ich, warum es nicht geht.

Was muss ich machen, DAMIT es funktioniert?
Außerdem:
Wozu brauche ich die Variable 'contact'? Kann ich nicht bei 'contactRecRef.SETVIEW' gleich einen Filter auf die aktuelle Kontakt-Nummer machen?
Wenn ja, wie?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:09

SetRange("No.",DeineNummer). Dann sollte es gehen.

Aber wie du das RecordRef setzt, bleibt dir natürlich überlassen. Hauptsache, es klappt :wink:

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:22

OK, auf "Anfänger kann ich mich da nicht ausreden ;-)

Aber eines klappt noch nicht:
recordLink.FINDFIRST liefert FALSE

Code:
contact.SETRANGE("No.","No.");
contactRecRef.OPEN(DATABASE::Contact);
contactRecRef.SETVIEW(contact.GETVIEW);
IF (contactRecRef.FINDFIRST = TRUE) THEN BEGIN
MESSAGE('RecRef vorhanden');
  recordLink.RESET;
  recordLink.SETRANGE("Record ID",contactRecRef.RECORDID);
  IF (recordLink.FINDFIRST = TRUE) THEN BEGIN
    MESSAGE('Link vorhanden');
  END;
END;

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:26

Sodala, so müsst´s hinhauen:
Code:
contactRecRef.OPEN(DATABASE::Contact);
contactRecRef.SETPOSITION(STRSUBSTNO('Nr.=const(%1)',DeineNummer));
recordLink.SETRANGE("Record ID",contactRecRef.RECORDID);
IF recordLink.FINDFIRST THEN
  MESSAGE('Link vorhanden');

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:43

Leider nein, recordLink.FINDFIRST liefert FALSE

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:46

Bei mir geht´s. DeineNummer ist mit deiner gesuchten Kontaktnummer belegt?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 14:48

Ja
Hab' jetzt die Fehlerquelle:
recordLink.SETRANGE("Record ID",contactRecRef.RECORDID);

Danach ist recordLink.COUNT = 0, obwohl ein Datensatz vorhanden ist.
Geht filtern auf eine RecordID dann doch nicht?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 15:11

Ich sag doch: bei mir klappt´s wunderbar :-?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 15:13

Du meinst, geteilte Freude ist doppelte Freude?

Leider funktioniert es trotzdem nicht bei mir.

Re: HASLINKS liefert falschen Wert

26. Mai 2009 15:14

Kannst du noch etwas vom Code außenherum preisgeben?

Re: HASLINKS liefert falschen Wert

26. Mai 2009 15:45

Nein, da ist nichts mehr.
Ich bin im OnTimer-Trigger der Kontaktkarte (5050).
Dort habe ich den Code eingefügt, um anzuzeigen, wenn Links zum aktuellen Kontakt vorhanden sind.
Eigentlich eher unkompliziert...

Re: HASLINKS liefert falschen Wert

26. Mai 2009 16:01

Habe ich nun komplett auch mal gemacht. Ob ich mir die Anzahl an Links suche, oder ein Links-Existiert-Haken - klappt beides.

Bei dir scheitert es aber nicht daran, dass du kein Timer-Interval gesetzt hast?¿

Re: HASLINKS liefert falschen Wert

26. Mai 2009 16:09

:lol: Timer-Interval ist auf 750 gesetzt.

bitte schreib mir nochmal den genauen code, den du verwendest.