2008-09-17 33 views
6

Tôi có một danh sách có 2 trường văn bản và một trường lựa chọn. Làm cách nào để sử dụng dịch vụ web Lists.asmx để chèn một mục mới? Tôi có thể tạo một tham chiếu web tới dịch vụ lists.asmx, vì vậy bạn có thể giả định rằng điều này được biết.SharePoint - Cách chèn các mục mới bằng cách sử dụng dịch vụ web danh sách?

Tôi muốn có một ví dụ hoàn chỉnh bao gồm mã và XML cho truy vấn CAML. Lý tưởng nhất là mẫu sẽ sử dụng C#.

Trả lời

16

Sử dụng dịch vụ web Danh sách để chèn mục vào danh sách SharePoint thực sự có thể phức tạp. Vì phương thức này có dạng: XML trong, XML ra, có thể khó có được các tham số đúng.

Trước tiên, bạn nên xem định nghĩa danh sách. Nó có thể được lấy ra với phương thức GetList(), như hình dưới đây:

XmlNode listXml = sharePointLists.GetList(listName); 
File.WriteAllText("listdefinition.xml", listXml.OuterXml); 

Quan trọng ở đây là tên của các trường và kiểu dữ liệu của chúng. Tên trường sẽ không bao giờ giống với tên bạn thấy trong GUI SharePoint. Một ví dụ điển hình là trường Tiêu đề được sử dụng cho trường đầu tiên của danh sách.

Bây giờ bạn đã biết rằng, bạn có thể tạo truy vấn để chuyển đến SharePoint. Ví dụ:

<Batch OnError="Continue"> 
    <Method ID="1" Cmd="New"> 
     <Field Name="Title">Abcdef</Field> 
     <Field Name="Project_x0020_code">999050</Field> 
     <Field Name="Status">Open</Field>  
    </Method> 
</Batch> 

Phần tử lô là phần tử gốc của XML. Bên trong bạn có thể đặt các phương thức khác nhau. Các ID này sẽ nhận được một ID duy nhất (được sử dụng để báo cáo lỗi cho bạn) và một lệnh, có thể là "Mới" hoặc "Cập nhật". Bên trong phương thức, bạn đặt các phần tử trường xác định giá trị cho mỗi trường. Ví dụ, trường Tiêu đề nhận giá trị "Abcdef". Hãy cẩn thận để sử dụng tên chính xác vì nó được trả về bởi GetList().

Để thực hiện truy vấn trên SharePoint, sử dụng UpdateListItems() phương pháp:

XmlNode result = sharePointLists.UpdateListItems(listDefinition.Name, updates); 

Giá trị trả về là một đoạn XML chứa trạng thái của mỗi lần cập nhật. Ví dụ:

<Results xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <Result ID="1,New"> 
    <ErrorCode>0x00000000</ErrorCode> 
    <z:row ows_ContentTypeId="0x010036F3F587127F1A44B8BA3FEFED4733C6" 
     ows_Title="Abcdef" 
     ows_Project_x0020_code="999050" 
     ows_Status="Open" 
     ows_LinkTitleNoMenu="Abcdef" 
     ows_LinkTitle="Abcdef" 
     ows_ID="1005"    
     ... 
     xmlns:z="#RowsetSchema" /> 
    </Result> 
</Results> 

Bạn có thể phân tích cú pháp này và xem Mã lỗi để xem phương pháp nào không thành công.

Trong thực tế, tôi đã tạo ra một lớp bao bọc mà sẽ chăm sóc của tất cả các chi tiết bẩn cho tôi. Thật không may, đây là sở hữu của chủ nhân của tôi vì vậy tôi không thể chia sẻ nó với bạn.

Lớp trình bao bọc này là một phần của tiện ích nội bộ được sử dụng để truy xuất thông tin từ cơ sở dữ liệu dự án của chúng tôi và đăng nó lên SharePoint. Kể từ khi nó được phát triển trong thời gian công ty, tôi không được phép đăng nó ở đây.

+0

Đây có phải là lớp bao bọc mà công ty của bạn đang đưa vào sản phẩm hay chỉ là lớp tiện ích nội bộ bạn đã tạo? Chỉ cần tò mò - chủ nhân của tôi sẽ không quan tâm nếu tôi chia sẻ mã tiện ích, nhưng tôi làm việc cho một tổ chức khá tiến bộ. – cori

+0

Câu trả lời rất hay, bao quát mọi thứ và cung cấp một vài điểm khởi đầu trong tài liệu API. Tôi có thể viết wrapper của riêng tôi cho nó bây giờ, một phần của kinh nghiệm học tập. –

Các vấn đề liên quan