[Gelöst] Dataport ignoriert CurrDataport.BREAK;

14. März 2007 14:25

Ich verstehe die Welt nicht mehr.

Ich habe einen Dataport, den ich aus einer Vorlage übernommen habe. Er regelt sowohl Im- als auch Export.

Dieser Dataport hat sehr viele DataItems, von denen ich einige nicht brauche. Anstatt diese zu löschen (ich könnte sie wider Erwarten später doch noch brauchen), habe ich in den betreffenden DataItems im OnPreDataItem-Trigger ein CurrReport.BREAK; eingefügt.

Beim Export verhält sich der Dataport richtig; das heißt, es werden weder Daten in die Datei geschrieben, noch wird ein überflüssiger DataItem-Wechsel erzeugt (hier <<NewLine><NewLine>>).

Beim Import dagegen wird Mist gemacht: Stößt er in der Importdatei auf das 6. DataItem, so versucht er, die Daten auch in das 6. Dataport-DataItem zu schreiben; ganz gleich, ob da nun das CurrDataport.BREAK steht oder nicht. Das führt natürlich zu Laufzeitfehlern.

Hat einer ne Idee, was ich da machen kann??
Zuletzt geändert von Natalie am 19. März 2007 11:45, insgesamt 1-mal geändert.

14. März 2007 14:40

Verschieb doch die nicht benötigten Dataitems nach hinten.
Der Break funktioniert auch nur bei der Ausgabe.
Aber das müsste dann auch CurrDataport.break und nicht CurrReport.break heissen, oder irre ich mich da? ;-)
Zuletzt geändert von Michael Schumacher am 14. März 2007 14:42, insgesamt 1-mal geändert.

14. März 2007 14:41

Danke, werde es probieren.

14. März 2007 14:52

Beim Versuch, ein DataItem zu verschieben (egal an welcher Stelle) stürzt das System ab :shock:

14. März 2007 15:04

Ich dachte der Bug wäre behoben ;-)

Dann hilft nur ausschneiden und am Ende wieder einfügen

14. März 2007 15:06

Bug behoben? Die Kundendatenbank ist 4.0 ohne SP.

Kopieren geht nicht, daher habe ich das Objekt als txt-Datei exportiert und drehe dort an der Reihenfolge der DataItems.

Dass das immer alles so umständlich sein muss *heul*

14. März 2007 15:54

Natalie hat geschrieben:Bug behoben? Die Kundendatenbank ist 4.0 ohne SP.

Eben, genau dort steckt ja der Bug:
http://www.msdynamics.de/viewtopic.php?t=1502

14. März 2007 15:57

Natalie hat geschrieben:OnPreDataItem-Trigger ein CurrReport.BREAK

Ist das nicht die falsche Stelle?
Gruß Mikka

14. März 2007 16:22

Wo ist denn deiner Meinung nach die richtige Stelle, um einzelne DataItems komplett zu überspringen?

(Ganz abgesehen davon, dass ich wieder versehentlich CurrReport statt CurrDataport geschrieben habe *grummel*)

14. März 2007 16:48

Um ein komplettes DataItem von vornherein zu überspringen ist der BREAK im OnPreDataItem schon ganz richtig positioniert.

14. März 2007 16:52

So, nächste Frage:

Ein DataItem soll sich beim Import folgendermaßen verhalten:
Es soll nur die Datensätze einfügen, die es in der Zieltabelle nocht nicht gibt.

Ich hatte gehofft, dies ohne eigene Programmierung laufen zu lassen. Dafür habe ich die Eigenschaften so gesetzt:
AutoSave = <Yes>
AutoUpdate = No
AutoReplace = No

Leider klappt das so nicht; ich bekomme eine Fehlermeldung in der Art
"<Tabelle> <Feld> <Wert> existiert bereits." (stimmt auch).

Weiß jemand, ob und wie ich das ohne eigene Programmierung umschiffe?

14. März 2007 19:54

Mit Programmierung sollte es so gehen :

AutoSave auch auf "No"
Im OnAfterImportTrigger den erzeugten Datensatz in eine Recordvariable kopieren. Wenn Primärschlüsselwerte in der Zieltabelle vorhanden dann SKIP, sonst die Recordvariable am Ende des Triggers manuell einfügen.

14. März 2007 20:02

Jo, so hätt ich das auch gemacht ...
Ich frage mich nur, wofür es dann diese Properties gibt, wenn sie bei einer solch einfachen Anforderung keine Hilfe leisten. Laut der Hilfe hätte es funktionieren sollen:
AutoSave - Ja -> Der Datensatz wird zum Speichern vorbereitet
AutoReplace -> wenn gleicher DS, dann nicht ersetzen (aber der will ihn ja trotzdem einfügen??)

15. März 2007 09:15

Mikka hat geschrieben:Ist das nicht die falsche Stelle?

Sorry, ich habe es verwechselt mit einem SKIP von einzelnen Datensätzten auf dem OnAfterImportRecord.

Gruß Mikka

15. März 2007 09:58

So, nächstes Rätsel für euch:

Die Tabellen/DataItems beinhalten z.T. Felder mit der Eigenschaft NotBlank=Yes. Aus irgendeinem Grund gibt es in meiner Datenbank aber Datensätze, in denen das Feld trotzdem nicht gefüllt ist. Beim versuchten Import gibts dann eine Fehlermeldung. OK!

Beim Import ist es mir bislang nicht gelungen, diesen Wert auf LEER abzufragen und ggf. durch irgendeinen zu ersetzen (es wurde einfach ignoriert).

Es gelingt mir nur, beim Export diesen Wert zu setzen (und das auch noch im OnBeforeExportRecord- statt OnAfterExportRecord-Trigger).

Habe ich vielleicht was falsch gemacht? Wer weiß, wie man dies beim Import realisieren kann?

15. März 2007 10:17

Hi Natalie,

Natalie hat geschrieben:Beim Import ist es mir bislang nicht gelungen, diesen Wert auf LEER abzufragen und ggf. durch irgendeinen zu ersetzen (es wurde einfach ignoriert).


ich habe das im OnAfterFormatField-Trigger des Feldes gemacht. Dort dann in etwa so:

Code:
IF Text='' THEN
  Text:=' ';

Gruß, Marc

15. März 2007 10:24

Danke, auf die Idee mit der Feldebene war ich noch nicht gekommen!

15. März 2007 10:39

Hi Marc,

das hat leider nicht funktioniert! Beim Import kam wieder die Meldung, das Feld dürfe nicht leer sein.
Ich musste den Code wieder in meinem OnBeforeExportRecord-Trigger verschieben.