Geschäftsbeziehungen importieren

2. November 2009 08:48

Hallo,

ich arbeite gerade an einem Import für Stammdaten den ich mittels X++ realisiere. Jetzt würde ich gerne Geschäftsbeziehungen über meinen Import-Code erstellen. Dazu muss ich zunächst einen Eintrag für den Kunden in der Tabelle smmBusRelTable erstellen, doch genau hier fängt das Problem an. Welche Felder müssen dort genau geschrieben werden?

Ich habe es jetzt folgendermaßen versucht, aber das funktioniert leider nicht:

Code:
smmBusRelTable = smmBusRelTable::findByPartyId(_ct.PartyId, false);

// Geschäftsbeziehung anlegen, wenn für den Kunden noch keine vorhanden ist
if (smmBusRelTable.RecId == 0)
{
        smmBusRelTable.clear();
        smmBusRelTable.PartyId            = _ct.PartyId;
        smmBusRelTable.BusRelAccount = NumberSeq::newGetNum(SmmParameters::numRefBusRelAccount()).num();
        smmBusRelTable.BusRelTypeId   = smmBusRelTypeGroup::getCustomerType();
        smmBusRelTable.Imported         = true;
        smmBusRelTable.insert();
}


Wenn ich diesen Code ausführe legt er seltsamerweise nur einen Eintrag in der Tabelle an, den er dann immer wieder überschreibt
und der Name des Debitors wird in der Tabelle CustTable nicht mehr übernommen bzw. gelöscht.

Mein Ziel is es mehrere Personen (Inhaber, Mitarbeiter, etc.) über die Geschäftsbeziehungen zu einem Unternehmen (in diesem Fall
ist es ein Kunde) zuordnen zu können.

Wäre prima, wenn mir da jemand weiterhelfen könnte.
Zuletzt geändert von Tactive am 2. November 2009 16:43, insgesamt 1-mal geändert.

Re: Einträge im Globalen Addressbuch

2. November 2009 16:20

Hi,

hatten wir das Thema nicht erst?
[Gelöst] Wie am besten Kundendaten importieren

Dachte das Problem wäre schon gelöst?

Re: Einträge im Globalen Addressbuch

2. November 2009 16:45

akuehn hat geschrieben:Hi,

hatten wir das Thema nicht erst?
[Gelöst] Wie am besten Kundendaten importieren

Dachte das Problem wäre schon gelöst?


Ja, das mit dem globalen Adressbuch schon. War heute morgem beim Erstellen des Threads noch nicht wirklich wach und habe mich da falsch ausgedrückt. Habe meine Frage nochmal umformuliert.

Re: Geschäftsbeziehungen importieren

4. November 2009 16:05

Hi,

jetzte versteh ich dein Problem. :-)

Was mir an deinem Codebesipiel auffällt ist, dass du nicht
Code:
smmBusRelTable.init();
aufrufst.
Die "Init" Methode setzt alle mandatory Fields der Tabelle auf einem default Wert, welcher durch die CRM-Parameter bestimmt werden kann.

Ich glaube aber nicht, dass dein Problem dadurch verursacht wird.
Wenn man mal den fehlenden "init" Aufruf außer Acht läßt, sieht dein Code "gut" aus.

Es könnte allerdings sein, dass der Aufruf von
Code:
smmBusRelTable = smmBusRelTable::findByPartyId(_ct.PartyId, false);
dir einen falschen Datensatz zurück gibt. Wenn du den Debitoren hast, würde ich die Geschäftsbeziehung dazu immer über
Code:
smmBusRelTable::findCust()
suchen.

Denkbar wäre es auch das dein Problem an einer anderen Stelle im Code verursacht wird.
Was machst du denn vor oder hinter diesem Codeblock?

Re: Geschäftsbeziehungen importieren

10. November 2009 18:58

Hallo,

kam ein paar Tage nicht dazu, mich um den Import weiter zu kümmern aber nun habe ich das mal probiert und es funktioniert nun mit dem Anlegen der Geschäftsbeziehung.
Vielen Dank für den Hinweis mit der Init-Methode. Werde mir zukünftig die Methoden an den Tabellen erstmal anschauen, die nehmen einem ja einiges an Arbeit ab.

Habe mir zum Anleden der Geschäftsbeziehung jedenfalls folgende Methode geschrieben:

Code:
private void updateSmmBusRelTable(Common _common)
{
    smmBusRelTable  smmBusRelTable;
    smmBusRelTypeId busRelTypeId;
    CustTable       custTable;
    VendTable       vendTable;
    DirPartyId      dirPartyId;
    DirParty        dirParty;
    ;
   
    // Geschäftsbeziehung anlegen, die Aktualisierung der Daten wird intern von Dynamics AX übernommen
    switch (_common.TableId)
    {
        case CustTable.TableId:
            custTable       = _common;
            dirPartyId      = custTable.PartyId;
            busRelTypeId    = smmBusRelTypeGroup::getCustomerType();
            smmBusRelTable  = smmBusRelTable::findCust(custTable.AccountNum);
            break;
           
        case vendTable.TableId:
            vendTable       = _common;
            dirPartyId      = vendTable.PartyId;
            busRelTypeId    = smmBusRelTypeGroup::getVendorType();
            smmBusRelTable  = smmBusRelTable::findVend(vendTable.AccountNum);
            break;
           
        default:
            throw Error("Unbekannter Tabellentyp: " + tableid2name(_common.TableId));
    }
   
    if (!smmBusRelTable)
    {
        dirParty = DirParty::constructFromPartyId(dirPartyId);
       
        smmBusRelTable.initFromDirParty(dirParty);
        smmBusRelTable.BusRelAccount = NumberSeq::newGetNum(smmParameters::numRefBusRelAccount()).num();
        smmBusRelTable.BusRelTypeId  = busRelTypeId;
        smmBusRelTable.Imported      = true;
        smmBusRelTable.insert();
    }
}


Jetzt muss ich noch rausfinden wie ich Personen in die Kontakt-Tabelle bekomme und diese mit den Geschäftsbeziehungen verknüpfe. Hast Du da vielleicht auch einen Hinweis für mich??
Habe mich damit jetzt noch befassen können, weiss bisher nur das ich dafür die Tabelle ContactPerson ergänzen muss.