2008-09-17 9 views
6

2 개의 텍스트 필드와 선택 필드가있는 목록이 있습니다. Lists.asmx 웹 서비스를 사용하여 새 항목을 삽입하려면 어떻게합니까? lists.asmx 서비스에 대한 웹 참조를 만들 수 있으므로이를 알고 있다고 가정 할 수 있습니다.SharePoint - 목록 웹 서비스를 사용하여 새 항목을 삽입하려면 어떻게해야합니까?

코드 및 CAML 쿼리에 대한 XML을 포함하는 완전한 예제가 필요합니다. 이상적으로 샘플은 C#을 사용합니다.

답변

16

목록 웹 서비스를 사용하여 SharePoint 목록에 항목을 삽입하는 것은 실제로 까다로울 수 있습니다. 이 메소드는 XML in, XML out과 같은 형식이므로 매개 변수를 올바르게 가져올 수 없습니다.

먼저 목록 정의를 살펴 봐야합니다. 아래에 도시 된 바와 같이, 상기 방법 GetList()를 검색 할 수

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

은 필드 및 데이터 유형의 이름이다. 필드 이름은 SharePoint GUI에 표시되는 것과 동일하지 않습니다. 좋은 예는 목록의 첫 번째 필드에 사용되는 제목 필드입니다.

이제는 SharePoint로 이동할 쿼리를 만들 수 있습니다. 예 :

<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> 

배치 요소는 XML의 루트 요소입니다. 내부에 다른 방법을 넣을 수 있습니다. 이들은 고유 한 ID (다시 오류를보고하는 데 사용됨)와 명령 (예 : "New"또는 "Update")을 가져와야합니다. 메서드 내에서 각 필드의 값을 지정하는 Field 요소를 넣습니다. 예를 들어 제목 필드는 값 "Abcdef"를 가져옵니다. GetList()가 반환하는 그대로 정확한 이름을 사용하도록주의하십시오.

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

반환 값은 각각의 업데이트 상태를 포함하는 XML 단편이다

는() 메소드를 사용 UpdateListItems, 셰어에 쿼리를 실행한다. 예를 들면 다음과 같습니다.

<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> 

이 구문을 분석하고 ErrorCode를보고 실패한 메서드를 확인할 수 있습니다.

실제로 나는 모든 더러운 세부 정보를 처리하는 래퍼 클래스를 만들었습니다. 불행히도 이것은 내 고용주가 소유하고 있으므로 귀하와 공유 할 수 없습니다.

이 래퍼 클래스는 프로젝트 데이터베이스에서 정보를 검색하여 SharePoint에 게시하는 데 사용되는 내부 유틸리티의 일부입니다. 그것은 회사 시간 동안 개발 되었기 때문에 여기에 게시 할 수 없습니다.

+0

이 래퍼 클래스는 귀하의 회사가 제품에 포함시키는 것입니까, 아니면 귀하가 만든 내부 유틸리티 클래스입니까? 그냥 호기심 - 내 고용주는 유틸리티 코드를 공유하는 상관 없어,하지만 난 꽤 진보적 인 조직을 위해 일합니다. – cori

+0

아주 좋은 대답, 모든 것을 다룬 API 문서에서 몇 가지 출발점을 제공했습니다. 나는 지금 학습 경험의 한 부분 인 내 자신의 래퍼를 작성할 수 있습니다. –