본문 바로가기
SharePoint 2010

InfoPath & SharePoint Designer를 이용한 Workflow 개발방법

이번엔, 제목그대로 InfoPath2010과 SharePoint Designer2010을 이용해서 SharePoint Workflow를 개발해 보도록 하겠습니다.

1. 먼저 [휴가신청서]라는 이름의 결재문서를 InfoPath를 이용해서 만듭니다.

 

위의 빨간색으로 표시된 것처럼.. 날짜를 선택함에 따라 자동계산하는 로직의 구현은 아래와 같습니다.

startDate

(number(substring(endDate, 9, 2)) + floor((153 * (number(substring(endDate, 6, 2)) + 12 * (floor((14 - number(substring(endDate, 6, 2))) / 12)) - 3) + 2) / 5) + (number(substring(endDate, 1, 4)) + 4800 - (floor((14 - number(substring(endDate, 6, 2))) / 12))) * 365 + floor((number(substring(endDate, 1, 4)) + 4800 - (floor((14 - number(substring(endDate, 6, 2))) / 12))) / 4) - floor((number(substring(endDate, 1, 4)) + 4800 - (floor((14 - number(substring(endDate, 6, 2))) / 12))) / 100) + floor((number(substring(endDate, 1, 4)) + 4800 - (floor((14 - number(substring(endDate, 6, 2))) / 12))) / 400) - 32045) - (number(substring(., 9, 2)) + floor((153 * (number(substring(., 6, 2)) + 12 * (floor((14 - number(substring(., 6, 2))) / 12)) - 3) + 2) / 5) + (number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) * 365 + floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 4) - floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 100) + floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 400) - 32045) + 1


endDate

(number(substring(., 9, 2)) + floor((153 * (number(substring(., 6, 2)) + 12 * (floor((14 - number(substring(., 6, 2))) / 12)) - 3) + 2) / 5) + (number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) * 365 + floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 4) - floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 100) + floor((number(substring(., 1, 4)) + 4800 - (floor((14 - number(substring(., 6, 2))) / 12))) / 400) - 32045) - (number(substring(startDate, 9, 2)) + floor((153 * (number(substring(startDate, 6, 2)) + 12 * (floor((14 - number(substring(startDate, 6, 2))) / 12)) - 3) + 2) / 5) + (number(substring(startDate, 1, 4)) + 4800 - (floor((14 - number(substring(startDate, 6, 2))) / 12))) * 365 + floor((number(substring(startDate, 1, 4)) + 4800 - (floor((14 - number(substring(startDate, 6, 2))) / 12))) / 4) - floor((number(substring(startDate, 1, 4)) + 4800 - (floor((14 - number(substring(startDate, 6, 2))) / 12))) / 100) + floor((number(substring(startDate, 1, 4)) + 4800 - (floor((14 - number(substring(startDate, 6, 2))) / 12))) / 400) - 32045) + 1


이렇게 필드값에 동작값을 명시하면 되고, 아울러 두 필드값들에 추가로 비어있을 경우에는 '0'값을 넣는 것도 잊지말아야 합니다.

자, 다음은 신청자의 사용자정보값을 가져오기입니다.

 

DisplayName과

 

부서명을 가져옵니다.

이때에는, 다음과같이 [웹 서비스] 데이터 연결을 이용하여 가져오기합니다.

 

/_vti_bin/People.asmx 를 이용하여 가져옵니다.

 

작업선택에서 SearchPrincipals를 선택하고,

 

위와 같이 기본값을 줍니다.

이제 InfoPath 디자인 폼에 와서 아래와 같이 양식로드시, Param값을 줍니다.

 

 

아래와 같이 SharePoint로 양식전송시, 파일이름 등을 지정합니다. 여기서 [양식이 있는 경우 덮어쓰기 허용]은 '아니오'로 해야겠죠..^^

 

 

 디자인작업이 완료되었으면, SharePoint로 양식을 게시합니다.

 

 

여기까지 양식디자인은 완료가 되었습니다.
이제 SharePoint Designer2010을 이용한 Workflow를 개발해 보도록 하겠습니다.

 

먼저, SharePoint에서 원하는 위치에 결재용 [양식 라이브러리]를 만듭니다. 뭐 굳이 안 만들어놔도 SharePont Designer에서 만들 수도 있습니다.
상단에 [목록 워크플로]를 선택하고, 위에서 만든 양식라이브러리를 선택합니다.

 

 

워크플로를 만듭니다.

 

 

좀더 복잡하게도 만듭니다.

 


조건절도 구현해 봅니다.

 

 

결재가 진행되면 다음과 같이 [상태 페이지에 워크플로 시각화 표시]로 진행상태를 볼 수가 있습니다.

 


 

#########################################################################################################
문제점

간혹 아래처럼 사용자 프로필을 못가져오는 경우가 있습니다.

 

 

이럴 땐, 중앙관리 - User Profile Service 응용 프로그램에서 동기화작업이 이뤄지질 않아서 입니다. 이것을 활성화하면 됩니다.

 

 

만약, 동기화 서비스가 활성화되지 않는다면(시작 에러 등), 서비스에서 FIM Synchronization Service가 [시작됨]으로 되어있는지 여부를 확인해 봅니다.

 

 

또한, 워크플로 구성시, 아래처럼 [상태 페이지에 워크플로 시각화 표시]가 비활성화 되어있다면, 해당 서버에 Windows Office Visio Professional 2010 이상을 설치하시기 바랍니다.

 

최근 버전에서는 비활성화되지 않고, 선택만 되지 않네요. 그리고 보시듯이 메세지가 Visio Premium이 설치되어야 한다고 나옵니다. 참조하시길..

그리고, 중앙관리에서 Visio Graphics Service도 [시작됨]인지 확인해 보시기 바랍니다.

 

자, 이렇게 Windows Office Visio Professional 2010 이상버전을 까시게 되면, 아래처럼 [상태 페이지에 워크플로 시각화 표시]가 활성화된 것을 확인하실 수 있습니다.

 

아참, 만약 워크플로 구성시, 기본 승인워크플로를 가지고 구성하시게 되면, 메일 내용에서 아래처럼 [이 워크플로의 상태 보기]를 통해 SharePoint에서 쉽게 진행상태를 확인할 수가 있습니다.

 

 

워크플로 상태값중에서 진행 값이 아래와 같이 숫자 형태로 나오는 것을 볼 수 있는데..

 

상태에 따른 숫자값은 아래와 같습니다.

Status

Value

Not Started

0

Failed on Start

1

In Progress

2

Error Occurred

3

Canceled

4

Completed

5

Failed on Start(Retrying)

6

Error Occurred (Retrying)

7

Canceled

15

Approved

16

Rejected

17

 

실제 워크플로 구성시, 아래와 같이 사용합니다.

 

다음은 워크플로우를 수정->게시할 때 이전버전이 계속 History성으로 남는데..

 

목록설정에 가보면, 워크플로 이름들이 계속 생성돼 있는것을 볼 수 있네요.
이전 버전들은 삭제해주셔도 무관합니다.