Suche…


Verwenden von CacheAttached zum Überschreiben von DAC-Attributen im Diagramm

Manchmal müssen Sie ein oder mehrere Attribute eines bestimmten DAC-Felds (Data Access Class) nur für einen bestimmten Bildschirm überschreiben, ohne das vorhandene Verhalten für andere Bildschirme zu ändern.

Alle Attribute ersetzen

Angenommen, die ursprünglichen DAC-Feldattribute werden wie folgt deklariert:

public class ARInvoice : IBqlTable
{
    [PXDBDecimal(4)]
    [PXDefault(TypeCode.Decimal, "0.0")]
    [PXUIField(DisplayName = "Commission Amount")]
    public virtual Decimal? CommnAmt 
    { 
        get; 
        set; 
    }
}

Die grundlegende Möglichkeit, die Attribute des Felds im Diagramm zu überschreiben, besteht darin, einen CacheAttached Ereignishandler in dem Diagramm zu deklarieren, das der Standardkonvention für die Benennung von Diagrammereignissen folgt (beachten Sie das Fehlen des Arguments EventArgs). Der Body des Event-Handlers wird nicht ausgeführt, aber alle Attribute , die Sie im Handler platzieren, ersetzen die Attribute im entsprechenden DAC-Feld:

[PXDBDecimal(4)]
[PXDefault(TypeCode.Decimal, "0.0")]
[PXUIField(DisplayName = "Commission Amount")]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

Anhängen eines neuen Attributs an das DAC-Feld

Die im CacheAttached-Handler platzierten Attribute werden die gesamte Attributgruppe des DAC neu definiert. Das ist fast immer übertrieben. Beachten Sie, wie Sie im vorherigen Beispiel alle anderen Attributdeklarationen aus dem DAC kopieren mussten, um dem Feld nur ein einzelnes Attribut hinzuzufügen. Dies führt zu unerwünschter Code-Duplizierung sowie der Möglichkeit, dass DAC und der Graph aus dem Takt geraten. Es ist sehr leicht, sich eine Situation vorzustellen, in der jemand die PXDefaultAttribute von beispielsweise PXDefaultAttribute im DAC PXDefaultAttribute , aber vergisst, alle entsprechenden Attribute zu aktualisieren, die in den verschiedenen CacheAttached in verschiedenen Diagrammen platziert sind.

Um dieses Problem zu beheben, bietet das Acumatica Framework ein spezielles Attribut namens PXMergeAttributesAttribute . Wenn dieses Attribut in einem CacheAttached Handler CacheAttached , können Sie die vorhandenen Attribute, die im DAC definiert sind, wiederverwenden.

Anhängen eines Attributs mit PXMergeAttributesAttribute :

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

Im obigen Beispiel wird der gesamte Satz von Attributen aus dem ursprünglichen DAC wiederverwendet und von allen Attributen angehängt, die Sie für den CacheAttached Ereignishandler angegeben haben.

PXMergeAttributesAttribute verfügt gemäß den folgenden möglichen Werten für die Method-Eigenschaft über anderes Zusammenführungsverhalten:

  • MergeMethod.Replace ersetzt die Attribute des DAC vollständig (entspricht dem Fehlen von PXMergeAttributesAttribute ).
  • MergeMethod.Append hängt die Attribute des CacheAttached an die ursprünglichen DAC-Attribute an.
  • MergeMethod.Merge ähnelt Append ; Er prüft jedoch auch, ob widersprüchliche Attribute zwischen den Handlerattributen und den DAC-Feldattributen vorliegen. Wenn ein Konflikt CacheAttached , hat das CacheAttached Attribut Vorrang und das entsprechende DAC-Attribut wird verworfen.

Überschreiben einer einzelnen Eigenschaft eines Attributs

Ein sehr häufiges Anwendungsentwicklungsszenario tritt auf, wenn Sie nur eine einzelne Eigenschaft eines DAC-Attributs für einen bestimmten Bildschirm neu definieren müssen. Berücksichtigen Sie die Situation, wenn Sie die DisplayName Eigenschaft des PXUIFieldAttribute definieren müssen.

Zu diesem Zweck können Sie ein weiteres spezielles Attribut verwenden, das vom Acumatica Framework bereitgestellt wird: PXCustomizeBaseAttributeAttribute . Sein Konstruktor akzeptiert drei Werte:

  • Der Typ des DAC-Attributs, dessen Eigenschaft überschrieben werden muss
  • Der Name der zu überschreibenden Eigenschaft des Attributs (verwenden Sie den Operator nameof in C # 6.0, um die nameof )
  • Der neue Wert für die angegebene Eigenschaft.

Nehmen wir an, dass es eine Anforderung ist die UI - Anzeigename von Kommission Betrag an Basiswährung Kommission für nur einen Bildschirm zu ändern. Das folgende Codebeispiel veranschaulicht, wie das gewünschte Verhalten implementiert wird.

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXCustomizeBaseAttribute(typeof(PXUIFieldAttribute), nameof(PXUIFieldAttribute.DisplayName), "Base Currency Commission")]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

In diesem Beispiel stellt PXMergeAttributes sicher, dass die ursprünglichen DAC-Attribute beibehalten werden. Mit PXCustomizeBaseAttribute kann der Software-Ingenieur den Anzeigenamen des UI-Felds für das betreffende Diagramm überschreiben.

Ein Attribut durch ein anderes Attribut ersetzen

Angenommen, es besteht die Notwendigkeit, das PXDefaultAttribute eines DAC- PXDefaultAttribute durch PXDBDefaultAttribute für nur einen Bildschirm zu ersetzen.

Dies kann auf folgende Weise erreicht werden:

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXRemoveBaseAttribute(typeof(PXDefaultAttribute))]
[PXDBDefault(typeof(SOShipment.siteID), PersistingCheck = PXPersistingCheck.Nothing)]
protected void SOOrderShipment_SiteID_CacheAttached(PXCache sender) { }

Anwendungsreihenfolge der Attribute-Customizing-Attribute

  1. PXCustomizeBaseAttribute
  2. PXRemoveBaseAttribute
  3. PXMergeAttributes


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow