"이벤트 핸들러에서 데이터베이스에 변경 사항을 저장할 수 없음"을 해결하는 방법은 무엇입니까?

브라이언 스티븐스

POLine이 생성되거나 삭제 될 때 POOrderEntry에서 PO 라인을 시작하는 사용자 지정 DAC에 대한 참조를 다시 푸시해야합니다. 예를 들어, PO 라인이 삭제되면 내 사용자 지정 DAC는 다음을 통해 Events.RowDeleted에서 참조가 제거됩니다.

using (PXTransactionScope ts = new PXTransactionScope())
{
    Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pOType>(row, null);
    Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pONbr>(row, null);
    Base.Caches[typeof(MyDAC)].SetValueExt<MyDAC.pOLineNbr>(row, null);
    Base.Caches[typeof(MyDAC)].Update(row);
    Base.Caches[typeof(MyDAC)].Persist(PXDBOperation.Update);
    ts.Complete(Base);
}

나는 일반 Persist가 값을 저장하도록 허용하려고 시도했지만 Persist (위의 예의 마지막 줄)를 호출하지 않는 한 그렇지 않습니다. 결과는 Acuminator를 통해 "이벤트 핸들러에서 데이터베이스에 변경 사항을 저장할 수 없습니다"라는 오류가 발생합니다. 이걸 보면 Transaction Scope가 아닌 Long Operation인지 궁금하지만 Acuminator의 오류는 내가 잘못하고 있다고 알려줍니다. 각 PO 라인에 대해 "MyDAC"로 다시 업데이트하는 적절한 방법은 무엇입니까?

또한 MyDAC의 그래프에 대한 그래프 인스턴스 초기화를 시도했지만 이벤트 핸들러에서 PXGraph를 생성하는 것에 대한 경고가 표시되어 MyDAC가 유지되는 그래프를 "합법적으로"호출 할 수 없습니다.

내 코드는 원하는대로 컴파일되고 작동하지만 Acuminator의 오류는이를 수행하는 더 적절한 방법이 있어야한다고 알려줍니다.

Brendan

그래프 확장에보기를 추가 할 수 있습니다.

그런 다음 삭제 된 행에서 view.Update (row)를 사용하여 사용자 지정 dac를 업데이트합니다.

기본 그래프가 지속되는 동안 다른 이벤트에서 다른 오류가 발견되지 않는 한 레코드가 커밋됩니다.

현재 가지고있는 방식은 삭제중인 행이 삭제되지 않을 가능성과 함께 변경 사항을 커밋합니다.

또한이 변경으로 PXTransactionScope를 사용할 필요가 없습니다.

예를 들면 다음과 같습니다.

public class POOrderEntryExtension : PXGraphExtension<POOrderEntry>
{
    public PXSelect<MyDac> MyView;

    protected virtual void _(Events.RowDeleted<POLine> e)
    {
        //get your row to update from e.Row
        var myRow = PXSelect...

        myRow.pOType = null;
        myRow.pONbr = null;
        myRow.pOLineNbr = null;

        MyView.Update(myRow);
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관