KIẾN THỨC LẬP TRÌNH

.NET, C++...
Sharepoint
Thiết kế web
Marketing Online
...

Về chúng tôi

THANHNAM SOFTWARE bao gồm đội ngũ các chuyên gia trong lĩnh vực công nghệ thông tin.
Làm việc chuyên nghiệp, có nhiều kinh nghiệm triển khai các dự án trong và ngoài nước:
Tư vấn-triển khai giải pháp EOFFICE, ERP
Xây dựng phần mềm
Thiết kế wesite
Marketing online...

Chúng tôi luôn vì sự hài lòng của khách hàng, mang tới cho quý khách hàng những dịch vụ và sẩn phẩm chất lượng nhất!
 

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