在机会中添加添加项目功能

Adding Add Item(s) functionality in Opportunity

我正在尝试像在销售订单中一样在商机中添加添加项目功能。我浏览了 SOOrderEntry 中的代码,并尝试复制相同的功能。

“添加项目”菜单为智能面板带来了筛选选项,但它不会填充数据。我已将该设置与销售订单添加项目智能面板设置进行了比较,我没有遗漏任何内容。

我已经复制了销售订单中的 table 结构和事件,但机会需要进行更改。

#region SiteStatus Lookup
public PXFilter<OpportunitySiteStatusFilter> oppsitestatusfilter;
[PXFilterable]
[PXCopyPasteHiddenView]
public OpportunityStatusLookup<OpportunitySiteStatusSelected, OpportunitySiteStatusFilter> opportunitysitestatus;

public PXAction<CROpportunity> addOppBySite;
[PXUIField(DisplayName = "Add Stock Item", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select)]
[PXLookupButton]
public virtual IEnumerable AddOppBySite(PXAdapter adapter)
{
    oppsitestatusfilter.Cache.Clear();
    if (opportunitysitestatus.AskExt() == WebDialogResult.OK)
    {
        return AddOppSelBySite(adapter);
    }
    oppsitestatusfilter.Cache.Clear();
    opportunitysitestatus.Cache.Clear();
    return adapter.Get();
}

public PXAction<CROpportunity> addOppSelBySite;
[PXUIField(DisplayName = "Add", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select, Visible = false)]
[PXLookupButton]
public virtual IEnumerable AddOppSelBySite(PXAdapter adapter)
{
    foreach (OpportunitySiteStatusSelected line in opportunitysitestatus.Cache.Cached)
    {
        if (line.Selected == true && line.QtySelected > 0)
        {
            CROpportunityProducts newline = PXCache<CROpportunityProducts>.CreateCopy(Base.Products.Insert(new CROpportunityProducts()));
            newline.SiteID = line.SiteID;
            newline.InventoryID = line.InventoryID;
            newline.SubItemID = line.SubItemID;
            newline.UOM = line.SalesUnit;
            //newline.AlternateID = line.AlternateID;
            //newline = PXCache<SOLine>.CreateCopy(Transactions.Update(newline));
            //if (newline.RequireLocation != true || PXAccess.FeatureInstalled<FeaturesSet.warehouseLocation>())
            //    newline.LocationID = null;
            newline = PXCache<CROpportunityProducts>.CreateCopy(Base.Products.Update(newline));
            //newline.Qty = line.QtySelected;
            cnt = 0;
            Base.Products.Update(newline);
        }
    }
    opportunitysitestatus.Cache.Clear();
    return adapter.Get();
}
protected virtual void OpportunitySiteStatusFilter_RowInserted(PXCache cache, PXRowInsertedEventArgs e)
{
    OpportunitySiteStatusFilter row = (OpportunitySiteStatusFilter)e.Row;
    if (row != null && Base.Products.Current != null)
        row.SiteID = Base.Products.Current.SiteID;
}
int cnt;
public IEnumerable<PXDataRecord> ProviderSelect(BqlCommand command, int topCount, params PXDataValue[] pars)
{
    cnt++;
    return Base.ProviderSelect(command, topCount, pars);
}
#endregion

此致, R. Muralidharan

您可能希望将自定义 SmartPanel aspx 与 SalesOrderEntry 屏幕的现成添加库存项目 SmartPanel 进行比较。正如@Hybridzz 所提到的,您很可能没有设置 AutoSize 属性。当启用网格分页时,您需要将 AutoSize 设置为 True。