Acumatica 如何在Opportunity Products网格页脚中显示产品可用性?

Acumatica 如何在Opportunity Products网格页脚中显示产品可用性?,acumatica,Acumatica,销售订单文档中的网格页脚。它显示产品的可用性 如何在Opportunity products grid中做到这一点? 更重要的是,如何强制它显示在页脚 而不是一个简单的网格列?有这样的属性吗 谢谢你的回复 如果我们与销售订单进行比较,则销售订单行在可用性\u字段选择期间从LSSOLine获取其值。页面上的连线位于选项卡上,通过StatusField=“Availability”。我们可以通过添加一个未绑定的扩展字段,然后在字段中选择填充值来完成类似的操作。另一种方法是实现一个继承LSSelec

销售订单文档中的网格页脚。它显示产品的可用性

如何在Opportunity products grid中做到这一点? 更重要的是,如何强制它显示在页脚 而不是一个简单的网格列?有这样的属性吗

谢谢你的回复


如果我们与销售订单进行比较,则销售订单行在
可用性\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()}";
    }
}