Acumatica 如何在Opportunity Products网格页脚中显示产品可用性?
销售订单文档中的网格页脚。它显示产品的可用性 如何在Opportunity products grid中做到这一点? 更重要的是,如何强制它显示在页脚 而不是一个简单的网格列?有这样的属性吗 谢谢你的回复Acumatica 如何在Opportunity Products网格页脚中显示产品可用性?,acumatica,Acumatica,销售订单文档中的网格页脚。它显示产品的可用性 如何在Opportunity products grid中做到这一点? 更重要的是,如何强制它显示在页脚 而不是一个简单的网格列?有这样的属性吗 谢谢你的回复 如果我们与销售订单进行比较,则销售订单行在可用性\u字段选择期间从LSSOLine获取其值。页面上的连线位于选项卡上,通过StatusField=“Availability”。我们可以通过添加一个未绑定的扩展字段,然后在字段中选择填充值来完成类似的操作。另一种方法是实现一个继承LSSelec
如果我们与销售订单进行比较,则销售订单行在
可用性\u字段选择期间从LSSOLine获取其值。页面上的连线位于选项卡上,通过StatusField=“Availability”
。我们可以通过添加一个未绑定的扩展字段,然后在字段中选择填充值来完成类似的操作。另一种方法是实现一个继承LSSelect
的lscroportunityproducts
类,类似于LSSoLine
(更好的首选解决方案)。为了保持这一点的简单性,并将重点放在让字段显示文本上,我将在扩展图中使用扩展字段和一个简单的字段来选择opportunity
(1)在dac扩展中,创建一个未绑定字段(MyAvailability是示例字段):
(3)现在在图形扩展中填充字段:
编辑:使用当前
并不总是在UI中包含正确的当前突出显示行。根据PXFieldSelectingEventArgs.Row
切换到Required
,结果对于products选项卡中的多行是正确的
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()}";
}
}
公共类CropportUnityMainMyExtension:PXGrapherExtension
{
公共虚拟无效CROpportunityProducts\u MyAvailability\u FieldSelecting(PXCache sender,PXFieldSelectingEventArgs e)
{
变量行=(CROpportunityProducts)e.行;
if(行==null)
{
e、 ReturnValue=string.Empty;
返回;
}
INLocationStatus locationStatus=PXSelectGroupBy.Select(sender.Graph、row.InventoryID、row.SubItemID、row.SiteID、row.SiteID);
//需要转换为交易计量单位…(这始终是基本单位)
十进制?qtyOnHand=位置状态?.qtyOnHand;
十进制?qtyAvail=位置状态?.qtyAvail;
e、 ReturnValue=$“现有数量={qtyOnHand.GetValueOrDefault()};可用数量={qtyAvail.GetValueOrDefault()}”;
}
}
结果是:
如果我们与销售订单进行比较,则销售订单行在
可用性\u字段选择期间从LSSOLine获取其值。页面上的连线位于选项卡上,通过StatusField=“Availability”
。我们可以通过添加一个未绑定的扩展字段,然后在字段中选择填充值来完成类似的操作。另一种方法是实现一个继承LSSelect
的lscroportunityproducts
类,类似于LSSoLine
(更好的首选解决方案)。为了保持这一点的简单性,并将重点放在让字段显示文本上,我将在扩展图中使用扩展字段和一个简单的字段来选择opportunity
(1)在dac扩展中,创建一个未绑定字段(MyAvailability是示例字段):
(3)现在在图形扩展中填充字段:
编辑:使用当前
并不总是在UI中包含正确的当前突出显示行。根据PXFieldSelectingEventArgs.Row
切换到Required
,结果对于products选项卡中的多行是正确的
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()}";
}
}
公共类CropportUnityMainMyExtension:PXGrapherExtension
{
公共虚拟无效CROpportunityProducts\u MyAvailability\u FieldSelecting(PXCache sender,PXFieldSelectingEventArgs e)
{
变量行=(CROpportunityProducts)e.行;
if(行==null)
{
e、 ReturnValue=string.Empty;
返回;
}
INLocationStatus locationStatus=PXSelectGroupBy.Select(sender.Graph、row.InventoryID、row.SubItemID、row.SiteID、row.SiteID);
//需要转换为交易计量单位…(这始终是基本单位)
十进制?qtyOnHand=位置状态?.qtyOnHand;
十进制?qtyAvail=位置状态?.qtyAvail;
e、 ReturnValue=$“现有数量={qtyOnHand.GetValueOrDefault()};可用数量={qtyAvail.GetValueOrDefault()}”;
}
}
结果是:
机会产品网格?这个网格在哪里?哪个条目?组织>客户管理>工作区>输入>商机(单击现有/开始新建以打开页面CR304000)>产品选项卡商机产品网格?这个网格在哪里?哪个条目?组织>客户管理>工作区>输入>机会(单击现有/开始新建以打开页面CR304000)>产品选项卡感谢您的详细示例Brendan。我在_fieldselection事件中复制了您的代码。现在它在网格页脚中显示了一些内容。但是,如果有多个产品。该值没有改变。您认为locationStatus选择中可能有什么内容?是的,在BQL in FieldSelecting中使用电流似乎并不总是正确的。我会更新答案,因为我有多行工作。谢谢你的详细例子布伦丹。我在_fieldselection事件中复制了您的代码。现在它在网格页脚中显示了一些内容。但是,如果有多个产品。该值没有改变。您认为locationStatus选择中可能有什么内容?是的,在BQL in FieldSelecting中使用电流似乎并不总是正确的。我会更新答案,因为我有多行工作。
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()}";
}
}