acumatica - 在 Acumatica 采购订单屏幕的“添加项目”对话框中添加属性
问题描述
如何将“库存项目”屏幕中的属性列添加到采购订单屏幕的“添加项目”对话框。我想将库存项目屏幕中的以下属性添加到采购订单屏幕的“添加项目”对话框中。请查看以下图片以了解库存项目和采购订单屏幕。
我能够在 PO 的库存查找中获取该字段,但未填充值。
这是我的代码....
namespace PX.Objects.PO
{
[PXProjection(typeof(Select<CSAnswers, Where<CSAnswers.refNoteID, Equal<POSiteStatusSelected.noteID>,
And<CSAnswers.attributeID, Equal<AttribMyAttribute>>>>), Persistent = false)]
public class POSiteStatusSelectedExt : PXCacheExtension<PX.Objects.PO.POSiteStatusSelected>
{
#region UsrItemType
[PXDBString(10, IsFixed = true, BqlField = typeof(CSAnswers.value))]
[PXUIField(DisplayName = "Item Type")]
//[PXDBScalar(typeof(Search<CSAnswers.value, Where<CSAnswers.refNoteID, Equal<POSiteStatusSelected.noteID>,
// And<CSAnswers.attributeID, Equal<AttribMyAttribute>>>>))]
public virtual string UsrItemType { get; set; }
public abstract class usrItemType : IBqlField { }
#endregion
}
public class AttribMyAttribute : Constant<string>
{
public AttribMyAttribute() : base("ITEMTYPE") { }
}
}
我创建了 POSiteStatusSeleted 视图的 DAC 扩展,并添加了我的自定义字段,这是一个非持久字段。POSiteStatusSeleted 中有 noteId 字段,其类型为 InventoryItem.noteID,我尝试在 PXDBScalar 属性中使用相同的字段(代码行已注释),这也没有成功,它显示“无法将 System.Int32 转换为 System.String”。
解决方案
更新答案:由于投影,我们必须创建一个继承 DAC 并使用 [PXSubstitute] 属性的新类。PXSubstitute 的性质意味着这将不是 DAC 扩展,甚至不是图形扩展的一部分。在我的测试中,我尝试将其封装在 POOrderEntry 的图形扩展中,但它不起作用。按照下面堆栈溢出帖子的说明,我能够创建一个名为 ITEMTYPE 的属性,将其分配给我的一个项目类,将 PXProjection 替换为包括左连接回属性表的增强版本(CSAnswers)然后将其添加到屏幕的智能面板网格中。
在下面的代码示例中,神奇之处在于 PXSubstitute,它将采用您创建并从基础 DAC 继承的新类,并将该基础 DAC 替换为您的新类。如果您指定一个图表,它将仅在该图表中执行替换(或您指定的每个图表 - 每个使用的 PXSubstitute 属性 1 个)。如果您未指定图表,则在 xRP 框架中使用的每种情况下,它将覆盖基本 DAC。
执行所述修改的代码:
using PX.Data;
using PX.Objects.AP;
using PX.Objects.Common.Bql;
using PX.Objects.CS;
using PX.Objects.IN;
using System;
namespace PX.Objects.PO
{
[System.SerializableAttribute()]
[PXProjection(typeof(Select2<InventoryItem,
LeftJoin<CSAnswers,
On<CSAnswers.refNoteID, Equal<InventoryItem.noteID>,
And<CSAnswers.attributeID, Equal<AttribItemType>>>,
LeftJoin<INSiteStatus,
On<INSiteStatus.inventoryID, Equal<InventoryItem.inventoryID>, And<INSiteStatus.siteID, NotEqual<SiteAttribute.transitSiteID>>>,
LeftJoin<INSubItem,
On<INSiteStatus.FK.SubItem>,
LeftJoin<INSite,
On<INSiteStatus.FK.Site>,
LeftJoin<INItemXRef,
On<INItemXRef.inventoryID, Equal<InventoryItem.inventoryID>,
And2<Where<INItemXRef.subItemID, Equal<INSiteStatus.subItemID>,
Or<INSiteStatus.subItemID, IsNull>>,
And<Where<CurrentValue<POSiteStatusFilter.barCode>, IsNotNull,
And<INItemXRef.alternateType, Equal<INAlternateType.barcode>>>>>>,
LeftJoin<INItemPartNumber,
On<INItemPartNumber.inventoryID, Equal<InventoryItem.inventoryID>,
And<INItemPartNumber.alternateID, Like<CurrentValue<POSiteStatusFilter.inventory_Wildcard>>,
And2<Where<INItemPartNumber.bAccountID, Equal<Zero>,
Or<INItemPartNumber.bAccountID, Equal<CurrentValue<POOrder.vendorID>>,
Or<INItemPartNumber.alternateType, Equal<INAlternateType.cPN>>>>,
And<Where<INItemPartNumber.subItemID, Equal<INSiteStatus.subItemID>,
Or<INSiteStatus.subItemID, IsNull>>>>>>,
LeftJoin<INItemClass,
On<InventoryItem.FK.ItemClass>,
LeftJoin<INPriceClass,
On<INPriceClass.priceClassID, Equal<InventoryItem.priceClassID>>,
LeftJoin<Vendor,
On<Vendor.bAccountID, Equal<InventoryItem.preferredVendorID>>,
LeftJoin<INUnit,
On<INUnit.inventoryID, Equal<InventoryItem.inventoryID>,
And<INUnit.unitType, Equal<INUnitType.inventoryItem>,
And<INUnit.fromUnit, Equal<InventoryItem.purchaseUnit>,
And<INUnit.toUnit, Equal<InventoryItem.baseUnit>>>>>>>>>>>>>>>,
Where2<CurrentMatch<InventoryItem, AccessInfo.userName>,
And2<Where<INSiteStatus.siteID, IsNull, Or<INSite.branchID, IsNotNull, And2<CurrentMatch<INSite, AccessInfo.userName>,
And<Where2<FeatureInstalled<FeaturesSet.interBranch>,
Or2<SameOrganizationBranch<INSite.branchID, Current<POOrder.branchID>>,
Or<CurrentValue<POOrder.orderType>, Equal<POOrderType.standardBlanket>>>>>>>>,
And2<Where<INSiteStatus.subItemID, IsNull,
Or<CurrentMatch<INSubItem, AccessInfo.userName>>>,
And<InventoryItem.stkItem, Equal<boolTrue>,
And<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.inactive>,
And<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>,
And<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.markedForDeletion>,
And<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.noPurchases>>>>>>>>>>), Persistent = false)]
//[PXSubstitute(GraphType = typeof(POOrderEntry))]
[PXSubstitute]
public partial class POSiteStatusSelectedCst : POSiteStatusSelected
{
#region UsrItemType
[PXDBString(10, BqlField = typeof(CSAnswers.value))]
[PXUIField(DisplayName = "Item Type")]
public string UsrItemType { get; set; }
public abstract class usrItemType : PX.Data.BQL.BqlString.Field<usrItemType> { }
#endregion
}
public class AttribItemType : PX.Data.BQL.BqlString.Constant<AttribItemType>
{
public AttribItemType() : base("ITEMTYPE") { }
}
}
推荐阅读
- android - 在 Android Studio 中找不到 \gradle-wrapper.properties
- c++ - Boost logger的深拷贝
- c++ - 按顶点数对 3D 对象进行排序 C++
- wpf - 文本在 WPF 应用程序的 UI 中可见,但 WinAppdriver 无法识别文本
- python - XOR Tensorflow 不收敛
- html - 如何在博客收据网站上添加打印按钮?
- mysql - MySQL:自联接表上的 SUM()
- python - Celery 无法从五分之一的应用程序中加载任务
- c# - ASP.NET Core 中的位置记录属性
- bitbucket - 来自 bitbucket 云的 TeamCity 拉取请求