[Gelöst] Wie am besten Kundendaten importieren

16. Oktober 2009 02:54

Hallo,

ich versuche einen Import von KUndendaten zu realisieren. Als Vorgabe habe ich eine Excel-Datei erhalten, welche u.a. die Firmenanschrift, Debitoren-Nr.
und den Namen des Geschäftsführers / Inhabers enthält. Zunächst habe ich es über den Excel Impot Wizard von Dynamics AX versucht, das stellte sich aber
schnell als unbrauchbar heraus da ich ja den Inhaber als Mitarbeiter sowie die Anschrift bei den Adressen ablegen will.

Das AIF scheint mir leider auch nicht geeignet, da ich die Excel-Datei dazu zunächst als XML umarbeiten müsste und außerdem den Import nur einmalig
machen muss und nicht regelmässig. Daher versuche ich es jetzt per C# und dem BusinessConnector (Excel-Dateien kann ich auslesen), was mir aber auch
ein wenig umständlich vorkommt - da ich ja mehrere Tabellen füllen bzw. synchronisieren muss??

Kann mir jemand einen Tip geben, wie ich am besten die Kundendaten importieren kann??
Zuletzt geändert von Tactive am 2. November 2009 08:45, insgesamt 1-mal geändert.

Re: Wie am besten Kundendaten importieren

16. Oktober 2009 15:14

Hallo,

Kommt drauf an in wie weit du mit der XPP Programmierung vertraut bist.
Wir haben auch gemerkt das man mit den STD Imports nicht undebingt alles abdecken kann.
Also wir haben Imports die wir bei Datenübernahmen immer wieder verwenden können (Mit geringen Anpassungen je Kunde)
Dies alles haben wir ganz normal mit XPP erstellt.

Re: Wie am besten Kundendaten importieren

16. Oktober 2009 19:28

Hi,

leider muss auch ich sagen, dass es einen Weg der immer der beste ist nicht gibt. Aber darum gehts ja auch nicht. :-)

Ich denke mal, dass es mit jedem der geschilderten "Wege" gehen sollte.
Nur leider nicht ohne ein wenig Programmieren.

Allerdings sollte, wenig Development-Grundwissen voraus gesetzt, der "direkte" Weg über einen X++ Job oder Klasse der einfachste und schnellste sein.
z.B. für den Excel import müsste auch entsprechender Code zum Erstellen der jeweiligen Datensatz in "anderen" Tabellen geschrieben werden (Stichwort: "Definition Groups").

Also kann auch gleich ein Job dafür erstellt werden. Über den BC würde ich auch nicht gehen wollen.
Ist zwar für den einen oder anderen "Verständlicher" (wenn man z.B. .NET Developer ist), ohne AX Know-How kommt man aber hier auch nicht besonders weit.

Auf meinem Blog findest du ein kurzes Beispiel, wie man mit X++ eine Excel-Datei erstellen kann. Der Import aus Excel nach Dynamics AX geht über die gleichen Klassen. Nur halt anders rum. :-)
http://blog.ak-home.net/PermaLink,guid,3cbc771e-9e85-48bb-ab6f-dbfcf0d463b8.aspx

Weitere Beispiele für eine Excel-Import über x++ sind diese:
http://daxguy.blogspot.com/2007/04/excel-import-custom.html
http://axapta.blogcu.com/import-excel-from-code_1678266.html

Wenn du dich doch für den Weg über die Excel-Import-Funktion entscheiden solltest, hier ein Beispiel wie beim Import der Kundendaten auch gleich das Adressbuch angelegt wird (Einen Mitarbeiter anlegen sollte über diesen Weg auch gehen):
http://www.schweda.net/blog.php?bid=333

Re: Wie am besten Kundendaten importieren

20. Oktober 2009 12:27

Hallo,

vielen Dank für die Antworten. Bin letzte Woche auch zu dem Schluss gekommen das ganze mittel X++ quasi von Hand zu machen. Somit ist der Import auch zukünftig
leichter anzupassen und irgendwann muss ich mich ja in die X++ Thematik einarbeiten. Wir bereits erkannt, bin ich eigendlich C# Entwickler, habe aber Ende letzten Jahres
ein vierwöchigen Lehrgang zum Thema X++ Programmierung absolviert und auch die Prüfung bestanden.

Da das nun aber eine Weile her ist und ich seitdem nichts mehr mit Dynamics oder X++ gemacht habe, muss ich mich nun erstmal in die Sache reindenken. Ist ja schon ein
wenig anders als C# Programmierung - wenn auch ähnlich.

Mit dem Import Tool habe ich auch schon erste Fortschritte gemacht nur weiss ich jetzt noch nicht, wie ich rausfinden kann wieviel Felder ein Arbeitsblatt in Excel gefüllt sind,
also quasi das letzte gesetzte Feld im Arbeitsblatt??

Re: Wie am besten Kundendaten importieren

20. Oktober 2009 17:30

Hmm, bin jetzt ne Ecke weiter und schreibe mir gerade die Methode zum Aktualisieren der Kundendaten. Allerdings verstehe ich die Beziehung der Adresstabelle nicht. Habe rausgefunden das es neben der
CustTable, die ich ja ergänze bzw. aktualisiere, noch die Tabellen ADRESS, DIRPARTYADDRESSRELATIONSHIP und DIRPARTYTABLE.

Wofür diese Tabellen gut sind kann ich mir ungefähr Vorstellen, nur weiss ich nicht wie genau diese Tabellen miteinande verknüpft sind und was ich beim Import da machen muss um eine Adresse sauber
dem Debitor zuzuordnen??

Bin über jeden Hinweis dankbar, momentan bin ich da verwirrt und ratlos.

Re: Wie am besten Kundendaten importieren

21. Oktober 2009 08:42

Ich muss ehrlich sagen mit dem neuen Adressbuch habe ich mich auch noch nicht so recht auseinandergesetzt.
Aber wenn du die Adresse am Debitor füllst (also Name Plz usw....) kannst du mit flg. Code
den Globalen Adressbucheintrag erstellen. (Nummernkreis für Adressbuch muss angelegt sein!)

Code:
custTable.AddressMap::formatAddress();
custTable.PartyId = DirParty::createPartyFromCommon(custTable).PartyId;


lg

Re: Wie am besten Kundendaten importieren

21. Oktober 2009 10:46

Hi,

beim Erstellen eines Kunden (Debitor) wird der benötigte Adressbucheintrag automatisch erzeugt. Du musst, soweit ich weis, da keine extra Code für schreiben, damit des Adressbucheintrag Erstellt bzw. Aktualisiert wird.
Wirf mal bitte inen Blick in die Methode "insert" der CustTable. Dort solltest du folgendes finden:
Code:
// Check if not associated to Party
if (!this.PartyId)
{
    // Create a Party entry for customer
    this.PartyId = DirParty::createPartyFromCommon(this).PartyId;
}
else
{
    DirParty::updatePartyFromCommonInsert(this.PartyId,this);
}

Über diesen Code, wird der Eintrag im Adressbuch erstellt.
Demzufolge solltest du eigentlich nur die entsprechenden Felder des Debitoren "füllen" müssen und der Adressbucheintrag wird automatisch für dich erstellt.

Beim Aktualisieren von Kunden (Debitoren) ist es ähnlich. Die Aktualisierung erfolgt ebenfalls (wenn gewünscht) automatisch.
Dies kannst du in der Methode "update" der CustTable sehen. In dieser Methode sollte folgende Code zu finden sein:
Code:
if (_updateParty)
{
    DirParty::updatePartyFromCommon(this.PartyId, this);
}


Demzufolge musst du bei einer Aktualisierung nur die "update" Mthode der CustTable mit entsprechendem Übergabeparameter aufrufen, und das Adressbuch wird automatisch aktualisiert.