понедельник, 12 июля 2010 г.

SharePoint 2010 CSOM: How to set MultiLookUp field values

Господа из микрософта почему то не оттопырили в клиентской модели тип SPFieldLookupValueCollection, и я уж было подумал что установить множество значении для таких полей используя клиентскую модель нельзя. Но великий рефлектор показал мне в серверной модели вот такое вот объявление:

  1. [Serializable, SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true), SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel=true)]
  2. public class SPFieldLookupValueCollection : List<SPFieldLookupValue>, ISerializable
  3. {
  4.     // Fields
  5.     private const string delimiter = ";#";
  6.  
  7.     // Methods
  8.     public SPFieldLookupValueCollection();
  9.     public SPFieldLookupValueCollection(string fieldValue);
  10.     protected SPFieldLookupValueCollection(SerializationInfo info, StreamingContext context);
  11.     [SharePointPermission(SecurityAction.Demand, ObjectModel=true), SecurityPermission(SecurityAction.Demand, SerializationFormatter=true)]
  12.     public virtual void GetObjectData(SerializationInfo info, StreamingContext context);
  13.     [SharePointPermission(SecurityAction.Demand, ObjectModel=true)]
  14.     public override string ToString();
  15. }
  16.  
  17.  

Ну я и подумал что прокатит самодельный лист из FieldLookupValue и это работает.

  1. using (var clientContext = new ClientContext(@"http://server"))
  2. {
  3.     var web = clientContext.Web;
  4.     var lst = web.Lists.GetByTitle("LookUp1");
  5.  
  6.     var fld = lst.Fields.GetByInternalNameOrTitle("TiListField");
  7.     clientContext.Load(fld, f => f.SchemaXml);
  8.     clientContext.ExecuteQuery();
  9.  
  10.     var lci = new ListItemCreationInformation();
  11.  
  12.     lci.FolderUrl = @"/Lists/LookUp1";
  13.     lci.UnderlyingObjectType = FileSystemObjectType.File;
  14.  
  15.     List<FieldLookupValue> vals = new List<FieldLookupValue>();
  16.  
  17.     var l1 = new FieldLookupValue();
  18.     l1.LookupId = 1;
  19.     vals.Add(l1);
  20.     var l2 = new FieldLookupValue();
  21.     l2.LookupId = 2;
  22.     vals.Add(l2);
  23.     var l3 = new FieldLookupValue();
  24.     l3.LookupId = 3;
  25.     vals.Add(l3);
  26.  
  27.     var item = lst.AddItem(lci);
  28.  
  29.     item["Title"] = "test";
  30.     item["TiListField"] = vals;
  31.     item.Update();
  32.     clientContext.Load(item);
  33.     clientContext.ExecuteQuery();
  34. }
  35.  

Комментариев нет: