2016-06-09 14 views
1

In Acumatica gibt es Fälle, in denen ein DAC für einen Bildschirm (zB Projects) nicht direkt an eine Tabelle (PMProject) gebunden ist, sondern einen DAC erbt, der an eine Tabelle gebunden ist). Gibt es dafür eine gute Referenzquelle?Erstellen von DAC, der von anderen DAC erbt

Antwort

3

Dieses Thema wird teilweise im T200 Training (Beispiel 9.1) behandelt.

Grundprinzipien:

Wenn Sie einige Klasse DAC2 vom DAC1 geerbt an die SQL-Tabelle gebunden dann DAC2 wird auch auf die gleiche SQL-Tabelle gebunden.

[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 
{} 

Die Felder von DAC1 werden jedoch in der generierten SQL-Abfrage verwendet.

PXSelect<DAC2, Where<DAC2.tableID, Equal<Required<DAC2.tableID>>>(...) -> 
SELECT [DAC2].[TableID] FROM DAC1 DAC2 Where [DAC1].[TableID] = @P0 

Damit BQL SQL-Abfragen mit DAC2 Feld erzeugen Sie

[Serializable] 
public partial class DAC2 : DAC1 
{ 
    public new abstract class tableID : PX.Data.IBqlField 
    { 
    } 
} 

SQL-Abfrage wie das aussehen wird abstrakte Klasse dieses Feldes in DAC2 ersetzen sollte:

SELECT [DAC2].[TableID] FROM DAC1 DAC2 Where [DAC2].[TableID] = @P0 

außer Kraft zu setzen Attribute des Feldes sollten Sie die entsprechende Eigenschaft in 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;} 
} 
überschreiben

Wenn Sie möchten, dass DAC2 sich von DAC1 unterscheidet, wenn Sie beispielsweise einige Felder zu DAC2 hinzufügen möchten, aber DAC1 auch unverändert beibehalten möchten, können Sie das PXTable-Attribut (z. B. ARInvoice Klasse)

[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;} 
} 

Die SQL-Abfrage so aussehen:

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 
Verwandte Themen