acumatica
Anpassningsmekanismer
Sök…
Använda CacheAttached för att åsidosätta DAC-attribut i diagrammet
Ibland måste du åsidosätta ett eller flera attribut för ett visst Data Access Class-fält (DAC) bara för en viss skärm utan att ändra det befintliga beteendet för andra skärmar.
Byt ut alla attribut
Anta att de ursprungliga DAC-fältattributen deklareras som visas nedan:
public class ARInvoice : IBqlTable
{
[PXDBDecimal(4)]
[PXDefault(TypeCode.Decimal, "0.0")]
[PXUIField(DisplayName = "Commission Amount")]
public virtual Decimal? CommnAmt
{
get;
set;
}
}
Det grundläggande sättet att åsidosätta fältets attribut i diagrammet är att förklara en CacheAttached
händelsehanterare i diagrammet som följer standardkonventionen för att namnge grafhändelser (notera frånvaron av argumentet EventArgs). Händelseshanterarens kropp kommer inte att köras, men alla attribut som du placerar på hanteraren kommer att ersätta attributen i motsvarande DAC-fält:
[PXDBDecimal(4)]
[PXDefault(TypeCode.Decimal, "0.0")]
[PXUIField(DisplayName = "Commission Amount")]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }
Lägga till ett nytt attribut till DAC-fältet
Uppsättningen attribut som placerats på CacheAttached-hanteraren kommer att definiera hela uppsättningen attribut placerade på fältet i DAC. Detta är nästan alltid överdrivet. Lägg märke till hur man i det föregående exemplet måste kopiera alla andra attributdeklarationer från DAC för att lägga till bara ett enda attribut i fältet. Detta leder till oönskad duplicering av koden, liksom möjligheten att DAC och diagrammet går ur synk. Det är väldigt lätt att föreställa sig en situation när någon ändrar standardlogiken för till exempel PXDefaultAttribute
i DAC, men glömmer att uppdatera alla motsvarande attribut placerade på CacheAttached
hanterarna i olika grafer.
För att åtgärda detta problem ger Acumatica Framework ett speciellt attribut som heter PXMergeAttributesAttribute
. När detta attribut placeras på en CacheAttached
hanterare kan du återanvända de befintliga attributen som definierats i DAC.
Lägga till ett attribut med PXMergeAttributesAttribute
:
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }
I exemplet ovan kommer hela uppsättningen attribut från den ursprungliga DAC att återanvändas, bifogas av alla attribut som du har deklarerat på CacheAttached
händelseshanteraren.
PXMergeAttributesAttribute
har andra sammanslagningsbeteenden, enligt följande möjliga värden för Egenskapen Metod:
-
MergeMethod.Replace
ersätter DAC: s attribut fullständigt (motsvarande frånvaron avPXMergeAttributesAttribute
). -
MergeMethod.Append
lägger till attributen frånCacheAttached
hanteraren till de ursprungliga DAC-attributen. -
MergeMethod.Merge
liknarAppend
; emellertid kontrollerar det också om det finns några motstridiga attribut mellan hanteringsattribut och DAC-fältattribut. Om det finns en konflikt harCacheAttached
attributet företräde och motsvarande DAC-attribut kastas.
Att åsidosätta en enda egenskap av ett attribut
Ett mycket vanligt applikationsutvecklingsscenario uppstår när du måste omdefiniera bara en enda egenskap i en DAC: s attribut för en viss skärm; överväga situationen när du måste definiera egenskapen DisplayName
i PXUIFieldAttribute.
För det ändamålet kan du använda ännu ett specialattribut som tillhandahålls av Acumatica Framework: PXCustomizeBaseAttributeAttribute
. Dess konstruktör accepterar tre värden:
- Typen av DAC-attributet vars egendom måste åsidosättas
- Namnet på attributet egendom för att åsidosätta (använd
nameof
operatören i C # 6.0 för kod underhåll) - Det nya värdet för den angivna egenskapen.
Anta att det finns ett krav att ändra användargränssnittets visningsnamn från kommissionens belopp till basvalutakommission för endast en skärm. Följande kodexempel visar hur man implementerar önskat beteende.
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXCustomizeBaseAttribute(typeof(PXUIFieldAttribute), nameof(PXUIFieldAttribute.DisplayName), "Base Currency Commission")]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }
I det här exemplet säkerställer PXMergeAttributes
att de ursprungliga DAC-attributen bevaras, och PXCustomizeBaseAttribute
gör att programvaruingenjören kan åsidosätta UI-fältets visningsnamn för grafen i fråga.
Byta ut ett attribut med ett annat attribut
Anta att det finns ett krav att ersätta ett DAC-fältets PXDefaultAttribute
med PXDBDefaultAttribute
för endast en skärm.
Detta kan uppnås på följande sätt:
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXRemoveBaseAttribute(typeof(PXDefaultAttribute))]
[PXDBDefault(typeof(SOShipment.siteID), PersistingCheck = PXPersistingCheck.Nothing)]
protected void SOOrderShipment_SiteID_CacheAttached(PXCache sender) { }
Applikationsordning för attribut-anpassningsattribut
-
PXCustomizeBaseAttribute
-
PXRemoveBaseAttribute
-
PXMergeAttributes