Опция # 1
Вы можете использовать PXDBScalar
и PXDefault
, как показано ниже, для достижения своей цели.Вы можете ссылаться на комментарий для каждого атрибута, оформленного для этого настраиваемого поля.
public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
#region UsrItemStatus
public abstract class usrItemStatus : PX.Data.IBqlField
{
}
protected string _UsrItemStatus;
[PXString()]
[PXUIField(DisplayName = "Status", IsReadOnly = true)]
//Sub-Select or Sub Query - required to get value for Saved SO Lines
[PXDBScalar(typeof(Search<InventoryItem.itemStatus,
Where<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>))]
//StringList Attribute so that you don’t need to convert value to display text
[InventoryItemStatus.List]
//Defaulted when inserting new SO Line
[PXDefault(typeof(Search<InventoryItem.itemStatus,
Where<InventoryItem.inventoryID, Equal<Current<SOLine.inventoryID>>>>),
PersistingCheck = PXPersistingCheck.Nothing)]
//Triggering default assignment upon changing Inventory ID in SO Line
[PXFormula(typeof(Default<SOLine.inventoryID>))]
public virtual string UsrItemStatus
{
get
{
return this._UsrItemStatus;
}
set
{
this._UsrItemStatus = value;
}
}
#endregion
}
Параметр # 2
Включить InventoryItem
ЦАП в представлении данных (Transactions
в данном конкретном случае) работа с Document Details
Grid.И добавьте поле InventoryItem__ItemStatus
в Grid.Готовый SOOrderEntry Graph имеет реализацию делегата представления данных для Transactions
, поэтому нам придется изменить это также.
public class SOOrderEntryPXDemoExt : PXGraphExtension<SOOrderEntry>
{
public override void Initialize()
{
Base.Transactions.Join<InnerJoin<InventoryItem, On<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>>();
}
[PX.Api.Export.PXOptimizationBehavior(IgnoreBqlDelegate = true)]
protected virtual IEnumerable transactions()
{
PXSelectBase<SOLine> query =
new PXSelectJoin<SOLine,
LeftJoin<INItemCost, On<INItemCost.inventoryID, Equal<SOLine.inventoryID>>,
InnerJoin<InventoryItem, On<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>>,
Where<SOLine.orderType, Equal<Current<SOOrder.orderType>>,
And<SOLine.orderNbr, Equal<Current<SOOrder.orderNbr>>>>,
OrderBy<Asc<SOLine.orderType, Asc<SOLine.orderNbr, Asc<SOLine.lineNbr>>>>>(Base);
var ret = new List<PXResult<SOLine, INItemCost, InventoryItem>>();
int startRow = PXView.StartRow;
int totalRows = 0;
foreach (PXResult<SOLine, INItemCost, InventoryItem> record in query.View.Select(
PXView.Currents, PXView.Parameters, PXView.Searches, PXView.SortColumns,
PXView.Descendings, PXView.Filters, ref startRow, PXView.MaximumRows, ref totalRows))
{
SOLine line = (SOLine)record;
INItemCost itemCost = (INItemCost)record;
Base.initemcost.StoreCached(new PXCommandKey(new object[] { line.InventoryID }), new List<object> { itemCost });
ret.Add(record);
}
PXView.StartRow = 0;
return ret;
}
}