목록/사이트/다시 사용할 수 있는 워크플로 패키지 만들기 및 패키지 배포 방법

최초 문서 게시일: 2012년 8월 30일 목요일

안녕하세요. SharePoint Designer(SPD) 팀 프로그램 관리자 임종화라고 합니다.임종화 사진

이 게시물에서는 SharePoint Designer 2010 및 SharePoint Server 2010 이후 크게 개선된 워크플로 패키지 기능에 대해 소개해 드리려고 합니다. SharePoint Designer 2010에서는 대개 개발 환경에서 워크플로를 개발한 다음 프로덕션 환경으로 배포하는 데 이 기능을 사용했습니다. 그러나 SharePoint Designer 2010에서는 다시 사용할 수 있는 워크플로 유형에 대해서만 이 기능이 지원되었습니다.

이제는 SharePoint Designer 2013과 SharePoint Server 2013 및 Azure 워크플로를 함께 사용하면 목록 워크플로, 사이트 워크플로 및 다시 사용할 수 있는 워크플로의 세 가지 워크플로 유형이 모두 지원되므로 매우 편리합니다. 따라서 이제는 다시 사용할 수 있는 워크플로 외의 다른 워크플로도 마음껏 활용할 수 있으며, 더 이상 이 기능을 사용하기 위해 목록 워크플로를 다시 사용할 수 있는 워크플로로 마이그레이션할 필요가 없습니다.

이 기능을 보다 효율적으로 설명하기 위해 한 가지 예를 살펴보겠습니다. 예제 워크플로를 작성하여 대상 사이트에서 다시 사용하는 방법을 보여 드리겠습니다.

예: 휴가 요청 목록 워크플로

개발 환경에서 목록 워크플로를 작성한다고 가정해 보겠습니다. 이 워크플로에는 두 개의 목록(휴가 목록, 휴가 요청 목록)이 있습니다. 휴가 목록은 모든 직원의 남은 휴가 일 수를 입력하는 데 사용되고, 휴가 요청 목록은 요청자가 휴가 승인을 요청하기 위한 요청 항목을 만드는 데 사용됩니다.

필요한 목록 만들기(개발 환경)

앞에서 이미 언급한 것처럼 목록 두 개가 필요하므로 다음과 같이 두 목록을 만들었습니다. 여기서는 '작업 목록' 및 '기록 목록'의 기본 설정을 사용합니다.

clip_image001

clip_image002

휴가 요청 목록에서 목록 워크플로 만들기

이제 필요한 목록이 준비되었으므로 SPD를 사용하여 서버에 연결하고 '목록 워크플로(List Workflow)'를 클릭한 다음 'Vacation Request' 목록을 선택합니다. 아래와 같은 대화 상자가 표시되면 워크플로 이름을 입력하고 'SharePoint 2013 워크플로(SharePoint 2013 Workflow)' 유형을 선택합니다.

clip_image003

논리 입력 및 워크플로 게시

SPD 캔버스에서는 텍스트 기반 디자이너를 선택할 수도 있고, Visio Professional이 설치되어 있으면 비주얼 디자이너를 선택하여 워크플로를 작성할 수도 있습니다. 이 블로그에서는 텍스트 기반 디자이너를 사용합니다. 비주얼 디자이너를 사용하려는 경우에는 곧 게시될 예정인 비주얼 디자이너 관련 블로그 게시물을 참조하시기 바랍니다.

다음 논리를 추가합니다. 이 논리는 대개 몇 개 요소만 제외하면 매우 단순합니다. 이 논리는 5개 단계로 구성되며 각 단계의 제목을 통해 해당 단계의 용도를 파악할 수 있습니다. 각 단계에 대한 자세한 설명은 다음과 같습니다.

  • 'Check if remaining vacation exists' 단계 - 개시자의 남은 휴가 일 수를 가져와 요청된 휴가 일 수와 비교합니다.
  • 'Approval Process' 단계 - 요청된 휴가 일 수에 대한 승인을 요청합니다.
  • 'Approved' 단계 - 휴가 요청이 승인되면 Vacation 목록을 새로 계산된 값으로 업데이트합니다.
  • 'Rejected' 단계 - 거부 메일을 보냅니다.
  • 'insufficient vacation' 단계 - 남은 휴가 일 수 부족에 대한 메일을 보냅니다.

이미지

clip_image005

여기서 까다로운 부분은 Vacation 목록에서 남은 휴가 일 수를 가져오거나 Vacation 목록을 업데이트하는 아래의 조회 UI입니다.

clip_image006

clip_image007

필요한 경우 '항목 생성 시 워크플로 자동 시작(Start workflow automatically when an item is created)' 옵션을 설정할 수 있습니다.

clip_image008

워크플로를 게시하면 백그라운드에서 워크플로 연결이 작성되고 상태 열이 만들어집니다.

목록을 STP 패키지로 만들기

다양한 방법을 통해 대상 서버에 필요한 목록과 스키마를 제공할 수 있지만, STP 패키지를 활용하는 것이 효율적입니다. 여기서는 Vacation 목록과 Vacation Request 목록을 STP 패키지로 만드는 방법을 설명합니다.

이 작업은 아래에 나와 있는 것처럼 서버 UI 또는 SPD UI를 통해 수행할 수 있습니다.

clip_image009

clip_image010

그러면 다음 화면이 표시되며, 이 화면에서 이름을 입력하고 콘텐츠를 패키지로 만들도록 선택할 수 있습니다.

clip_image011

SharePoint 2013 목록 워크플로는 '콘텐츠 포함(Include Content)' 선택 여부에 관계없이 함께 패키지되지 않습니다.

이 작업이 정상적으로 수행되면 패키지 다운로드 위치로 이동할 수 있습니다.

clip_image012

링크를 클릭하면 나중에 사용하기 위해 패키지를 다운로드할 수 있습니다.

다운로드가 성공하면 STP 패키지 두 개가 다운로드됩니다. 그 중 하나는 Vacation Request 목록의 패키지이고 다른 하나는 남은 휴가 일 수가 포함된 Vacation 목록의 패키지입니다.

WSP 패키지에 워크플로 패키지

목록 워크플로를 패키지하려면 워크플로 요약 페이지로 이동하여 리본 메뉴에서 '서식 파일로 저장(Save as Template)' 단추를 클릭합니다.

clip_image013

그러면 다음 대화 상자가 표시됩니다.

clip_image014

탐색 창에 표시되는 '사이트 자산(Site Assets)' 라이브러리에서 목록 워크플로 패키지를 찾을 수 있습니다. 페이지를 새로 고쳐야 패키지가 표시될 수도 있습니다.

'파일 내보내기(Export File)' 리본 메뉴 단추를 사용하여 로컬 컴퓨터에 패키지를 저장합니다.

clip_image015

STP 패키지 배포

대상 사이트 또는 프로덕션 환경을 브라우저에서 열고 '사이트 설정(Site Settings)'으로 이동합니다. '웹 디자이너 갤러리(Web Designer Galleries)' 그룹 아래에 '목록 서식 파일(List templates)' 메뉴가 있습니다.

clip_image016

'파일' 메뉴 아래 '문서 업로드'를 사용하여 STP 패키지 두 개를 업로드합니다.

clip_image017

배포된 목록 서식 파일을 사용하여 목록 만들기

이제 배포된 목록 서식 파일을 사용하여 목록 두 개를 만들 수 있습니다. 서버의 탐색 메뉴에서 '사이트 콘텐츠'로 이동한 다음 '앱 추가'를 클릭합니다. 그러면 'Vacation' 및 'Vacation Request' 아이콘이 표시됩니다.

clip_image018

해당 메뉴를 사용하여 ‘Vacation’ 및 ‘Vacation Request’ 목록을 만듭니다.

WSP 패키지 배포 및 활성화

WSP 패키지를 배포하는 작업은 STP 목록 서식 파일을 배포하는 작업과는 약간 다릅니다. 즉, WSP 패키지는 사이트 설정의 '웹 디자이너 갤러리(Web Designer Galleries)' 그룹 아래 '솔루션(Solutions)' 라이브러리에 업로드해야 합니다.

clip_image019

그러면 패키지(솔루션)를 활성화해야 한다는 메시지가 포함된 대화 상자가 표시됩니다.

clip_image020

기능 활성화

솔루션을 활성화하고 나면 사이트 설정의 '사이트 작업(Site Actions)' 아래 '사이트 기능 관리(Manage site features)'에 새로운 사이트 기능이 표시됩니다.

clip_image021

아래에 해당 기능이 표시되어 있습니다. 이 워크플로는 패키지를 만들 때 사용한 이름으로 찾을 수 있습니다. '활성화(Activate)' 단추를 클릭하고 단추가 '비활성화'로 바뀌거나 '활성' 아이콘이 표시될 때까지 기다립니다. 단추가 바뀌거나 아이콘이 표시되면 기능이 활성화된 것입니다.

clip_image022

(선택 사항) SPD에서 워크플로 열기

대상 사이트에서 워크플로를 업데이트하려는 경우가 있습니다. 이 경우 개발 환경에서와 동일한 방식을 사용하면 됩니다. 배포된 워크플로는 SPD에서도 정상적으로 표시됩니다.

clip_image023

이 워크플로는 문제 없이 열립니다. 요약 페이지의 값도 동일하게 유지되며 논리도 그대로 보존되어 있습니다.

이미지

(선택 사항) 워크플로 실행

서버에서 워크플로를 실행하고 나면 이름이 같은 두 개의 열(워크플로 상태 열)이 생깁니다. 이러한 현상은 알려진 문제입니다. 열 하나는 STP에 패키지된 원본 서버에 해당하는 열이고, 다른 하나는 대상 사이트에서 만들어진 것입니다. 이전 열을 숨기려면 목록 보기를 업데이트하십시오.

STP 패키지 대신 사용할 수 있는 방법

대상 사이트에 필요한 목록, 즉 워크플로 논리에 사용되는 목록과 워크플로 작업 및 워크플로 기록 목록이 있으면 솔루션은 배포됩니다. 그러나 같은 목록 서식 파일 및 필드 유형을 사용하여 워크플로에서 참조되는 목록 및 목록 열을 만드는 것이 좋습니다. 유형이 일치하지 않는 경우에는 기능 활성화 시에 패키지에 오류가 발생하거나 런타임에 워크플로에 오류가 발생합니다.

'Vacation' 또는 'Vacation Request' 목록이 없는 사이트에 워크플로 패키지를 배포하는 경우

사이트 기능 활성화가 실패합니다.

clip_image025

자세한 오류 메시지가 표시되지는 않지만 ULS 로그를 통해 다음과 같은 정보를 확인할 수 있습니다.

"다음 오류로 인해 워크플로 XAML 유효성 검사가 실패했습니다. '$ListId:Lists/Vacation' 텍스트에서 'ListId'를 만들지 못했습니다."

그러나 기능 활성화가 실패했으므로 필요한 목록을 만든 후에도 기능 다시 활성화가 또 실패할 수 있습니다. 워크플로 정의가 불완전하게 배포되었기 때문입니다. 이 경우 다음 작업을 수행해야 합니다.

  • SPD를 열고 기능 활성화 중에 실패한 워크플로 정의를 삭제합니다.
  • 솔루션을 비활성화하고 제거합니다.
  • 솔루션을 업로드하고 활성화합니다.
  • 사이트 기능을 활성화합니다.

그러면 문제가 해결됩니다.

알려진 문제

워크플로 패키지의 알려진 문제는 다음과 같습니다.

  • 상대 목록 URL(eg. ‘Lists/Vacation’)을 동일하게 유지해야 합니다. 지정한 이름으로 목록을 만든 다음 다른 이름으로 변경해도 목록 URL은 원래 표시 이름을 기준으로 하므로 변경되지 않습니다. 따라서 목록의 업데이트된 이름을 기준으로 워크플로를 패키지했더라도 워크플로는 대상 사이트에서 이전 이름을 기준으로 목록 URL을 찾습니다. 그러므로 대상 사이트에서 목록을 다시 만들 때는 처음부터 목록에 업데이트된 이름이 아닌 원래 이름을 지정해야 합니다. 이렇게 하면 목록 URL이 보존됩니다. 목록을 만든 후에는 목록 이름을 업데이트된 이름으로 변경할 수 있습니다.
  • 유니코드 또는 DBCS 이름이 지정된 워크플로는 기본 하드 코드된 이름 'WorkflowSolution.wsp'가 지정된 wsp 파일에 패키지됩니다.
  • 업데이트된 솔루션 목록을 보려면 사이트 자산으로 이동한 후 페이지를 수동으로 새로 고쳐야 합니다.
  • 대상 서버에 워크플로 작업 목록 및 워크플로 기록 목록이 없는 경우 워크플로 설정 페이지에서 워크플로를 클릭하면 아래 오류가 발생할 수 있습니다. 워크플로를 만든 적이 없는 대상 서버에 워크플로를 배포하면 이러한 현상이 발생합니다. 이 문제를 해결하려면 SPD에서 더미 워크플로를 작성 및 게시하여 워크플로 작업 목록과 워크플로 기록 목록을 만듭니다. 그런 후에 배포된 워크플로를 SPD에서 열고 워크플로 작업 목록 및 워크플로 기록 목록 설정을 조정하여 워크플로를 다시 게시하면 됩니다.clip_image026
  • 프로젝트 워크플로는 일반 사이트 워크플로처럼 패키지됩니다. 그러나 이 워크플로가 작동하도록 하려면 EPT, 스테이지, 사용자 지정 열 등의 프로젝트 엔터티도 패키지에 포함해야 합니다. 이 작업에 대해서는 Project 팀에서 제공할 예정인 프로젝트 워크플로 지침을 참조하십시오.

감사합니다.

임종화

이 문서는 번역된 블로그 게시물입니다. 원본 문서는 Packaging List, Site, and Reusable Workflow and How to Deploy the Package를 참조하십시오.