수색…


CacheAttached를 사용하여 그래프에서 DAC 속성 무시

때로는 특정 화면에 대한 특정 데이터 액세스 클래스 (DAC) 필드의 하나 이상의 특성을 다른 화면에 대한 기존 동작을 변경하지 않고 재정의해야합니다.

모든 속성 바꾸기

원래 DAC 필드 특성이 아래와 같이 선언되었다고 가정합니다.

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

그래프의 필드 속성을 무시하는 기본 방법은 그래프 이벤트의 이름 지정을위한 표준 규칙 (EventArgs 인수 없음)에 따라 그래프에서 CacheAttached 이벤트 핸들러를 선언하는 CacheAttached 입니다. 이벤트 핸들러의 본문은 실행되지 않지만 핸들러에 배치 한 모든 속성 은 해당 DAC 필드의 속성을 대체합니다.

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

DAC 필드에 새 속성 추가

CacheAttached 핸들러에 배치 된 속성 세트 는 DAC의 필드에 배치 된 전체 속성 세트를 다시 정의합니다 . 이것은 거의 항상 잔인합니다. 앞의 예에서 필드에 단 하나의 속성을 추가하려면 DAC에서 다른 모든 속성 선언을 복사해야합니다. 이로 인해 원치 않는 코드 중복이 발생하고 DAC와 그래프가 동기화되지 않을 수 있습니다. 누군가 DAC, 예를 들어 PXDefaultAttribute 의 기본 로직을 변경하지만 CacheAttached 핸들러에 배치 된 모든 해당 속성을 다양한 그래프로 업데이트하는 것을 잊어 버린 상황을 상상하기 란 매우 쉽습니다.

이 문제를 해결하기 위해 Acumatica Framework는 PXMergeAttributesAttribute 라는 특수 특성을 제공합니다. 이 특성이 CacheAttached 처리기에 배치되면 DAC에 정의 된 기존 특성을 다시 사용할 수 있습니다.

PXMergeAttributesAttribute 사용하여 속성 추가 :

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

위의 예에서 원래 DAC의 전체 특성 집합은 CacheAttached 이벤트 처리기에서 선언 한 특성으로 추가하여 다시 사용됩니다.

PXMergeAttributesAttribute 에는 Method 속성에 대해 가능한 다음 값에 따라 다른 병합 동작이 있습니다.

  • MergeMethod.Replace 는 DAC의 특성을 완전히 대체합니다 ( PXMergeAttributesAttribute 부재와 PXMergeAttributesAttribute ).
  • MergeMethod.AppendCacheAttached 처리기의 특성을 원래 DAC 특성에 추가합니다.
  • MergeMethod.MergeAppend 와 유사합니다. 그러나 처리기 특성과 DAC 필드 특성간에 충돌하는 특성이 있는지 여부도 확인합니다. 충돌이 있으면 CacheAttached 특성이 우선하며 해당 DAC 특성은 무시됩니다.

속성의 단일 속성 재정의

매우 일반적인 응용 프로그램 개발 시나리오는 특정 화면에 대한 DAC 특성의 단일 속성을 다시 정의해야 할 때 발생합니다. PXUIFieldAttribute의 DisplayName 속성을 정의해야하는 상황을 고려하십시오.

:이를 위해, 당신은 아직 Acumatica Framework에서 제공하는 또 다른 특별한 속성 사용할 수 있습니다 PXCustomizeBaseAttributeAttribute . 생성자는 다음 세 가지 값을 허용합니다.

  • 속성을 재정의해야하는 DAC 특성 유형
  • 재정의 할 속성 속성의 이름 (코드 유지 관리를 위해 C # 6.0의 nameof 연산자 사용)
  • 지정된 property의 새로운 값입니다.

한 화면에서만 UI 표시 이름을 수수료 금액 에서 기본 통화위원회 로 변경해야한다고 가정합니다. 다음 코드 예제에서는 원하는 동작을 구현하는 방법을 보여줍니다.

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

이 예에서 PXMergeAttributes 는 원본 DAC 속성이 유지되도록하고 PXCustomizeBaseAttribute 는 소프트웨어 엔지니어가 문제의 그래프에 대한 UI 필드의 표시 이름을 무시할 수있게합니다.

속성을 다른 속성으로 바꾸기

한 화면에 대해서만 DAC 필드의 PXDefaultAttributePXDBDefaultAttributePXDefaultAttribute 는 요구 사항이 있다고 가정합니다.

이것은 다음과 같은 방식으로 달성 될 수 있습니다 :

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

특성 사용자 지정 특성의 응용 프로그램 순서

  1. PXCustomizeBaseAttribute
  2. PXRemoveBaseAttribute
  3. PXMergeAttributes


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow