Share Point의 문서 라이브러리, 양식 라이브러리, 리스트 등에서 이벤트를 잡아 이벤트 발생에 대한 작업을 처리하고자 할 경우 WSS v3에서 제공되는 Event Handling을 사용하면 유용하다.
예로, 리스트에서 사용자가 항목을 삭제하는 작업을 수행하지 못하는 Feature를 생성해보자..
1. Visual Studio 실행 > C# 클래스 라이브러리 프로젝트 선택 > 프로젝트명을 EventhandlerExample로 설정
2. Microsoft.SharePoint.dll 참조 추가 (참조>추가>찾아보기>C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI에 위치)
3. Class1.cs의 이름을 CancelAnnouncementDeleteHandler.cs로 변경
4. CancelAnnouncementDeleteHandler.cs에 아래와 같이 코드 입력
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace EventHandlerExample
{
public class CancelAnnouncementDeleteHandler: SPItemEventReceiver
{
public override void ItemDeleting(SPItemEventProperties properties)
{
string HandleMessage = ("Announcement can not be deleted from this list");
properties.ErrorMessage = HandleMessage;
properties.Cancel = true;
}
}
}
SharePoint에서 이벤트를 catch하기 위해서는 SPItemEventReceiver를 상속받아야 한다.
이벤트중 ItemDeleting은 동기식(Synchronous) 이벤트이다.
이제 프로젝트를 컴파일 하여 DLL을 GAC에 배포하여햐 하는데, GAC에 배포하기 위해서는 강력한 이름 키 파일을 필요로 한다.
5. 프로젝트에서 오른쪽 마우스 클릭 > 속성 > 서명 > 강력한 이름 키 파일을 선택한다. 만일 생성된 키 파일이 존재하지 않을 경우 새로운 키 파일을 생성한다.
6. 프로젝트를 빌드한다.
7. GAC에 dll을 배포하기 위해 Visual Studio 명령 프롬프트를 띄우고 다음의 명령을 입력하여 실행시킨다.
gacutil /i "dll 파일 위치" 예)C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\EventHandlerExample\bin\Debug\EventHandlerExample.dll
8. CL\Windows\assembly 폴더로 이동하여 성공적으로 dll이 배포되었는지 확인한다.
9. 다시 Visual Studio로 돌아와서, 프로젝트에 두개의 XML 파일을 추가한다. 하나는 Feature.xml이라 명하고, 다른 하나는 Elements.xml이라 명한다.
10. 이제 Windows 탐색기를 이용하여 C:\Program Files\common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES폴더를 열어 이곳에 이벤트 핸들러를 위한 이벤트 핸들러와 같은 이름으로 새로운 폴더를 생성한다.
11. 생성하는 이벤트 핸들러의 Feature.xml과 Elements.xml을 생성하기 위해 Microsfot에서 제공하는 파일들을 사용하도록 한다. Windows 탐색기에서 FEATURES 폴더의 AnnouncementList 폴더를 열고 이곳의 Feature.xml 파일을 연다.
12. Announcements의 Feature.xml 파일의 내용을 복사하여 Visual Studio의 이벤트 핸들러의 Feature.xml 파일에 붙여넣기를 한다.
13. Windows 탐색기에서 AnnouncementList\ListTemplate 폴더를 열고 그곳의 Announcements.xml 파일을 열고 내용을 Visual Studio의 Elements.xml 파일의 내용에 붙여넣기를 한다.
Feature.xml 수정하기
(1) 먼저 유일한 Feature Id 값을 설정하기 위해 Visual Studio 상단 메뉴 중 도구 > GUID 만들기 를 이용하여 생성하고 생성된 GUID 값을 Id 값으로 설정한다.
(2) 이벤트에 맞는 Title과 Description을 입력한다.
(3) Feature의 Scope을 Web으로 설정한다.
(4) Version과 Hidden 속성을 삭제한다.
최종 Feature.xml 파일은 다음과 같다.
<?xml version="1.0" encoding="utf-8" ?>
<Feature Id="3C60CFC5-328C-471d-B1D6-7390D63553C1" Title="EventHandlerExample" Description="Cancel the deletion of an announcements list item and display message" Scope="Web" mlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="Elements.xml" />
</ElementManifests>
</Feature>
Elements.xml 수정하기
Elements.xml 파일에는 Receivers 노드를 생성하여야 한다. 이 Receivers는 ListTemplateID라는 속성값을 지정하여야 하는데 이 코드값은 다음중 해당되는 type의 Id 값을 지정하면 된다.
Custom List 100, Document Library 101, Survey 102, Links List 103, Announcements List 104, Contacts 105, Events List 106, Tasks List 107, Discussion Board 108, Picture Library 109
EventHandlerExample의 경우 공지사항에 적용할 것이므로 104를 설정한다. Receiver의 Name항목의 값은 프로젝트 명이며, Type의 값은 override하는 function 이름이다. SequenceNumber의 경우 이 Feature를 나타내는 유일한 값을 배정해야 하는데, Microsoft에서 이미 예약 사용하고 있는 수가 있다. 보통 20,000이상의 수는 사용가능하다. Assembly의 값은 DLL 이름이며, PublicKey token값은 GAC(C:\Windows\Assembly)의 DLL 파일에서 알수 있다.
PublicKey token을 알아내기 위해 Windows 탐색기로 C:\Windows\Assembly를 열고 EventHandlerExample.dll파일을 선택한 후 오른쪽 마우스를 선택 > 속성을 선택한다.
최종 Elements.xml 파일은 다음과 같다.
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Receivers ListTemplateId="104">
<Receiver>
<Name>EventHandlerExample</Name>
<Type>ItemDeleting</Type>
<SequenceNumber>20000</SequenceNumber>
<Assembly>EventHandlerExample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=82d33860aedb5dee</Assembly>
<Class>EventHandlerExample.CancelAnnouncementDeleteHandler</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</Receivers>
</Elements>
14. Feature.xml과 Elements.xml 파일을 저장한다.
15. Windows 탐색기를 이용하여 저장한 프로젝트의 Feature.xml 파일과 Elements.xml 파일을 복사하여 10번에서 생성한 폴더에 붙여넣기를 한다.
16. stsadm.exe 툴을 사용하여 사이트 콜렉션에 Feature를 설치하기 위해 command mode에서 다음을 실행한다.
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN>stsadm.exe -o installfeature -filename EventhandlerExample\Feature.xml
17. Feature를 설치 완료하면, 이제 Feature를 활성화 시켜야 한다. command mode에서 다음의 명령을 수행한다.
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN>stsadm.exe -o activatefeature -filename EventHandlerExample\Feature.xml -URL http://localhost
18. 이제 생성한 Feature가 잘 작동을 하는지 확인을 하기 위해 SharePoint 사이트를 열어 확인한다. 공지사항을 생성하고 항목을 입력한 후 다시 항목 삭제를 시도하면 다음과 같은 화면이 뜨는것을 확인할 수 있다.
잘 작동하고 있는것을 확인할 수 있네요..
'[ Program ] > C#' 카테고리의 다른 글
C#에서 DB에 이미지저장하고 불러오기 (0) | 2012.09.17 |
---|---|
DLL 파일을 별도 폴더에서 관리하자 (0) | 2012.09.17 |
C# 싱글톤 패턴 예제 (0) | 2012.09.17 |
[.NET Study 02] C#에서의 배열(Array) (0) | 2012.09.17 |
【 C# 】 컬렉션의 기본 인터페이스_# (0) | 2012.09.17 |
댓글