2008-12-31 26 views
9

Tôi đang viết một trình xử lý ItemAdding cho danh sách SharePoint và danh sách chứa các trường nhiều người dùng. Vì SPItem không thực sự có sẵn tại thời điểm này, tôi nghĩ rằng tôi đang xuống hạng bằng cách sử dụng chuỗi quay trở lại từ SPItemEventDataCollection. chuỗi đó sẽ giống như thế này khi user1, user2, và User3 có mặt:Cách tốt nhất để chuyển đổi chuỗi trường nhiều người dùng SharePoint thành một mảng SPUsers?

1; #MYDOMAIN \ user1; # 4; #MYDOMAIN \ user2; # 10; #MYDOMAIN \ User3

Tôi muốn muốn chuyển đổi nó thành một mảng các đối tượng SPUser để truyền nó vào một phương thức khác. Có cách nào được tích hợp sẵn trong SharePoint để xử lý các chuỗi này hay không, tôi có bị xuống hạng để phân tích cú pháp chuỗi này không?

Ngoài ra, giả sử tôi cần xử lý chuỗi này, có vẻ như mã thông báo số nguyên ở đây luôn tương ứng với tên miền \ tên người dùng sau. Có bất kỳ trường hợp nào điều này sẽ không đúng và hoặc là số nguyên hoặc tên miền \ tên người dùng bị thiếu hoặc không chính xác? Nó sẽ được an toàn để chỉ sử dụng các con số và sử dụng phương pháp SiteUsers.GetByID (id) của SPWeb? Trong một số ít các bài kiểm tra tôi không thể làm được điều đó để thất bại, nhưng có vẻ lạ rằng cả dữ liệu số và chuỗi sẽ được đưa vào nếu chúng hoàn toàn thừa.

Cảm ơn!

+1

Và đây là lý do tại sao tôi không thích phát triển SharePoint ... nó giống như mọi người đơn giản * quên nghĩ *. –

Trả lời

16

SPFieldUserValueCollection thực hiện chính xác những gì bạn đang tìm kiếm. Constructor của nó chấp nhận một SPWeb và chuỗi người dùng. Các mục SPFieldUserValue trong bộ sưu tập cung cấp một thuộc tính User trả về các đối tượng SPUser tương ứng cho web.

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 
    } 
} 

Loại SPFieldUser thừa hưởng hành vi của nó từ SPFieldLookup tiêu chuẩn, mà cũng lưu trữ cả ID và chức vụ và có một SPFieldLookupValueCollection tương ứng. ID hỗ trợ tính toàn vẹn tham chiếu (yếu) trong khi Giá trị được lưu trong bộ nhớ cache cho phép truy vấn nhanh.

0

này làm việc cho tôi nhận được một SPSuser từ một lĩnh vực sử dụng Nó sẽ được điều tương tự cho giải nén nó từ dữ liệu sự kiện .:

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; 
     } 

Các nguyên đề cập đến id của người sử dụng trong sử dụng các SPWebs địa phương cơ sở dữ liệu. Tuy nhiên, điều này không được đồng bộ hóa, vì vậy người dùng có thể đã bị xóa khỏi cơ sở dữ liệu người dùng vì mục danh sách đã được lưu.

+0

Cảm ơn. Tôi về cơ bản đã kết thúc lên tuyến đường này, nhưng với nếp nhăn thêm rằng có khả năng nhiều người dùng trong giá trị của trường. Một điều kỳ lạ là với một người dùng duy nhất trong trường của tôi, chỉ có giá trị số trong trường thay vì ";" - giá trị được phân tách. Dường như vẫn hoạt động. –

Các vấn đề liên quan