이번엔, 제목그대로 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'값을 넣는 것도 잊지말아야 합니다.
자, 다음은 신청자의 사용자정보값을 가져오기입니다.


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



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

아래와 같이 SharePoint로 양식전송시, 파일이름 등을 지정합니다. 여기서 [양식이 있는 경우 덮어쓰기 허용]은 '아니오'로 해야겠죠..^^
디자인작업이 완료되었으면, SharePoint로 양식을 게시합니다.

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

조건절도 구현해 봅니다.

결재가 진행되면 다음과 같이 [상태 페이지에 워크플로 시각화 표시]로 진행상태를 볼 수가 있습니다.
-----------------------------------------------------------------------------------------------------------------
문제점
간혹 아래처럼 사용자 프로필을 못가져오는 경우가 있습니다.
이럴 땐, 중앙관리 - User Profile Service 응용 프로그램에서 동기화작업이 이뤄지질 않아서 입니다. 이것을 활성화하면 됩니다.
만약, 동기화 서비스가 활성화되지 않는다면(시작 에러 등), 서비스에서 FIM Synchronization Service가 [시작됨]으로 되어있는지 여부를 확인해 봅니다.
또한, 워크플로 구성시, 아래처럼 [상태 페이지에 워크플로 시각화 표시]가 비활성화 되어있다면, 해당 서버에 Windows Office Visio Professional 2010 이상을 설치하시기 바랍니다.
자, 이렇게 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 |
실제 워크플로 구성시, 아래와 같이 사용합니다.

다음은 버그같기도 하고.. 아직 원인을 찾지는 못했습니다만..

물론 인스턴스는 없음으로 된 것들이지만, 보긴 안좋네요..ㅠ




덧글