SharePoint 멀티 사용자 필드 문자열을 스퍼서 배열로 변환하는 것이 가장 좋습니까?

StackOverflow https://stackoverflow.com/questions/404024

  •  03-07-2019
  •  | 
  •  

문제

SharePoint 목록에 대한 ItemAdding 핸들러를 작성하고 있으며이 목록에는 다중 사용자 필드가 포함되어 있습니다. 이 시점에서 Spitem은 실제로 사용할 수 없기 때문에 SpitemeventDatacollection에서 돌아 오는 문자열을 사용하는 것으로 강등된다고 생각합니다. 이 문자열은 user1, user2 및 user3가있을 때 다음과 같이 보입니다.

1; #MyDomain user1;#4; #MyDomain user2;#10; #MyDomain user3

다른 기존 방법으로 전달하기 위해 이것을 스퍼서 객체 배열로 변환하고 싶습니다. 이러한 문자열을 처리 할 수있는 SharePoint 내장 방법이 있습니까? 아니면이 문자열을 구문 분석 할 수 있습니까?

또한이 문자열을 처리해야한다고 가정하면 여기서 정수 토큰이 항상 다음 도메인 사용자 이름에 해당하는 것처럼 보입니다. 이것이 사실이 아닌 경우와 정수 또는 도메인 사용자 이름이 누락되었거나 잘못된 경우가 있습니까? 숫자를 사용하고 spweb의 siteusers.getByid (ID) 메소드를 사용하는 것이 안전합니까? 소수의 테스트에서는 실패 할 수는 없지만 숫자와 문자열 데이터가 완전히 중복되면 모두 포함되는 것이 이상해 보입니다.

감사!

도움이 되었습니까?

해결책

Spfielduservaluecollection은 당신이 찾고있는 것을 정확하게 수행합니다. 생성자는 SPWEB 및 STRING을 수용합니다. 컬렉션의 SPFIELDUSERVALUE 항목은 웹의 해당 스퍼서 객체를 반환하는 사용자 속성을 제공합니다.

private void ProcessUsers(SPListItem item, string fieldName)
{
  string fieldValue = item[fieldName] as string;
  SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue);

  foreach(SPFieldUserValue uv in users)
  {
    SPUser user = uv.User;
    // Process user
  }
}

SPFIELDUSER 유형은 표준 SPFIELDLOOKUP의 동작을 상속합니다. 여기에는 ID와 제목을 모두 저장하고 해당 SPFIELDLOOKUPVALUECOLLECTION이 있습니다. ID는 (약한) 참조 무결성을 지원하는 반면 캐시 된 값은 빠른 쿼리를 허용합니다.

다른 팁

이것은 사용자 필드에서 SPSUSER를 얻는 데 효과적입니다. 이벤트 데이터에서 추출하는 것과 동일해야합니다. : : : : : : :

private SPUser getGroup(SPListItem item, string fieldName)
        {
            string fieldValue = item[fieldName] as string;
            if (string.IsNullOrEmpty(fieldValue)) return null;
            int id = int.Parse(fieldValue.Split(';')[0]);
            SPUser user = item.Web.AllUsers.GetByID(id);
            return user;
        }

정수는 로컬 SPWEBS의 사용자 데이터베이스에서 사용자의 ID를 나타냅니다. 그러나 동기화되지 않으므로 목록 항목이 저장되었으므로 사용자 데이터베이스에서 사용자를 삭제했을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top