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
//--------------------------------------
DB생성 이후 DB의 보안 설정에서 SharePoint 웹애플리케이션이 돌아가는 IIS Application Pool의 계정이 접근 권한을 적절히 줬는지 확인 해야 합니다.
이번 시나리오 에서는 이 MS SQL DB에 SharePoint Application Pool의 계정으로 접근 할 것이기 때문입니다.
SPD로 외부 데이터를 노출할 사이트를 엽니다.
"탑색" 창에서 "외부 컨텐츠 형식"을 클릭해서 "외부 컨텐츠 형식"을 새로 만듭니다.
SQL서버를 선택합니다.
데이터베이스 이름을 제대로 설정하고 "확인"을 누릅니다.
아래 화면에서 "모든 작업 만들기"를 통해 이테이블에 대한 CRUD작업을 자동으로 생성합니다.
각 필드에 대해서 "선택 컨트롤에 표시"를 체크 합니다.
"ModifyDate" "타임스탬프 필드"를 체크해서 해당 Row의 timestamp역할을 하도록 설정합니다.
필터 구성은 이 시나리오에서 사용하지 않으므로 바로 마치면 아래와 같이 각 CRUD작업이 생성되어 있음을 확인 할 수 있습니다.
Ctrl+s를 눌러서 저장하면 이제 폼을 구성 하고 목록으로 만들어 노출 할 수 있습니다.
목록 이름을 설정하고 확인을 클릭
이제 바로가기 메뉴에 "Customer" 목록이 나오는 것을 확인 할 수 있습니다. 하지만 아래와 같이 접근이 되지 않고 에러가 납니다.
중앙관리 사이트에서 해당 BCS개체의 사용 권한을 추가 해 줘야 합니다.
권한 설정 화면에서 찾을 이름을 "authenticated users"라고 치고 이름을 확인 합니다.
모든 사용자를 추가 하고 각 권한을 체크 한 후 확인을 클릭합니다.
이제 다시 Customer목록으로 돌아와 접근이 되는지 확인 합니다.
한번 새로운 데이터를 만들어 보겠습니다.
데이터를 입력하고 저장 합니다.
아래와 같이 목록에 입력된 내용이 표시 되는 것을 확인 할 수 있습니다.
DB에서 Query를 직접 해서 테이블에 입력이 되었는지 확인 해 보겠습니다.
위와 같이 DB입력 까지 된 것을 확인 했습니다.
SharePoint 2010의 BCS기능은 External Content Type과 External List의 도입으로 기존 LoB Application의 데이터를 SharePoint Presentation까지 별도의 코드가 거의 없이 바로 표현이 가능 할 뿐 아니라 Data의 CRUD전체 작업을 할 수 있습니다.