SharePoint 2010 LINQ to SharePoint

SharePoint 2010 2010. 5. 12. 09:00 Posted by 알 수 없는 사용자

이번 세션에서는 SharePoint 2010 Server Object Model 중에서 새롭게 등장한 LINQ to SharePoint 를 알아보도록 하겠습니다. 서버 개체 모델이므로 웹 파트 등 서버박스 위에서 실행됩니다.

 

LINQ 에 대한 내용은 잘 알고 계실 것이므로 구체적으로 언급하지 않아도 될 듯 하구요.
SharePoint
에서는 2010 버전에서 SharePoint 개체에 대한 LINQ를 사용할 수 있습니다
.
LINQ to SharePoint
SPLinq 라고도 부릅니다.

 

LINQ to SharePoint 가 별거 아니라고 볼 수도 있지만 CAML을 가지고 작업하는 것 보다는 생산성이
백만 배 향상되었다고 개인적으로 생각합니다.

 

CAML SPQuery 라는 클래스의 Query 라는 속성에 미리 정의되어 있는 XML 태그를 사용합니다.

간단한 예를 보시면 아래와 같습니다.

 

query.Query =@ "<Where>

                  <And>

                    <Eq><FieldRef Name=Title/><Value Type='Text'>”+

                      title +

                    "</Value></Eq>

                    <And>

                     </Where>";

 

위의 구문은 조건식이 하나로 Title이라는 필드의 값이 일치하는 것만 필터링하는 내용입니다. 위 구문 정도야 그냥 쓰면 되지 라고 하실 수 있지만 조건식이 AND, OR 가 여러 개 처리된다거나 다른 목록과 조인을 한다거나 요구사항이 조금만 복잡해지면 만들기 정말 복잡합니다. 에러는 발생하지 않는데 CAML이 틀려 값이 나오지 않으면 원인 해결에도 시간이 상당히 걸립니다.

 

그래서 SharePoint 2010에서는 SPLinq를 통해서 생산성을 높여주고 있습니다.

SPLinq를 사용하기 위해서는 먼저 SharePoint 개체 모델에 대한 Entity 클래스가 생성되어야 합니다. 그리고 나면 Entity 클래스를 이용해서 LINQ 구문을 작성하면 됩니다.

 

아래로 이동해서 “SPMETAL.EXE” 를 실행하면 됩니다. /? 로 도움말을 확인하실 수 있습니다.

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN


SPMETAL Entity 클래스를 생성해주는 유틸리티이며 사이트 컬렉션 주소를 주면 해당 개체에 대한 프록시 클래스 형태를 제공해줍니다.

  

제가 적용할 시나리오는 아래와 같습니다.

아래처럼 공지사항이 있는데 SharePoint 라는 말이 제목에 있는 항목들만 필터링한 결과를 SPLinq를 통해 액세스해보도록 하겠습니다.


웹 파트를 만들거나 서버 박스 위에서 실행되는 유틸리티를 통해서 접근할 수 있습니다. 먼저 EXE를 통해 액세스 해봅니다.

 

Visual Studio 2010을 이용하여 WPF 응용 프로그램을 하나 생성합니다. 이름은 WpfSPLinqDemo 라고 하겠습니다.

 

이제 Entity 클래스를 생성해보도록 하겠습니다.


HJ 라는 클래스를 프로젝트에 추가해서 LINQ를 통해 액세스 하면 됩니다.

HJ 클래스를 살펴보면 SharePoint 목록에 대한 클래스와 속성을 가지고 있는 것을 알 수 있습니다.



위에서 보시는 것처럼 한글 SharePoint 를 액세스하면 클래스와 속성 이름이 한글로 나타나는 측면이 있으며 C# 코드에서도 한글로 클래스를 정의해야 한다는 것이 좀 이상해집니다. ~

 

이제 LINQ to SharePoint 코드를 작성해서 결과를 확인합니다.

WPF ListBox 컨트롤에 LINQ 결과를 바인딩해서 표시해줄 수 있습니다.


결과는 아래와 같습니다.



웹파트에 SPLinq를 적용한 결과는 아래와 같습니다.

SPLinq를 알아보았는데 실행시에는 CAML로 변경되어 처리가 됩니다. 개발자들이 직접 CAML을 작성하는 것보다는 SPLinq를 통해 생산성이 향상되는 내용을 알아보았습니다.