Skip to main content
Solved

Cannot get Panel popup fields to show in MUI for 26R1

  • July 19, 2026
  • 7 replies
  • 107 views

Joe Schmucker
Captain II
Forum|alt.badge.img+3

After working on this for 4 full days, I am crying out for help.  I’ve probably published 100 times.  Since I cannot rebuild the pages using the command line (would be great if you could.  Once published, the command line does nothing.)  My project is HUGE and it takes 3 or so minutes to publish.  3 * 100 is a lot of minutes to wait!

I created Popup Panels for two screens.  I am able to get the panels to open, and the custom actions for them are firing.  BUT I cannot find any way to get the fields to show in the panels.

The code and panels work perfectly in Classic UI.  

Strangely, in order to get the menu options to show on one screen I have to manually add the buttons using the @gridConfig({  topBarItems: { code to do it.  Doing that makes some of the default buttons on the grid disappear, so I would like to not use that approach, but desperate times call for desperate measures.

In case you wonder, I am hiding the Add Items button and creating my own so that I can add new functionality.

I am going to paste LOT of code here. However, the TS and HTML MUI files are probably all that would need to be looked at.  But I am providing everything in case it is needed.

SCREEN IN208900:

HTML

<template>
<qp-panel id="AddItemsByVendorFilter"
caption="Add By Preferred Vendor"
auto-repaint="true">
<qp-template id="fvICSAddItems_div0" name="1" qp-collapsible="">
<qp-fieldset id="ICSAddItemsView_lrICSAddItems_fs"
slot="A"
view.bind="AddItemsByVendorFilter"
wg-container="AddItemsView_fvICSAddItems">
<field name="UsrPreferredVendorID"></field>
<field name="UsrItemClassID"></field>
</qp-fieldset>
</qp-template>
<footer>
<qp-button id="btnICSAddItemsByVendorOK" caption="Ok" dialog-result="OK"></qp-button>
<qp-button id="btnICSAddItemsByVendorCancel" caption="Cancel" dialog-result="Cancel"></qp-button>
</footer>
</qp-panel>
</template>

TS

import {
PXFieldState,
PXView,
viewInfo,
PXActionState,
createSingle
} from "client-controls";
import { IN208900, INPIClassItem, INPIClass, INPIClassLocation } from "src/screens/IN/IN208900/IN208900";

export interface IN204060_CummingsCombined_generated extends IN208900 { }
export class IN204060_CummingsCombined_generated {

@viewInfo({ containerName: "Add Items By Vendor" })
AddItemsByVendorFilter = createSingle(INPIClassItem_AddItemsByVendorID);
}

export interface INPIClassItem_AddItemsByVendorID extends INPIClassItem { }
export class INPIClassItem_AddItemsByVendorID extends PXView {
UsrPreferredVendorID: PXFieldState;
UsrItemClassID: PXFieldState;

AddItemsByVendorID: PXActionState;
ClearItemsPIClassItem: PXActionState;
}

export interface INPIClassLocation_ClearItems extends INPIClassLocation { }
export class INPIClassLocation_ClearItems extends PXView {
ClearItemsPIClass: PXActionState;
}

VS Code

using Cummings;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects.AP;

namespace PX.Objects.IN
{
public class INPIClassMaint_Extension : PXGraphExtension<PX.Objects.IN.INPIClassMaint>
{
public static bool IsActive() => true;

public PXFilter<AddItemsByVendorDAC> AddItemsByVendorFilter;

[PXImport(typeof(INPIClassItem))]
public
PXSelectJoin<INPIClassItem,
LeftJoin<InventoryItem, On<INPIClassItem.FK.InventoryItem>>,
Where<INPIClassItem.pIClassID, Equal<Current<INPIClass.pIClassID>>>>
Items;

[PXImport(typeof(INPIClassLocation))]
public
PXSelectJoin<INPIClassLocation,
LeftJoin<INLocation, On<INPIClassLocation.FK.Location>>,
Where<INPIClassLocation.pIClassID, Equal<Current<INPIClass.pIClassID>>>>
Locations;

//FIELDS USED FOR ADD ITEMS POPUP
[PXCacheName("Add by Vendor DAC")]
public sealed class AddItemsByVendorDAC : PXBqlTable, IBqlTable
{
#region UsrPreferredVendorID
[PXInt]
[PXUIField(DisplayName = "Vendor", Required = true)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.bAccountID),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrPreferredVendorID { get; set; }
public abstract class usrPreferredVendorID : PX.Data.BQL.BqlInt.Field<usrPreferredVendorID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class")]
[PXDimensionSelector(INItemClass.Dimension, typeof(Search<INItemClass.itemClassID>), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), CacheGlobal = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion
}

public PXAction<INPIClassItem> AddItemsByVendorID;
[PXUIField(DisplayName = "Add By Vendor", Enabled = true)]
[PXButton(CommitChanges = true)]
public void addItemsByVendorID()
{
var filter = AddItemsByVendorFilter.Current;
if (filter == null) return;

if (AddItemsByVendorFilter.AskExt() == WebDialogResult.OK)
{
Base.Actions.PressSave();

var Filter = AddItemsByVendorFilter.Current;
if (Filter == null || Filter.UsrPreferredVendorID == null) return;

INPIClass currentClass = Base.Classes.Current;

if (Filter.UsrItemClassID != null)
{
foreach (InventoryItemCurySettings inventory in SelectFrom<InventoryItemCurySettings>
.InnerJoin<InventoryItem>.On<InventoryItem.inventoryID.IsEqual<InventoryItemCurySettings.inventoryID>>
.Where<InventoryItemCurySettings.preferredVendorID.IsEqual<@P.AsInt>
.And<InventoryItem.itemType.IsEqual<@P.AsString>>
.And<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.markedForDeletion>>
.And<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.inactive>>
.And<InventoryItem.itemClassID.IsEqual<@P.AsInt>>>.View.Select(Base, Filter.UsrPreferredVendorID, "F", Filter.UsrItemClassID))
{
INPIClassItem testItem = SelectFrom<INPIClassItem>.Where<INPIClassItem.inventoryID.IsEqual<@P.AsInt>
.And<INPIClassItem.pIClassID.IsEqual<@P.AsString>>>.View.Select(Base, inventory.InventoryID, currentClass.PIClassID);
if (testItem == null)
{
INPIClassItem newItem = new INPIClassItem();
newItem.InventoryID = inventory.InventoryID;
newItem.PIClassID = currentClass.PIClassID;
Base.Items.Insert(newItem);
}
}
}
else
{
foreach (InventoryItemCurySettings inventory in SelectFrom<InventoryItemCurySettings>
.InnerJoin<InventoryItem>.On<InventoryItem.inventoryID.IsEqual<InventoryItemCurySettings.inventoryID>>
.Where<InventoryItemCurySettings.preferredVendorID.IsEqual<@P.AsInt>
.And<InventoryItem.itemType.IsEqual<@P.AsString>>
.And<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.markedForDeletion>>
.And<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.inactive>>>.View.Select(Base, Filter.UsrPreferredVendorID, "F"))
{
INPIClassItem testItem = SelectFrom<INPIClassItem>.Where<INPIClassItem.inventoryID.IsEqual<@P.AsInt>
.And<INPIClassItem.pIClassID.IsEqual<@P.AsString>>>.View.Select(Base, inventory.InventoryID, currentClass.PIClassID);
if (testItem == null)
{
INPIClassItem newItem = new INPIClassItem();
newItem.InventoryID = inventory.InventoryID;
newItem.PIClassID = currentClass.PIClassID;
Base.Items.Insert(newItem);
}
}
}

Base.Actions.PressSave();
}
}


public PXAction<INPIClass> ClearItemsPIClass;
[PXUIField(DisplayName = "Clear Items", Enabled = true)]
[PXButton(CommitChanges = true)]
public void clearItemsPIClass()
{
WebDialogResult result = Locations.Ask(ActionsMessages.Warning, ICSMessages.DeleteAllItems,
MessageButtons.OKCancel, MessageIcon.Warning, true);

if (result != WebDialogResult.OK) return;

foreach (INPIClassLocation item in this.Base.Locations.Select())
{
Base.Locations.Delete(item);
}
Base.Actions.PressSave();
}


public PXAction<INPIClassItem> ClearItemsPIClassItem;
[PXUIField(DisplayName = "Clear Items", Enabled = true)]
[PXButton(CommitChanges = true)]
public void clearItemsPIClassItem()
{
WebDialogResult result = Locations.Ask(ActionsMessages.Warning, ICSMessages.DeleteAllItems,
MessageButtons.OKCancel, MessageIcon.Warning, true);

if (result != WebDialogResult.OK) return;

foreach (INPIClassItem item in this.Base.Items.Select())
{
Base.Items.Delete(item);
}
Base.Actions.PressSave();
}

#region Event Handlers
#endregion

}
}

 

SCREEN IN204060:

HTML

<template>
<field name="CurrentCategory.UsrDisplayOnPortal" append="#fsColumnB-ItemCategory"></field>
<qp-panel id="AddItemsFilterView"
caption="Add Items"
auto-repaint="true">
<qp-template id="fvICSAddItems_div0" name="1" qp-collapsible="">
<qp-fieldset id="ICSAddItemsView_lrICSAddItems_fs"
slot="A"
view.bind="AddItemsFilterView"
wg-container="AddItemsView_fvICSAddItems">
<field name="AddItemsOptions"></field>
<field name="UsrItemPriceClassID"></field>
<field name="UsrItemVendor"></field>
<field name="UsrItemClassID"></field>
</qp-fieldset>
</qp-template>
<footer>
<qp-button id="btnICSAddItemsOK" caption="Ok" dialog-result="OK"></qp-button>
<qp-button id="btnICSAddItemsCancel" caption="Cancel" dialog-result="Cancel"></qp-button>
</footer>
</qp-panel>
</template>

TS

import {
PXFieldState,
PXFieldOptions,
PXView,
placeAfterProperty,
viewInfo,
gridConfig,
columnConfig,
TextAlign,
PXActionState,
createSingle
} from "client-controls";
import { IN204060, CurrentCategory, Members } from "src/screens/IN/IN204060/IN204060";

export interface IN204060_CummingsCombined_generated extends IN204060 { }
export class IN204060_CummingsCombined_generated {
@viewInfo({ containerName: "Add Items" })
AddItemsFilterView = createSingle(ICSAddItems_Me);
}

export interface CurrentCategory_CummingsCombined_generated extends CurrentCategory { }
export class CurrentCategory_CummingsCombined_generated {
UsrDisplayOnPortal: PXFieldState<PXFieldOptions.CommitChanges>;
}

//have to do this just to get the buttons on the menu
//WHY DO I HAVE TO USE THIS TO GET THE BUTTONS TO SHOW
export interface Members_CummingsCombined_generated extends Members { }
@gridConfig({
topBarItems: {
Button1: {
index: 0, config: { commandName: "ICSAddItems", text: "Add Items" }
},
Button2: {
index: 1, config: { commandName: "ClearItems", text: "Clear Items" },
}

}
})

export class Members_CummingsCombined_generated {

@placeAfterProperty("InventoryItem__ItemClassID")
@columnConfig({
width: 120,
})
InventoryItem__PriceClassID: PXFieldState;

@placeAfterProperty("InventoryItem__PriceClassID")
@columnConfig({
width: 180,
})
UsrItemVendor: PXFieldState;

@placeAfterProperty("InventoryItem__ItemStatus")
@columnConfig({
width: 60,
textAlign: TextAlign.Center,
})
UsrDisplayOnline: PXFieldState<PXFieldOptions.Readonly>

@placeAfterProperty("UsrDisplayOnline")
@columnConfig({
width: 280,
})
UsrProductName: PXFieldState;

@placeAfterProperty("UsrProductName")
@columnConfig({
width: 280,
})
UsrMarketingDesc: PXFieldState;

}

export interface ICSAddItems_Me extends Members { }
export class ICSAddItems_Me extends PXView {
AddItemsOptions: PXFieldState<PXFieldOptions.CommitChanges>;
UsrItemPriceClassID: PXFieldState;
UsrItemVendor: PXFieldState;
UsrItemClassID: PXFieldState;

//doesn't add items to the menu???? See TopBar code above used to get the buttons to show
//ICSAddItems: PXActionState;
//ClearItems: PXActionState;
}

VS Code

using Cummings;
using PX.Common;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects.AP;
using PX.Objects.CS;
using System.Collections;
using System.Linq;
using static PX.Objects.IN.INCategoryMaint;

namespace PX.Objects.IN
{
// Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
public class INCategoryMaint_Extension : PXGraphExtension<PX.Objects.IN.INCategoryMaint>
{
public PXFilter<AddItemsFilter> AddItemsFilterView;

public PXSelect<INCategory> CategoryView;

#region Event Actions
public PXAction<SelectedNode> ClearItems;
[PXButton(DisplayOnMainToolbar = false)]
[PXUIField(DisplayName = "Clear All Items", Enabled = true)]
public void clearItems()
{
int count = 0;
string warningMessage = string.Empty;

INCategory cat = Base.CurrentCategory.Current;

count = SelectFrom<INItemCategory>
.Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
.View.Select(Base, cat.CategoryID).Count();

if (count == 0) return;

warningMessage = string.Format(ICSMessages.SalesCatItemsToDelete, count.ToString());

WebDialogResult result = AddItemsFilterView.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.OKCancel, MessageIcon.Warning, true);

//checking answer
if (result != WebDialogResult.OK) return;

INCategory iNCategory = Base.CurrentCategory.Current;

if (iNCategory != null && iNCategory.ParentID != null && iNCategory.CategoryID != null)
{
foreach (INItemCategory item in Base.Members.Select())
{
if (item.CategoryID == iNCategory.CategoryID)
{
Base.Members.Delete(item);
}
}
}
Base.Actions.PressSave();
}

public PXAction<SelectedNode> ICSAddItems;
[PXButton(DisplayOnMainToolbar = false)]
[PXUIField(DisplayName = "Add Items", Enabled = true)]
internal IEnumerable icsAddItems(PXAdapter adapter)
{
var filter = AddItemsFilterView.Current;
if (filter == null) return adapter.Get();

if (AddItemsFilterView.AskExt() == WebDialogResult.OK)
{
int? count = 0;
string warningMessage = string.Empty;

// place all members into the cache, so that PXCache.Insert could work correctly
var membersView = new PXView(Base, false, Base.Members.View.BqlSelect);
var members = membersView.SelectMulti();

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
count = SelectFrom<ICSItemVendorView>
.InnerJoin<InventoryItem>
.On<InventoryItem.inventoryID.IsEqual<ICSItemVendorView.inventoryID>>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<ICSItemVendorView.usrItemVendor.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemVendor).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.priceClassID.IsEqual<@P.AsString>>>>
.View.Select(Base, filter.UsrItemPriceClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.itemClassID.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>>>
.View.Select(Base).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
var selectItemsForAddingCmd = new
PXSelectReadonly2<InventoryItem,
InnerJoin<ICSItemVendorView, On<ICSItemVendorView.inventoryID, Equal<InventoryItem.inventoryID>>>,
Where<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<ICSItemVendorView.usrItemVendor, Equal<Required<ICSItemVendorView.usrItemVendor>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsFilterView.Current.UsrItemVendor))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);

}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.priceClassID, Equal<Required<InventoryItem.priceClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsFilterView.Current.UsrItemPriceClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.itemClassID, Equal<Required<InventoryItem.itemClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsFilterView.Current.UsrItemClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsFilterView.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select())
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

}
Base.Actions.PressSave();
return adapter.Get();
}
#endregion


#region Event Handlers

protected virtual void INItemCategory_UsrMarketingDesc_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "MARKETDESC");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrProductName_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "PRODUCTNAM");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrDisplayOnline_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "ONLINE");
if (answer != null)
{
if (answer.Value == "1" || answer.Value == "True")
{
e.ReturnValue = true;
}
else
{
e.ReturnValue = false;
}
}
}
}
}

protected virtual void INItemCategory_UsrItemVendor_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
ICSItemVendorView item = SelectFrom<ICSItemVendorView>
.Where<ICSItemVendorView.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (item != null)
{
e.ReturnValue = item.AcctName;
}
}
}

protected virtual void SelectedNode_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);

var row = (SelectedNode)e.Row;
Base.Actions["AddItemsbyClass"].SetVisible(false);
}

protected virtual void AddItemsFilter_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (AddItemsFilter)e.Row;
if (row == null) return;

PXUIFieldAttribute.SetVisible< AddItemsFilter.usrItemVendor>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsFilter.usrItemPriceClassID>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsFilter.usrItemClassID>(cache, null, false);

if (row.AddItemsOptions == "V")
{
PXUIFieldAttribute.SetVisible<AddItemsFilter.usrItemVendor>(cache, null, true);
}

if (row.AddItemsOptions == "P")
{
PXUIFieldAttribute.SetVisible<AddItemsFilter.usrItemPriceClassID>(cache, null, true);
}

if (row.AddItemsOptions == "C")
{
PXUIFieldAttribute.SetVisible<AddItemsFilter.usrItemClassID>(cache, null, true);
}
}

protected virtual void INCategory_UsrDisplayOnPortal_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e)
{

var row = (INCategory)e.Row;
if (row == null) return;

if (row.ParentID == 0)
{
WebDialogResult result = Base.CurrentCategory.Ask(ActionsMessages.Warning, ICSMessages.MarkUnmarkAll,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.Yes)
{
foreach (INCategory category in SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID))
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext == null) return;

ext.UsrDisplayOnPortal = (bool)e.NewValue;
CategoryView.Update(category);
}

}
}
}

protected virtual void INCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (INCategory)e.Row;

ICSAddItems.SetEnabled(false);

if (row == null) return;

if (Base.Folders.Current != null)
{
ICSAddItems.SetEnabled(Base.Folders.Current.ParentID != null);
}

int? count = 0;

count = Base.Members.Select().Count();

if (count == 0)
{
ClearItems.SetEnabled(false);
}

PXCache pXCache = Base.Caches<INCategory>();

INCategory category = SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID);
if (category != null)
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext != null)
{
if (row.Description == "Company")
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, false);
}
else
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, true);
}
}
}
}

protected virtual void INItemCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{

var row = (INItemCategory)e.Row;

PXUIFieldAttribute.SetEnabled<CummingsINItemCategoryExt.usrDisplayOnline>(cache, null, false);

ClearItems.SetEnabled(false);

if (row == null) return;

int count = 0;
string warningMessage = string.Empty;

INCategory cat = Base.CurrentCategory.Current;
if (cat != null)
{
count = SelectFrom<INItemCategory>
.Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
.View.Select(Base, cat.CategoryID).Count();
if (count > 0)
{
ClearItems.SetEnabled(true);
}
}
}


#endregion
// Acuminator disable once PX1069 MissingMandatoryDacFields [Justification]
[PXCacheName("Add Items Filter")]
public class AddItemsFilter : PXBqlTable, IBqlTable
{
#region AddItemsOptions
[PXString(1, IsFixed = true)]
[PXUIField(DisplayName = "Add By")]
[AddICSItemsTypesList.List()]
[PXDefault(AddICSItemsTypesList.AddByVendorItems, PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddItemsOptions { get; set; }
public abstract class addItemsOptions : BqlString.Field<addItemsOptions> { }
#endregion

#region UsrItemVendor
[PXInt]
[PXUIField(DisplayName = "Item Vendor", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.acctCD),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrItemVendor { get; set; }
public abstract class usrItemVendor : PX.Data.BQL.BqlInt.Field<usrItemVendor> { }
#endregion

#region UsrItemPriceClassID
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(INPriceClass.priceClassID), DescriptionField = typeof(INPriceClass.description))]
[PXUIField(DisplayName = "Price Class", Visibility = PXUIVisibility.Visible)]
[PXDefault(SourceField = typeof(INItemClass.priceClassID), PersistingCheck = PXPersistingCheck.Nothing, CacheGlobal = true)]
public string UsrItemPriceClassID { get; set; }
public abstract class usrItemPriceClassID : BqlString.Field<usrItemPriceClassID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXDimensionSelector(INItemClass.Dimension, typeof(INItemClass.itemClassID), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), ValidComboRequired = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion
}

public static class AddICSItemsTypesList
{ public class ListAttribute : PXStringListAttribute
{
public ListAttribute() : base(
new[]
{
Pair(AddByVendorItems, "By Vendor Item"),
Pair(AddByItemPriceClass, "By Price Class"),
Pair(AddByItemClass, "By Class"),
Pair(AddAll, "All Items"),
})
{ }
}

public const string AddByVendorItems = "V";
public const string AddByItemPriceClass = "P";
public const string AddByItemClass = "C";
public const string AddAll = "A";
}


}
}

ANY HELP PLEASE!!!  :-)

Best answer by Joe Schmucker

Acumatica support was able to help me to get this working.  I think it is a bug on this specific screen.  I can honestly say that I don’t know why this works, but it does now.

Here is the code that was used to get the IN204060 screen panel to work.  There is a lot of code on this screen that doesn’t apply to the Panel.  

VS

using Cummings;
using PX.Common;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects.AP;
using PX.Objects.CS;
using System;
using System.Collections;
using System.Linq;
using static PX.Objects.IN.INCategoryMaint;

namespace PX.Objects.IN
{
// Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
public class INCategoryMaint_Extension : PXGraphExtension<PX.Objects.IN.INCategoryMaint>
{
//public PXFilter<AddItemsFilter> AddItemsFilterView;
public PXFilter<AddItemsDAC> AddItemsDACFilter;

public PXSelect<INCategory> CategoryView;


#region Event Actions
public PXAction<INItemCategory> ClearItems;
[PXButton(DisplayOnMainToolbar = false)]
[PXUIField(DisplayName = "Clear All Items", Enabled = false)]
public void clearItems()
{
int count = 0;
string warningMessage = string.Empty;

INCategory cat = Base.CurrentCategory.Current;

count = SelectFrom<INItemCategory>
.Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
.View.Select(Base, cat.CategoryID).Count();

if (count == 0) return;

warningMessage = string.Format(ICSMessages.SalesCatItemsToDelete, count.ToString());

WebDialogResult result = AddItemsDACFilter.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.OKCancel, MessageIcon.Warning, true);

//checking answer
if (result != WebDialogResult.OK) return;

INCategory iNCategory = Base.CurrentCategory.Current;

if (iNCategory != null && iNCategory.ParentID != null && iNCategory.CategoryID != null)
{
foreach (INItemCategory item in Base.Members.Select())
{
if (item.CategoryID == iNCategory.CategoryID)
{
Base.Members.Delete(item);
}
}
}
Base.Actions.PressSave();
}

// Acuminator disable once PX1069 MissingMandatoryDacFields [Justification]
[Serializable]
[PXCacheName("AddItemsDAC")]
public class AddItemsDAC : PXBqlTable, IBqlTable
{
#region AddItemsOptions
[PXString(1, IsFixed = true)]
[PXUIField(DisplayName = "Add By")]
[AddICSItemsTypesList.List()]
[PXDefault(AddICSItemsTypesList.AddByVendorItems, PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddItemsOptions { get; set; }
public abstract class addItemsOptions : BqlString.Field<addItemsOptions> { }
#endregion

#region UsrItemVendor
[PXInt]
[PXUIField(DisplayName = "Item Vendor", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.acctCD),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrItemVendor { get; set; }
public abstract class usrItemVendor : PX.Data.BQL.BqlInt.Field<usrItemVendor> { }
#endregion

#region UsrItemPriceClassID
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(INPriceClass.priceClassID), DescriptionField = typeof(INPriceClass.description))]
[PXUIField(DisplayName = "Price Class", Visibility = PXUIVisibility.Visible)]
[PXDefault(SourceField = typeof(INItemClass.priceClassID), PersistingCheck = PXPersistingCheck.Nothing, CacheGlobal = true)]
public string UsrItemPriceClassID { get; set; }
public abstract class usrItemPriceClassID : BqlString.Field<usrItemPriceClassID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXDimensionSelector(INItemClass.Dimension, typeof(INItemClass.itemClassID), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), ValidComboRequired = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion

}


public PXAction<INItemCategory> ICSAddItems;
[PXButton]
[PXUIField(DisplayName = "Add Items")]
protected IEnumerable icsAddItems(PXAdapter adapter)
{
var filter = AddItemsDACFilter.Current;
if (filter == null) return adapter.Get();
if (AddItemsDACFilter.AskExt() == WebDialogResult.OK)
{
int? count = 0;
string warningMessage = string.Empty;

// place all members into the cache, so that PXCache.Insert could work correctly
var membersView = new PXView(Base, false, Base.Members.View.BqlSelect);
var members = membersView.SelectMulti();

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
count = SelectFrom<ICSItemVendorView>
.InnerJoin<InventoryItem>
.On<InventoryItem.inventoryID.IsEqual<ICSItemVendorView.inventoryID>>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<ICSItemVendorView.usrItemVendor.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemVendor).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.priceClassID.IsEqual<@P.AsString>>>>
.View.Select(Base, filter.UsrItemPriceClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.itemClassID.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>>>
.View.Select(Base).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
var selectItemsForAddingCmd = new
PXSelectReadonly2<InventoryItem,
InnerJoin<ICSItemVendorView, On<ICSItemVendorView.inventoryID, Equal<InventoryItem.inventoryID>>>,
Where<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<ICSItemVendorView.usrItemVendor, Equal<Required<ICSItemVendorView.usrItemVendor>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemVendor))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);

}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.priceClassID, Equal<Required<InventoryItem.priceClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemPriceClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.itemClassID, Equal<Required<InventoryItem.itemClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select())
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

}
Base.Actions.PressSave();
return adapter.Get();
}

#endregion


#region Event Handlers

protected virtual void INItemCategory_UsrMarketingDesc_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "MARKETDESC");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrProductName_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "PRODUCTNAM");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrDisplayOnline_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "ONLINE");
if (answer != null)
{
if (answer.Value == "1" || answer.Value == "True")
{
e.ReturnValue = true;
}
else
{
e.ReturnValue = false;
}
}
}
}
}

protected virtual void INItemCategory_UsrItemVendor_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
ICSItemVendorView item = SelectFrom<ICSItemVendorView>
.Where<ICSItemVendorView.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (item != null)
{
e.ReturnValue = item.AcctName;
}
}
}

protected virtual void SelectedNode_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);

var row = (SelectedNode)e.Row;
Base.Actions["AddItemsbyClass"].SetVisible(false);
}

protected virtual void AddItemsDAC_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (AddItemsDAC)e.Row;
if (row == null) return;

PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemVendor>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemPriceClassID>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemClassID>(cache, null, false);

if (row.AddItemsOptions == "V")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemVendor>(cache, null, true);
}

if (row.AddItemsOptions == "P")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemPriceClassID>(cache, null, true);
}

if (row.AddItemsOptions == "C")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemClassID>(cache, null, true);
}
}

protected virtual void INCategory_UsrDisplayOnPortal_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e)
{

var row = (INCategory)e.Row;
if (row == null) return;

//bool? newValue = (bool)e.NewValue;

if (row.ParentID == 0)
{
WebDialogResult result = Base.CurrentCategory.Ask(ActionsMessages.Warning, ICSMessages.MarkUnmarkAll,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.Yes)
{
foreach (INCategory category in SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID))
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext == null) return;

ext.UsrDisplayOnPortal = (bool)e.NewValue;
CategoryView.Update(category);
}

}
}
}

protected virtual void INCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (INCategory)e.Row;

ICSAddItems.SetEnabled(false);
ClearItems.SetEnabled(false);

if (row == null) return;

if (Base.Folders.Current != null && row.ParentID != 0 && row.ParentID != null)
{
ICSAddItems.SetEnabled(true);
ClearItems.SetEnabled(true);
}

PXCache pXCache = Base.Caches<INCategory>();

INCategory category = SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID);
if (category != null)
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext != null)
{
if (row.Description == "Company")
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, false);
}
else
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, true);
}
}
}
}

//protected virtual void INItemCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
//{

// var row = (INItemCategory)e.Row;

// ClearItems.SetEnabled(false);

// if (row == null) return;

// int count = 0;
// string warningMessage = string.Empty;

// INCategory cat = Base.CurrentCategory.Current;
// if (cat != null)
// {
// count = SelectFrom<INItemCategory>
// .Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
// .View.Select(Base, cat.CategoryID).Count();
// if (count > 0)
// {
// ClearItems.SetEnabled(true);
// }
// }
//}


#endregion


// Acuminator disable once PX1069 MissingMandatoryDacFields [Justification]
[PXCacheName("Add Items Filter")]
public class AddItemsFilter : PXBqlTable, IBqlTable
{
#region AddItemsOptions
[PXString(1, IsFixed = true)]
[PXUIField(DisplayName = "Add By")]
[AddICSItemsTypesList.List()]
[PXDefault(AddICSItemsTypesList.AddByVendorItems, PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddItemsOptions { get; set; }
public abstract class addItemsOptions : BqlString.Field<addItemsOptions> { }
#endregion

#region UsrItemVendor
[PXInt]
[PXUIField(DisplayName = "Item Vendor", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.acctCD),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrItemVendor { get; set; }
public abstract class usrItemVendor : PX.Data.BQL.BqlInt.Field<usrItemVendor> { }
#endregion

#region UsrItemPriceClassID
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(INPriceClass.priceClassID), DescriptionField = typeof(INPriceClass.description))]
[PXUIField(DisplayName = "Price Class", Visibility = PXUIVisibility.Visible)]
[PXDefault(SourceField = typeof(INItemClass.priceClassID), PersistingCheck = PXPersistingCheck.Nothing, CacheGlobal = true)]
public string UsrItemPriceClassID { get; set; }
public abstract class usrItemPriceClassID : BqlString.Field<usrItemPriceClassID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXDimensionSelector(INItemClass.Dimension, typeof(INItemClass.itemClassID), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), ValidComboRequired = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion
}

public static class AddICSItemsTypesList
{
public class ListAttribute : PXStringListAttribute
{
public ListAttribute() : base(
new[]
{
Pair(AddByVendorItems, "By Vendor Item"),
Pair(AddByItemPriceClass, "By Price Class"),
Pair(AddByItemClass, "By Class"),
Pair(AddAll, "All Items"),
})
{ }
}

public const string AddByVendorItems = "V";
public const string AddByItemPriceClass = "P";
public const string AddByItemClass = "C";
public const string AddAll = "A";
}


}
}

HTML

<template>
<field name="CurrentCategory.UsrDisplayOnPortal" append="#fsColumnB-ItemCategory"></field>

<qp-panel id="AddItemsDACFilter" caption="Add Items" auto-repaint="true" after="#ClassInfo" wg-container="AddItemsDACFilter_formCreateAccount">
<qp-template id="form-AddItemsDACFilter" name="1">
<qp-fieldset id="fsColumnA-AddItemsDACFilter" slot="A" view.bind="AddItemsDACFilter">
<field name="AddItemsDACFilter.AddItemsOptions" after="#ClassInfo"></field>
<field name="AddItemsDACFilter.UsrItemVendor" after="FIELD[name='AddItemsDACFilter.AddItemsOptions']"></field>
<field name="AddItemsDACFilter.UsrItemPriceClassID" after="FIELD[name='AddItemsDACFilter.UsrItemVendor']"></field>
<field name="AddItemsDACFilter.UsrItemClassID" after="FIELD[name='AddItemsDACFilter.UsrItemPriceClassID']"></field>
</qp-fieldset>
</qp-template>

<footer id="footer-AddItemsDACFilter">
<qp-button id="buttonAdd-AddItemsDACFilter" caption="Add" class="major-button" dialog-result="OK"></qp-button>
<qp-button id="buttonCancel-AddItemsDACFilter" dialog-result="Cancel"></qp-button>
</footer>
</qp-panel>
</template>


TS

import {
PXFieldState,
PXView,
viewInfo,
gridConfig,
createSingle,
PXActionState,
PXFieldOptions,
placeAfterProperty,
columnConfig,
TextAlign,
} from "client-controls";
import { IN204060, CurrentCategory, Members } from "src/screens/IN/IN204060/IN204060";

export interface IN204060_Cummings_generated extends IN204060 { }
export class IN204060_Cummings_generated {
@viewInfo({ containerName: "AddItemsDAC(AddItemsDACFilter)" })
AddItemsDACFilter = createSingle(AddItemsDAC);
}

export class AddItemsDAC extends PXView {
AddItemsOptions: PXFieldState<PXFieldOptions.CommitChanges>;
UsrItemVendor: PXFieldState;
UsrItemPriceClassID: PXFieldState;
UsrItemClassID: PXFieldState;
}

export interface Members_Cummings_generated extends Members { }
@gridConfig({
topBarItems: {
ICSAddItems: {
index: 5,
config: {
commandName: "ICSAddItems",
text: "ICS Add Items"
}
},

ClearItems: {
index: 6, config: { commandName: "ClearItems", text: "Clear Items" }
}
}
})
export class Members_Cummings_generated {
//InventoryID_description: PXFieldState;
ICSAddItems: PXActionState;
ClearItems: PXActionState;

@placeAfterProperty("InventoryItem__ItemClassID")
@columnConfig({
width: 120,
})
InventoryItem__PriceClassID: PXFieldState;

@placeAfterProperty("InventoryItem__PriceClassID")
@columnConfig({
width: 180,
})
UsrItemVendor: PXFieldState;

@placeAfterProperty("InventoryItem__ItemStatus")
@columnConfig({
width: 60,
textAlign: TextAlign.Center,
})
UsrDisplayOnline: PXFieldState<PXFieldOptions.Readonly>

@placeAfterProperty("UsrDisplayOnline")
@columnConfig({
width: 280,
})
UsrProductName: PXFieldState;

@placeAfterProperty("UsrProductName")
@columnConfig({
width: 280,
})
UsrMarketingDesc: PXFieldState;


}

export interface CurrentCategory_CummingsCombined_generated extends CurrentCategory { }
export class CurrentCategory_CummingsCombined_generated {
UsrDisplayOnPortal: PXFieldState<PXFieldOptions.CommitChanges>;
}

 

 

 

7 replies

darylbowman
Captain II
Forum|alt.badge.img+17

Why are your TS class extensions extending PXView?

 

For example:

export class INPIClassItem_AddItemsByVendorID extends PXView

 

I think the CLASS shouldn't extend anything. Just the interface.


Joe Schmucker
Captain II
Forum|alt.badge.img+3
  • Author
  • Captain II
  • July 19, 2026

I thought I had to extend the View for the popup definition.  Where would I add the fields if I don’t do it in the View?

Since the popup has fields, all the other code I find shows the View of the popup being defined that way


darylbowman
Captain II
Forum|alt.badge.img+17

But you're extending existing classes, right? Class extensions extend classes already extending PXView.


Joe Schmucker
Captain II
Forum|alt.badge.img+3
  • Author
  • Captain II
  • July 19, 2026

Nope.  This is a new popup.  

export class IN204060_CummingsCombined_generated {

    @viewInfo({ containerName: "Add Items By Vendor" })
    AddItemsByVendorFilter = createSingle(INPIClassItem_AddItemsByVendorID);
}
 

//if I don’t use this interface, the buttons do not show.

export interface INPIClassItem_AddItemsByVendorID extends INPIClassItem { }

//This is required in order to add the @viewinfo above which is the thing that triggers the popup when the action is fired.

export class INPIClassItem_AddItemsByVendorID extends PXView {
    UsrPreferredVendorID: PXFieldState;
    UsrItemClassID: PXFieldState;

    AddItemsByVendorID: PXActionState;
    ClearItemsPIClassItem: PXActionState;
}
 

 


darylbowman
Captain II
Forum|alt.badge.img+17

It being a new popup has nothing to do with whether or not your extending classes. You using an interface with 'extends className' does. You could build a new popup using existing data class definitions or by building (nearly) identical ones from scratch.

I think this is the root of your issue.


Joe Schmucker
Captain II
Forum|alt.badge.img+3
  • Author
  • Captain II
  • July 19, 2026

I am in over my head with this one.  I have wasted too much time.  I think I am going to outsource this to another developer.  Thanks ​@darylbowman for looking into this mere minutes after I posted this topic.  I feel defeated.  

 

Here is code from a different customer I did that works fine.  It is even part of a grid.

 

import {
    PXFieldState,
    PXView,
    viewInfo,
    createSingle,
} from "client-controls";

import { AR303000 } from "src/screens/AR/AR303000/AR303000";
export interface AR303000_AgroShip_converted extends AR303000 { }

export class AR303000_AgroShip_converted {
    @viewInfo({ containerName: "Change Location ID" })
    ICSChangeLocationIDValueView = createSingle(ICSChangeLocationIDValue);
}

//Adds the field to the popup
export class ICSChangeLocationIDValue extends PXView {
    UsrNewLocationID: PXFieldState;
}

 

<template>
    <qp-panel id="ICSChangeLocationIDValueView" caption="Change Location ID" auto-repaint="true">

        <qp-template id="fvChangeLocationID_div0" name="1">
            <qp-fieldset id="ICSChangeLocationIDValueView_lrICSChangeLocationID_fs" wg-container="ICSChangeLocationIDValueView_fvChangeLocationID" view.bind="ICSChangeLocationIDValueView" slot="A">
                <field name="UsrNewLocationID"></field>
            </qp-fieldset>
        </qp-template>
        <footer>
            <qp-button id="btnChangeOK" caption="Ok" dialog-result="OK"></qp-button>
            <qp-button id="btnChangeCancel" caption="Cancel" dialog-result="Cancel"></qp-button>
        </footer>
    </qp-panel>
</template>
 

Funny thing is that I don’t even put an item with an ActionState.  It somehow knows which grid to put the button on, and it works.

I originally tried to use this one as a template, but buttons didn’t show and you know the rest.


Joe Schmucker
Captain II
Forum|alt.badge.img+3
  • Author
  • Captain II
  • Answer
  • July 25, 2026

Acumatica support was able to help me to get this working.  I think it is a bug on this specific screen.  I can honestly say that I don’t know why this works, but it does now.

Here is the code that was used to get the IN204060 screen panel to work.  There is a lot of code on this screen that doesn’t apply to the Panel.  

VS

using Cummings;
using PX.Common;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects.AP;
using PX.Objects.CS;
using System;
using System.Collections;
using System.Linq;
using static PX.Objects.IN.INCategoryMaint;

namespace PX.Objects.IN
{
// Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
public class INCategoryMaint_Extension : PXGraphExtension<PX.Objects.IN.INCategoryMaint>
{
//public PXFilter<AddItemsFilter> AddItemsFilterView;
public PXFilter<AddItemsDAC> AddItemsDACFilter;

public PXSelect<INCategory> CategoryView;


#region Event Actions
public PXAction<INItemCategory> ClearItems;
[PXButton(DisplayOnMainToolbar = false)]
[PXUIField(DisplayName = "Clear All Items", Enabled = false)]
public void clearItems()
{
int count = 0;
string warningMessage = string.Empty;

INCategory cat = Base.CurrentCategory.Current;

count = SelectFrom<INItemCategory>
.Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
.View.Select(Base, cat.CategoryID).Count();

if (count == 0) return;

warningMessage = string.Format(ICSMessages.SalesCatItemsToDelete, count.ToString());

WebDialogResult result = AddItemsDACFilter.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.OKCancel, MessageIcon.Warning, true);

//checking answer
if (result != WebDialogResult.OK) return;

INCategory iNCategory = Base.CurrentCategory.Current;

if (iNCategory != null && iNCategory.ParentID != null && iNCategory.CategoryID != null)
{
foreach (INItemCategory item in Base.Members.Select())
{
if (item.CategoryID == iNCategory.CategoryID)
{
Base.Members.Delete(item);
}
}
}
Base.Actions.PressSave();
}

// Acuminator disable once PX1069 MissingMandatoryDacFields [Justification]
[Serializable]
[PXCacheName("AddItemsDAC")]
public class AddItemsDAC : PXBqlTable, IBqlTable
{
#region AddItemsOptions
[PXString(1, IsFixed = true)]
[PXUIField(DisplayName = "Add By")]
[AddICSItemsTypesList.List()]
[PXDefault(AddICSItemsTypesList.AddByVendorItems, PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddItemsOptions { get; set; }
public abstract class addItemsOptions : BqlString.Field<addItemsOptions> { }
#endregion

#region UsrItemVendor
[PXInt]
[PXUIField(DisplayName = "Item Vendor", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.acctCD),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrItemVendor { get; set; }
public abstract class usrItemVendor : PX.Data.BQL.BqlInt.Field<usrItemVendor> { }
#endregion

#region UsrItemPriceClassID
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(INPriceClass.priceClassID), DescriptionField = typeof(INPriceClass.description))]
[PXUIField(DisplayName = "Price Class", Visibility = PXUIVisibility.Visible)]
[PXDefault(SourceField = typeof(INItemClass.priceClassID), PersistingCheck = PXPersistingCheck.Nothing, CacheGlobal = true)]
public string UsrItemPriceClassID { get; set; }
public abstract class usrItemPriceClassID : BqlString.Field<usrItemPriceClassID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXDimensionSelector(INItemClass.Dimension, typeof(INItemClass.itemClassID), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), ValidComboRequired = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion

}


public PXAction<INItemCategory> ICSAddItems;
[PXButton]
[PXUIField(DisplayName = "Add Items")]
protected IEnumerable icsAddItems(PXAdapter adapter)
{
var filter = AddItemsDACFilter.Current;
if (filter == null) return adapter.Get();
if (AddItemsDACFilter.AskExt() == WebDialogResult.OK)
{
int? count = 0;
string warningMessage = string.Empty;

// place all members into the cache, so that PXCache.Insert could work correctly
var membersView = new PXView(Base, false, Base.Members.View.BqlSelect);
var members = membersView.SelectMulti();

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
count = SelectFrom<ICSItemVendorView>
.InnerJoin<InventoryItem>
.On<InventoryItem.inventoryID.IsEqual<ICSItemVendorView.inventoryID>>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<ICSItemVendorView.usrItemVendor.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemVendor).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.priceClassID.IsEqual<@P.AsString>>>>
.View.Select(Base, filter.UsrItemPriceClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>
.And<InventoryItem.itemClassID.IsEqual<@P.AsInt>>>>
.View.Select(Base, filter.UsrItemClassID).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
count = SelectFrom<InventoryItem>
.Where<InventoryItem.itemStatus.IsNotEqual<InventoryItemStatus.unknown>
.And<InventoryItem.isTemplate.IsEqual<False>>>
.View.Select(Base).Count();

if (count != null && count == 0)
{
WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, ICSMessages.NoItemsFound,
MessageButtons.OK, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.OK)
{
return adapter.Get();
}
}
else
{
warningMessage = string.Format(ICSMessages.SalesCatItemsToAdd, count.ToString());

WebDialogResult result = Base.Members.Ask(ActionsMessages.Warning, warningMessage,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.No)
{
return adapter.Get();
}
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByVendorItems)
{
var selectItemsForAddingCmd = new
PXSelectReadonly2<InventoryItem,
InnerJoin<ICSItemVendorView, On<ICSItemVendorView.inventoryID, Equal<InventoryItem.inventoryID>>>,
Where<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<ICSItemVendorView.usrItemVendor, Equal<Required<ICSItemVendorView.usrItemVendor>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemVendor))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);

}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemPriceClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.priceClassID, Equal<Required<InventoryItem.priceClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemPriceClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddByItemClass)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>,
And<InventoryItem.itemClassID, Equal<Required<InventoryItem.itemClassID>>>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select(AddItemsDACFilter.Current.UsrItemClassID))
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

if (AddItemsDACFilter.Current.AddItemsOptions == AddICSItemsTypesList.AddAll)
{
var selectItemsForAddingCmd = new
PXSelectReadonly<InventoryItem,
Where<
InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.isTemplate, Equal<False>>>>
(Base);

foreach (InventoryItem pxResult in selectItemsForAddingCmd.Select())
{
INItemCategory insertnode = (INItemCategory)Base.Members.Cache.CreateInstance();
insertnode.InventoryID = pxResult.InventoryID;
insertnode.CategorySelected = false;
var member = Base.Members.Insert(insertnode);
}
}

}
Base.Actions.PressSave();
return adapter.Get();
}

#endregion


#region Event Handlers

protected virtual void INItemCategory_UsrMarketingDesc_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "MARKETDESC");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrProductName_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "PRODUCTNAM");
if (answer != null)
{
e.ReturnValue = answer.Value;
}
}
}
}

protected virtual void INItemCategory_UsrDisplayOnline_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
InventoryItem inventory = SelectFrom<InventoryItem>.Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (inventory != null)
{
CSAnswers answer = SelectFrom<CSAnswers>
.Where<CSAnswers.refNoteID.IsEqual<@P.AsGuid>
.And<CSAnswers.attributeID.IsEqual<@P.AsString>>>
.View.Select(Base, inventory.NoteID, "ONLINE");
if (answer != null)
{
if (answer.Value == "1" || answer.Value == "True")
{
e.ReturnValue = true;
}
else
{
e.ReturnValue = false;
}
}
}
}
}

protected virtual void INItemCategory_UsrItemVendor_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
{
var row = (INItemCategory)e.Row;
if (row != null)
{
ICSItemVendorView item = SelectFrom<ICSItemVendorView>
.Where<ICSItemVendorView.inventoryID.IsEqual<@P.AsInt>>
.View.Select(Base, row.InventoryID);
if (item != null)
{
e.ReturnValue = item.AcctName;
}
}
}

protected virtual void SelectedNode_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);

var row = (SelectedNode)e.Row;
Base.Actions["AddItemsbyClass"].SetVisible(false);
}

protected virtual void AddItemsDAC_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (AddItemsDAC)e.Row;
if (row == null) return;

PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemVendor>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemPriceClassID>(cache, null, false);
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemClassID>(cache, null, false);

if (row.AddItemsOptions == "V")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemVendor>(cache, null, true);
}

if (row.AddItemsOptions == "P")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemPriceClassID>(cache, null, true);
}

if (row.AddItemsOptions == "C")
{
PXUIFieldAttribute.SetVisible<AddItemsDAC.usrItemClassID>(cache, null, true);
}
}

protected virtual void INCategory_UsrDisplayOnPortal_FieldUpdating(PXCache cache, PXFieldUpdatingEventArgs e)
{

var row = (INCategory)e.Row;
if (row == null) return;

//bool? newValue = (bool)e.NewValue;

if (row.ParentID == 0)
{
WebDialogResult result = Base.CurrentCategory.Ask(ActionsMessages.Warning, ICSMessages.MarkUnmarkAll,
MessageButtons.YesNo, MessageIcon.Warning, false);

//checking answer
if (result == WebDialogResult.Yes)
{
foreach (INCategory category in SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID))
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext == null) return;

ext.UsrDisplayOnPortal = (bool)e.NewValue;
CategoryView.Update(category);
}

}
}
}

protected virtual void INCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (INCategory)e.Row;

ICSAddItems.SetEnabled(false);
ClearItems.SetEnabled(false);

if (row == null) return;

if (Base.Folders.Current != null && row.ParentID != 0 && row.ParentID != null)
{
ICSAddItems.SetEnabled(true);
ClearItems.SetEnabled(true);
}

PXCache pXCache = Base.Caches<INCategory>();

INCategory category = SelectFrom<INCategory>
.Where<INCategory.parentID.IsEqual<@P.AsInt>>
.View.Select(Base, row.CategoryID);
if (category != null)
{
CummingsINCategoryExt ext = category.GetExtension<CummingsINCategoryExt>();
if (ext != null)
{
if (row.Description == "Company")
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, false);
}
else
{
PXUIFieldAttribute.SetEnabled<CummingsINCategoryExt.usrDisplayOnPortal>(pXCache, null, true);
}
}
}
}

//protected virtual void INItemCategory_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
//{

// var row = (INItemCategory)e.Row;

// ClearItems.SetEnabled(false);

// if (row == null) return;

// int count = 0;
// string warningMessage = string.Empty;

// INCategory cat = Base.CurrentCategory.Current;
// if (cat != null)
// {
// count = SelectFrom<INItemCategory>
// .Where<INItemCategory.categoryID.IsEqual<@P.AsInt>>
// .View.Select(Base, cat.CategoryID).Count();
// if (count > 0)
// {
// ClearItems.SetEnabled(true);
// }
// }
//}


#endregion


// Acuminator disable once PX1069 MissingMandatoryDacFields [Justification]
[PXCacheName("Add Items Filter")]
public class AddItemsFilter : PXBqlTable, IBqlTable
{
#region AddItemsOptions
[PXString(1, IsFixed = true)]
[PXUIField(DisplayName = "Add By")]
[AddICSItemsTypesList.List()]
[PXDefault(AddICSItemsTypesList.AddByVendorItems, PersistingCheck = PXPersistingCheck.Nothing)]
public virtual string AddItemsOptions { get; set; }
public abstract class addItemsOptions : BqlString.Field<addItemsOptions> { }
#endregion

#region UsrItemVendor
[PXInt]
[PXUIField(DisplayName = "Item Vendor", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<Vendor.bAccountID>),
typeof(Vendor.acctCD),
typeof(Vendor.acctName),
SubstituteKey = typeof(Vendor.acctCD),
DescriptionField = typeof(Vendor.acctCD))]
public int? UsrItemVendor { get; set; }
public abstract class usrItemVendor : PX.Data.BQL.BqlInt.Field<usrItemVendor> { }
#endregion

#region UsrItemPriceClassID
[PXDBString(10, IsUnicode = true)]
[PXSelector(typeof(INPriceClass.priceClassID), DescriptionField = typeof(INPriceClass.description))]
[PXUIField(DisplayName = "Price Class", Visibility = PXUIVisibility.Visible)]
[PXDefault(SourceField = typeof(INItemClass.priceClassID), PersistingCheck = PXPersistingCheck.Nothing, CacheGlobal = true)]
public string UsrItemPriceClassID { get; set; }
public abstract class usrItemPriceClassID : BqlString.Field<usrItemPriceClassID> { }
#endregion

#region UsrItemClassID
[PXInt]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXDimensionSelector(INItemClass.Dimension, typeof(INItemClass.itemClassID), typeof(INItemClass.itemClassCD), DescriptionField = typeof(INItemClass.descr), ValidComboRequired = true)]
public int? UsrItemClassID { get; set; }
public abstract class usrItemClassID : BqlInt.Field<usrItemClassID> { }
#endregion
}

public static class AddICSItemsTypesList
{
public class ListAttribute : PXStringListAttribute
{
public ListAttribute() : base(
new[]
{
Pair(AddByVendorItems, "By Vendor Item"),
Pair(AddByItemPriceClass, "By Price Class"),
Pair(AddByItemClass, "By Class"),
Pair(AddAll, "All Items"),
})
{ }
}

public const string AddByVendorItems = "V";
public const string AddByItemPriceClass = "P";
public const string AddByItemClass = "C";
public const string AddAll = "A";
}


}
}

HTML

<template>
<field name="CurrentCategory.UsrDisplayOnPortal" append="#fsColumnB-ItemCategory"></field>

<qp-panel id="AddItemsDACFilter" caption="Add Items" auto-repaint="true" after="#ClassInfo" wg-container="AddItemsDACFilter_formCreateAccount">
<qp-template id="form-AddItemsDACFilter" name="1">
<qp-fieldset id="fsColumnA-AddItemsDACFilter" slot="A" view.bind="AddItemsDACFilter">
<field name="AddItemsDACFilter.AddItemsOptions" after="#ClassInfo"></field>
<field name="AddItemsDACFilter.UsrItemVendor" after="FIELD[name='AddItemsDACFilter.AddItemsOptions']"></field>
<field name="AddItemsDACFilter.UsrItemPriceClassID" after="FIELD[name='AddItemsDACFilter.UsrItemVendor']"></field>
<field name="AddItemsDACFilter.UsrItemClassID" after="FIELD[name='AddItemsDACFilter.UsrItemPriceClassID']"></field>
</qp-fieldset>
</qp-template>

<footer id="footer-AddItemsDACFilter">
<qp-button id="buttonAdd-AddItemsDACFilter" caption="Add" class="major-button" dialog-result="OK"></qp-button>
<qp-button id="buttonCancel-AddItemsDACFilter" dialog-result="Cancel"></qp-button>
</footer>
</qp-panel>
</template>


TS

import {
PXFieldState,
PXView,
viewInfo,
gridConfig,
createSingle,
PXActionState,
PXFieldOptions,
placeAfterProperty,
columnConfig,
TextAlign,
} from "client-controls";
import { IN204060, CurrentCategory, Members } from "src/screens/IN/IN204060/IN204060";

export interface IN204060_Cummings_generated extends IN204060 { }
export class IN204060_Cummings_generated {
@viewInfo({ containerName: "AddItemsDAC(AddItemsDACFilter)" })
AddItemsDACFilter = createSingle(AddItemsDAC);
}

export class AddItemsDAC extends PXView {
AddItemsOptions: PXFieldState<PXFieldOptions.CommitChanges>;
UsrItemVendor: PXFieldState;
UsrItemPriceClassID: PXFieldState;
UsrItemClassID: PXFieldState;
}

export interface Members_Cummings_generated extends Members { }
@gridConfig({
topBarItems: {
ICSAddItems: {
index: 5,
config: {
commandName: "ICSAddItems",
text: "ICS Add Items"
}
},

ClearItems: {
index: 6, config: { commandName: "ClearItems", text: "Clear Items" }
}
}
})
export class Members_Cummings_generated {
//InventoryID_description: PXFieldState;
ICSAddItems: PXActionState;
ClearItems: PXActionState;

@placeAfterProperty("InventoryItem__ItemClassID")
@columnConfig({
width: 120,
})
InventoryItem__PriceClassID: PXFieldState;

@placeAfterProperty("InventoryItem__PriceClassID")
@columnConfig({
width: 180,
})
UsrItemVendor: PXFieldState;

@placeAfterProperty("InventoryItem__ItemStatus")
@columnConfig({
width: 60,
textAlign: TextAlign.Center,
})
UsrDisplayOnline: PXFieldState<PXFieldOptions.Readonly>

@placeAfterProperty("UsrDisplayOnline")
@columnConfig({
width: 280,
})
UsrProductName: PXFieldState;

@placeAfterProperty("UsrProductName")
@columnConfig({
width: 280,
})
UsrMarketingDesc: PXFieldState;


}

export interface CurrentCategory_CummingsCombined_generated extends CurrentCategory { }
export class CurrentCategory_CummingsCombined_generated {
UsrDisplayOnPortal: PXFieldState<PXFieldOptions.CommitChanges>;
}