2008-12-31 23 views
9

Bir SharePoint listesi için ItemAdding işleyicisi yazıyorum ve çok kullanıcılı alanlar içeren liste. SPItem aslında bu noktada kullanılabilir olmadığından, SPItemEventDataCollection öğesinden gelen dizeyi kullanmaya son veriyorum. #MYDOMAIN \ kullanıcı1;; # 4; #MYDOMAIN \ kullanici2; # 10; #MYDOMAIN \ ı ediyorum SharePoint çok kullanıcılı bir alan dizesini bir dizi SPU'ya dönüştürmek için en iyi yöntem nedir?

kullanici3

1: kullanıcı1, kullanıcı2 ve kullanıcı3 mevcut olduğunda bu dize bu gibi bir şey olacaktır bunu başka bir mevcut yönteme aktarmak için bir SPUser nesnesi dizisine dönüştürmeyi sever. Bu dizeleri işlemek için herhangi bir SharePoint yerleşik yolu var mı, yoksa bu dizeyi ayrıştırmak için ayrılmış mıyım?

Ayrıca, bu dizeyle uğraşmam gerektiğini varsayarsak, burada tamsayı jetonları her zaman izleyen etki alanı \ kullanıcı adına karşılık gelir. Bunun doğru olmayacağı ve tamsayı veya etki alanı \ kullanıcı adı eksik veya başka türlü yanlış olan durumlar var mı? Sadece sayıları kullanmak ve SPWeb'nin SiteUsers.GetByID (id) yöntemini kullanmak güvenli midir? Bir avuç testte, bunu başarısızlığa uğratamam ama, sayısal ve dize verilerinin tamamen yedeklendikleri sürece dahil edilmesi tuhaf görünüyor.

Teşekkürler!

+1

Ve bu yüzden SharePoint geliştirmesinden hoşlanmıyorum ... sadece insanlar gibi düşünmeyi unuttum *. –

cevap

16

SPFieldUserValueCollection tam olarak aradığınız şeyi yapar. Yapıcısı bir SPWeb ve kullanıcı dizisini kabul eder. Koleksiyondaki SPFieldUserValue öğeleri, web için karşılık gelen SPUser nesnelerini döndüren bir Kullanıcı özelliği sağlar.

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 tipi standart, her iki ID depolayan SPFieldLookup ve Başlıktan davranışını devralır ve karşılık gelen bir SPFieldLookupValueCollection sahiptir. Önbelleğe alınan Değer hızlı sorgular için izin verirken ID (zayıf) referans bütünlüğünü destekler.

0

Bu olay verilerinin .: onu çıkarmak için aynı şey olması gereken bir kullanıcı alanından bir SPSuser almak benim için çalışıyor

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

tamsayı yerel SPWebs en kullanıcı kullanıcının kimliği ifade eder veri tabanı. Bu ancak senkronize edilmemiştir, bu yüzden kullanıcı listesi kaydedildiği için kullanıcı kullanıcı veritabanından silinmiş olabilir.

+0

Teşekkürler. Temel olarak bu rotayı aldım ama eklenen kırışıklık ile alanın değerinde potansiyel olarak birden fazla kullanıcı var. Bir garip şey, benim alanımdaki tek bir kullanıcı ile, alandaki sayısal değerin ";" - sınırlanmış değerden ziyade olmasıdır. Hala çalışıyor gibi görünüyor. –

İlgili konular