错误 CS0592:属性 'PXForeignReference' 在此声明类型上无效。它仅对 'class, property, indexer' 声明有效
error CS0592: Attribute 'PXForeignReference' is not valid on this declaration type. It is only valid on 'class, property, indexer' declarations
美好的一天
我需要覆盖采购订单屏幕上的 InventoryID 字段。我想通过在屏幕级别覆盖它来使该字段成为必填字段:
namespace PX.Objects.PO
{
public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry>
{
#region Event Handlers
[PXDefault]
[POLineInventoryItem(Filterable = true)]
[PXForeignReference(typeof(Field<inventoryID>.IsRelatedTo<InventoryItem.inventoryID>))]
protected virtual void POLine_InventoryID_CacheAttached(PXCache cache)
{
}
#endregion
}
}
当我 运行 以上我得到以下错误:
\App_RuntimeCode\POOrderEntry.cs(45):错误 CS0592:属性 'PXForeignReference' 在此声明类型上无效。它仅对 'class, property, indexer' 声明有效。
第 45 行是 [PXForeignReference(typeof(Field.IsRelatedTo))]
我该如何解决这个错误?
我不认为外部引用在 CacheAttached 的上下文中是“合法的”。您应该能够使用 PXMergeAttrubutes 添加 PXDefault 而不会删除其他属性。
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault]
protected virtual void POLine_InventoryID_CacheAttached(PXCache cache){}
我做了类似的事情来阻止在 SOLine 上使用特定项目 Class。
#region SOLine_InventoryID_CacheAttached
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXRestrictor(typeof(Where<InventoryItem.itemClassID,
NotEqual<Current<MySetup.PreventClassID>>>),"")]
protected virtual void SOLine_InventoryID_CacheAttached(PXCache sender) { }
#endregion
如果您想定义何时需要,您也可以考虑 PXUIRequiredAttribute。我相信此属性可用于 DAC 扩展或 CacheAttached。
#region MyDAC_AccountID_CacheAttached
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault()]
[PXUIRequired(typeof(Where<Current<MyDAC.hold>, Equal<False>,
And<Current<MyBranchSetting.requireAccount>, Equal<True>>>))]
protected virtual void MyDAC_AccountID_CacheAttached(PXCache sender) { }
#endregion
美好的一天
我需要覆盖采购订单屏幕上的 InventoryID 字段。我想通过在屏幕级别覆盖它来使该字段成为必填字段:
namespace PX.Objects.PO
{
public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry>
{
#region Event Handlers
[PXDefault]
[POLineInventoryItem(Filterable = true)]
[PXForeignReference(typeof(Field<inventoryID>.IsRelatedTo<InventoryItem.inventoryID>))]
protected virtual void POLine_InventoryID_CacheAttached(PXCache cache)
{
}
#endregion
}
}
当我 运行 以上我得到以下错误: \App_RuntimeCode\POOrderEntry.cs(45):错误 CS0592:属性 'PXForeignReference' 在此声明类型上无效。它仅对 'class, property, indexer' 声明有效。
第 45 行是 [PXForeignReference(typeof(Field.IsRelatedTo
我该如何解决这个错误?
我不认为外部引用在 CacheAttached 的上下文中是“合法的”。您应该能够使用 PXMergeAttrubutes 添加 PXDefault 而不会删除其他属性。
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault]
protected virtual void POLine_InventoryID_CacheAttached(PXCache cache){}
我做了类似的事情来阻止在 SOLine 上使用特定项目 Class。
#region SOLine_InventoryID_CacheAttached
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXRestrictor(typeof(Where<InventoryItem.itemClassID,
NotEqual<Current<MySetup.PreventClassID>>>),"")]
protected virtual void SOLine_InventoryID_CacheAttached(PXCache sender) { }
#endregion
如果您想定义何时需要,您也可以考虑 PXUIRequiredAttribute。我相信此属性可用于 DAC 扩展或 CacheAttached。
#region MyDAC_AccountID_CacheAttached
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault()]
[PXUIRequired(typeof(Where<Current<MyDAC.hold>, Equal<False>,
And<Current<MyBranchSetting.requireAccount>, Equal<True>>>))]
protected virtual void MyDAC_AccountID_CacheAttached(PXCache sender) { }
#endregion