2011-08-19 4 views
0

SharePoint에서 양식을 제출할 때 폴더를 만들 수 있는지 알고 싶습니다. Infopath에서 사용자 지정 SharePoint 목록 양식을 만들었으며 제출 단추에 동작을 추가하여 네 개의 문서 라이브러리에 각각 하나씩 제출 된 항목의 제목이 포함 된 네 개의 폴더를 만들려고합니다.SharePoint 2010에서 목록 양식을 제출할 때 라이브러리에 폴더 만들기

Infopath의 SharePoint 목록에는 사용자 지정 코드 단추가 활성화되어 있지 않으므로 백그라운드에 코드를 추가 할 수 없습니다. 상자에서 나온 워크 플로는 내가 뭔가를 놓치지 않는 한 내가 할 수있게하지 않습니다 ... 다른 방법으로 그것을 할 수 있습니까?

미리 도움 주셔서 감사합니다 !!

답변

0

네,이 작업을 수행 할 수 있지만 매우 까다 롭습니다.

이론적으로 Lists.asmx 웹 서비스의 "UpdateListItems"메서드를 호출하고 배치 문을 전달할 수 있지만 목록 웹 서비스의 구현으로 인해 InfoPath에서 사용할 수 없습니다. 따라서 UpdateListItems 메서드를 래핑하는 자체 웹 서비스를 작성해야 IP에서 사용할 수 있습니다.

당신이 웹 서비스를 쓰기 (및 SharePoint 내에서 호스트)에 StackOverflow의 검색 기능을 사용하거나 구글을 고려하시기 바랍니다하는 방법을 모르는 경우

- 거기 밖으로 많은 훌륭한 자습서 ;-)

웹을 얻었다되면 서비스 실행, 당신은 http://myserver/_vti_bin/Lists.asmx 웹 서비스에 서비스 참조를 추가 한 후 다음 방법을 만들어야합니다 구성하면 LISTSVC의 URL (이 예에서와 같이) 하드 코딩하는 것이

[WebMethod] 
public void UpdateListItems(string listGuid, string xmlBatch) 
{ 
    var batch = new XmlDocument(); 
    batch.LoadXml(xmlBatch); 

    //create an instance of the lists proxy client 
    var listSvc = listService = new ListsWebService.Lists(); 

    //set the url of the client 
    listService.Url = "http://myserver/_vti_bin/Lists.asmx"; 

    listSvc.UpdateListItems(listGuid, batch); 
} 

주, 당신은 할 필요가 폴더를 추가하려는 List가 th 이내에 있는지 확인하십시오. e URL과 동일한 사이트.이 방법을 좀 더 일반적인 것으로 만들고 싶다면 (간단히 말해서), SiteCollection Url을 매개 변수로 전달하고 listSvc.Url을 SiteCollectionUrl + "_vti_bin/Lists.asmx"로 설정할 수 있습니다. 이가 설정되면

, 당신은 InfoPath는에서 새로 만든 웹 서비스에 데이터 연결을 생성하고 다음과 같이 구성 할 수 있습니다 : Configuration of the Lists wrapper data connection

필드는 "listName는"실제로 목록의 GUID - 당신 "라이브러리 설정"- "정보 관리 정책 설정"을 클릭하여 UI를 통해 가져온 다음 브라우저의 주소 표시 줄에서 복사하십시오. 예 :

{39d01277-4ba1-4589-90f8-c957b4b2dd09} 

"XML"필드에는 폴더를 생성하는 배치 스크립트가 들어 있습니다. 정적으로 선언 할 수도 있고, 경우에 따라 concat() 함수를 사용하여 동적으로 작성할 수도 있습니다. 이 예제는 라이브러리의 루트에 "MyFolder"라는 폴더를 만듭니다.

<Batch> 
    <Method ID='1' Cmd='New'> 
     <Field Name='ID'>New</Field> 
     <Field Name='FSObjType'>1</Field> 
     <Field Name='BaseName'>MyFolder</Field> 
    </Method> 
</Batch> 

하위 폴더가 필요한 경우에도 가능합니다. 다음 예제에서는 "MyFolder"폴더 내에 "MySubFolder"라는 폴더를 만듭니다.

<Batch> 
    <Method ID='1' Cmd='New'> 
     <Field Name='ID'>New</Field> 
     <Field Name='FSObjType'>1</Field> 
     <Field Name='BaseName'>MyFolder/MySubFolder</Field> 
    </Method> 
</Batch> 

은 그럼 당신은 단순히 전송 버튼 액션을 추가하고

는 또한 위의 코드 (하지만 어떤 작품) 단지 예입니다 있습니다 :-)하면 완료됩니다.프로덕션 환경에서 프로덕션 환경을 사용할 경우 적절한 예외 로깅을 추가하십시오. :-)

희망이 있습니다.

+0

감사합니다. Andreas! 웹 서비스 아이디어를 살펴 보겠습니다. 나는 개발자가 아니지만 나는 곧 올께. 내가 올 때마다 즉시 게시물을 업데이트 할 것이다. – Melkman

+0

아, 알지 못했다. .... 당신이 좋아하는 것에 이것을 전달하고 싶을 수도있다. 셰어 포인트 dev ;-) – int32

+0

하하, 그래, 그렇게 생각해. 우리 개발자 중 한 명은 애완 동물 프로젝트를 원할 것입니다 :-) 도움을 주셔서 감사합니다! 도움이된다면 – Melkman

관련 문제