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.
26. Mai 2009 11:09
Außer einer Timer-gesteuerten Funktion zum Zählen bzw. Suchen der Links fällt mir da nix ein.
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.
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.
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.
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.
26. Mai 2009 11:42
Hab ich doch gesagt?
26. Mai 2009 12:01
Aja - sorry
... wirke ich getresst?
Sonst noch jemand eine Idee?
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?
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.
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
)
26. Mai 2009 13:54
Schätzungsweise wegen dieser Zeile:
- Code:
contact.SETRANGE("No.");
Das setzt keinen Filter, sondern löst ihn.
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?
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
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;
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');
26. Mai 2009 14:43
Leider nein, recordLink.FINDFIRST liefert FALSE
26. Mai 2009 14:46
Bei mir geht´s. DeineNummer ist mit deiner gesuchten Kontaktnummer belegt?
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?
26. Mai 2009 15:11
Ich sag doch: bei mir klappt´s wunderbar
26. Mai 2009 15:13
Du meinst, geteilte Freude ist doppelte Freude?
Leider funktioniert es trotzdem nicht bei mir.
26. Mai 2009 15:14
Kannst du noch etwas vom Code außenherum preisgeben?
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...
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?¿
26. Mai 2009 16:09
Timer-Interval ist auf 750 gesetzt.
bitte schreib mir nochmal den genauen code, den du verwendest.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.