1
在Acumatica中,有一些情况下屏幕的DAC(例如Projects)不直接绑定到表(PMProject),但继承了绑定到表的DAC(Contract )。有没有一个很好的教学参考资料来源?创建从其他DAC继承的DAC
在Acumatica中,有一些情况下屏幕的DAC(例如Projects)不直接绑定到表(PMProject),但继承了绑定到表的DAC(Contract )。有没有一个很好的教学参考资料来源?创建从其他DAC继承的DAC
本主题部分涵盖在T200培训课程中(例9.1)。
基本原则:
如果你继承绑定到SQL表,然后DAC2也将被绑定到同一个SQL表中的DAC1一些类DAC2。
[Serializable]
public partial class DAC1 : IBQLTable
{
public abstract class tableID : PX.Data.IBqlField
{
}
[PXDBIdentity()]
public virtual Int32? TableID { get; set;}
}
[Serializable]
public partial class DAC2 : DAC1
{}
但是,来自DAC1的字段将用于生成的SQL查询中。
PXSelect<DAC2, Where<DAC2.tableID, Equal<Required<DAC2.tableID>>>(...) ->
SELECT [DAC2].[TableID] FROM DAC1 DAC2 Where [DAC1].[TableID] = @P0
为了让BQL产生与DAC2领域的SQL查询应该更换DAC2抽象类这一领域的
[Serializable]
public partial class DAC2 : DAC1
{
public new abstract class tableID : PX.Data.IBqlField
{
}
}
SQL查询将看起来像:
SELECT [DAC2].[TableID] FROM DAC1 DAC2 Where [DAC2].[TableID] = @P0
要覆盖属性你应该覆盖DAC2中的相应属性
[Serializable]
public partial class DAC2 : DAC1
{
public new abstract class tableID : PX.Data.IBqlField
{
}
[PXDBIdentity()]
[PXUIField(DisplayName = "ID")]
public override Int32? TableID {get; set;}
}
如果您希望DAC2与DAC1不同,例如您希望将某些字段添加到DAC2,但是您还希望保持DAC1未修改,则可以使用PXTable属性(例如, ARInvoice类)
[PXTable]
[Serializable]
public partial class DAC2 : DAC1
{
public new abstract class tableID : PX.Data.IBqlField
{
}
[PXDBIdentity()]
[PXUIField(DisplayName = "ID")]
public override Int32? TableID {get; set;}
public abstract class description : PX.Data.IBqlField
{
}
[PXDBString(60)]
public virtual String Description{get; set;}
}
的SQL查询将看起来像:
SELECT [DAC2].[TableID], [DAC2.Description]
FROM (SELECT [DAC1].[TableID] as TableID, [DAC2].[Description] as Description
FROM DAC1 Inner Join DAC2 on DAC1.TableID=DAC2.TableID) DAC2
Where [DAC2].[TableID] = @P0