Dataport: Abbruch mit Nr. (Primärschlüssel) existiert nicht

18. Januar 2010 21:32

Liebe Community,

vielleicht hat jemand von Euch eine Idee. Mir sind sie ausgegangen (zumindest die, die meiner Faulheit entgegenkommen)...
Meine Aufgabe: Import von Adress-Daten in Table 5050. Meine Systemumgebung: Nav2009 mit SP1 auf SQL Server 2008. Meine Zugriffsrechte: In Nav Super-Rolle, auf SQL-Server db_owner, Lizenzrechte auf Entwicklerebene.
Mein Lösungsansatz: Zum Import habe ich mir einen einfachen Dataport (ohne Code) erstellt (Datenmigration via Excel oder XML funzt nicht, um nicht zu sagen hängt angesichts der Datenmassen). Den Anfang der Dataport-Fields macht der Primary Key mit der Adress-Nr. gefolgt von zig anderen, z.T. mit Validate, um bestimmte Aktionen während des Imports anhand des Codes in der Tabelle 5050 auszulösen (z.B. Erstellen von Suchschlüsseln, Validierung von Nebentabellen, Generierung von Briefanreden etc.). Dabei habe ich auch darauf geachtet, dass voneinander abhängige Felder in der korrekten Reihenfolge vom Dataport angesprochen werden...
Die Properties des Dataports stehen aktuell auf AutoSave(Yes), Update(Yes), Replace(Yes). Ich weiß, ist eigentlich Blödsinn, habe aber inzwischen auch alle anderen Kombinationen mit Autosave(Yes) erfolglos ausprobiert (will ja neue Daten einfügen).
In der Einrichtung des Adress-Managements ist natürlich hinterlegt, dass beliebige (zumindest freie) manuelle Nummern vergeben oder der automatische Nummernkreis (ebenfalls garantiert nur freie) genutzt werden können. Der Nummernkreis der Importadressen ist also ehrlich und definitiv frei (die Bestandsdaten liegen in einem komplett anderen Bereich).
Mein Problem: Ich :evil: und der Import bricht sofort ab mit der Fehlermeldung, dass der Kontakt Nr. "xxxxxx" nicht existiert. :shock: Surprise, surprise: Deshalb habe ich ja den Import-Dataport erstellt und Autosave auf Yes gesetzt...
Inzwischen habe ich die Schn... voll, bin aber immer noch proprietär faul... Bevor ich also versuche, den ganzen Mist über eine Zwischentabelle mit 100 Variablen und 250 Zeilen Code oder eine aufwändig und unmäßig erweiterte Importdatei auf der "harten" SQL-Ebene in's System zu "prügeln", bin ich für jeden Lösungshinweis dakbar!
Von Hinweisen wie "Programm neu starten" (wahlweise Anwendung, Client, Datenbank, Server) bitte ich allerdings abzusehen: Als frühzeitig gealterter Microsoft-User habe ich dies natürlich schon hinter mir... :-( Im Anhang die Textvariante meines Dataports.

Im übrigen: Eigentlich wäre der ganze Mist Aufgabe meines MS-Partners und ich habe echt besseres zu tun... Wenn also ein/e kompetente/r Fachfrau oder -mann im Raum Nürnberg (im Sinne des Großraums der sogenannten "Metropolregion Nürnberg" [ist Frankfurt a.M. eigentlich auch schon Mitglied? :-) ]) Zeit und Lust auf Betreuung eines hochgradig individualisierten, aber nicht minder dankbaren-solventen-zahlungswilligen Kunden aus dem Non-Profit-Bereich hat, sind mir Zuschriften jederzeit willkommen (die Wechselerklärung für MS liegt mir schon vor)... :lol: Dies gilt vollkommen unabhängig von meinem aktuellen Problem (und auch unhabhängig von der jeweiligen MS-Zertifizierug nach meinen schlechten Erfahrungen mit einem Gold-Certified-Partner und Member, ich weiß nicht mehr von was für einem exklusiv-tollen MS-Executive Board...).
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Dataport: Abbruch mit Nr. (Primärschlüssel) existiert nicht

18. Januar 2010 22:59

Hallo Wema,

zunächst einmal herzlich Wilkommen im Forum.

Aber nun zu deinem Problem:
Es tut mir natürlich leid, das dir dein MS-Partner nicht helfen kann, denn der sollte dir eigentlich helfen könen.

Also ich hab gerade kein NAV im Zugriff, deshalb kann ich dir nur ein paar Tips geben.
  • Wenn du auf der Kontaktkarte einen neuen Datensatz einfügst, wird zunächst ein leerer Datensatz mit einer Nummer eingefügt. Dann kannst du den Rest eingeben.
  • Lass mal die Nummernserie aus dem Dataport weg, oder wenn du mehrere Nummernserien benutzt, füge Sie als erste ein.
  • Bau dir eine globale Variable Kontakt meinetwegen Cont.
  • Dann versuch mal folgenden Code im OnAfterImport
    Code:
    Clear(Cont);
    Cont.INIT;
    // evtl.> Cont."No Series" := "No Series";
    if "No." <> '' then
      Cont.validate("No.","No.");
    Cont.Insert(true);
    Cont := Contact; // hier musst du evtl. die Felder einzeln zuweisen bzw. validieren, aber für einen ersten Versuch sollte es reichen
    Cont.Modify(true);
    Currdataport.Skip;
Der Code ist nicht getestet, deshalb kann es sein, das du hier noch ein wenig basteln musst, aber es sollte dir einen Anhaltspunkt für die Lösung geben. Manche NAV Tabellen erfordern zunächst einen eingefügten leeren Datensatz bevor man die restlichen Felder validieren kann.

Falls sich der Code compilieren läst und der Dataport startet, wundere dich bitte nicht, dass der Fortschrittsdialog nicht aktualisiert wird. Der wird wg. dem SKIP nicht aktualisiert. Evtl. musst du dir hier einen eigenen bauen.

Gruß, Fiddi


Nachtrag:
Besondere Beachtung verdient das Feld "Type" hier musst du für alle primären Kontakte einer Gruppe egal ob das Familie Müller oder die XYZ AG ist, auch wenn es nur einen Kontakt gibt, einen Unternehmenskontakt anlegen. Alle Personen, die zu dieser Gruppe gehören benötigen den Eintrag Personenkontakt, dieser wiederum benötigt Zugriff auf den zugehörigen Unternehmenskontakt. D.h. bevor du Personen anlegen kannst, musst du das Unternehmen anlegen, und du musst die Unternehmensnummer bei der Anlage des Personenkontakts wissen. Hier musst du dann vorher die Nummern zuweisen, oder wenn die zu importierenden Kontakte richtig sortiert sind, dir die Unternehmensnr. merken, und bei den Personen einfügen.

Re: Dataport: Abbruch mit Nr. (Primärschlüssel) existiert nicht

20. Januar 2010 16:20

Hallo Fiddi,

erst mal vielen Dank für die schnelle Antwort. Bin leider erst jetzt zum Testen gekommen.
Habe mal die Nummerserie nach oben gesetzt, gefolgt von der Nummer. Wenn ich jetzt auch noch die Validierung von "Adress Code" und "Type" entferne, kommen zumindest schon mal wieder Daten in's System. Das ist doch ein Schritt in die richtige Richtung.
Damit fehlt mir jetzt allerdings ein Teil der Validierungslogik, so dass nachfolgende Felder nicht richtig initialisert werden. Werde auf jeden Fall auch noch mal Deinen Code testen und poste erneut, sobald ich neue Ergebnisse habe.

Erstmal herzlichen Dank,
wema

Ach so: Danke auch für den Nachtrag. Hab die Gruppen getrennt gehalten und tatsächlich nur Personen-Datensätze mit Nr. := Unternehmensnr.

Re: Dataport: Abbruch mit Nr. (Primärschlüssel) existiert nicht

20. Januar 2010 16:29

Zu deinem Nachtrag:

Der Personenkontakt bekommt eine auch eine eindeutige Nr. . Die Nummer des übergeordneten Unternehmens muss in das Feld "Company No.". Du imusst die Nr. des Unternehmens also wissen, wenn du einen Personenkontakt einfügst.

Gruß, Fiddi