KIẾN THỨC LẬP TRÌNH
...
Về chúng tôi
|
|
Copy cấu trúc danh sách giữa 2 site trong sharepoint
Khi làm việc với cơ sở dữ liệu của sharepoint, đôi khi chúng ta phải đồng bộ dữ liệu giữa 2 site và sau đây là giải pháp cho vấn đề này:
private SPList SyncList(string strListName) { // Instantiate web instances SPSite sourceSite = new SPSite(@"http://nkso:8089"); SPWeb sourceWeb = sourceSite.OpenWeb(); SPSite destSite = new SPSite(@"http://nkso:80"); SPWeb destWeb = destSite.OpenWeb();
// Get a reference to the source list SPList sourceList = sourceWeb.Lists[strListName];
// if the list exists on the destination site, return destWeb.AllowUnsafeUpdates = true; try { SPList temp = destWeb.Lists[sourceList.Title]; //destWeb.Lists.Delete(temp.ID); return null; } catch { } // create new list on the destination web with same properties Guid newListID = destWeb.Lists.Add(sourceList.Title, sourceList.Description, sourceList.BaseTemplate); SPList destList = destWeb.Lists[newListID]; //copy all field foreach (SPField field in sourceList.Fields) { try { if (!field.ReadOnlyField && field.StaticName != "Title" && field.StaticName != "Order" && field.StaticName != "Attachments" && field.StaticName != "FileLeafRef" && field.StaticName != "MetaInfo"&& field.StaticName != "_SourceUrl" && field.StaticName != "_SharedFileIndex" && field.StaticName != "PreviewOnForm" && field.StaticName != "FileType" && field.StaticName != "ImageSize"&& field.StaticName != "ImageCreateDate" && field.StaticName != "Description" && field.StaticName != "Keywords" && field.StaticName != "URL" && field.StaticName != "Comments") { if (field.Type != SPFieldType.Lookup) { //destList.Fields.Add(field.StaticName, field.Type, field.Required); destList.Fields.Add(field); } else { SPFieldLookup fieldL = (SPFieldLookup)field; SPList destListTmp = sourceWeb.Lists[new Guid(fieldL.LookupList)]; SPList tmpList = null; try { tmpList = destWeb.Lists[destListTmp.Title]; } catch { tmpList=SyncList(destListTmp.Title); //tmpList = destWeb.Lists[destListTmp.Title]; } destList.Fields.AddLookup(field.StaticName, tmpList.ID, field.Required); //only update when field is lookup type destList.Fields[field.StaticName].Title = field.Title; destList.Fields[field.StaticName].Update(); }
destList.Update(); } else { } } catch (Exception ex) { Response.Write(field.StaticName + "---" + strListName + "</br>"); } } // set quicklaunch settings destList.OnQuickLaunch = sourceList.OnQuickLaunch; destList.Update(); destWeb.AllowUnsafeUpdates = false;
return destList; } Lưu ý rằng: Khi chúng ta muốn chạy tự động để đồng bộ toàn bộ cấu trúc DB thì cần phải lấy được danh sách các sourcelist trước, sau đó dùng hàm đệ qui nói trên. Chúc các bạn thành công!
BÀI VIẾT LIÊN QUAN
|