[Gelöst] Datenübernahme aus Oracle oder SQL in NAV

19. November 2009 17:54

Hallo liebe Mitleidende :-D

Ich stehe vor der "schönen" Aufgabe eine Datenübernahme von Oracle nach NAV 2009 SP1 (SQL) zu vollziehen.
Gibt es einen direkten Weg die Tabellen von dort aus einzuspielen?

Oder ich übernehme mit dem SQL Management Studio die Daten von Oracle in eine NAV SQL-Datenbank..
Kann ich diese dann von dort aus ins NAV "importieren", so dass ich diese dort sehe ohne sie zuvor manuell anlegen zu müssen?

Ich möchte die Tabellen wirklich 1:1 ins NAV, die eigentliche Übernahme in die NAV-Tabellenstruktur übernimmt dann ein Kollege, der sich in NAV gut auskennt, sich aber nicht mit SQL herumschlagen möchte.
Ein (anderer) Kollege hat mir eine Codeunit geschickt mit der ich direkt aus SQL in die NAV-Tabellen einlesen kann, dieser Weg wird allerdings (leider) abgelehnt, ich sollte die Tabellen für die Weiterverarbeitung also nach Möglichkeit wirklich ins NAV bekommen (ab ID90000).

Ich bin um Hilfe und Anregungen sehr dankbar wie man so einen Vorgang möglichst effizient (oder erst einmal überhaupt :-) ) durchführen kann.

Danke,
Gerald
Zuletzt geändert von Thalon am 16. Dezember 2009 15:19, insgesamt 1-mal geändert.

Re: Datenübernahme aus Oracle oder SQL in NAV

19. November 2009 19:59

Keine Ahnung, wie groß die Oracle-DB ist, aber mit http://support.microsoft.com/kb/280106 sollte das doch machbar sein.

Volker

Re: Datenübernahme aus Oracle oder SQL in NAV

20. November 2009 09:13

Es ist kein Problem die Tabellen von Oracle nach SQL zu übernehmen (das Management-Studio kann via ODBC davon importieren), nur wie ich diese dann ins Dynamics NAV bekomme ab ID90000 ist mir noch schleierhaft.

Re: Datenübernahme aus Oracle oder SQL in NAV

20. November 2009 10:47

Ich habe das noch nie gemacht, aber ich meine im Application-Designer-Guide steht das drin unter Linked Objects.

Re: Datenübernahme aus Oracle oder SQL in NAV

20. November 2009 13:02

vsnase hat geschrieben:Ich habe das noch nie gemacht, aber ich meine im Application-Designer-Guide steht das drin unter Linked Objects.

Genau. D.h. man könnte "Sichten" bauen, die diese Tabellen ID90000 lesen und die Daten dabei NAV tauglich aufbereiten (kompatible Datentypen, kein NULL, etc.). Diese Views könnte man dann als "Linked Objects" in NAV einbinden (Tabellen/Feldnamen identisch zum View). Die LO-Tabellen könnte man dann invon Reports/Codeunits verarbeiten, um die Oracle Daten konsistent in die "richtigen" NAV Tabellen zu mifgrieren, inklusive aller erforderlichen Validierungen und Ergänzungen ...

Re: Datenübernahme aus Oracle oder SQL in NAV

25. November 2009 15:37

Danke, ich werde mir das entsprechende Kapitel zu Gemüte führen und ggfs die Lösung hier reinstellen.
Ich hoffe dass ich nicht für jede SQL-Tabelle erst eine NAV-Tabelle anlegen muss, denn sonst sitze ich noch übermorgen daran..

Erst einmal danke für den Hinweis!

Re: Datenübernahme aus Oracle oder SQL in NAV

27. November 2009 13:43

So, ich habe jetzt einige Tests hinter mir, aber ich verstehe glaub ich das Kapitel nicht (ein Trost ist es mir, dass auch mein Vorgesetzter jetzt daran gescheitert ist).

Ich habe in der Cronus nun folgenden Test durchgeführt (alle Schritte mit einem User mit allen SQL-Rechten):
1) Im SQL eine Tabelle dbo.CRONUS AG$Table1 angelegt
2) 2 Spalten mit varchar(30) erzeugt, NULL zulassen entfernt
Die erste Spalte wurde als Primärschlüssel verwendet.
3) In die erste Zeile wurden auch schon Testdaten eingetragen
4) im NAV eine Tabelle mit ID 90003 angelegt mit 2 Spalten vom Typ "Text" mit Länge 30
Vor dem Compilieren wurde LinkedObject auf Yes gesetzt, sowie "linkedInTransaction" auf Yes
5) Wenn ich nun die Tabelle (im NAV) öffnen möchte (run) bekomme ich den Hinweis:
---------------------------
Microsoft Dynamics NAV Classic
---------------------------
TableData 90003 existiert nicht.

---------------------------
OK
---------------------------

Habe ich einen Punkt übersehen oder handelt es sich hierbei um ein grundsätzliches Verständnisproblem?

Vielen Dank!
Gerald

Re: Datenübernahme aus Oracle oder SQL in NAV

27. November 2009 14:13

Also das verlinken einer echten SQL Tabelle wird nicht funktionieren - NAV erwartet bei Tabellen das Feld "timestamp" am Beginn.
Am besten man erzeugt "Linked Objects" auf Sichten/Views:

1. SQL Tabelle erstellen
Code:
create table dbo."SQL_Table"
(
"A" varchar(30) primary key clustered not null,
"B" varchar(30) not null
)
go
grant all on dbo."SQL_Table" to public
go

2. Sicht auf Tabelle erstellen, dabei NAV Kompatibilität ggf. erzeugen
Code:
create view dbo."SQL_View"
as
select * from dbo."SQL_Table"
go
grant all on dbo."SQL_View" to public
go

3. NAV Linked Object erzeugen
Code:
OBJECT Table 51000 SQL_View
{
  OBJECT-PROPERTIES
  {
    Date=27.11.09;
    Time=13:12:18;
    Modified=Yes;
    Version List=;
  }
  PROPERTIES
  {
    DataPerCompany=No;
    LinkedObject=Yes;
    LinkedInTransaction=Yes;
  }
  FIELDS
  {
    { 1   ;   ;A                   ;Text30         }
    { 2   ;   ;B                   ;Text30         }
  }
  KEYS
  {
    {    ;A                                        }
  }
  CODE
  {

    BEGIN
    END.
  }
}

Re: Datenübernahme aus Oracle oder SQL in NAV

16. Dezember 2009 15:19

Da jetzt nur manche Daten zu übernehmen sind wurde es so gelöst:

Mittels SQL Management Studio und dem Microsoft Oracle ODBC-Treiber die benötigten Tabellen ins SQL geholt und dann mittels einer Codeunit in eine eigens erstellte Tabelle eingelesen.
Die Tabelle wurde durch Kopie der entsprechenden Felder in der Customer in die neue Tabelle erstellt um auch die Validierungen u.ä. drin zu haben.
Wenn das dann passt ändere ich nur mehr den Record auf die "echte" Customer um und starte dann den Import mit der Codeunit.

Den Source-Code darf ich hierfür leider nicht mit euch teilen.

Ich danke dennoch für die Posts, nach einer steilen Lernkurve diese Woche in SQL-Statements und NAV Codeunits kann ich mit den Infos nun im nachhinein auch etwas anfangen :-)

Gruß,
Gerald