在销售订单文档网格页脚中。它显示产品的可用性。
如何在机会产品网格中做同样的事情?更何况,您如何强制将其显示在页脚而不是简单的网格列?有这种属性吗?
感谢您的答复。
如果我们与销售订单进行比较,则销售订单行在期间从LSSOLine获取其值Availabilty_FieldSelecting。页面上的连线是通过标签在选项卡上StatusField="Availability"。我们可以通过添加未绑定扩展字段,然后在字段中选择填充值来执行类似操作。一种替代方法是实现一个类似于(更好的首选解决方案)LSCROpportunityProducts继承的类。为了保持这种简单性并专注于仅使字段显示文本,我将使用扩展字段和在扩展图中选择的简单字段作为机会。LSSelectLSSoLine
(1)在dac扩展中,创建一个未绑定字段(MyAvailability是示例字段):
[PXTable(typeof(CROpportunityProducts.cROpportunityID), typeof(CROpportunityProducts.cROpportunityProductID), IsOptional = true)]
[Serializable]
public class CROpportunityProductsMyExtension : PXCacheExtension<CROpportunityProducts>
{
#region MyAvailability
public abstract class myAvailability : PX.Data.IBqlField
{
}
protected string _MyAvailability;
[PXString(IsUnicode = true)]
[PXUIField(DisplayName = "Product Availability", Enabled = false)]
public virtual string MyAvailability
{
get
{
return this._MyAvailability;
}
set
{
this._MyAvailability = value;
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
(2)在机会产品选项卡上,通过设置属性将新字段连接为网格状态值StatusField。需要修改页面以添加此值,添加后的外观应类似于此(需要在项目中进行屏幕自定义->操作以编辑ASPX并找到ProductsGrid以粘贴到StatusField和值中):
<px:PXGrid ID="ProductsGrid" SkinID="Details" runat="server" Width="100%"
Height="500px" DataSourceID="ds" ActionsPosition="Top" BorderWidth="0px"
SyncPosition="true" StatusField="MyAvailability">
Run Code Online (Sandbox Code Playgroud)
(3)现在在图扩展中填充字段:
编辑:的使用Current<>并不总是在UI中包含正确的当前突出显示的行。已Required<>根据切换到,PXFieldSelectingEventArgs.Row并且产品标签中的多行结果正确。
public class CROpportunityMaintMyExtension : PXGraphExtension<OpportunityMaint>
{
public virtual void CROpportunityProducts_MyAvailability_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
{
var row = (CROpportunityProducts) e.Row;
if (row == null)
{
e.ReturnValue = string.Empty;
return;
}
INLocationStatus locationStatus = PXSelectGroupBy<INLocationStatus,
Where<INLocationStatus.inventoryID, Equal<Required<CROpportunityProducts.inventoryID>>,
And2<Where<INLocationStatus.subItemID, Equal<Required<CROpportunityProducts.subItemID>>,
Or<Not<FeatureInstalled<PX.Objects.CS.FeaturesSet.subItem>>>>,
And<Where<INLocationStatus.siteID, Equal<Required<CROpportunityProducts.siteID>>,
Or<Required<CROpportunityProducts.siteID>, IsNull>>>>>,
Aggregate<Sum<INLocationStatus.qtyOnHand, Sum<INLocationStatus.qtyAvail>>>
>.Select(sender.Graph, row.InventoryID, row.SubItemID, row.SiteID, row.SiteID);
// Need to convert to transaction UOM... (this is always base units)
decimal? qtyOnHand = locationStatus?.QtyOnHand;
decimal? qtyAvail = locationStatus?.QtyAvail;
e.ReturnValue = $"Qty On hand = {qtyOnHand.GetValueOrDefault()} ; Qty Avail = {qtyAvail.GetValueOrDefault()}";
}
}
Run Code Online (Sandbox Code Playgroud)
结果: