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의 오류는이를 수행하는 더 적절한 방법이 있어야한다고 알려줍니다.
그래프 확장에보기를 추가 할 수 있습니다.
그런 다음 삭제 된 행에서 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] 삭제
몇 마디 만하겠습니다