Обновление клиентов клиента из родительского аккаунта - PullRequest
0 голосов
/ 30 сентября 2019

Страница: AR303000 Версия: 18.203.0006 Добрый день. Мне нужно обновить данные дочерних учетных записей (Terms, Status, and Email) при изменении родительской учетной записи. Проблема в том, что я не знаю, как сохранить контактное поле электронной почты для детей из Customer_RowPersisting. Дочерние учетные записи клиентов сохраняются, а контактные данные - нет.

namespace PX.Objects.AR
{
public class CustomerMaint_Extension : PXGraphExtension<CustomerMaint>
{
    #region Event Handlers

    protected void Customer_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
    {
        Customer row = (Customer)e.Row;
        if (row.ParentBAccountID == null)
        {
            PXResultset<Customer> Children = PXSelectJoin<Customer,
                                              LeftJoin<BAccount, On<Customer.bAccountID, Equal<BAccount.bAccountID>>>,
                                               Where<BAccount.parentBAccountID, Equal<Required<Customer.bAccountID>>>>.Select(Base, row.BAccountID);

            if (Children == null) { return; }

            Contact ParContact = PXSelect<Contact, Where<Contact.contactID, Equal<Required<Contact.contactID>>>>.Select(Base, row.DefBillContactID);

            foreach (Customer item in Children)
            {
                //Customer 
                item.TermsID = row.TermsID;
                item.Status = row.Status;
                cache.Update(item);
                //Contact Details
                Contact Cur = PXSelect<Contact, Where<Contact.contactID, Equal<Required<Contact.contactID>>>>.Select(Base, item.DefBillContactID);
                Cur.EMail = ParContact.EMail;
                cache.Update(Cur);
            }
            //Do not know if this is right 
            cache.Persist(PXDBOperation.Normal);
        }
    }
    #endregion
 }
}

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете переопределить метод Persist()! Вы должны добавить ссылку на PX.CS.Contracts.dll dll.

public class CustomerMaintExt : PXGraphExtension<CustomerMaint>
{
    #region Overrides
    public delegate void PersistDelegate();
    [PXOverride]
    public void Persist(PersistDelegate baseMethod)
    {
        using (var scope = new PXTransactionScope())
        {
            Customer row = this.Base.BAccount.Current;
            if (row?.ParentBAccountID == null)
            {
                CustomerMaint businessAccount = PXGraph.CreateInstance<CustomerMaint>();
                PXResultset<Customer> Children = PXSelect<Customer, Where<Customer.parentBAccountID, Equal<Required<Customer.bAccountID>>>>.Select(Base, row.BAccountID);
                foreach (Customer item in Children)
                {
                    businessAccount.Clear();
                    businessAccount.BAccount.Current = PXSelectorAttribute.Select<Customer.bAccountID>(this.Base.BAccount.Cache, item.BAccountID) as Customer;
                    item.TermsID = row.TermsID;
                    item.Status = row.Status;
                    Contact defContact = PXSelect<Contact, Where<Contact.bAccountID, Equal<Required<BAccount.bAccountID>>, And<Contact.contactID, Equal<Required<BAccount.defContactID>>>>>.Select(businessAccount, item.BAccountID, item.DefContactID);
                    defContact.EMail = this.Base.DefContact.Current.EMail;
                    businessAccount.DefContact.Update(defContact);
                    businessAccount.BAccount.Update(item);
                    businessAccount.Save.PressButton();
                }
            }
            baseMethod();
            scope.Complete();
        }
    }
    #endregion
}
...