본문 바로가기

SharePoint/SharePoint 개발

Client Object Model 을 이용한 데이터 이관

Client Object Model 을 이용하여 (ShaPoint 목록 데이터)A 를 (ShaPoint 목록)B 으로 이관합니다.


A 와 B 가 필드가 같고 같은 사이트에 목록이 있을 경우 입니다.

using JohnHolliday.Caml.Net - CAML 쿼리를 사용하기위해서 입니다.

using SP = Microsoft.SharePoint.Client;


string orderBy = string.Empty;

string viewFields = string.Empty;

using (SP.ClientContext ClientCon = new SP.ClientContext("http://mysite"))

{

    SP.Web site = ClientCon.Web;

    NetworkCredential Credential = new NetworkCredential(Admin, Password, Domain);

    ClientCon.Credentials = Credential;

    SP.List list = site.Lists.GetByTitle("mylist");

    SP.List addlist = site.Lists.GetByTitle("myaddlist");


    //데이터를 새로 저장하기 위하여 선언

    SP.ListItemCreationInformation Creationinfo = new SP.ListItemCreationInformation();

    

    ClientCon.Load(list);

    ClientCon.Load(addlist);                

    ClientCon.ExecuteQuery();


    //옮길 목록의 필드 컬렉션을 선언                

    SP.FieldCollection fields = list.Fields;

    ClientCon.Load(fields);

    ClientCon.ExecuteQuery();

    

    SP.CamlQuery spcaml = new SP.CamlQuery();

    orderBy = CAML.OrderBy(CAML.FieldRef("Created", CAML.SortType.Ascending));

    spcaml.ViewXml = "<View Scope=\"Recursive\"><Query>" + orderBy + "</Query><RowLimit>" + list.ItemCount + "</RowLimit></View>";

    SP.ListItemCollection items = list.GetItems(spcaml);


    foreach (Microsoft.SharePoint.Client.ListItem item in items)

    {

        Microsoft.SharePoint.Client.ListItem additem = list.AddItem(Creationinfo);

        foreach (Microsoft.SharePoint.Client.Field field in fields)

        {

      //ReadOnlyField 필드에도 데이터를 이관 하고 싶을때는

     //field.ReadOnlyField = False; 주고 

     //데이터를 담은 다음 field.ReadOnlyField = True;  바꿔준다

            if (!field.ReadOnlyField)

            {                 

                  additem[field.StaticName] = item[field.StaticName];

             }            

        }

        additem.Update();

        ClientCon.ExecuteQuery();     

    }

}