Property TEMPORARY bei Recordvariable prĂĽfen

Bild Tipps & Tricks zu den Dynamics NAV Versionen
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.

Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Kowa » 28. April 2011 14:33

Eine Recordvariable, die eigentlich temporär sein sollte, es dann aber durch eine falsch gesetzte Temporary-Property dann doch nicht ist, kann spätestens beim DELETEALL böse Folgen haben. MIt Hilfe eines RecordRef's kann man vorher prüfen, ob man nicht versehentlich auf der physischen Datenbanktabelle operiert, hier steht in RecRef.Number als fester Wert die Tabellen-ID, bei der temporären ein variabler Wert über 2000100000 (den Wert habe ich empirisch ermittelt :wink: )

Code: Alles auswählen
RecRef.GETTABLE(TempRecVariable);
IF RecRef.NUMBER >= 2000100000 THEN
  TempRecVariable.DELETEALL;
...
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Torsten67 » 28. April 2011 14:55

ist ja genial 8-)

putzig ist, dass da nicht etwa ein konstanter Offset dazwischen liegt (z.B. Tabelle Item 27 -> temporär 2000100027), sondern bei wiederholten Aufruf meines Test-Dreizeilers RecRef.NUMBER immer größer wird.

Torsten
Torsten67
Microsoft Partner
Microsoft Partner
 
Beiträge: 80
Registriert: 4. Juni 2007 16:24
Wohnort: Erfurt
Realer Name: Torsten Söhnel
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3.x,4.x,5.x,2009

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Natalie » 28. April 2011 15:04

Die von Kowa beschriebene Variante gilt nur fĂĽr NAV <= 5.0.

Ab 2009:
Code: Alles auswählen
RecRef.GETTABLE(TempRecVariable);
IF RecRef.ISTEMPORARY THEN
  TempRecVariable.DELETEALL;
...


Referenz: http://msdn.microsoft.com/en-us/library/ff477102.aspx
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Torsten67 » 28. April 2011 15:15

... und Kowa war noch so stolz darauf, den Wert 2000100000 empirisch ermittelt zu haben.
Torsten67
Microsoft Partner
Microsoft Partner
 
Beiträge: 80
Registriert: 4. Juni 2007 16:24
Wohnort: Erfurt
Realer Name: Torsten Söhnel
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3.x,4.x,5.x,2009

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon SilverX » 29. April 2011 07:18

Ein konstanter Offset wäre nicht praktikabel, da NAV intern diese ID zur Referenzierung dieser speziellen temporären Instanz nutzt.

Und die 2000100000 ist ein Sicherheitsabstand fĂĽr die in NAV "7" zu implementierenden ca. 99500 neuen Systemtabellen 8-)
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon HattrickHorst » 29. April 2011 08:26

Naja, das ist wohl eher was für RecordRefs, die je nach Ausführung mal temporär und mal nicht temporär sein können. Bei festen Record-Variablen sollte man wissen (oder zur Not nachgucken können), ob die Eigenschaft gesetzt ist. Ansonsten sollte man nicht damit hantieren.

Aber interessant ist es schon, wie NAV das intern macht. Ich habe das mal vor Jahren festgestellt und wenn ich mich richtig erinnere, dann setzt NAV die ID sogar in 2er-Schritten hoch, also 2000100000 für die erste temporäre Instanz, 2000100002 für die zweite, usw. Ist das immer noch so und wenn ja, warum?
Außerdem gab es doch mal diesen Fehler in einer Version... Wenn man zwei unterschiedliche, temporäre Record-Variablen von der gleichen Tabelle erstellt hat, hatten die zwar unterschiedliche IDs, enthielten aber den selben Recordset (oder so ähnlich). Was ist denn daraus geworden und warum war/ist das so?
HattrickHorst
 
Beiträge: 585
Registriert: 15. Januar 2009 19:32
Wohnort: Bochum
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00C - heute

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Natalie » 29. April 2011 09:04

HattrickHorst hat geschrieben:Außerdem gab es doch mal diesen Fehler in einer Version... Wenn man zwei unterschiedliche, temporäre Record-Variablen von der gleichen Tabelle erstellt hat, hatten die zwar unterschiedliche IDs, enthielten aber den selben Recordset (oder so ähnlich). Was ist denn daraus geworden und warum war/ist das so?

Davon hatte ich noch nie gehört bzw. nichts dazu gefunden.
Ich habe aber diese Aussage zum Anlass genommen, in der Knowledge Base zu suchen und bin auf ein Hotfix zum Thema ISTEMPORARY (also fĂĽr 2009) gestoĂźen: siehe KB975655.

:!: Wer mit ISTEMPORARY arbeiten möchte, sollte mindestens Build 29735 (für 6.0) oder 29958 (für 6.0 SP1) benutzen. :!:
Benutzeravatar
Natalie
Moderator
Moderator
 
Beiträge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon HattrickHorst » 29. April 2011 09:29

Ich glaube, das war in einer 5er-Version. Ich versuche es auch gerade noch mal nachzuvollziehen...
HattrickHorst
 
Beiträge: 585
Registriert: 15. Januar 2009 19:32
Wohnort: Bochum
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00C - heute

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon HattrickHorst » 29. April 2011 10:19

Ich hab es wiedergefunden. Es betrifft temporäre Record-Arrays. Und wenn ich mich nicht irre, hast du sogar Kommentare dazu abgegeben. 8-)
Offiziell war es wohl mal ein Bug, aber mittlerweile wird es als Feature verkauft. :lol:
http://dynamicsuser.net/blogs/mark_brummel/archive/2010/05/05/tip-27-using-temp-tables-in-arrays.aspx
HattrickHorst
 
Beiträge: 585
Registriert: 15. Januar 2009 19:32
Wohnort: Bochum
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00C - heute

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Kowa » 2. Mai 2011 15:31

HattrickHorst hat geschrieben:Naja, das ist wohl eher was für RecordRefs, die je nach Ausführung mal temporär und mal nicht temporär sein können. Bei festen Record-Variablen sollte man wissen (oder zur Not nachgucken können), ob die Eigenschaft gesetzt ist. Ansonsten sollte man nicht damit hantieren.

Temporäre Recordvariablen sollten eigentlich "Temp" oder "Buffer" im Namen haben, nicht-temporäre nicht. Leider trifft man immer wieder auf Code, wo das nicht eingehalten wurde (auch im Standard) , und die Namen sind hier auch nur Schall und Rauch weil nur die Property ausschlaggebend ist. Fehlerquellen wie Mergevorgänge und Copy&Paste sind schnell passiert, auch Funktionen wie FindSalesPrice in CU 7000 sind ohne Codeprüfung mit Vorsicht zu genießen weil man dem Parameter nicht ansieht, dass hier nur eine temporäre Instanz übergeben werden darf. Zur Laufzeit gibt es leider keine andere Möglichkeit, das direkt vorab zu prüfen, um Datenverluste zu verhindern, was natürlich wünschenswert wäre.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon HattrickHorst » 3. Mai 2011 09:52

Also ich sehe da immer noch keinen tieferen Sinn für feste Record-Variablen. Wenn ich in der Lage bin den von dir oben genannten Code einzufügen, dann bin ich auch in der Lage das Property nachzugucken. Das Einzige, was ich gelten lassen würde, wäre, wenn man immer alle seine Konstrukte mit temporären Record-Variablen so aufbaut, um evtl. vorhandenen Merge- und Konvertierungsfehlern vorzubeugen, bei denen das Property nicht ordentlich mitgezogen wurde. Nur wann wird schon mal eine Konvertierung oder ein Merge durchgeführt? Bei Updates und Hotfixes. Sollte man das nicht sowieso vorher testen?! Wenn das durch einen Merge entstanden ist, wird man dann nicht noch viel mehr Probleme haben? Außerdem deckt man so zwar die individualisierten Stellen ab, aber was ist mit den vielen Stellen, die im Standard oder in einem Add-On vorhanden sind? Alle Stellen vorher bearbeiten?! Nein, nicht wirklich!
Also, ich finde, man sollte das schon wissen, aber dem praktischen Nutzen bei festen Record-Variablen stehe ich doch sehr kritisch gegenüber. Das Verhältnis von Aufwand zu Nutzen stimmt da einfach nicht. Wie gesagt, bei dynamischen RecordRefs ist das etwas anderes.
HattrickHorst
 
Beiträge: 585
Registriert: 15. Januar 2009 19:32
Wohnort: Bochum
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00C - heute

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Kowa » 1. März 2012 23:57

Natalie hat geschrieben: :!: Wer mit ISTEMPORARY arbeiten möchte, sollte mindestens Build 29735 (für 6.0) oder 29958 (für 6.0 SP1) benutzen. :!:


Ein andere Möglichkeit ab 6.0 ist der neue zweite Parameter ShareTable bei der COPY Funktion.
Beide Recordvariablen müssen dann temporär sein, sonst erfolgt Abbruch zur Laufzeit.

Code: Alles auswählen
Record.COPY(FromRecord [, ShareTable])

Onlinehilfe hat geschrieben:ShareTable
Type: Boolean
Specifies whether the function creates a copy of the record or creates a reference to a temporary record.
If FromRecord and Record are both temporary and ShareTable is true, then the COPY function does not create a new copy of the record. Instead, the COPY function causes Record to reference the same table as FromRecord.
The default value is false. If you specify false, all records are copied to Record from FromRecord.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Freestyler » 2. März 2012 00:37

SilverX hat geschrieben:Ein konstanter Offset wäre nicht praktikabel, da NAV intern diese ID zur Referenzierung dieser speziellen temporären Instanz nutzt.

Und die 2000100000 ist ein Sicherheitsabstand fĂĽr die in NAV "7" zu implementierenden ca. 99500 neuen Systemtabellen 8-)


Nunja, da du ja auf der MSDynamics Konferenz NAV 7 kurz vortragen wirst, bin ich gespannt, was aus den 99'500 Systemtabellen geworden ist ... :-D *grins*
Freestyler
Microsoft Partner
Microsoft Partner
 
Beiträge: 793
Registriert: 14. November 2006 22:07
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013R2

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon SilverX » 2. März 2012 07:38

Kowa hat geschrieben:Ein andere Möglichkeit ab 6.0 ist der neue zweite Parameter ShareTable bei der COPY Funktion.
Beide Recordvariablen müssen dann temporär sein, sonst erfolgt Abbruch zur Laufzeit.
Code: Alles auswählen
Record.COPY(FromRecord [, ShareTable])
Übrigens eine sehr coole Funktion in manchen Situationen, wenn man zwei oder mehr Instanzen auf das selbe temp. Recordset benötigt.

Freestyler hat geschrieben:
SilverX hat geschrieben:Ein konstanter Offset wäre nicht praktikabel, da NAV intern diese ID zur Referenzierung dieser speziellen temporären Instanz nutzt.
Und die 2000100000 ist ein Sicherheitsabstand fĂĽr die in NAV "7" zu implementierenden ca. 99500 neuen Systemtabellen 8-)

Nunja, da du ja auf der MSDynamics Konferenz NAV 7 kurz vortragen wirst, bin ich gespannt, was aus den 99'500 Systemtabellen geworden ist ... :-D *grins*

Ich plane schon, Dynamics NAV 7 nicht nur kurz sondern eher länger zu präsentieren :-D
Zu 99.500 Tabellen hat es denn aber doch nicht gereicht, auch wenn sich in dem Bereich einiges getan hat...
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Kowa » 17. Oktober 2015 00:33

Ab NAV 2016 ist es ja integriert, aber für ältere Versionen hier eine Lösung mit einer eleganten Kombination von Funktionen.
https://klemmensen.ca/2015/07/24/is-my-record-temporary
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Property TEMPORARY bei Recordvariable prĂĽfen

Beitragvon Kowa » 30. März 2023 09:56

Ab BC 22 ist es endlich im Quellcode direkt erkennbar:
TemporaryRecord.jpg

Passend dazu: AppSourceCop Warning AS0109
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01


ZurĂĽck zu NAV Tipps & Tricks

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast