我正在尝试将库存商品的属性添加到详细信息选项卡中的订单行
对于我的问题,我在 acumatica 社区上找到了这篇文章,但我无法将其转移到我的问题上。 https://community.acumatica.com/develop-customizations-288/add-a-stock-item-attribute-to-the-sales-order-line-grid-6454
这是我的 POLine DAC 扩展代码:
using PX.Common;
using PX.Data.BQL;
using PX.Data.ReferentialIntegrity.Attributes;
using PX.Data;
using PX.Objects.AP;
using PX.Objects.CM.Extensions;
using PX.Objects.Common.Bql;
using PX.Objects.Common.Discount.Attributes;
using PX.Objects.Common.Discount;
using PX.Objects.Common;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.GL;
using PX.Objects.IN.Matrix.Interfaces;
using PX.Objects.IN;
using PX.Objects.PM;
using PX.Objects.PO;
using PX.Objects.TX;
using PX.Objects;
using System.Collections.Generic;
using System;
namespace PX.Objects.PO
{
public class POLineExt : PXCacheExtension<PX.Objects.PO.POLine>
{
#region UsrAttribute1
[PXDBString(512, IsUnicode = true)]
[PXUIField(DisplayName = "MATCHCODE")]
public virtual string UsrAttribute1 { get; set; }
public abstract class usrAttribute1 : BqlString.Field<usrAttribute1> { }
#endregion
}
}
这里是图形扩展 POOrderEntry
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.Extensions;
using PX.Objects.Common.DAC;
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 POLine_InventoryID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
InvokeBaseHandler?.Invoke(sender, e);
POLine row = (POLine)e.Row;
if (row == null) return;
CSAnswers CSAns = PXSelectJoin<CSAnswers,
InnerJoin<InventoryItem, On<InventoryItem.noteID, Equal<CSAnswers.refNoteID>>>,
Where<InventoryItem.inventoryID, Equal<Required<InventoryItem.inventoryID>>,
And<CSAnswers.attributeID, Equal<Required<CSAnswers.attributeID>>
>>>.Select(Base, row.InventoryID, "MATCHCODE");
if (CSAns != null)
{
POLineExt rowExt = row.GetExtension<POLineExt>();
rowExt.UsrAttribute1 = CSAns.Value;
}
}
}
#endregion
}
案例 1:在 POOrderEntry 中:
rowExt.UsrAttribute1 = CSAns.Value;
编译器没有显示错误,但当我尝试打开 PO 时,系统给出错误“无效的列名称 [POLine].[UsrAttribute1]”
案例 2:在 POOrderEntry 中:
rowExt.usrAttribute1 = CSAns.Value;
出现以下错误:
\App_RuntimeCode\POOrderEntry.cs(60): 错误 CS0572: 'usrAttribute1': 无法通过表达式引用类型;尝试“POLineExt.usrAttribute1” \App_RuntimeCode\POOrderEntry.cs(60): 错误 CS0118: 'POLineExt.usrAttribute1' 是一种类型,但像变量一样使用 \App_RuntimeCode\POOrderEntry.cs(60): 错误 CS0572: 'usrAttribute1': 无法通过表达式引用类型;尝试改为“POLineExt.usrAttribute1”
can can 问题很简单,你的UsrAttribute1字段不在数据库中。 您可以将其属性从 PXDBString 更改为 PXString,但在这种情况下,该值不会存储在数据库中,或者您可以通过自定义编辑器将该字段添加到 POLine 表中。