[gelöst] RecordRef / FieldRef - Hilfe !!!

19. Juni 2012 17:02

Ich brauche einen Lösungstipp für folgendes.

Eingangswerte:
- Tabellennummer - z.B. 27 für Item
- Feldnummer -z.B. 3 für Item.Description
- Primärschlüssel - z.B. "4711" (für Item.No)

Ich muss nun prüfen, welcher Wert in der Tabelle im Satz mit dem Primärschlüssel in dem Feld drin steht.

Also muss ich anhand der Tabellennummer die Tabelle finden, dort den Satz entsprechend Primärschlüssel anlesen und den Wert in dem betr. Feld herausbekommen.

Ich denke, man kann es mit RecordRef und FieldRef abbilden.
Aber ich blicke da die F1-Hilfe nicht ... Und irgendwie auch die CodeUnit 423 nicht :roll:
Zuletzt geändert von raggy am 19. Juni 2012 20:22, insgesamt 2-mal geändert.

Re: RecirdRef / FieldRef - Hilfe !!!

19. Juni 2012 17:13

Auch das Öffnen anhand der Tabellennr. wird in diesem Codebeispiel erläutert: http://www.sobersmartiestech.com/2010/1 ... drefs.html, siehe _myTableNumber.

Bei Fieldrefs geht das etwas anders:
Code:
MeinFieldRef := RecRef.FIELD(FieldNo);

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 09:33

Hallo zusammen,

Ich steh derzeit vor dem gleichen Problem... Komm aber mit dem hier genannten Lösungsweg nicht wirklich weiter.
Ich habe auch eine Tabelle mit folgenden Daten Tabellennummer, Feldnummer und Primärschlüssel.

Hier mal ein bisschen TEST-Quellcode:
Code:
l_item.SETFILTER(l_item."No.",'4711');
l_item.FINDFIRST;

Rec_REF.OPEN(P_TabNo);
Rec_REF.GETTABLE(l_item);
Rec_REF.SETPOSITION(l_item.GETPOSITION);

Field_REF:= Rec_REF.FIELDINDEX(P_FieldNo);

EXIT(FORMAT(Field_REF.VALUE));


Dieser Code Funktioniert, und liefert mir die Werte von Artikel 4711 auch zurück. Aber es kann doch nicht sein, das ich wenn es z.B.
eine neue Tabelle in der Funktion gibt z.B. "Customer" ich neuen Quellcode in die Funktion schreiben muss, und eine neue "rec" Variable anlegen
muss, dann hilft mir doch die RecordRef nix weiter.
Also habe ich geschaut was man mit RecordID machen kann... Da müsste ich dann aber vorher Quellcode schreiben, damit ich statt dem Primärschlüssel
die RecordID in meine Tabelle schreiben kann... Also auch nicht die Lösung? Wie kann ich denn aus einer Rec Variable die RecordID ausslesen? Oder denke ich zu kompliziert?

Vielen Dank für eure Hilfe, ich komm hier sonst nicht weiter.

Gruß Matthias

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 09:38

himi81 hat geschrieben:Oder denke ich zu kompliziert?

Ich weiß nicht, was du genau erreichen möchtest. Gefragt in diesem Thema war nur, wie man einen Wert über Tabellennr. und Feldnr. ansprechen könnte.
Das, was du in deinem Quelltext machst, geht auch einfacher:

Code:
l_item.SETFILTER(l_item."No.",'4711');
l_item.FINDFIRST;

Rec_REF.GETTABLE(l_item);
Field_REF:= Rec_REF.FIELDINDEX(P_FieldNo);

EXIT(FORMAT(Field_REF.VALUE));


Wenn du also schon einem Record mit Hilfe einer Recordvariable stehst, dann brauchst du keine RecordID oder SETPOSITION.

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 09:42

Hallo Natalie,

Das sage ich ja, dann hilft mir die RecordRef nix, dann könnte ich das auch so...

Im Gunde habe ich Tabelno, Fieldno , und primär Key , und möchte den Wert.
Deinen Betrag verstehe ich so das ich dann nicht primär key sondern RecordID benötige.

Wie kann ich diese erzeugen?

Gruß Matthias

PS: Danke für die schnelle Antwort.

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 09:50

himi81 hat geschrieben: sondern RecordID benötige.

Wie kann ich diese erzeugen?

Code:
RecRef.GETTABLE(DeineRecVariable);
RecordID := RecRef.RECORDID;

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 10:10

Dann muss ich also wenn ich einen neuen Record in die Funktion einpflege irgendwo programmieren, egal wo...

Es geht hier um ein Workflow für Stammdaten dh. ersteinmal wird nur die Artikeltabelle angesprochen später aber vielleicht z.B. Die Customer Tabelle. ...
Schade dann geht das nicht ganz so einfach wie ich dachte, dann spare ich für diesen Fall nur etwas sich sont wiederholenden Quellcode.

Trotzdem vielen Dank.

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 10:13

himi81 hat geschrieben:Es geht hier um ein Workflow für Stammdaten dh. ersteinmal wird nur die Artikeltabelle angesprochen später aber vielleicht z.B. Die Customer Tabelle. ...

Leider werde ich aus dieser Beschreibung noch immer nicht schlau. Was möchtest du - mit Hilfe deines Codes - mit den Tabelleln Artikel und Debitor machen? Nenn doch bitte ein konkretes Beispiel.

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 11:06

Also ich muss etwas weiter ausholen...

Ich habe ien Modul gebaut in dem man Felder von Tablellen einer Benutztergruppe zuweisen kann.
Wird nun der Wert in einem dieser Felder geändert , läuft über die CU 1 eine Prüfung durch ob dieses Feld "beobachtet" wird, und
ob der MA zu einer berechtigen Gruppe gehört. Wenn nicht gibt es eine Fehlermeldung, und das Feld wird auf den xrec. Wert zurückgesetzt.

Diese Funktion läuft schon.

Also Grundlage dient unter anderem eine Tabelle mit folgenden Werten:
Tabelno,Fieldno,Benutzergruppe.

Nun soll ein Workflow bei neuanlage von z.B. Artikeln geben.
Der MA der bei uns den "Grundartikel" anlegt schickt nun per Automatik E-Mails an alle MA die den Stammdaten Benutzergruppen angehören.

Mitarbeiter 1 geht nun (per link aus der Email) direkt auf die Artikelkarte, und startet eine Funktion : "Meine Stammdaten anzeigen"

Nun Durchläuft eine Funktion die Tabelle Und schreibt alle Felder für die Mitarbeiter 1 berechtigt ist in einen Temp. Record mit folgenden Feldern:
Tablelno, Fieldno , Primärkey, alter Wert , Neuer Wert
27,50000,4711, ' ' , 'dies ist ein Test'

Nun sieht Mitarbeiter 1 alle Felder die er pflegen muss! und trägt falls abweichend den neuen Wert in die Tabelle ein...
Beim Klick auf "OK" wird die Tabelle item angepasst und die neuen Werte geschrieben.

Soweit die Theorie solange es sich nur um die Tabelle 27 item , handelt klappt das auch so.
wenn ich nun noch Felder aus der Tablelle "item referenz" Pflegen möchte muss ich neu programmieren, ich dachte das könnte ich
irgendwie umgehen.

Aber ich denke ich habe nun richtig verstanden was genau RecordRef und FieldRef machen.

Gruß Matthias

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 11:20

himi81 hat geschrieben:Nun Durchläuft eine Funktion die Tabelle Und schreibt alle Felder für die Mitarbeiter 1 berechtigt ist in einen Temp. Record mit folgenden Feldern:
Tablelno, Fieldno , Primärkey, alter Wert , Neuer Wert
27,50000,4711, ' ' , 'dies ist ein Test'

Irgendwie hast du das Standard-Änderungsprotokoll nachprogrammiert :-)
Ergebnis ist die gefüllte Tabelle 405.
Verfolge mal den Code aus Codeunit 1 - OnGlobalModify --> ChangLogMgt.LogModification --> InsertLogEntry

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 11:32

Naja, nicht ganz nachprogrammiert...
Es ghet aber in die gleiche Richtung.
Es geht hier um den Schutz bzw. Das Pflegen einzelner Felder, das liefert der Standard nicht wirklich.
Aber das ist ja nicht das Problem sondern das Workflow was die Daen ändern soll...
Im Monent klickt sich jeder MA der Berechigt ist Stammdaten zu pflegen duch alle Register der Atikelkate und sucht sich sio seine Felder zusammen die er Pflegen
Kann soll oder darf - Nun bekommt ein zweiter MA - mit das es einen Neuen Artikel gibt, dieser hat die gelcihen Berechigungen und schaut nochmal nach den Daten und ein
dritter... Dies soll verhindert werden um das Anlegen von z.B. Artikeln sauberer zu dokumentieren - schneller zu machen - und nicht soviel "Leistungsverbratung" :-D

Da liefert NAV keine schöne Lösung ... Es kann ja nicht der MA der die Artikel zum ersten mall alle Daten wissen? wie z.B. Zollnummer? Das macht dann die Entsprechendene
Benutzergruppe und für zum Beispiel "FIBU" wird die Artieklprüfung auf " OK" gesetzt ...
Wenn ein weiterer User der FIBU pflegen will bekommt er die Meldung das hat MA Fritz Meyer schon gemacht.

ich hoffe du hast nun verstanden wozu diese Funktionen alle gedacht sind, ist nicht wirklich leicht zu überschauen...und zu erklären...

Gruß Matthias

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 11:37

Aber der Tipp dort zu schauen ist sehr gut... jedoch wird die Funktion OnGlobalModify schon mit RecordRef Variablen aufgerufen... Wo kommen die her stellt sich die Frage ... Wo ist der Aufruf dieser Funktion, wo werden
die Parameter vergeben... ?? Wenn ich das wüsste bzw. sehen könnte wäre die Problematik wahrscheinlich gelöst.

Re: [gelöst] RecordRef / FieldRef - Hilfe !!!

22. Juni 2012 11:44

Die Funktion wird direkt aus NAV heraus bei den entsprechenden Ereignissen aufgerufen, wenn ein MA über die Benutzeroberfläche Daten eingibt/verändert/löscht. D.h. du hast an der Stelle Zugriff auf die Daten, die bearbeitet wurden, und zwar alle und zwingend.

Gruß, Fiddi