acumatica
Anpassungsmechanismen
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 vonPXMergeAttributesAttribute
). -
MergeMethod.Append
hängt die Attribute desCacheAttached
an die ursprünglichen DAC-Attribute an. -
MergeMethod.Merge
ähneltAppend
; Er prüft jedoch auch, ob widersprüchliche Attribute zwischen den Handlerattributen und den DAC-Feldattributen vorliegen. Wenn ein KonfliktCacheAttached
, hat dasCacheAttached
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 dienameof
) - 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
-
PXCustomizeBaseAttribute
-
PXRemoveBaseAttribute
-
PXMergeAttributes