2010년 7월 20일 화요일

Business Connectivity Service를 이용한 SQL DB 연동

 

BCS(Business Connectivity Service)에 대해서 좀 알아 보고 데모를 만들어 볼까 합니다.

BCS는 SharePoint 2007의 BDC가 업그레이드 된 것으로 이름을 BCS로 바꿨습니다.

이름을 바꿀 정도면 많은 부분들이 바뀌었겠지요. 가장 눈에 띄는 부분은 BCS 뒷단 데이터저장소에 대한 Write지원입니다. 기존에는 거의 Read Only작업만을 수행 할 수 있었지요

아울러 BCS구성을 위한 Desinger툴이 SharePoint Desinger 2010에 포함 되어 있다는 것 입니다. 기존에는 Application Definition파일을 수동으로 만들거나 Third party 툴을 사용 해야만 했었습니다. 이 SPD(SharePoint Desinger)안쪽의 툴이 CRUD작업의 코드를 자동으로 생성 해 주는 착한 일도 합니다.

이렇게 CRUD작업을 위해 BCS는 External Content Type이라는 개념을 도입해 SharePoint 목록(External List)과 바로 연결 할 수 있도록 구성 되어 있습니다.

MS SQL서버의 테이블을 외부 데이터로 설정하고 목록으로 노출 시키는 시나리오입니다.

먼저 샘플 DB를 생성 하도록 하겠습니다.

아래 스크립트로 MyDatabase라는 DB에 BCS 연결을 만들어 봅시다.

/************************************************

CREATE DATABASE [MyDatabase]

GO

Use MyDatabase

CREATE TABLE [dbo].[Customer](

[CustomerId] [int] NOT NULL,

[FullName] [varchar](50) NOT NULL,

[ModifyDate] [datetime] NOT NULL,

[CreateDate] [datetime] NOT NULL,

CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED

(

[CustomerId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[Order](

[OrderId] [int] NOT NULL,

[CustomerId] [int] NOT NULL,

[Quantity] [int] NOT NULL,

[ModifyDate] [datetime] NOT NULL,

[CreateDate] [datetime] NOT NULL,

CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED

(

[OrderId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Order] WITH CHECK ADD CONSTRAINT [FK_Order_Customer] FOREIGN KEY([CustomerId])

REFERENCES [dbo].[Customer] ([CustomerId])

GO

ALTER TABLE [dbo].[Order] CHECK CONSTRAINT [FK_Order_Customer]

GO

ALTER TABLE [dbo].[Order] ADD CONSTRAINT [DF_Order_ModifyDate] DEFAULT (getdate()) FOR [ModifyDate]

GO

ALTER TABLE [dbo].[Order] ADD CONSTRAINT [DF_Order_CreateDate] DEFAULT (getdate()) FOR [CreateDate]

GO

//--------------------------------------

clip_image001

DB생성 이후 DB의 보안 설정에서 SharePoint 웹애플리케이션이 돌아가는 IIS Application Pool의 계정이 접근 권한을 적절히 줬는지 확인 해야 합니다.

이번 시나리오 에서는 이 MS SQL DB에 SharePoint Application Pool의 계정으로 접근 할 것이기 때문입니다.

SPD로 외부 데이터를 노출할 사이트를 엽니다.

"탑색" 창에서 "외부 컨텐츠 형식"을 클릭해서 "외부 컨텐츠 형식"을 새로 만듭니다.

clip_image002

clip_image003

clip_image004

SQL서버를 선택합니다.

clip_image005

clip_image006

데이터베이스 이름을 제대로 설정하고 "확인"을 누릅니다.

아래 화면에서 "모든 작업 만들기"를 통해 이테이블에 대한 CRUD작업을 자동으로 생성합니다.

clip_image007

clip_image008

clip_image009

각 필드에 대해서 "선택 컨트롤에 표시"를 체크 합니다.

clip_image010

"ModifyDate" "타임스탬프 필드"를 체크해서 해당 Row의 timestamp역할을 하도록 설정합니다.

필터 구성은 이 시나리오에서 사용하지 않으므로 바로 마치면 아래와 같이 각 CRUD작업이 생성되어 있음을 확인 할 수 있습니다.

clip_image011

Ctrl+s를 눌러서 저장하면 이제 폼을 구성 하고 목록으로 만들어 노출 할 수 있습니다.

clip_image012

clip_image013

clip_image014

목록 이름을 설정하고 확인을 클릭

이제 바로가기 메뉴에 "Customer" 목록이 나오는 것을 확인 할 수 있습니다. 하지만 아래와 같이 접근이 되지 않고 에러가 납니다.

clip_image015

중앙관리 사이트에서 해당 BCS개체의 사용 권한을 추가 해 줘야 합니다.

clip_image016

clip_image017

clip_image018

clip_image019

권한 설정 화면에서 찾을 이름을 "authenticated users"라고 치고 이름을 확인 합니다.

clip_image020

clip_image021

모든 사용자를 추가 하고 각 권한을 체크 한 후 확인을 클릭합니다.

이제 다시 Customer목록으로 돌아와 접근이 되는지 확인 합니다.

한번 새로운 데이터를 만들어 보겠습니다.

clip_image022

clip_image023

데이터를 입력하고 저장 합니다.

아래와 같이 목록에 입력된 내용이 표시 되는 것을 확인 할 수 있습니다.

clip_image024

DB에서 Query를 직접 해서 테이블에 입력이 되었는지 확인 해 보겠습니다.

clip_image025

위와 같이 DB입력 까지 된 것을 확인 했습니다.

SharePoint 2010의 BCS기능은 External Content Type과 External List의 도입으로 기존 LoB Application의 데이터를 SharePoint Presentation까지 별도의 코드가 거의 없이 바로 표현이 가능 할 뿐 아니라 Data의 CRUD전체 작업을 할 수 있습니다.

댓글 없음:

댓글 쓰기