Schlüssel und FlowField Frage

2. April 2009 17:00

1. Frage

The combination of the data in the fields you select for the key must be unique. The first key you create will be the primary key for the table.
aus C/Side Reference zu "Key"

In der SQL Welt sind Fremdschlüssel nicht eindeutig. Hier jedoch schon?


2. Frage

Ein Flowfield Tutorial würde als Abriss so aussehen:

1. In Tabelle x: Schlüssel aus ein / mehreren Feldern definieren, ein / mehrere Feld als Sumindex Field festlegen
2. In Tabelle y: Feld anlegen, als Flow Field in den Properties definieren und CalcFormula angeben
3. In einer Form: SourceExp einer Textbox aufs Flowfield setzen.

Den Drill Down krieg ich blos nicht zum Laufen *schaem*- aber ansonsten wäre es das doch - oder was gibts für Tücken beim Gestalten eines Flow Fields?

Re: Schlüssel und FlowField Frage

2. April 2009 19:56

dayscott hat geschrieben:1. Frage

The combination of the data in the fields you select for the key must be unique. The first key you create will be the primary key for the table.
aus C/Side Reference zu "Key"

In der SQL Welt sind Fremdschlüssel nicht eindeutig. Hier jedoch schon?

1. Antwort:
Der erste "Key" in NAV wird IMMER zum PK in SQL Server - und damit eindeutig. Alle "Sekundärschlüssel" in NAV werden im Standard zu NONCLUSTERED INDEXES UNIQUE - sind also "Indexe" und keine "Fremdschlüssel" im DB-technischen Sinne.
Die UNIQUEness kann entzogen werden, wenn man die Eigenschaft "SQL Index" entsprechend nutzt.
Echte "Foreign Keys" werden nur dann erzeugt, wenn die DB Eigenschaft "Maintain Relations" aktiviert wird, dann werden aus allen NAV "Table Relations" echte FK (Achtung: absolut NICHT empfohlen!)

dayscott hat geschrieben:2. Frage

Ein Flowfield Tutorial würde als Abriss so aussehen:

1. In Tabelle x: Schlüssel aus ein / mehreren Feldern definieren, ein / mehrere Feld als Sumindex Field festlegen
2. In Tabelle y: Feld anlegen, als Flow Field in den Properties definieren und CalcFormula angeben
3. In einer Form: SourceExp einer Textbox aufs Flowfield setzen.

Den Drill Down krieg ich blos nicht zum Laufen *schaem*- aber ansonsten wäre es das doch - oder was gibts für Tücken beim Gestalten eines Flow Fields?

2. Antwort:
In den Tabelleneigenschaften muss man die "DrillDownFormID" angeben, damit beim DrillDown diese Form autom. angezeigt wird, ansonsten müsste man den DrillDown "zu Fuss" programmieren.

Hoffe das hilft Dir weiter!
Schöne GRüße,
Jörg

Re: Schlüssel und FlowField Frage

3. April 2009 09:47

stryk hat geschrieben:In der SQL Welt sind Fremdschlüssel nicht eindeutig. Hier jedoch schon?

1. Antwort:
Alle "Sekundärschlüssel" in NAV werden im Standard zu NONCLUSTERED INDEXES UNIQUE -
Hoffe das hilft Dir weiter!
Schöne GRüße,
Jörg[/quote]


Ich glaub es ist ratsam für mich mir ein anständiges SQL Buch zu kaufen ! - vielen Dank für deine Antwort!

noch ein C/Side Zitat das mir nicht ganz klar ist:

AutoSplitKey
Use this property to have the system automatically create a key for a new record placed between the current record and the previous record.
Applies to
Forms

Settings
The AutoSplitKey settings are:

To...
Choose...

Let the system create a key which will place a new record between the current record and the previous record Yes
Prevent the system from creating a key which will place the new record between the current record and the previous record No (default)

Comments
There are two prerequisites for turning this property on:

The current key must be the primary key.

The last field in the primary field must be an integer BigInteger, GUID or decimal field. If these conditions are met, you can set this property to Yes.



O_o - der erstellt automatisch Schlüssel ! Wie oft kommt sowas zum Einsatz?

Re: Schlüssel und FlowField Frage

3. April 2009 10:24

Die "AutoSplitKey" Eigenschaft wird in nahezu allen Belegzeilen verwendet. Das ganze dient dazu, neue Zeilen zwischen bestehenden Zeilen einzufügen (und nicht hinten dran zu hängen), z.B.:

Verkaufszeile T37
PK: Document Type, Document No., Line No.

Vorhandenen Zeilen:

Order, AU00001, 10000 [, ...]
Order, AU00001, 20000 [, ...]

Jetzt soll z.B. eine Zeile dazwischen angelegt werden, "AutoSplitKey" berechnet nun die neue "Line No." um den neuen DS dazwischen einzufügen:

Order, AU00001, 10000 [, ...]
Order, AU00001, 15000 [, ...]
Order, AU00001, 20000 [, ...]

quasi: NeueZeile := Zeile_A + ( (Zeile_B - Zeile_A) / 2 )

Damit das ausreichend of funktioniert sind die Standard-Abstände zwischen den Zeilen immer 10000 ...

Re: Schlüssel und FlowField Frage

3. April 2009 10:30

dayscott hat geschrieben:O_o - der erstellt automatisch Schlüssel ! Wie oft kommt sowas zum Einsatz?

Überall , wo Zeilennummern durch eine tabellarische Form automatisch erzeugt werden z.B. in allen Buchungsblättern und Belegzeilen. Die Schrittweite ist anfangs 10000, beim nachträglichen Einfügen oberhalb einer vorhandenen Zeile auch kleiner . Maximal können 13 Zeilen nachträglich zwischen zwei Zeilen einfügt werden, die durch einen 10000er Schritt getrennt sind.

Re: Schlüssel und FlowField Frage

3. April 2009 15:01

da ich gerade weiter in die C/Side Referenz eintauche, glaube ich mir hier sehr sicher zu sein einen Fehler entdeckt zu haben:

CurrFieldNo
Use this function to return the number of the current field.

CurrFieldNo
CurrFieldNo is a built-in function that is used to identify which field has been altered. It can also be used to identify whether the field is being called by a user from a form or by the system via C/AL code. It is generally used with the OnValidate trigger.

Form
If the OnValidate trigger is called as a result of a change that has been implemented from a Form, CurrFieldNo is assigned the field number of the active field.

C/AL Code
If the field is called from C/AL code then there is no active field and CurrFieldNo is 0.

Example 1
To check whether the OnValidate trigger has been called from a form or from C/AL code, you can construct your code as follows:

FieldTrigger OnValidate

IF CurrFieldNo <> 0 THEN BEGIN
Some code that should only be run if the trigger is called from C/AL code

ELSE

Some code that should only be run if the trigger is called from a form.



Ich glaube die Bedetuung von CurrFieldNo erst verstehen zu können wenn ich das mal an etwas Praktischem selber erarbeitet habe, aber soweit kann ich sagen dass die Referenz an der Stelle das If then Else einfach Falschrum drin hat, oder ? (... ist es schon zu spät am Fr Nachmittag? ^^)