删除 GenericArguments[0]、'PX.Data.Current`1[PX.Objects.PO.POReceipt+receiptNbr] 时出错

Error when deleting GenericArguments[0], 'PX.Data.Current`1[PX.Objects.PO.POReceipt+receiptNbr]

当我删除时,我有这个错误:

GenericArguments[0], 'PX.Data.Current`1[PX.Objects.PO.POReceipt+receiptNbr]', on 
'PX.Data.Current`1[Field]' violates the constraint of type 'Field'.

网格正常工作,只有在删除接收时才会出现此错误

    #region ReceiptNbr
[PXDBString(15, IsUnicode = true, InputMask = "",IsKey=true)]
[PXUIField(DisplayName = "Receipt Nbr")]
[PXDBDefault(typeof(POReceipt.receiptNbr))]
[PXParent(typeof(Select<POReceipt, Where<POReceipt.receiptNbr,  Equal<Current<POReceipt.receiptNbr>>>>))]

public virtual string ReceiptNbr { get; set; }
public abstract class receiptNbr : PX.Data.BQL.BqlString.Field<receiptNbr> { }
#endregion

如果我放这个,没关系,但记录保留在数据库中:

    [PXParent(typeof(Select<POReceipt, Where<POReceipt.receiptNbr,  Equal<Current<POReceipt.receiptNbr>>>>),LeaveChildren = true)]  

日期视图是:

    #region Data Views
public PXSelect<POReceiptcolis,Where<POReceiptcolis.receiptNbr,Equal<Current<POReceiptcolis.receiptNbr>>>> CurrentPOReceiptcolisvue;
public PXSave<POReceiptcolis> Save;
public PXCancel<POReceiptcolis> Cancel;
    #endregion

您没有提供 table 名称,所以我将从我的代码中的一个示例开始并进行解释。您对 PXParent 的使用不正确,因为您告诉它 parent 是“parent 记录的收据编号与 parent 的当前收据编号匹配的地方”。

相反,考虑这个例子。我有 2 tables。 SSRQRequisition (Parent) 和 SSRQLine (Child)。在 SSRQLine 中,我做了 3 件事...首先,我将字段设置为关键字段,这在 Parent/Child 关系中很典型。你已经做到了。其次,我设置 PXDBDefault 以将值设置为 parent 的匹配字段,正如您所做的那样。第三,这是您需要更正的部分,我通过 CHILD 的当前申请编号告诉 DAC 它与 parent 有关。

#region RequisitionID
[PXDBInt(IsKey = true)]
[PXDBDefault(typeof(SSRQRequisition.requisitionID))]
[PXParent(
    typeof(Select<SSRQRequisition,
            Where<SSRQRequisition.requisitionID,
            Equal<Current<SSRQLine.requisitionID>>>>)
    )]
[PXUIField(DisplayName = Messages.FldRequisitionID)]
public virtual int? RequisitionID { get; set; }
public abstract class requisitionID : PX.Data.BQL.BqlInt.Field<requisitionID> { }
#endregion

如果您的parent记录是POReceipt,您的PXParent应该是:

[PXParent(
    typeof(Select<POReceipt,
            Where<POReceipt.receiptNbr,
            Equal<Current<ThisDAC.receiptNbr>>>>)
)]

...您可以将 ThisDAC 替换为 DAC 的名称。

这将导致告诉 Acumatica ThisDAC 的 Parent 是通过 ThisDAC 的 ReceiptNbr 字段并找到具有匹配 ReceiptNbr 值的 POReceipt。此外,作为 Parent/Child 关系,这也会让 Acumatica 在删除 parent 时删除 child 记录(通过 Current 附加)。您没有将 ThisDAC 注册为 POReceipt 的 child,而是有效地要求 Acumatica 在编写时将 POReceipt 注册为自身的 child。

希望这是有道理的并有所帮助。