When re-created an AD user or group permission is not working

[현상]

SharePoint 내 AD 의 도메인 그룹 혹은 사용자를 추가한 상태에서 해당 object 를 삭제하고 동일한 ID 로 다시 생성한 경우 접근을 할 수 없음

[점검 내역]

  1. 조직 구성
    image
    1. TestOU1
      1. TestOU1_Sub1
        1. TestOU1_Sub1_User1
        2. TestOU1_Sub1_User2
      2. TestOU1_Sub2
        1. TestOU1_Sub2_User1
        2. TestOU1_Sub2_User2
      3. TestOU1_User1
      4. TestOU1_User2
    2. TestOU2
      1. TestOU2_User1
      2. TestOU2_User2
  2. 사이트 구성
    1. extranet.spnote.com
      - TestOU1, TestOU2 도메인 그룹에 읽기 권한 추가
      1. TeamSite_OU1
        - TestOU1 도메인 그룹에 읽기 권한 추가
      2. TeamSite_OU2
        - TestOU2 도메인 그룹에 읽기 권한 추가
  3. 테스트
    1. 사용자 이동
      - 그룹: TestOU1_User2 를 TestOU2 로 이동 (정상 동작)
      - OU 만 이동 시 권한의 변화 없음 (그룹 간 이동이 아님)
      1. 이동 전
        clip_image001[9]
      2. 이동 후
        clip_image002[6]
    2. 사용자 삭제: TestOU1_User2
      - 재 인증 요청함
      clip_image003
    3. 사용자만 다시 추가: TestOU1_User2
      - 인증은 했으나 Access Denied 됨
      clip_image004[6]
      - TestOU1 그룹에 TestOU1_User2 추가 (정상 동작)
      clip_image005
    4. TestOU1 그룹 삭제
      clip_image006[6]
      - 접근 불가
      clip_image007[6]
    5. TestOU1 그룹 재 생성, 사용자 멤버 재 구성 후에도 접근 불가
      - 브라우저 재 시작해도 접근 불가
      - IIS 에서 App Recycle, Reset 해도 접근 불가
      image

      - User Profile compile 은 VM 에 구성되지 않아서 테스트 불가 (과거 운영에서 시도 시 되지 않았음)
      - The User Profile Replication Engine will not replicate distribution lists or security groups,
      but it will replicate site memberships (for example, My Sites)
      .

      - 관리자로 로그인하여 사이트 접근 권한 확인 시 접근 불가 상태 확인
      clip_image001[11]


[원인]

SharePoint 에서는 동일한 ID 의 계정이지만 내부에서 관리하는 SID(Security Identifier) 가 다르므로 다른 권한으로 인식하여 Object 가 다시 추가되더라도 접근을 할 수 없는 현상.

[해결]

  1. Migration 처리
    - AD Groups cannot be used to assign permissions in SharePoint
    - 재 생성된 사용자 혹은 그룹의 Migration 처리
    clip_image001[13]

    - SharePoint 내부 DB 에서 Guid 필드값이 업데이트 됨
    clip_image002
  2. 이후 정상 접속됨

 

 

[참고] 상세 테스트
- Domain Group, Domain Group 내
사용자, 직접 추가된 사용자 삭제

  1. 그룹 권한(TestOU1_Sub2)  삭제
    1. (#1) 그룹 권한(TestOU1_Sub2) 추가 시 레코드 추가됨
      clip_image001[15]
      - Domain Group 일 경우 Token 필드에, 그룹 내 사용자는 ExternalToken, ExternalTokenLastUpdated 필드에 값이 있음
    2. (#2) 그룹 내 사용자가 최초 로그인 시 레코드 추가됨
      -  TestOU1_Sub2_User2
    3. (#1) TestOU1_Sub2 그룹 삭제 시
      - TestOU1_Sub2_User2 접근 불가
      clip_image002[8]
      - DB 값 변화 없음
      clip_image003[6]
    4. (#1) TestOU1_Sub2 그룹 재 생성, 멤버 구성
      - 변화 없음 (3번과 동일함)
    5. Group Migration
      clip_image004
      - SystemID 변경 됨
      clip_image005[4]
    6. 정상 로그인 됨
  2. 그룹 권한(TestOU1_Sub2)  내의 AD 계정(TestOU1_Sub2_User2) 삭제
    - 변화 없음
    clip_image006[8]
    1. 페이지 접속 시 인증창 나타남
      - DB 값 변화 없음
      clip_image007
    2. AD Object 재 생성 및 TestOU1_Sub2 그룹에 멤버로 추가
    3. 정상 로그인 됨
      - SharePoint 에 추가된 그룹 내 사용자는 Migration 하지 않아도 재 인식
      - 사용자는 SharePoint 에 직접 추가된 것이 아님
    4. 기존 레코드의 tp_Deleted, tp_ExternalToken, ExternalTokenLastUpdated 값 변경되고 신규 레코드가 추가됨
      clip_image008[6]
  3. AD User (SID_Test2, 3) 삭제
    - TeamSite4 의 Members 그룹에 SID_Test2, SID_Test3 사용자 추가
    image
    - SID_Test2 는 삭제, SID_Test3 는 삭제 후 재 생성하고 MigrateUser 수행

    1. 두 계정 로그인 후
      image
    2. 두 계정 삭제 후
      - 접속 시 인증창 나타남
      image
      - DB 변화 없음
    3. AD User(SID_Test3) 만 다시 생성
      - 사이트 접속 시 Access Denied
      image
    4. User migration
      1. SID_Test2
        - 사용자 존재하지 않거나 유일하지 않다고 표시됨
        clip_image001[19]

        - 접속 시 인증창 나타남
        image
      2. SID_Test3
        - 정상 적용됨
        clip_image001[21]

        - 정상 로그인
        clip_image002[10]
      3. SharePoint 권한: 변화 없음
        image

Change Web Application Service Account

Configurations for changing a Web Application account are needed at many different locations including System, IIS, and Database. If you just changed an Application Pool identity directly from IIS, you may get an error message of “Cannot Connect to the configuration database.” So, I recommend you to use the method that SharePoint provides and will describe what SharePoint does when applying it.

How to change to a new account (SPNOTE\SP_PortalApp2) and what happened after applying it.

  1. Create a new account
    ex) SPNOTE\SP_PortalApp2 (current: SP_PortalApp)
    1. Create an account as a domain user
      clip_image001
      clip_image002
  2. Register the account as managed account and configure it for a Web Application Pool
    1. Move to Central Admin > Security > Configure managed accounts
      - Register as managed account
      clip_image003
    2. Move to Central Admin > Security > Configure service accounts
    3. Select a Web Application Pool and the new account (SP_PortalApp2)
      clip_image005
    4. Click OK
      - When you click OK, you will see this message. You should run “IISRESET /NOFORCE” on all servers in the farm. Application Pool for each Web App is changed automatically though. Refer to 3.3)
      clip_image006
  3. What has happened after applying it?
    - SharePoint automates various configurations to the System, IIS, and SQL Server
    1. The user has added into three groups
      - IIS_IUSRS, Performance Monitor Users, WSS_WPG
      clip_image007
    2. Application Pool Identity has changed
      clip_image008
    3. The Application Pool is recycled
      clip_image010
      clip_image012
    4. The user has added to related SharePoint databases (For my environment)
      - Owners: ProfileDB , SocialDB, SyncDB, WSS_Content_Intranet
      - WSS_Content_Application_Pools: SharePoint_AdminContent, SharePoint_Config, StateService
      # ex) WSS_Content_Intranet (http://intranet.spnote.dev)
      clip_image013
      * When you change the service account to another one ex) SP_PortalAppNew and delete from Managed Accounts, the SP_PortalApp2 still exists in WSS_Content_Intranet Database. This means SharePoint doesn’t delete the user(SP_PortalApp2) from the Database automatically.
  4. Access to the site (http://intranet.spnote.dev)
    1. I faced the error “Cannot Connect to the configuration database.”
      - At this time I didn’t run the IISRESET and you may notice all credentials must be updated. If you have multiple servers in a farm, then this PowerShell script may help you.
      clip_image015
    2. Run the IISRESET /NOFORCE
      clip_image016
    3. Access again
      - Fill account information
      clip_image018
      - It works fine
      clip_image020

Set Email Notification values on a UserProfile

In OOTB SharePoint 2010, all the three options for Email Notifications are checked. This may help customers for collaboration but some others may think that they receive lots of unnecessary emails and get annoyed. If your company size is big enough like me (30,000+), your IT department manager will make a request for disabling all or some of them.

The request was to disable the last option.

  • Uncheck “Send me suggestions for new colleagues and keywords”

After searching on this, I found out that there is a nice one using PowerShell but I couldn’t find the how the option value is saved because the value has changed to a different value when I save it into the UserProfile. In addition, I wanted to add some features such as examining values, applying multiple sites and saving some information into a log file.

The simple application looks like below.
image

At first, I thought updating the options for the UserProfile should be easy but if you tried some combinations, you will realize saved values are somehow different than the value should be.

You may think the option value will be saved like this
[V] Notify me when someone leaves a note on my profile
[V] Notify me when someone adds me as a colleague
[   ] Send me suggestions for new colleagues and keywords
=> option  value: 110

image
# Binary and Decimal values

Surprisingly, you will notice the Email Notification setting value is 100 (SP) instead of 110 (UI) when you read it from SharePoint. I could figure out after trying several times with combinations

Now I am going to explain how the value is saved.

  1. Without conversions – think the other way
    1. Checked: 0, Unchecked: 1
    2. Concatenate the option values in opposite order
      - Concatenate them in descending order (from 3 to 1)
      image
  2. Convert UI one (110) to SharePoint one (100)
    1. Reverse the each options
    2. Reverse characters
      image

The option value 110 (UI Version) is saved into 100 (SP Version) and I have no idea why the developer is saved it this way. You may find a method for doing this from SharePoint dlls(Please let me know if you find it).

Some tips from my exprience are

  1. SPSEmailOptins value is null (default)
    - The value null means 111 (all of them will be checked)
    - Check the value is null when you read the value
      You can read the value once you saved it.
  2. Login as farm administrator account
    - you can add another account at UserProfileServiceApplication > Administrators for testing.
    image
  3. Check if user exists from UserProfileManager
    - UserProfileManager.UserExists(accountName)

I had a hard time configuring My Site and testing this app. My Site configuration was hard and took some time. I will write an article about it later.

SharePoint 2010 Custom Action

안녕하세요? Will 입니다.

이번시간에는 Custom Action에 대해서 자료를 올려 보도록 하겠습니다. SDK에 올라와 있는 자료를 가지고 원래는 글을 쓸려고 하였으나.

SDK자료가 에러가 나는 관계로 간단히 Custom Action을 만들어 보도록 하겠습니다.

1. VS2010으로 Project에서 새로운 프로젝트를 생성 하도록 하겠습니다. SharePoint2010에 있는 ContentType을 생성 하도록 하겠습니다.

2. VS2010 의 Feature.xml의 이름과 ContentType에 있는 이름을 알아서 변경 합니다.

3. Elements.xml 파일의 내용을 채웁니다.

Location 은 상태라고 생각 하시면은 됩니다. View모드냐 Edit모드냐와 같이 상태 모드입니다.

RegistrationId 는 문서라이브러니냐 아님 일반 리스트(100)냐 등등과 같이 리스트 값들이 지정되어있습니다. 아래 소스는 문서라이브러리(101)로 설정 하엿습니다.

RegistrationType 은 리스트냐, ContentType 이냐 등과 같은 걸 정의하는 곳입니다.

Title은 이름 그대로 타이틀입니다.

UrlAction 은 해당 타이틀이 선택 될때 동작할 내용을 적어 넣는 것입니다. 이번에는 간단히 test라는 알러트 창을 띄우겟습니다.

[code:xml;ln=off]

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <CustomAction Id="Ribbon.Library.Actions.AddAButton"
   Location="ViewToolbar"
   RegistrationId="101"
   RegistrationType="List"
   Title="Add a Ribbon Button">
    <UrlAction Url="javascript:alert('test');"/>
  </CustomAction>
  </Elements> 

[/code]

4. 내용을 채우고 나서 빌드를 하고 배포를 합니다.

SharePoint2010 SDK  의 내용 중 에러가 나는 곳이 CommandUIHandlers 안에 CommandUIHandler 의 프로파티 중 CommandScript 자체를

VS2010에서는 프로파티로 인식을 못합니다. 그래서 SDK는 에러가 납니다.

 소스는 아래에 첨부 합니다.

CustomAction.zip (37.64 kb)

Visual Studio 2010 SharePoint Support

Visual Studio 2010 을 이용하여 SharePoint Application 을 개발하며 느낀 것은 새롭게 추가된 SharePoint를 지원하는 기능 중에 가장 유용한 부분 중 하나가 Packaging 이라고 생각합니다. SP 2007 시절, WSPBuilder 를 통해 WSP 파일을 만들거나 이 툴 역시 세밀한 컨트롤이 되지 않아서 직접 makecab 을 이용하여 만들기도 했었는데, 이젠 Visual Studio 에서 알아서 해주니 그야말로 편한 세상입니다. 하지만, 역시나 WSP 랑 비슷하게... 제공하는 것을 쓰다보면 맘에 안 드는 부분이 생기기 마련입니다. 직접 컨트롤하던 것과 비교하여 맘에 안 드는 부분이 생겨서 이 부분을 수정할 수 없나하고 뒤져보던 중... 프로젝트 파일 안의 Microsoft.VisualStudio.SharePoint.targets 을 알게 되었습니다. Andrew Connell 아저씨 방식처럼 Deployment Files 폴더 만들고 ddf, Targets 파일 만들고 직접 컨트롤 하는 방식과 유사하다면 유사하다고 할 수 있겠지만, 여기에 신경 좀 썼다는 것을 느낄수가 있었습니다.

첫째로, *.csproj 파일을 열어보면 아래와 같이 한줄이 추가되어 있는 것을 확인할 수 있습니다.

[code:xml;ln=off]

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" />

[/code]

위 경로는 다음과 같습니다. ( MSBuildExtensionsPath32 : C:\Program Files (x86)\MSBuild )
"C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\SharePointTools" 즉, 위 경로로 이동하면 targets 파일을 찾을 수가 있는데, 이 파일을 열면 새로운 세상?을 만나게 됩니다. 프로젝트에서 빌드시 해당 내용에 따라 위의 파일에서 분기되어 처리되는 것을 예상하게 됩니다. (설마 아닐까???) (Visual Studio Add-In 제작과 MSBuild 의 사용 및 구성에 대해 공부할 필요를 느낍니다.)

MSBuild 와 Visual Studio 에 Add-In 된 기능들, 그리고 Microsoft.VisualStudio.SharePoint.Tasks.dll 의 로직을 분석하면 Visual Studio 2010 에 추가된 Solution Build 기능의 해부가 가능할 것 같습니다. 하루빨리 누군가가 정리해서 올려주면 감사할 것 같네요~ (넘기기) ^^ 평소에 친숙하지 않는 분야를 건너뛰기 위해선 흘려야 할 피가 많아서??? 여튼, Amazon.com 에 가서 보니, MSBuild 에 대한 정보가 별로 없다고 하군요... 대신 책 하나 좋은 거 있으니 추천별 5개에 그 이름은 Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build 입니다. 그리고 Visual Studio Add-In 관련해서는 Professional Visual Studio Extensibility (저자 아저씨 머리 웃김...) 입니다. 요즘 사고 싶은 책들이 많아 몸이 근질근질 합니다. ㅠㅠ

 기존의 Application 을 VS 2010 에서 Converting 하던 중... 패키징시 Feature 폴더 이름이 "{솔루션 이름}_{Feature 이름}" 이러게 되어 있어 맘에 안들어서 여기까지 왔습니다. 왜 Solution 이름과 Feature 이름이 포함되고 UnderScore( _ ) 는 왜 들어가는지??? (기존 Feature 이름과의 충돌을 막기 위해서라는 생각밖엔...) 만약 이 부분이 커스터마이징이 안된다면 저 책들을 사던지, 아님 돈 없으면 시간과 노력을 투자하던지 할 것 같습니다.

이 분야에서 전문가의 의견을 듣기를 희망하며 다른 분들도 여기에 살짝 발을 담가보시는건 어떠실지??? 추천을 해봅니다.

SharePoint 2010 Debugging

SharePoint 2010 Debugging  은 SP 2007 과 거의 같습니다. (지금 SP 2007 web.config 가 없어서 확신이 없음...) 이전 글에서 AllowInefficientQueries 에러를 만나고 나서 이전 방식으로 Web.config 파일을 수정했는데, Visual Studio 에서 Script Debugging 이 잘 동작했습니다. 주석으로 Line 번호를 추가하였으니 문자열 검색 혹은 VS 에서 Ctrl + G 하시고 Line 번호 넣고 찾아가셔도 됩니다.

SharePoint 2010 Debugging is almost same with MOSS 2007. Find a web.config file for your Web Application and change values.
  - Path might be: "C:\Inetpub\wwwroot\wss\VirtualDirectoties\<YourWebApplicationName>”
    ex) C:\inetpub\wwwroot\wss\VirtualDirectories\intranet.spnote.dev80

수정할 부분은 아래와 같습니다.
What items should you change are below.

  1. CallStack : true
  2. customErrors : Off (case sensitive)
  3. debug: true

[code:xml;ln=off]

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <SharePoint>
    <SafeMode CallStack="true"> <!-- Line: 51 -->
  </SharePoint>
  <system.web>
    <customErrors mode="Off" /> <!-- Line: 341 -->
    <debug="true">              <!-- Line: 350 -->
  </system.web>
</configuration>

[/code]

위 설정을 완료했음에도 아래의 메시지가 나타날 수 있습니다.
Even though you have configured the values on web.config, you may encounter an error screen below.

image

이때 주소가 /_layouts/* 로 시작된 것이라면 이 Virtual Directory 내의 Web.config 파일도 수정을 해야합니다. 이때는 customErrors Mode 만 Off 로 설정하면 됩니다.
If the URL is like /_layouts/* then you need to change the web.config in _layouts(Virtual Directory) as well. You can simply change customErros Mode to Off.
  - Path: 14 HIVE\TEMPLATE\LAYOUTS\web.config

image

[참고]
- Download Web.config: web.config.zip (9.48 kb)

A first look at SharePoint 2010 Development

SharePoint Server Search Service 시작 이후, 부쩍 늘어난 메모리 사용량을 해결하고자 4GB RAM 의 추가 구매를 했습니다. ㅠㅠ VS 2010 실행하고 간단한 코드 작성과 팀사이트 하나 열고 작업관리자를 보니 약 3.0GB 를 차지합니다. 중앙관리까지 열면??? 다시 한번, 하드웨어 사양이 중요함을 느낍니다.  ㅡㅡ;

Anyhow, Toatal 8GB RAM 장착 기념으로 SharePoint 2010 Developer Walkthroughs 1 을 따라해봤습니다. Title 은 Walkthrough 1: Using LINQ to SharePoint from within a Visaul web part ( SharePoint Visual web part 에서 LINQ 사용하기) 입니다. 흠... 첫번째라 만만히 봤는데, 단지 기능적인 부분이 아닌 완벽한 소스 따라하기?를 하다보니 애로사항이 있었습니다. 그리고 Visual Studio 2010 에서 추가된 막강한? 기능들을 보니 확실히 수작업? 했던 예전에 비하면 완젼 편해졌지만... 어느정도 단점이 될만한 부분도 있더군요... 우선, 이번 작업을 하면서 발견한 사항들입니다.

Things to study...
( 앞으로 공부할 내용으로, 현재 알고 있는 지식 혹은 느낌으로만 요약함 )

  1. Sandboxed Solution VS Farm Solution
    - SP 2007 에서 Farm 배포만 되던 solution 이 Site Collection 레벨에서 배포 테스트 용도 혹은 작은 단위의 Solution ? 등으로 활요할 것으로 보임
  2. Microsoft.SharePoint.Linq 와 SPMetal 명령어 툴
    - Linq 는 써보지 않았지만, 예전 CAML Query 로 제한이 많았던 부분을 어느정도 해소할 것으로 기대함
    - SPMetal 은 List 로부터 content type 정의와 list schema 를 읽어서 Entity Class 를 생성해준다.
      ( 한번 써본 결과의 평가 : Good~~ )
  3. SharePoint 2010 Templates
    - 종류가 여러가지이나, 이번 예제에서 사용되는 Visual Web Part Template 은 SP2007 시절시 UserControl WebPart 를 연상하게 한다.
  4. Visual Studio 2010 Support
    - Template 만으로도 간단히 Solution 파일이 생성되고 솔루션 배포 그리고 필요한 Feature 까지 Activation 되는 놀라운 기본 기능
    - 프로젝트 파일을 열어보니 특별한 target 을 사용하는 부분을 발견했습니다. SP 2007 에서 주로 사용했던 Andrew Connel 방식과 유사할 것으로 예상합니다.

흠... 역시나 SharePoint 의 새 버전 출시는 많은 것을 들고 나오기에 따라가기가 쉽지 않네요... SP 2007 이 해외에서 너무 많이 팔려서 그런지 MS 에서 힘 좀 쓴 걸로 보입니다. 환율이 좋은 이 즈음, Amazon 에 가서 선 책주문을 걸어놔야겠습니다.

 

자~ 그럼 Walkthrough 1으로 돌아가겠습니다. 위 링크를 따라가서 다운받은 PDF 문서를 보면 SharePoint 개발자라면 충분히 따라할 내용이니 세부 설명은 생략하고 제가 진행하면서 막혔던 부분이나 의문을 가졌던 부분을 설명하겠습니다. 그 첫째는 SPMetal 의 실행입니다. 둘째는, Linq 를 사용하는 코드에서 다른 리스트의 내용을 참조하는 부분입니다.

  1. SPMetal 의 실행
    - Visual Studio Command Prompt(2010) 메뉴로 들어가서 spmetal 하고 치면, 안됩니다. ㅡㅡ;
    환경 변수에 들어가 있지 않으니, 당연히 안되는 것으로 생각하고 있습니다. 하지만, 이 명령어의 위치는 알고 있으므로 직접 가서 실행하면 됩니다.

    Path: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN
    ex) spmetal /web:http://wss40 /namespace:SPNote.Projects
          /code:E:\SharePoint\SPHOLs\SPLinqSolutionDemo\SPNote.Projects.cs
         (실행을 하기 위해 한줄로 붙이는 센스는 물어볼 필요없는 덕목?입니다.)

    실행하면 다음과 같은 경고 메시지가 나오는데, List Form Templates 는 빠진다는 내용으로 현재 예제 실행과는 관계 없으므로 과감히 무시해도 됩니다.

      # 예제 실행화면


  2. Sample Code 에서 Employee Entity 에서 Project Entity 를 Property 로 참조하는 부분
    우선 코드는 단편적인 코드는 아래와 같습니다.

      # 코드 요약


    위의 음영된 부분인 Project 는 어떻게 List 를 구성하면 나오는 걸까??? 하고 무지 궁금했습니다. 마침 약속까지 있는 상황에서 조급해지는 마음에 비체계적인 방법으로 새로 추가된 기능인가? 등 무지막지하게 시도를 해보았는데... 잘 안��더군요... 지금 생각해보면 마치 웹에서 지도 감상시 축소 한번만 하면 순식간에 해결될 듯한 문제였습니다. 흠... 혹시 위 문장이 이해가 안되는 분들을 위해서 설명을 드리자만... 특정 범위내에서 한정하기보다 좀 더 위로 올라가서 일반적인 시각으로 본다는 머 그런 내용입니다. 저는 Content Type 을 이용하여 도전해 보았는데 Item 을 상속하므로 Title 은 둘다 있게 되어 값을 저장하면 같이 저장되는??? 안타까운 현실에 어떻게 풀어볼까 시간 소모만 했었습니다. 정리하자면, 쉽게 생각하면 아주 쉬울수도 있고 괜히 다른 옵션들 안 누르는게 좋다는 것입니다. 
    (덕분에 AllowInefficientQueries TRUE 해달라는 에러까지 도달하였는데, Beta2 부터 안된답니다. ㅡㅡ; 여튼, 다시 한번 축소했기에 Go to bed 가 눈 앞에 있습니다. ) 덕분에 구글링 좀 해보니 JOIN 도 되고 완젼 좋아 보입니다. ^^ 보너스로 비효율적 LINQ 연산자 리스트 주소 남깁니다.

    여러분도 한번 해보시기 바랍니다. 빠르게 한방에 되는 것도 좋지만, 시행착오 속에 발전하는 실력과 SharePoint 의 폭넓은? 이해가 아닐까요? ^^ 저는 덕분에 SDK 좀 뒤져보고 Microsoft SharePoint Foundation 2010.chm 이 더 자주 사용하게 될 것으로 예상하고 있습니다. (WSS 3.0 의 계보를 잇는?)

 

마지막으로 Employees List 의 AllItems 와 테스트 결과 화면입니다.

  # Employees List 의 AllItems.aspx



  # 테스트 결과

 

결론은, 역시나 Sharepoint 2010 개발도 많은 경험과 깊은 연구? 생활을 다시한번 요구될 것으로 예상합니다. 다들 힘내시라는 말밖엔...

위 작업하다가 궁금한 부분이 있으면 질문 환영합니다. 현재 SP2010 Machine 이 집에만 있는 관계로 답변은 느립니다. 참조하시기 바랍니다.

 

SharePoint 2010 Columns

안녕하세요?

Will입니다. 이번에는 저번에 2007에서 개발한 소스를 가지고 SharePoint 2010 에서 다시 사용 할 수 있는지

체크를 해보도록 하겠습니다.

VS2010 의 Class Library를 사용해서 만들어 보았습니다 밑에 포스팅 되어 있는 내용을 참고로 하시면은 됩니다.

그리고 나서 배포를 해보았습니다. 배포후 아래와 같은 결과 하면을 볼 수 있습니다.

결과 1) 새글 추가

 결과2) 내용을 채우 겠습니다.

결과 3) 내용을 쓰면은 0의 값이 들어 가는걸 확인 할 수 있을 것입니다. 

 결과 4) 그리고 나서 DisplayMode에서 확인한 결과 버튼이 잘나오네요.

 결과 5)버튼을 클릭 해 보았습니다.

 

결과 6) 그리고 닫으니.... 허걱 값이 안변하네요! 아마 중간에 확인을 눌렀을시 이벤트가 동작 해야 되는데 닫기를 눌럿더니 값이 안변한것 같습니다.

결과 7) 하지만 F5을 눌러 Refresh를 하니 아래와 같이 값이 들어가 있는 걸 확인 할 수 있습니다.  

SharePoint 2010은 ClientScript로 Ajax처리가 되어 있어서 값의 변화가 있을 시 제로드를 하기 때문에 기존의 값이 변하지 않는 것을 확인 할 수 있습니다.

하지만 자체 DB에 저장되어 있는 값은 +1이 되어 있는 것을 확인 할 수 있습니다.  해당 문제에 대해서는 조금 더 SharePoint 2010을 분석한 후에 추후에

수정 하도록 하겠습니다.  밑에 SharePoint 2010 개발 소스를 올립니다. 참고 하시고 소스에는 주석으로 저희 사이트 이름을 소스에 꼭 넣어서 사용해 주시기 바랍니다.

 질문은 메일로 보내주시거나 코멘트를 다시면은 답변을 드리도록 하겠습니다.

 

SPNote.SharePoint.Fields.zip (38.15 kb)

SharePoint 2010 Study 1

안녕하세요? Karl 입니다.

Finally!!! 개발 PC를 손에 넣었습니다. 그동안 눈팅만 하다가 저만의 규칙?에 따라 그냥 구매했습니다.
(규칙: 소비만큼 열씨미 하게 된다? CPU 는 중간에 바꾸기 어려우므로 좋은걸로 산다. 등등...)
Will 과 함께 2010년 1월 9일(토요일) AM 10:00 에 용산에서 만나서 집으로 옮기고 밤새 조립을...
그리고 현재의 Fantastic PC 를 감상하고 있답니다.

웁스~ Windows 2008 부터 시작하여 SharePoint 2010 까지 설치하는데 거의 하루가 걸렸습니다... ㅡㅡ;
더욱 맘에 안드는 것은 Search 서비스 시작하고 나서 메모리를 확 잡아 먹는다는 것입니다.
(메모리가 4GB 인데, 거의 잡아먹습니다. => 식충으로 예상하고 있음...)
Stop 시키고 싶지만, SP 2007 처럼 버튼 한방에 안되는 관계로 PASS~~ 했습니다. ㅠㅠ
흠... List(목록)의 Item 출력이 궁금해서 AllItems.aspx 렌더링된 html 을 Visual Studio 2010 으로 열었더니...
기어갑니다. TAB 누르면 잠시 있다가 움직이는 그런 비쥬얼 효과... , 승질나서 VS 2008 로 이사갔습니다. ㅡㅡ;

여담이 길었습니다만...
SP2010 개발을 위해서는 고사양의 시스템이 받쳐주지 않으면 일 못한다고 배째야할 것 같습니다.

 

그럼 SharePoint 2010 Study 을 시작하겠습니다. 주제는 예상하셨다시피... AllItems.aspx 입니다.

[AllItems.aspx]

[code:html;ln=off]

<!-- Item1 Begin -->
<tr class="ms-itmhover" iid="2,1,0">
    <td class="ms-vb-itmcbx ms-vb-firstCell">
        <input type="checkbox" class="s4-itm-cbx" />
    </td>
    <td class="ms-vb2"></td>
    <td height="100%" onmouseover="OnChildItem(this)" class="ms-vb-title">
        <div class="ms-vb itx" CTXName="ctx2" id="1" Field="LinkTitle" Perm="0x7fffffffffffffff" EventType="">
            <a onfocus="OnLink(this)"
                href="http://wss40/_layouts/listform.aspx?
                    PageType=4&amp;
                    ListId={A5E99EC8-9246-41C2-8539-483BCEC57E0A}&amp;
                    ID=1&amp;
                    ContentTypeID=0x010097742119E6460B479093DF8B310706DF"
                onclick="EditLink2(this,2);return false;" target="_self">
                Item1
            </a>
            <img src="/_layouts/1033/images/new.gif" alt="New" title="New" class="ms-newgif" />
        </div>
        <div class="s4-ctx">
            <span> </span>
            <a onfocus="OnChildItem(this.parentNode.parentNode); return false;"
                onclick="PopMenuFromChevron(event); return false;" href="javascript:;" title="Open Menu"></a>
            <span> </span>
        </div>
    </td>
    <!-- Body Column1 -->
    <td class="ms-vb2">
        <div dir="" class="ms-rtestate-field">
            <div class="ExternalClass0463C750337B4A10B3DC94F5CC2F35FF"><p>Body​</p></div>
        </div>
    </td>
</tr>
<!-- Item1 End -->

[/code]

현재 SP2007 이 없어서 비교할 수는 없지만, 기억을 더듬어 간략히 정리하겠습니다.
첫째로, 렌더링을 담당했던 schema.xml 에서 이제는 XSL 로 대체되는 것으로 보입니다.
schema.xml 라인수는 87 밖에 되지 않고 main.xsl 을 참조합니다.

<XslLinkDefault="TRUE">main.xsl</XslLink>

그리고 main.xsl 은 아래와 같이 필드타입, 뷰스타일 xsl 파일을 참조합니다.
<xsl:importhref="/_layouts/xsl/fldtypes.xsl"/>
<
xsl:importhref="/_layouts/xsl/vwstyles.xsl"/>

뒤져보시면, 위 XSL 파일에서 Item Rendering 부분이 보입니다.
SP2010 에서는 XSLT 가 지원된다고 하지만, 기존의 CAML 방식에서 XSLT 로 변환이라고 한다면
schema.xml 부분이 그 대상이라고 생각합니다.
둘다 복잡해보이긴 하지만, 상대적으로 표준적인 XSLT 방식을 채택한 것은 좋은 변화라고 생각합니다.
(참조: Microsoft Professional Evaluation Guide Part - 30 Page)

 

호기심으로 시작한 이번 글은 여기서 마치도록 하겠습니다.
다음 주제는 아래 중 하나가 될 것으로 예상합니다.
  1. VS2010 에 추가된 SharePoint Templates
  2. VS2010 에 추가된 기능 (SandBoxed solution, Server Explorer 에서 탐색기 형태로 사이트를 볼 수 있는 기능 등)
  3. Microsoft Professional Evaluation Guide Part 2

그럼 이만 줄이겠습니다.

[참조]
SP2010_Study1.zip (57.88 kb)

Microsoft Professional Evaluation Guide Part 1

Microsoft Professional Evaluation Guide Part 1
Ver 1.0
Jan 1st, 2010 

이 문서는 SharePoint 2010 에 대해 개발자로서의 개인적인 해석의 간략한 정리입니다. 2년간의 MOSS 2007 개발 경험을 바탕으로 문서를 작성했으나 개인이 작성한 문서이므로 너무 믿으면 후회할 수도 있습니다 

얼마 전 있었던 SharePoint 2010 Ignite Training for Partners 프로그램에 참가하지는 못했지만 이 문서의 정리를 위해 Microsoft Professional Evaluation Guide Part 를 선택했습니다.
원본 문서에서 참고한 모든 내용의 권리는 Microsoft 에 있습니다. 

비 영어권 Korean 으로서 웹에서 자료만 뒤지는 게 아쉽지만, 온라인 그리고 곧 출시될 서적 등의 리소스를 활용하면 이전 버전인 2007 에서 했던 것처럼 같이 많은 부분을 커버할 수 있을 것 같습니다. (인도 방갈로에서 곧 열린다고 합니다. 자신의 파워?를 이용하여 기회를 살리시기 바랍니다.) 

문서의 구성은 크게 2 단계 혹은 3 단계로 나누어 진행하려고 합니다.SP 2010 에 대한 내용과 개발 예제가 그것이지만 아직 개발 PC 의 구매가 이루어지지 않은 관계로 우선은 내용에 대한 생각이 주가 될 것으로 예상합니다  

 

문서 요약
Microsoft SharePoint 2010 의 기능 집합과 확장 가능한 부분에 개요이며 개발자가 위를 이용하여 포괄적인 솔루션을 생성할 수 있도록 이해를 주기 위한 문서입니다. 

소개
빠르게 솔루션을 개발할 수 있도록 풍부한 기능의 제공과 Visual Studio 2010 SharePoint Designer 2010 를 이용하여 생산성 향상과 Visual Studio Team Foundation Server Application lifecyle 의 관리를 제공합니다. 

주목할 부분으로는 아래와 같습니다. (개인 중심의 해석)
1. 개발 플랫폼으로 많은 기능들이 VS 2010 Add In 되어 개발에 편리함과 생산성에 향상
2. BCS(Business Connectivity Services) 에서는 기본의 BDC(Business Data Catalog) 에서 제공하지 않았던  Write(쓰기) 의 지원
3. 기존의 솔루션(WSP)이 중앙 관리에 설치되어 전체가 적용이 되던 부분이 SandBoxed Solution 이라는 새로운 개념이 도입되어 사이트 단위로 솔루션 배포와 활용이 가능 

새로운 기능의 추가에 대한 요약 

개발자 생산성
Visual Studio 2010 SharePoint 프로젝트 타입과 항목?
Visual Studio 2010 SharePoint 툴 확장
Visual Studio Extensions For SharePoint 업그레이드
Windows 7 and Windows Vista 운영체제 지원
SharePoint Designer 2010
Developer Dashboard
Team Foundation Server 2010 통합
  
다양한 플랫폼 서비스
SharePoint 리본
SharePoint 다이얼로그(새창)
Silverlight 웹 파트
List 참조와 관계
Business Connectivity Services (BDC 의 새로운 버전)
LINQ to SharePoint


유연한 배포
Sandboxed Solutions
SharePoint Online
Upgrading Solutions

개발자에 의해 SharePoint 에 포함된 핵심 솔루션 종류 
우선은 Visual Studio 2010 SharePoint Designer 2010 을 이용하여 솔루션 개발을 보다 쉽게, 빠르게, 유연하게 만들 수 있습니다. SP Designer 를 이용하여 Web UI 를 구성하고 코드의 부분은 개발자가 구현하여 빠른 생산성을 기대한다고 합니다. 국내에서의 경험으로는 디자이너 분들이 Designer Tool core.CSS 의 경험 부재로 인해 쉽지는 않을 것 같지만, Workflow 같은 경우라면 wsp 파일로 내보내기가 지원된다고 하니, 개발 이외의 작업 분담과 개발자는 코딩에 집중하는 업무의 형태도 불가능하지는 않을 것 같습니다. 

문서와 목록 관리의 변화된 부분은 아래와 같습니다.
1. 규모가 큰 목록 지원
2. 향상된 검증 (Form?)
3. LOB(Line Of Business) 시스템 연결 

기�� 나머지 부분은 아래와 같습니다.
  -  Workflow SharePoint Workspace 를 포함하는 Client 어플리케이션의 향상
  -  태깅과 평가에 대한 지원
  -BCS 에서 Write(쓰기) 가 가능하므로 기존의 데이터 관리에 유리

WF 를 이용하여 국내 기업에서 구매할 수 있을 정도의 전자결재 제품이 출시된다면 SharePoint 가 널리 퍼질 것 같기도 합니다.
(전자결재 전문가와 함께 오픈 소스를 시작하고 싶은 소망이 있습니다.)  

기존의 주 기능에 수정 및 확장 가능한 부분은 아래의 테이블과 같습니다.

주 기능 기본 기능 확장 가능 부분
Sites 목록과 문서 라이브러리의 자료에 저장과 가져오기시 쉽고 유연한 방법의 제공 웹 파트, 마스터 페이지, 페이지, 델리게이트 컨트롤, InfoPath 양식, Word 변환 서비스를 활용하는 솔루션, Access 서비스 이용
Communities 사용자에 관련된 기능태깅과 평가 기능 정의된 검색, 검색 웹 파트, 태깅 과 평가 및 사용자 커스텀 인터페이스
Content 웹 페이지, 문서, 레코드 등의 자료 관리 커스텀 페이지 타입, 필드 컨트롤, 컨텐트 타입, 문서 세트, 원격 블로그 저장 프로바이터, 워크플로와 Word 서비스. 레코드 관리의 확장과 공용 웹 사이트 확장
Search Database 를 포함한 SharePoint 의 안과 밖의 검색 기능 정의된 검색 결과 변환. 자료의 네비게이션과 위치 파악을 나타내는 그리고 다른 데이터 스토어의 연결을 하는 웹 파트. IFilter 와 프로토콜 핸들러
Insights 엑셀 서비스, 웹 페이지 표시, Dashboard, KPI 기본 기능의 기능 확장
Composites 해당 플랫폼을 이용한 솔루션 기능 웹 파트, 워크 플로, InfoPath 폼 서비스는 사용자가 활용 가능한 툴 사용 증가?


직접 사용해보지 않고 문서만 보고 글 작성을 하려고 하니 한계가 많습니다. 점차 기능을 활용해보고 문서를 수정하도록 하겠습니다