[Gelöst] Dataport einfügen neuer Datensätze verhindern.

29. Oktober 2010 19:04

Hallo,

wie erstelle ich einen Dataport, der mir keine neuen Datensätze einfügt (Falls es die ID nicht gibt),
sondern nur vorhandene ändert?

Gruß
Ralf
Zuletzt geändert von ralf5 am 2. November 2010 12:23, insgesamt 1-mal geändert.

Re: Dataport einfügen neuer Datensätze verhindern.

29. Oktober 2010 20:08

Schau dir mal die Eigenschaften des Dataport-DataItems an. Dort gibt es:
AutoSave, AutoReplace und AutoUpdate.

Lies mal nach, was die so machen. Dies könnte vieleicht auch dein anderes Problem lösen.

Re: Dataport einfügen neuer Datensätze verhindern.

1. November 2010 09:14

Hallo Natalie,
ich kenne zum Thema Dataport mitlerweile den ganzen Teil im Application Designer's Guide. Auch die Hilfe habe ich bis zum erbrechen durchgelesen. Du kannst dir ja mal den DP ansehen. Die Eigenschaften AutoSave und AutoReplace sind beide auf Yes eingestellt.
Gruß
Ralf

Re: Dataport einfügen neuer Datensätze verhindern.

1. November 2010 11:33

ralf5 hat geschrieben:Auch die Hilfe habe ich bis zum erbrechen durchgelesen. Du kannst dir ja mal den DP ansehen. Die Eigenschaften AutoSave und AutoReplace sind beide auf Yes eingestellt.


Ich hatte für dich extra auf AutoSave verlinkt:
Onlinehilfe hat geschrieben:AutoSave Property - Sets whether imported records are automatically inserted into the table.
[...]
If AutoSave is set to No, then imported records are not automatically inserted into the appropriate tables. To insert records manually, use the OnAfterImportRecord Trigger.

Demnach muss diese Eigenschaft auf No stehen.
Wo ich mir jetzt nicht sicher bin, ob dies schon reicht oder aber ob du nun im OnBeforeImportRecord-Trigger noch ein MODIFY nachreichen musst, wenn der Datensatz als solcher schon existiert.

Hier noch Infos zu AutoSave, AutoUpdate, AuteReplace von MS in Form einer Exceldatei (ich weiß nicht, wer Zugang dazu hat): https://mbs.microsoft.com/downloads/cus ... k28303.xls

Re: Dataport einfügen neuer Datensätze verhindern.

2. November 2010 11:11

Demnach muss diese Eigenschaft auf No stehen.

Meiner Meinung nach falsch:
Denn: In deinem Beispiel steht es ja auch drin. Im APP-Guide auch:
"Note that if AutoSave is No, the settings of AutoReplace and AutoUpdate have no effect."

Wo ich mir jetzt nicht sicher bin, ob dies schon reicht oder aber ob du nun im OnBeforeInsertRecord-Trigger noch ein MODIFY nachreichen musst, wenn der Datensatz als solcher schon existiert.

Gut, Test mit Modify.
Parameter:
AutoSave=No
AutoUpdate=Yes
AutoReplace=No
Code:
                               Record exists in both Database and Import File |  Record exists only in Import File

1. Im OnBeforeImportRecord()   Der este DS wird geleert Name = ''             |  Fehlermeldung:Debitor Nr. '1076477' 
                               der zweite Datensatz (DS) wird ignoriert.      |  existiert nicht.


2. Im OnAfterImportRecord()    Die DS werden aktualisiert                     |  Fehlermeldung: Debitor Nr. '1076477' 
                                                                              |  existiert nicht.

Also das zweite Beispiel aktualisiert die Datensätze aber sobald einmal die Nr. Nicht gefunden wird bricht der Dataport mit Fehlermeldung ab.

Mensch: Es muss doch möglich sein vorhandene DS zu aktualisieren und nicht vorhandene zu ignorieren. :-(

Re: Dataport einfügen neuer Datensätze verhindern.

2. November 2010 11:15

Natalie hat geschrieben:Wo ich mir jetzt nicht sicher bin, ob dies schon reicht oder aber ob du nun im OnBeforeInsertRecord-Trigger noch ein MODIFY nachreichen musst, wenn der Datensatz als solcher schon existiert.

Ach sorry, das gehört ja dann in den den OnAfterImportRecord.
Hintergrund: Wenn AutoSave = No ist, dann landet alles importierte zunächst in der Recordvariable = DataItem. Das Ergebnis kannst du im OnAfterImportRecord auswerten und dort bei Bedarf INSERT bzw. MODIFY ausführen.

Schau dir mal als Beispiel den Standarddataport 5900 an:
OnAfterInsertRecord:

Code:
IF NOT INSERT THEN
  MODIFY;

Re: Dataport einfügen neuer Datensätze verhindern.

2. November 2010 12:22

Natalie hat geschrieben:Schau dir mal als Beispiel den Standarddataport 5900 an:
OnAfterInsertRecord:

Code:
IF NOT INSERT THEN
  MODIFY;


:-D DANKE :-D

Das hat mich ja glatt auf ne neue Idee gebracht. Wenn ich
im OnAfterInsertRecord folgendes reinschreibe:
Code:
IF NOT MODIFY THEN;

dann gehts :-D

Wobei so ein DP eigentlich auch ohne zusätzliche Programmierung funktionieren sollte.

Jetzt muss ich nur noch das Problem lösen warum der OnModify Trigger nicht richtig ausgeführt wird.

Re: Dataport einfügen neuer Datensätze verhindern.

2. November 2010 12:25

ralf5 hat geschrieben:Jetzt muss ich nur noch das Problem lösen warum der OnModify Trigger nicht richtig ausgeführt wird.

Weil du das hier nicht schreibst:
Code:
IF NOT MODIFY(TRUE) THEN;

Re: Dataport einfügen neuer Datensätze verhindern.

2. November 2010 13:15

Natalie hat geschrieben:
ralf5 hat geschrieben:Jetzt muss ich nur noch das Problem lösen warum der OnModify Trigger nicht richtig ausgeführt wird.

Weil du das hier nicht schreibst:
Code:
IF NOT MODIFY(TRUE) THEN;


Sorry, da habe ich mich vertan. Ich meinte natürlich den OnValidate-Trigger aus meinem anderen Problem :-D