Наш клиент требует, чтобы мы добавили поле «Условия доставки» на экран 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);
}
}
}