Ошибка при копировании заказа на портале Acumatica - PullRequest
0 голосов
/ 17 июня 2019

Я изменил функциональность заказа на копирование портала, чтобы перенести детали адреса доставки исходного заказа в новый заказ.

Я добавил настраиваемое поле в ЦАП Portalcartlines для хранения типа заказа и номера заказа, и пока Перейти к оформлению заказа действие Я заполняю адрес из заказа источника.

Адрес правильно переносится в новый заказ, но при сохранении я получаю ошибку.

Ошибка: при вставке записи «Адрес доставки» возникла как минимум одна ошибка.Пожалуйста, просмотрите ошибки.Ошибка: «RevisionID» не может быть пустым.Ошибка: «Страна» не может быть пустой

Я использую следующий код

public class PortalCardLinesExtn : PXCacheExtension<SP.Objects.IN.PortalCardLines>
{

    #region UsrSourceOrderType
    [PXDBString(2)]
    //[PXUIField(DisplayName = "SourceOrderType")]

    public virtual string UsrSourceOrderType { get; set; }
    public abstract class usrSourceOrderType : IBqlField { }
    #endregion

    #region UsrSourceOrderNbr
    [PXDBString(15)]
    //[PXUIField(DisplayName = "SourceOrderNbr")]

    public virtual string UsrSourceOrderNbr { get; set; }
    public abstract class usrSourceOrderNbr : IBqlField { }
    #endregion
}

public class InventoryCardMaint_Extension : PXGraphExtension<InventoryCardMaint>
{


    public PXAction<PortalCardLine> ProceedToCheckOut;
    [PXButton]
    [PXUIField(DisplayName = "Proceed to Checkout")]
    public IEnumerable proceedToCheckOut(PXAdapter adapter)
    {
        Base.DocumentDetails.Cache.Persist(PXDBOperation.Update);
        Base.DocumentDetails.Cache.Persist(PXDBOperation.Insert);
        Base.DocumentDetails.Cache.Persist(PXDBOperation.Delete);
        foreach (PXCache value in Base.Caches.Values)
        {
            value.IsDirty = false;
        }
        SOOrderEntry sOOrderEntry = PXGraph.CreateInstance<SOOrderEntry>();
        SOOrder sOOrder = sOOrderEntry.Document.Cache.CreateInstance() as SOOrder;
        sOOrder = sOOrderEntry.Document.Insert();
        sOOrderEntry.Document.Cache.SetValueExt<SOOrderExt.isSecondScreen>(sOOrder, 1);
        //sOOrderEntry.Document.Cache.SetValueExt<SOOrderExt.overrideShipment>(sOOrder, true);
        SOOrderExt extension = PXCache<SOOrder>.GetExtension<SOOrderExt>(sOOrder);
        SOShippingContact sOShippingContact = sOOrderEntry.Shipping_Contact.Cache.Current as SOShippingContact;
        SOShippingAddress sOShippingAddress = sOOrderEntry.Shipping_Address.Cache.Current as SOShippingAddress;

        PortalCardLines prow = Base.DocumentDetails.Current;
        if (prow != null)
        {
            PortalCardLinesExtn extn = Base.DocumentDetails.Cache.GetExtension<PortalCardLinesTSExtn>(prow);
            if (!string.IsNullOrEmpty(extn.UsrSourceOrderNbr) && !string.IsNullOrEmpty(extn.UsrSourceOrderType))
            {
                SOOrder order = PXSelect<SOOrder, Where<SOOrder.orderType, Equal<Required<SOOrder.orderType>>, And<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>>.Select(Base, extn.UsrSourceOrderType, extn.UsrSourceOrderNbr);
                if (order != null)
                {
                    SOOrderExt sourceextension = PXCache<SOOrder>.GetExtension<SOOrderExt>(order);
                    sOOrderEntry.Document.Cache.SetValueExt<SOOrderExt.comment>(sOOrder, sourceextension.Comment);
                    SOShippingContact contact = PXSelect<SOShippingContact, Where<SOShippingContact.contactID, Equal<Required<SOShippingContact.contactID>>>>.Select(Base, order.ShipContactID);
                    SOShippingAddress address = PXSelect<SOShippingAddress, Where<SOShippingAddress.addressID, Equal<Required<SOShippingAddress.addressID>>>>.Select(Base, order.ShipAddressID);
                    contact.OverrideContact = true;
                    address.OverrideAddress = true;

                    sOShippingAddress.OverrideAddress = true;
                    sOShippingContact.OverrideContact = true;
                    if (contact != null)
                    {
                        sOShippingContact.FullName = contact.FullName;
                        sOShippingContact.Attention = contact.Attention;
                        sOShippingContact.Phone1 = contact.Phone1;
                        sOShippingContact.Email = contact.Email;
                    }
                    if (address != null)
                    {
                        sOShippingAddress.AddressLine1 = address.AddressLine1;
                        sOShippingAddress.AddressLine2 = address.AddressLine2;
                        sOShippingAddress.AddressLine3 = address.AddressLine3;
                        sOShippingAddress.City = address.City;
                        sOShippingAddress.CountryID = address.CountryID;
                        sOShippingAddress.State = address.State;
                        sOShippingAddress.PostalCode = address.PostalCode;
                    }
                    sOOrderEntry.Shipping_Contact.Cache.Update(sOShippingContact);
                    sOOrderEntry.Shipping_Address.Cache.Update(sOShippingAddress);
                }
            }
        }

        PXRedirectHelper.TryRedirect(sOOrderEntry, PXRedirectHelper.WindowMode.Same);
        return adapter.Get();
    }
}

1 Ответ

0 голосов
/ 26 июня 2019

Я пробовал это на обновленном событии в поле Customerid, и это решило проблему.

Код указан ниже

    protected void SOOrder_CustomerID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
    {
        if (InvokeBaseHandler != null)
            InvokeBaseHandler(cache, e);
        var row = (SOOrder)e.Row;
        if (row == null) return;
        SOOrderExt ext = cache.GetExtension<SOOrderExt>(row);
        PortalCardLines prow = Base1.DocumentCardDetails.SelectSingle();

        if (prow != null)
        {
            PortalCardLinesTSExtn extn = PXCache<PortalCardLines>.GetExtension<PortalCardLinesTSExtn>(prow);
            if (!string.IsNullOrEmpty(extn.UsrSourceOrderNbr) && !string.IsNullOrEmpty(extn.UsrSourceOrderType))
            {
                //UsrDeliveryNotes
                SOOrder order = PXSelect<SOOrder, Where<SOOrder.orderType, Equal<Required<SOOrder.orderType>>, And<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>>>>.Select(Base, extn.UsrSourceOrderType, extn.UsrSourceOrderNbr);

                if (order != null )
                {
                    string notes = PXNoteAttribute.GetNote(Base.Document.Cache, order);
                    ext.Comment = notes;
                    row.ShipAddressID = order.ShipAddressID;
                    row.ShipContactID = order.ShipContactID;
                }
            }
        }
    }
...