InfoPath & SharePoint Designer를 이용한 Workflow 개발방법 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 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


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


다음은 버그같기도 하고.. 아직 원인을 찾지는 못했습니다만..
목록설정에 가보면, 워크플로 이름들이 계속 생성돼 있는것을 볼 수 있네요.
물론 인스턴스는 없음으로 된 것들이지만, 보긴 안좋네요..ㅠ


덧글

  • Smithd44 2014/08/18 23:44 # 삭제 답글

    This is a great blog, would you be involved in doing an interview about how you created it? If so email me! bafkeaadkbbffkdb
  • Smithe602 2014/10/09 11:04 # 삭제 답글

    I'm curious to uncover out what weblog system youre employing? Im experiencing some small security problems with my latest weblog and Id like to locate something a lot more safeguarded. Do you have any recommendations? ebkbceddddkfkbec
댓글 입력 영역