Как получить VShipTermsID из записи местоположения поставщика, когда вы находитесь в PO PO? - PullRequest
0 голосов
/ 29 марта 2019

Наш клиент требует, чтобы мы добавили поле «Условия доставки» на экран PO Entry .Глядя на исходный код, выясняется, что поле Ship Via установлено в событии POOrder_VendorLocaition_FieldUpdated.

    protected virtual void POOrder_VendorLocationID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
    {
        Location current = (Location)this.location.Current;
        POOrder row = (POOrder)e.Row;
        if (current == null || (current.BAccountID != row.VendorID || current.LocationID != row.VendorLocationID))
        {
            current = this.location.Select();
            this.location.Current = current;
        }
        ...
        sender.SetDefaultExt<POOrder.shipVia>(e.Row);
        ...
    }

Когда я создаю POOrderEntry_Extension и записываю событие POOrder_VendorLocation_FieldUpdated (без отправителя.

\ App_RuntimeCode \ POOrderEntry.cs (38): ошибка CS1061: «PX.Objects.PO.POOrderEntry_Extension» не содержит определения «location» и нет метода расширения «location», принимающего первый аргумент типа'PX.Objects.PO.POOrderEntry_Extension' может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Я думаю, что когда я смогу найти поле VShipTermsID, ​​я смогу установить свое поле UsrVShipTermsID в PO.Я попытался найти соответствующую директиву using и попытался войти в запись поставщика, а затем в запись местоположения. Любое руководство будет с благодарностью.

Вот расширение DAC для поля UsrVShipTermsID.

[PXDBString(10)]
[PXSelector(typeof(
   Search<ShipTerms.shipTermsID>),
   DescriptionField = typeof(ShipTerms.description))]
[PXUIField(DisplayName = "Shipping Terms")]

А вот полный POOrderEntry_Extension

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Common;
using PX.Data;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.CR;
using PX.Objects.TX;
using PX.Objects.IN;
using PX.Objects.EP;
using PX.Objects.AP;
using PX.Objects.AR;
using PX.Objects.SO;
using PX.TM;
using SOOrder = PX.Objects.SO.SOOrder;
using SOLine = PX.Objects.SO.SOLine;
using PX.CS.Contracts.Interfaces;
using PX.Data.DependencyInjection;
using PX.LicensePolicy;
using PX.Objects.PM;
using CRLocation = PX.Objects.CR.Standalone.Location;
using PX.Objects.AP.MigrationMode;
using PX.Objects.Common;
using PX.Objects.Common.Discount;
using PX.Objects;
using PX.Objects.PO;
using PX.Objects.AP.Locations;

namespace PX.Objects.PO
{
  public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry>
  {
    #region Event Handlers
    protected virtual void POOrder_VendorLocationID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
    {
      Location current = (Location)Base.location.Current;
      POOrder row = (POOrder)e.Row;
      if (current == null || (current.BAccountID != row.VendorID || current.LocationID != row.VendorLocationID))
      {
        current = this.location.Select();
        this.location.Current = current;
      }
      //sender.SetDefaultExt<POOrder.shipVia>(e.Row);
    }
    #endregion
  }
}

Первоначально я собирался пройти путь от ПО до Продавца, но заблудился, когда попытался найти запись о местоположении.Имеет то же самое, используя директивы.

protected virtual void POOrder_VendorID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
  var row = e.Row as POOrder;
  if (row.VendorID != null)
  {
    var vendor = PXSelectorAttribute.Select<POOrder.vendorID>(sender, row) as BAccount;
    if (vendor != null)
    {
      //var poorderExt = row.GetExtension<POOrderExt>();
      //poorderExt.UsrVShipTermsID = vendor.VShipTermsID;
      //sender.SetDefaultExt<POOrderExt.usrVShipTermsID>(e.Row);
      //sender.SetValueExt<POOrderExt.usrVShipTermsID>(row, VendorClass.shipTermsID);
      //poorderExt.UsrVShipTermsID = VendorClass.vendor.GetValue<VendorClass.shipTermsID>(VendorClass.vendor);
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Коллега дал ответ.

protected void POOrder_VendorLocationID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
  POOrder row = (POOrder)e.Row;
  if (row == null) 
    return;
  POOrderExt rowExt = PXCache<POOrder>.GetExtension<POOrderExt>(row);
  {
    //retrieve LocVend Data
    LocationExtAddress location = PXSelect<LocationExtAddress,
       Where<LocationExtAddress.bAccountID, Equal<Current<POOrder.vendorID>>,
       And<LocationExtAddress.locationID, Equal<Current<POOrder.vendorLocationID>>>>>.Select(Base, row);
    rowExt.UsrVShipTermsID = location.VShipTermsID;
  }
}

Спасибо за поддержку и помощь.

0 голосов
/ 29 марта 2019

Если вам нужно получить доступ к свойству или методу базового графика из расширения, используйте Base вместо этого.Например, строка кода в базовом графе

Location current = (Location)this.location.Current;

в расширении графа будет

Location current = (Location)Base.location.Current;

.

...