更新客户的默认联系人会添加新记录

时间:2015-04-27 22:22:44

标签: acumatica

我有一种使用CustomerMaint图表添加或更新客户的方法。

我的方法与正在发生的一件奇怪的事情不同。

插入客户后。如果我通过该方法更新联系人,则会在联系人表格上创建第二个联系人记录。如果我再次更新它的行为正确并且没有创建新的联系人记录并且更新了默认的联系人记录。

这是我的方法

    private PX.Objects.AR.Customer UpdateContact(ContactRead rexContact, PX.Objects.AR.Customer m, bool insert = true)
    {

        PX.Objects.CR.Contact defContact = null;

        PX.Objects.AR.CustomerMaint graph = PXGraph.CreateInstance<PX.Objects.AR.CustomerMaint>();

        graph.Clear(PXClearOption.ClearAll);

        //Add Customer and BAccount Records
        m.AcctCD = "V" + rexContact._id;
        m.AcctName = rexContact.system_search_key;
        m.Type = "CU";

        if (insert) {
            m = graph.CurrentCustomer.Insert(m);
            defContact = graph.DefContact.Current;
        }  
        else {
            defContact = PXSelect<PX.Objects.CR.Contact, Where<PX.Objects.CR.Contact.contactID, Equal<Required<PX.Objects.CR.Contact.contactID>>>>.Select(this, m.DefContactID);
        }

        //Update Default Contact Record
        defContact.ContactType = "AP";
        defContact.FullName = rexContact.system_search_key;

        if (rexContact._related.contact_emails != null)
        {
            if (rexContact._related.contact_emails.Length > 0) defContact.EMail = rexContact._related.contact_emails[0].email_address;
        }

        if (rexContact._related.contact_phones != null)
        {
            if (rexContact._related.contact_phones.Length > 0) defContact.Phone1 = rexContact._related.contact_phones[0].phone_number;
        }

        graph.DefContact.Update(defContact);

        //Change customer class to vendor
        m.CustomerClassID = "VENDOR";
        graph.CurrentCustomer.Update(m);

        graph.Actions.PressSave();

        return m;

    }

1 个答案:

答案 0 :(得分:1)

看起来您将客户插入的视图与主视图不同。在graph.CurrentCustomer中插入内容将无法正确设置当前记录,这可能会在您尝试访问graph.DefContact.Current时导致不可预测的行为。您应该将联系人插入graph.BAccount,这是客户维护图的主要视图。

此外,当您更新现有客户的联系人(而不是插入新客户)时,您仍应使用graph.BAccount.CurrentLocate为您检索的客户设置PXSelect值,并使用graph.DefContact.Select()检索默认联系人,而不是完整PXSelect