2010-02-25 5 views
1

또 다른 질문입니다.SharePoint ItemAdded 이벤트 지연

이제 EventReceiver와 로직이 잘 작동합니다. 한가지를 제외하고.

기본적으로는 CAML 쿼리를 통해 전체 목록을 조회 한 다음 DataTable 개체에 결과를 전달하고 이후에 DataRow 개체에 ... 모든처럼

, 테스트 환경에서, 그것은 완벽하게 작동하지만, 생산 중 ...

업데이트가 필요한 열은 업데이트되지만 즉시 표시되지 않습니다. 항목 열은 내가 원하는 값을 받지만 처음 새로 고침시 표시되지 않습니다. 페이지를 새로 고침하면 다시 나타납니다.

유일한 차이점은 teste env입니다. 내 목록에는 200 개의 레코드가 있고 프로덕션에는 거의 5000 개의 레코드가 있습니다.

몇 가지 질문 :

  • 당신이 원하는 얼마나 많은 레코드를 정의하는 방법이 있나요? CAML 또는 DataTable 개체에서? "SELECT TOP 100 ..."과 같은 것
  • 그렇지 않은 경우 새로 고침 프로세스를 중지하고 코드 실행을 기다리는 방법이 있습니까?

일부 정보 :

  • 는 WSS 3.0, 그리고 내가 차단하고있어 이벤트가 내 코드를 기다리지 않고 새로 고침을 설명 ItemAdded이다.

아, 그리고 항목 항목이 커밋되지 않아 ItemAdding에서 아직 사용할 수없는 레코드의 ID를 캡처해야하기 때문에 ItemAdding 이벤트로 변경하는 것을 고려해보십시오. 아직 데이터베이스가 없습니다.

미리 감사드립니다.

답변

1

많은 것을 검색 한 후 코드가 동기식이며 SharePoint가 페이지를로드하기 전에 실행을 완료하는 ItemAdding 이벤트로 코드를 이동했습니다.

결과 행을 5로 제한 한 후에도 표시하려는 값이없는 페이지가 계속로드됩니다. 또한


당신이 계산 된 값을 사용하고, 거기에 수식을 가진 필드의 값을 캡처 고려하는 경우 적어도 내 예, SharePoint에서 이벤트로 공식을 해결하지 않았기 때문에,주의 실행되므로 계산 된 값이있는 필드는 항상 null을 반환합니다.

1

유사 질문과 대답 here. SPQuery의 Rowlimit 속성을 사용할 수 있어야합니다.

2

여기에서 문제는 "GetDataTable()"메서드입니다. CAML 쿼리를 실행하고 데이터 테이블에 결과를 채우면 수정 자에 의한 주문이 손실됩니다. 그러나 SPListItemCollection 개체를 사용하여 결과를 얻으면 정확히 원하는 행을 반환합니다.

다른 게시물에서 볼 수 있듯이 ... "이것은 불쾌한 문제입니다."

관련 문제