【问题标题】:Error while copying order in Acumatica portal在 Acumatica 门户中复制订单时出错
【发布时间】:2019-06-26 05:53:01
【问题描述】:

我已修改门户复制订单功能,以将源订单送货地址详细信息转移到新订单中。

我在 Portalcartlines DAC 中添加了一个自定义字段来存储源订单类型和订单号,而在 Proceed to Checkout 操作时,我正在填写源订单的地址。

地址已正确结转至新订单,但在保存时出现错误。

错误:插入“收货地址”记录至少引发了一个错误。请检查错误。错误:“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();
    }
}

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    我已经在 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;
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多