연습: 사용자 지정 사이트 워크플로 작업 만들기
이 연습에서는 Visual Studio를 사용하여 사이트 수준 워크플로에 대한 사용자 지정 작업을 만드는 방법을 보여 줍니다. 사이트 수준 워크플로는 사이트의 목록뿐 아니라 전체 사이트에 적용됩니다. 사용자 지정 작업은 백업 알림 목록을 만든 다음 알림 목록의 내용을 백업에 복사합니다.
이 연습에서는 다음 작업을 수행합니다.
사이트 수준 워크플로 만들기
사용자 지정 워크플로 작업 만들기
SharePoint 목록 만들기 및 삭제
한 목록에서 다른 목록으로 항목 복사
빠른 실행 모음에 목록 표시
참고
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
사전 요구 사항
이 연습을 완료하려면 다음 구성 요소가 필요합니다.
지원되는 Microsoft Windows 및 SharePoint 버전. 자세한 내용은 SharePoint 솔루션 개발 요구 사항을 참조하십시오.
Visual Studio 2010.
사이트 워크플로 사용자 지정 작업 프로젝트 만들기
먼저 사용자 지정 워크플로 작업을 포함하고 테스트할 프로젝트를 만듭니다.
사이트 워크플로 사용자 지정 작업 프로젝트를 만들려면
파일 메뉴에서 새로 만들기를 가리킨 다음 새 프로젝트를 클릭하여 새 프로젝트 대화 상자를 표시합니다.
Visual C# 또는 Visual Basic 아래의 SharePoint 노드를 확장한 다음 2010을 클릭합니다.
템플릿 창에서 순차 워크플로를 선택합니다.
이름 상자에 AnnouncementBackup을 입력한 다음 확인을 클릭합니다.
SharePoint 사용자 지정 마법사가 나타납니다.
디버깅에 사용할 로컬 사이트는 무엇입니까? 페이지에서 다음을 클릭하여 기본 사이트를 적용합니다.
또한 이 단계에서는 솔루션의 신뢰 수준을 팜 솔루션으로 설정합니다. 이 옵션은 워크플로 프로젝트에 사용할 수 있는 유일한 옵션입니다.
디버깅에 사용할 워크플로 이름 지정 페이지에서 기본 이름(AnnouncementBackup - Workflow1)을 적용합니다. 워크플로 템플릿 형식을 사이트 워크플로로 변경하고 다음을 클릭합니다.
마침을 클릭하여 나머지 기본 설정을 적용합니다.
사용자 지정 워크플로 작업 클래스 추가
다음으로, 사용자 지정 워크플로 작업에 대한 코드를 포함하기 위해 프로젝트에 클래스를 추가합니다.
사용자 지정 워크플로 작업 클래스를 추가하려면
프로젝트 메뉴에서 새 항목 추가를 클릭하여 새 항목 추가 대화 상자를 표시합니다.
설치된 템플릿 트리 뷰에서 코드 노드를 클릭한 다음 프로젝트 항목 템플릿 목록에서 클래스를 클릭합니다. 기본 이름인 Class1을 사용합니다.
Class1의 모든 코드를 다음 코드로 바꿉니다.
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports Microsoft.SharePoint Namespace AnnouncementBackup ' This custom activity will back up all of the announcements ' in the Announcements list on the SharePoint site. Public Class Class1 Inherits System.Workflow.ComponentModel.Activity Public Sub New() MyBase.New() End Sub ' Triggers when the activity is executed. Protected Overrides Function Execute(ByVal executionContext As System.Workflow.ComponentModel.ActivityExecutionContext) As System.Workflow.ComponentModel.ActivityExecutionStatus Try ' Get a reference to the SharePoint site. Dim site As SPSite = New SPSite(("http://" + System.Environment.MachineName)) Dim web As SPWeb = site.OpenWeb("/") ' Reference the original Announcements list. Dim aList As SPList = web.GetList("/Lists/Announcements") ' If the Announcements Backup list already exists, delete it. Try Dim bList As SPList = web.GetList("/Lists/Announcements Backup") bList.Delete() Catch End Try ' Create a new backup Announcements list and reference it. Dim newAnnID As Guid = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements) Dim bakList As SPList = web.Lists(newAnnID) ' Copy announcements from original to backup Announcements list. For Each item As SPListItem In aList.Items Dim newAnnItem As SPListItem = bakList.Items.Add For Each field As SPField In aList.Fields If Not field.ReadOnlyField Then newAnnItem(field.Id) = item(field.Id) End If Next newAnnItem.Update() Next ' Put the Backup Announcements list on the QuickLaunch bar. bakList.OnQuickLaunch = True bakList.Update() Catch errx As Exception System.Diagnostics.Debug.WriteLine(("Error: " + errx.ToString)) End Try Return MyBase.Execute(executionContext) End Function End Class End Namespace
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint; namespace AnnouncementBackup { // This custom activity will back up all of the announcements in // the Announcements list on the SharePoint site. public class Class1 : System.Workflow.ComponentModel.Activity { public Class1() { } // Triggers when the activity is executed. protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext) { try { // Get a reference to the SharePoint site. SPSite site = new SPSite("http://" + System.Environment.MachineName); SPWeb web = site.OpenWeb("/"); // Reference the original Announcements list. SPList aList = web.GetList("/Lists/Announcements"); // If the Announcements Backup list already exists, delete it. try { SPList bList = web.GetList("/Lists/Announcements Backup"); bList.Delete(); } catch { } // Create a new backup Announcements list and reference it. Guid newAnnID = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements); SPList bakList = web.Lists[newAnnID]; // Copy announcements from original to backup Announcements list. foreach (SPListItem item in aList.Items) { SPListItem newAnnItem = bakList.Items.Add(); foreach (SPField field in aList.Fields) { if (!field.ReadOnlyField) newAnnItem[field.Id] = item[field.Id]; } newAnnItem.Update(); } // Put the Backup Announcements list on the QuickLaunch bar. bakList.OnQuickLaunch = true; bakList.Update(); } catch (Exception errx) { System.Diagnostics.Debug.WriteLine("Error: " + errx.ToString()); } return base.Execute(executionContext); } } }
프로젝트를 저장하고 빌드 메뉴에서 솔루션 빌드를 클릭합니다.
Class1은 도구 상자의 SharePoint 워크플로 탭 아래에 사용자 지정 작업으로 표시됩니다.
사이트 워크플로에 사용자 지정 작업 추가
다음으로, 사용자 지정 코드를 포함하기 위해 워크플로에 작업을 추가합니다.
사이트 워크플로에 사용자 지정 작업을 추가하려면
Workflow Designer의 디자인 뷰에서 Workflow1을 엽니다.
도구 상자에서 Class1을 클릭하고 onWorkflowActivated1 작업 아래로 끌어 놓습니다.
프로젝트를 저장합니다.
사이트 워크플로 사용자 지정 작업 테스트
그 다음, 프로젝트를 실행하고 사이트 워크플로를 시작합니다. 사용자 지정 작업은 백업 알림 목록을 만든 다음 현재 알림 목록의 내용을 백업에 복사합니다. 코드에서 백업 목록을 만들기 전에 이미 있는지 여부를 확인합니다. 백업 목록이 이미 있으면 삭제됩니다. 또한 코드에서 SharePoint 사이트의 빠른 실행 모음에 있는 새 목록에 링크를 추가합니다.
사이트 워크플로 사용자 지정 작업을 테스트하려면
F5 키를 눌러 프로젝트를 실행하고 SharePoint에 배포합니다.
빠른 실행 모음에서 목록을 클릭하여 SharePoint 사이트에서 사용 가능한 모든 목록을 표시합니다. 알림이라는 하나의 알림 목록만 있습니다.
SharePoint 웹 페이지의 맨 위에서 사이트 작업 단추를 클릭한 다음 사이트 워크플로를 클릭합니다.
새 워크플로 시작 섹션 아래에서 AnnouncementBackup - Workflow1 링크를 클릭합니다. 이렇게 하면 사이트 워크플로가 시작되고 사용자 지정 작업의 코드가 실행됩니다.
빠른 실행 모음에 표시되는 알림 백업 링크를 클릭합니다. 알림 목록에 포함된 모든 알림이 새 목록에 복사되었습니다.