블로그 이미지
정홍주
Azure에 대한 내용뿐만 아니라 새로운 트렌드로 빅데이터, BI, SharePoint, 앱 등의 내용을 다룹니다.

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Notice

2012.04.10 08:30 SharePoint/SharePoint 2010

SharePoint 2010-Sandboxed 솔루션에서의 Localization

 

이번 글에서는 Sandboxed 솔루션에서의 지역화에 대한 내용을 알아보도록 하겠습니다.

이를 통해 SharePoint Online에도 적용할 수 있습니다. 보다 자세한 사항은 아래 링크를 참조할 수 있습니다.

http://msdn.microsoft.com/en-us/library/gg615453.aspx

http://msdn.microsoft.com/en-us/library/gg615457.aspx

 

l  리소스 파일 추가

SharePoint 프로젝트를 생성하고 기본 리소스 파일을 추가하는 방법은 아래와 같습니다.

해당 SharePoint 프로젝트의 속성에서 리소스 페이지를 선택하고 기본 리소스 파일을 추가하면 Resources.resx 파일이 생성되며 이름과 값을 구성하면 됩니다. 그리고 또 다른 LCID 리소스 파일을 생성해서 활용할 수 있습니다.

 

  

l  패키지에 리소스 어셈블리 추가

리소스 파일을 추가한다고 해서 리소스 어셈블리가 적용되는 것은 아니라 패키지 디자이너에서 기존 어셈블리를 추가해서 설정해야 합니다. 먼저 프로젝트를 빌드합니다. 패키지 디자이너에서 고급을 클릭하고 기존 어셈블리를 추가합니다. 위치는 LCID(, ko-KR) 경로를 지정해야 합니다.

 

 

l  코드에서 리소스 사용

코드에서 리소스를 사용해보도록 하겠습니다. Sandboxed 솔루션에서는 App_GlobalResource, 14\Root 폴더에 적용할 수 없어 코드를 통해 접근할 수 있는데 아래 코드로 간단히 액세스 가능합니다.

디자인의 컨트롤은 Label, DataGrid가 들어가 있습니다. 아래처럼 코드를 적용할 수 있습니다.

protected override void OnInit(EventArgs e)

{

base.OnInit(e);

InitializeControl();

       

       lblListTitle.Text = Properties.Resources.lblListTitile;

gridListItems.Columns[0].HeaderText = Properties.Resources.TitleHeader;

gridListItems.Columns[1].HeaderText = Properties.Resources.AuthorHeader;

 

 

l  Feature, 기능에 리소스 적용

기능에도 리소스를 적용 가능합니다. 기능에 리소스를 추가하려면 Feature를 오른쪽 클릭하여 리소스 추가를 클릭하면 됩니다.

 

Feature의 제목과 설명에 적용하려면 아래와 같이 적용하면 됩니다.

 

 

l  웹 파트 속성에 리소스 적용

웹 파트의 속성의 DisplayName에 적용하려면 아래와 같이 구성 가능합니다.

[Personalizable(PersonalizationScope.Shared), WebBrowsable(true),

        LocalizedWebDisplayName("Property1Name")]

        public string Property1

        {

            get

            {

                return _property1;

            }

            set

            {

                _property1 = value;

            }

        }

 

물론 별도의 attribute 클래스를 생성해야 합니다.

public class LocalizedWebDisplayName : WebDisplayNameAttribute

    {

        public LocalizedWebDisplayName(string resId)

        {

            base.DisplayNameValue = FetchLocalizedString(resId);

        }

 

        string FetchLocalizedString(string resourceID)

        {

ResourceManager rm = Resources.ResourceManager;

            return rm.GetString(resourceID);

        }

    }

 

l  웹 파트의 제목과 설명에 리소스 적용

웹 파트의 제목과 설명에 대한 부분은 코드(코드에서 리소스 사용) .webpart 파일에 적용할 수 있는데 SharePoint Online에서는 테스트가 원활하지 않았으니 차후 적용시 테스트를 좀 더 해야 할 것 같습니다.

아래는 .webpart 파일에 대한 내용입니다.

<properties>

        <property name="Title" type="string">$Resources:WPTitle</property>

        <property name="Description" type="string">Localized Web Part Description</property>

      </properties>

 

l  웹 페이지 같은 경우 jQuery를 통해서 적용이 가능합니다. 이는 추후에 별도로 다루어 볼 예정입니다.

 

Localization만 해도 다루어야 할 부분이 많다고 생각합니다. 언어별 솔루션에 대한 Localization이 필요한 내용이라면 미리 리소스에 대한 내용을 코드, 기능, 웹 파트 속성, jQuery 등에 적용을 고려해야 할 것 같습니다.

 

신고
posted by 정홍주
2011.08.08 12:48 SharePoint/SharePoint 2010

샌드박스 솔루션(2)

샌드박스 솔루션에 대한 코드 내용을 한번 살펴보도록 하겠습니다.

Visual 웹 파트 프로젝트는 샌드박스 솔루션을 기본적으로 지원하지 않아 일반 웹 파트로 구성을 해보도록 하겠습니다.

빈 프로젝트를 생성하고(샌드박스 솔루션으로 선택하고) 새 항목을 웹 파트로 추가해서 아래와 같은 코드를 작성해봅니다.

 

샌드박스 솔루션이지만 코드를 작성하고 빌드, 패키지를 해보면 별 문제 없다는 것을 확인 가능합니다. 해당 사이트 모음의 솔루션 갤러리에 wsp패키지 파일을 업로드하고 활성화합니다.

 

먼저 결과값을 출력할 Label을 아래와 같이 추가합니다.


 

l  Hello World를 출력한 Button 클래스를 추가하고 이벤트에서 Label에 결과 값을 출력합니다.


물론 잘 됩니다. 일반적인 코딩에서는 별 문제 없습니다.


 

l  SPContext 클래스를 테스트하기 위해 아래와 같이 Button 클래스를 추가하고 이벤트에 코드를 작성합니다.


현재 Context 에 대한 정보이므로 별 문제 없이 잘 됩니다.


 

l  RunWithElevatedPrivileges 를 테스트하기 위해 아래와 같은 코드를 작성하고 이벤트에서 RunWithElevatedPrivileges를 사용해봅니다.


빌드하고 패키지 할 때 까지는 문제 없다가 런타임에서 문제가 발생합니다. 제대로 실행되었다면 결과값이 출력되어야 합니다.


 

l  위의 코드와 비슷하게 다른 사이트 모음을 방문해보도록 하겠습니다. 물론 권한은 있습니다.


마찬가지로 별 문제 없다가 실행할 경우 문제가 발생합니다.


 

l  이제 네트워킹을 한번 해보도록 하겠습니다. Google Request를 해보려고 합니다.


오류정보 표시를 클릭해서 좀 더 내려가 보면 System.Net.WebPermission 에 대한 사용 권한을 요청하지 못했다고 문제가 발생합니다. CAS를 적용해주어야 합니다.


 

l  데이터베이스 Connection Open 해보도록 하겠습니다. 문제없다면 Label Open~ 이라는 글자가 출력되어야 합니다.


TypeInitializationException: 'System.Data.SqlClient.SqlConnection'의 형식 이니셜라이저에서 예외를 Throw했습니다 라는 오류가 발생합니다.

 

l  마지막으로 SPFarm에 대한 내용을 액세스해보겠습니다.

 

'Microsoft.SharePoint.Administration.SPFarm' 형식을 로드할 수 없습니다. 라는 오류가 발생합니다.

 

            팜 솔루션으로 배포했을 때는 아무런 문제 없이 진행되는 코드입니다.

 


샌드박스 솔루션은 코딩과 빌드, 패키지에서는 차이가 없으며 실행시 리소스에 제한적이며 안전하게 동작된다는 것을 아실 수 있습니다.


신고
posted by 정홍주
2011.08.01 08:30 SharePoint/SharePoint 2010

SharePoint 2010 Sandbox 솔루션(1)

SharePoint 2010 프로젝트를 만들려고 하면 팜 솔루션이나 샌드박스 솔루션을 선택하는 창을 보게 됩니다.

Office 365 SharePoint Online 사이트에서는 팜 솔루션으로는 제한되고 Client OM, Silverlight, 샌드박스 솔루션을 위주로 진행하게 됩니다.

샌드박스 루션이 어떤 것인지 좀 더 구체적으로 알아보도록 하겠습니다.


위 화면의 옵션은 프로젝트를 생성할 때 선택이 가능하며 배포하기 전에도 속성을 변경이 가능합니다. 

샌드박스 솔루션의 특징은 다음과 같습니다.

l  해당 사이트 컬렉션의 기능에서만 보입니다. 다른 사이트 컬렉션에서는 보이지 않습니다.

l  사이트 컬렉션 소유자가 wsp파일을 솔루션 갤러리에 업로드 할 수 있습니다. 그리고 활성화합니다.

 

l  보안에 대해 안전하게 사용할 수 있다. 보안에 제한적이라는 의미입니다.

l  리소스가 제한적으로 기본적으로 300 포인트에서만 동작되게 됩니다. 초과하게 되면 임시적으로 중지됩니다. CPU, 데이터베이스 쿼리 등이 리소스에 해당되며 내부적으로 포인트를 계산합니다.물론 중앙관리에서 포인트를 수정 가능합니다.

 

l  개발자가 코딩하는 것은 큰 차이 없습니다. 빌드, 디버그, 배포에도 큰 차이 없습니다. 해당 코딩에 대해서는 문제가 있을 경우 런타임에서 에러가 나타나게 됩니다. 전체 개체 모델의 SubSet으로 보면 됩니다.

l  SPFarm, SPService, System.Net.HttpWebRequest.Create, SPSite 에서 다른 사이트를 액세스하려고 할 경우, SPSecurity.RunWithElevatedPrivileges, SQL Connection 등은 문제가 발생하게 됩니다. 해당 사이트 컬렉션에서만 놀아야 한다고 보시면 됩니다.

l  모든 프로젝트 템플릿과 프로젝트 항목이 샌드박스 솔루션을 지원하는 것은 아닙니다. (비쥬얼 웹 파트, 사이트 정의, 비즈니스 데이터 연결 모델, 응용 프로그램 페이지 등)

 

l  페이지 편집에서 웹파트 추가 등 사용하는 것에는 별 차이 없습니다.

l  샌드박스 솔루션을 이용하기 위해서는 중앙관리에서 “Microsoft SharePoint Foundation 샌드박스를 작동하는 코드 서비스서비스를 시작해주어야 합니다.


l  w3wp.exe 프로세스에서 운영되는 것이 아니라 SPUCWorkerProcess.exe에서 운영됩니다. 

 

다음 내용에서 샌드박스 솔루션에서 직접 런타임에서 오류가 발생하는 내용을 알아보도록 하겠습니다.

신고
posted by 정홍주
prev 1 next

티스토리 툴바