C# 将库存项目查找添加到面板
我向Item Class屏幕添加了一些自定义代码,以创建具有相同类的库存项目。当用户单击“创建项目”按钮时,会弹出一个面板,在提交之前输入项目名称。我需要该字段是一个类似于库存项目屏幕上的原始库存ID字段的查找。我已经在面板上找到了查找结果,但无论何时选择一个项目,它都会切换回列表中的第一个项目C# 将库存项目查找添加到面板,c#,acumatica,C#,Acumatica,我向Item Class屏幕添加了一些自定义代码,以创建具有相同类的库存项目。当用户单击“创建项目”按钮时,会弹出一个面板,在提交之前输入项目名称。我需要该字段是一个类似于库存项目屏幕上的原始库存ID字段的查找。我已经在面板上找到了查找结果,但无论何时选择一个项目,它都会切换回列表中的第一个项目 public PXFilter<InventoryItem> MyPanel; // in INItemClassMaint extension public PXSelect<I
public PXFilter<InventoryItem> MyPanel; // in INItemClassMaint extension
public PXSelect<InventoryItem, Where<InventoryItem.stkItem, Equal<boolTrue>, And<Match<Current<AccessInfo.userName>>>>> Item;
// on in201000.aspx page
<px:PXSmartPanel runat="server" ID="CstSmartPanel2" Key="MyPanel" AcceptButtonID="CstButton6" DesignView="Hidden" Caption="Create Item" CaptionVisible="True" LoadOnDemand="True" CreateOnDemand="False">
<px:PXFormView runat="server" ID="CstFormView3" DataMember="Item" DataSourceID="ds" DefaultControlID="edInventoryCD">
<Template>
<px:PXLayoutRule runat="server" ID="CstPXLayoutRule4" StartColumn="True" />
<px:PXSegmentMask runat="server" ID="CstPXSegmentMask10" DataField="InventoryCD" /></Template></px:PXFormView>
<px:PXPanel runat="server" ID="CstPanel5" SkinID="Buttons">
<px:PXButton runat="server" ID="CstButton6" Text="Create" DialogResult="OK">
<AutoCallBack Command="Save" /></px:PXButton>
</px:PXPanel></px:PXSmartPanel>
public PXFilter MyPanel;//在INItemClassMaint扩展中
公共选择项目;
//在in210000.aspx页面上
关于如何正确做到这一点,有什么想法吗?谢谢当您开始使用
PXFilter
类型的MyPanel
数据视图时,您最初的路径是正确的。第一个问题是InventoryItem
用作MyPanel
视图的主DAC:
INItemClassMaint
BLC中,已经有一个InventoryItem
用作主DAC(Items
)的数据视图,通过声明另一个具有相同主DAC的视图,可以强制两个视图共享相同的PXCache
实例,除非它们绑定到表示UI中完全相同的记录的PXForms,否则决不建议使用此选项PXFilter
类型的数据视图不能与至少有一个关键字段的DAC一起使用,否则每当用户更改一个关键字段值时,框架就会调用Cancel命令- Aspx中自定义PXSmartPanel的声明:
<px:PXSmartPanel runat="server" ID="CstSmartPanel2" Key="CreateStockItemDialog" Caption="Create Item" AutoRepaint="True" AcceptButtonID="CstButton6" CaptionVisible="True" > <px:PXFormView runat="server" ID="CstFormView3" DataMember="CreateStockItemDialog" SkinID="Transparent"> <Template> <px:PXLayoutRule runat="server" StartColumn="True" /> <px:PXSegmentMask runat="server" ID="CstPXSegmentMask10" DataField="InventoryCD" CommitChanges="true" /> </Template> </px:PXFormView> <px:PXLayoutRule runat="server" StartRow="True" /> <px:PXPanel runat="server" ID="CstPanel5" SkinID="Buttons"> <px:PXButton runat="server" ID="CstButton6" Text="OK" DialogResult="OK" /> </px:PXPanel> </px:PXSmartPanel>
- INItemClassMaint BLC扩展的实现:
public class INItemClassMaintExt : PXGraphExtension<INItemClassMaint> { [Serializable] public class CreateStockItemParams : IBqlTable { #region InventoryCD public abstract class inventoryCD : PX.Data.IBqlField { } [PXString] [PXUIField(DisplayName = "Inventory ID")] public virtual string InventoryCD { get; set; } #endregion } public PXFilter<CreateStockItemParams> CreateStockItemDialog; public PXDBAction<INItemClass> CreateStockItem; [PXButton] [PXUIField(DisplayName = "Create Stock Item")] protected void createStockItem() { var result = CreateStockItemDialog.AskExt((graph, viewname) => { CreateStockItemDialog.Cache.Clear(); }); if (result != WebDialogResult.OK) return; var itemParams = CreateStockItemDialog.Current; if (string.IsNullOrEmpty(itemParams.InventoryCD)) { CreateStockItemDialog.Cache.RaiseExceptionHandling<CreateStockItemParams.inventoryCD>(itemParams, itemParams.InventoryCD, new PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName< CreateStockItemParams.inventoryCD>(CreateStockItemDialog.Cache))); return; } InventoryItemMaint maint = PXGraph.CreateInstance<InventoryItemMaint>(); var newItem = new InventoryItem(); newItem.InventoryCD = itemParams.InventoryCD; newItem = maint.Item.Insert(newItem); newItem.ItemClassID = Base.itemclass.Current.ItemClassID; maint.Item.Update(newItem); throw new PXRedirectRequiredException(maint, "New Stock Item"); } protected void CreateStockItemParams_InventoryCD_FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e) { e.IsAltered = true; object ret = e.ReturnValue; PXDimensionAttribute restoreCombo = null; foreach (PXEventSubscriberAttribute attr in sender.Graph.Caches[typeof(InventoryItem)] .GetAttributesReadonly<InventoryItem.inventoryCD>()) { if (attr is PXDimensionAttribute) { if (((PXDimensionAttribute)attr).ValidComboRequired) { ((PXDimensionAttribute)attr).ValidComboRequired = false; restoreCombo = (PXDimensionAttribute)attr; break; } } } sender.Graph.Caches[typeof(InventoryItem)]. RaiseFieldSelecting<InventoryItem.inventoryCD>(null, ref ret, true); if (restoreCombo != null) { restoreCombo.ValidComboRequired = true; } e.ReturnState = ret; } protected void CreateStockItemParams_InventoryCD_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e) { object val = e.NewValue; sender.Graph.Caches[typeof(InventoryItem)].RaiseFieldVerifying<InventoryItem.inventoryCD>(null, ref val); var item = (InventoryItem)PXSelect<InventoryItem, Where<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>>>.SelectWindowed(Base, 0, 1, val); if (item != null) { throw new PXSetPropertyException("Stock Item with Inventory ID {0} already exists.", sender.Graph.Caches[typeof(InventoryItem)].GetValueExt<InventoryItem.inventoryCD>(item)); } e.NewValue = val; } }
public类INItemClassMaintExt:PXGraphExtension { [可序列化] 公共类CreateStockItemParams:IBqlTable { #区域目录 公共抽象类inventoryCD:PX.Data.IBqlField { } [字符串] [PXUIField(DisplayName=“库存ID”)] 公共虚拟字符串InventoryCD{get;set;} #端区 } 公共PXFilter CreateStockItemDialog; 公共PXDBAction CreateStockItem; [按钮] [PXUIField(DisplayName=“创建库存项目”)] 受保护的无效createStockItem() { var result=CreateStockItemDialog.AskExt((图形,视图名称)=> { CreateStockItemDialog.Cache.Clear(); }); if(result!=WebDialogResult.OK)返回; var itemParams=CreateStockItemDialog.Current; if(string.IsNullOrEmpty(itemParams.InventoryCD)) { CreateStockItemDialog.Cache.RaiseExceptionHandling(itemParams, itemParams.InventoryCD,新PXSetPropertyException(ErrorMessages.FieldIsEmpty, PXUIFieldAttribute.GetDisplayName
(CreateStockItemDialog.Cache)); 返回; } InventoryItemMaint maint=PXGraph.CreateInstance(); var newItem=newinventoryItem(); newItem.InventoryCD=itemParams.InventoryCD; newItem=维护项目插入(newItem); newItem.ItemClassID=Base.itemclass.Current.ItemClassID; 维护项目更新(新项目); 抛出新的异常(维护,“新库存项目”); } 受保护的无效CreateStockItemParams\u InventoryCD\u字段选择(PXCache sender,PXFieldSelectingEventArgs e) { e、 IsAltered=真; 对象ret=e.ReturnValue; PXDimensionAttribute restoreCombo=null; 在sender.Graph.Caches[typeof(InventoryItem)] .GetAttributesReadonly()) { if(attr是PXDimensionAttribute) { 如果(((PXDimensionAttribute)attr.validCompoRequired) { ((PXDimensionAttribute)attr.ValidComboRequired=false; restoreCombo=(PXDimensionAttribute)属性; 打破 } } } sender.Graph.Caches[typeof(InventoryItem)]。 RaiseFieldSelecting(null,ref-ret,true); if(restoreCombo!=null) { restoreCombo.ValidComboRequired=true; } e、 ReturnState=ret; } 受保护的无效CreateStockItemParams_InventoryCD_FieldVerification(PXCache发送方,PXFieldVerifyingEventArgs e) { 对象val=e.NewValue; sender.Graph.Caches[typeof(InventoryItem)].RaiseFieldVerification(null,ref val); var item=(InventoryItem)PXSelect.selectedwindowed(Base,0,1,val); 如果(项!=null) { 抛出新的PXSetPropertyException(“库存ID为{0}的库存项已存在。”, sender.Graph.Caches[typeof(InventoryItem)].GetValueExt(item)); } e、 NewValue=val; } }
INItemClassMaintExt
类中要突出显示的关键项:
CreateStockItemParams
DAC,该DAC未定义关键字段INItemClassMaintExt.InventoryCD
fieldselection和FieldVerifying事件的字段处理程序,以从库存项目屏幕复制库存ID的行为(支持多段和段级验证)