Acumatica采购订单字段设为可编辑时遇CS1001错误求助
问题:Acumatica采购订单自定义扩展编译错误(CS1001)
尝试在Acumatica采购订单页面将不可编辑的POOrder.SOOrderNbr字段设置为可编辑,编写了自定义扩展代码,但验证项目时出现编译错误。
原自定义代码
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using PX.Common; using PX.Data; using PX.Objects.GL; using PX.Objects.CM.Extensions; using PX.Objects.CS; using PX.Objects.CR; using PX.Objects.TX; using PX.Objects.IN; using PX.Objects.EP; using PX.Objects.AP; using PX.Objects.AR; using PX.Objects.SO; using SOOrder = PX.Objects.SO.SOOrder; using SOLine = PX.Objects.SO.SOLine; using PX.Data.DependencyInjection; using PX.Data.ReferentialIntegrity.Attributes; using PX.LicensePolicy; using PX.Objects.PM; using CRLocation = PX.Objects.CR.Standalone.Location; using PX.Objects.AP.MigrationMode; using PX.Objects.Common; using PX.Objects.Common.Discount; using PX.Data.BQL.Fluent; using PX.Data.BQL; using PX.Objects.Common.Bql; using PX.Objects.Extensions.CostAccrual; using PX.Objects.DR; using PX.Data.WorkflowAPI; using PX.Objects.Common.Scopes; using PX.Objects.IN.Services; using PX.Objects.Extensions.MultiCurrency; using PX.Data.Description; using PX.Objects; using PX.Objects.PO; namespace PX.Objects.PO { public class POOrderEntry_Extension : PXGraphExtension<PX.Objects.PO.POOrderEntry> { #region Event Handlers protected static void POOrderEntry_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected baseHandler) { baseHandler?.Invoke(cache, e); var row = (POOrderEntry)e.Row; PXUIFieldAttribute.SetEnabled<POOrder.SOOrderNbr.>(cache, row, true); } #endregion } }
错误信息
\App_RuntimeCode\POOrderEntry.cs(50): error CS1001: Identifier expected
解决方案
错误原因及修正点:
- 字段名语法错误:
POOrder.SOOrderNbr.末尾多了一个多余的点,正确的字段引用应为POOrder.SOOrderNbr - 实体类型转换错误:
e.Row是采购订单的数据行,对应POOrder实体,而非图类POOrderEntry,转换类型错误会导致后续逻辑异常 - 方法修饰符与命名规范:事件方法建议使用
virtual修饰符,且命名改为POOrder_RowSelected更符合Acumatica的事件处理规范
修正后的代码:
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using PX.Common; using PX.Data; using PX.Objects.GL; using PX.Objects.CM.Extensions; using PX.Objects.CS; using PX.Objects.CR; using PX.Objects.TX; using PX.Objects.IN; using PX.Objects.EP; using PX.Objects.AP; using PX.Objects.AR; using PX.Objects.SO; using SOOrder = PX.Objects.SO.SOOrder; using SOLine = PX.Objects.SO.SOLine; using PX.Data.DependencyInjection; using PX.Data.ReferentialIntegrity.Attributes; using PX.LicensePolicy; using PX.Objects.PM; using CRLocation = PX.Objects.CR.Standalone.Location; using PX.Objects.AP.MigrationMode; using PX.Objects.Common; using PX.Objects.Common.Discount; using PX.Data.BQL.Fluent; using PX.Data.BQL; using PX.Objects.Common.Bql; using PX.Objects.Extensions.CostAccrual; using PX.Objects.DR; using PX.Data.WorkflowAPI; using PX.Objects.Common.Scopes; using PX.Objects.IN.Services; using PX.Objects.Extensions.MultiCurrency; using PX.Data.Description; using PX.Objects; using PX.Objects.PO; namespace PX.Objects.PO { public class POOrderEntry_Extension : PXGraphExtension<PX.Objects.PO.POOrderEntry> { #region Event Handlers protected virtual void POOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected baseHandler) { baseHandler?.Invoke(cache, e); var row = e.Row as POOrder; if (row == null) return; PXUIFieldAttribute.SetEnabled<POOrder.SOOrderNbr>(cache, row, true); } #endregion } }
额外说明:增加了row不为空的判断,避免空引用异常,提升代码稳定性。
内容的提问来源于stack exchange,提问作者Aleks Iwan
相关产品推荐
相关产品推荐

