SPNote

SharePoint Notes

NET Reflector is not free after all!!!

SharePoint 2007 개발과 .NET 개발 시에 아주 잘 사용했던 Reflector 가 드디어 유료로 바뀌었습니다.
Lutz Roeder 신께서 공짜로 제공하는 때가 정말 행복한 시절임을 새삼 깨닫습니다.
공짜로 쓰던 것을 돈주고 사서 쓰려면 왠지 쓰고 싶지 않은 마음을 왜 그럴까요?

첫번째 .NET 어셈블리 브라우저인 .NET Reflector 와 2002 년부터 Microsoft Expression 을 하고 계신 Lutz Roeder 님을 다시한번 생각해 봅니다.
  - .NET Reflector
  - Lutz Roeder Site

# Expiration message (May 30)

새로운 가격에 대한 내용은 아래의 링크에서 확인이 가능합니다.
http://reflector.red-gate.com/download.aspx

 # Minimum $35

 

이제 공짜로 즐길 수 있는 App 은 JustDecompile 이 남았습니다.
.NET Framework 4.0 설치를 해야하고 아직 Beta 버전이라서 버그도 많지만,
Reflector 수준으로 하루빨리 성장하기를 기대해봅니다. 

Document Library Pager 에서 RENDER FAILED 발생시에는?

Document Library 에서 다음 페이지를 눌렀을때 아래와 같은 에러 메시지가 나타났을때의 처리 방법

(상황)
Document Library 에는 약 140 개의 문서 Item 이 저장되어 있었고 정렬이 수정일 기준 내림차순으로 기본 뷰가 수정되어 최신 글이 상위로 가는 지극히 국내 환경에 맞는 일반적인 형태로 기본 뷰가 구성되어 있었습니다.

(에러 메시지)
- EN: "<!-- #RENDER FAILED# -->"
- KR: "<!-- #렌더에 실패하였습니다.# -->"

(이유)
이 에러가 발생하는 이유는 SQL Server 의 SharePoint 관리 계정의 언어가 non-English(US) 인 경우에 발생합니다. 이는 날짜 형식이 영어가 아닌 언어로 선택되어 있을 경우에 문제가 발생한다고 합니다.

당연히 한국에서는 한글 제품을 사용하므로 기본 한글이 설정하기에 이는 버그로 보는 것이 맞을 것 같지만 정식 지원이 만료되어 MS 에 패치 등을 요청해도 될지는 모르겠습니다.

(해결: △)
우선 관련 이슈에 대한 내용이 MS 지원에 나타나있으나 해결에는 도움이 되지 않았습니다.
1. Group By View
  - 여전히 렌더링 실패
2. DB 관리 계정의 언어 변경
  - 보통 이 계정이 시스템 계정으로 기 적용된 설정 등과 변경 후 영향을 고려하여 변경 불가

(대안)
사용자의 목적은 작성 글 기준 내림차순이므로 문제가 되는 날짜가 아닌 숫자인 ID 를 필드로 설정하면 수정일까지는 아니지만 작성일 기준 내림차순 효과를 나타낼 수 있습니다.

(참고)
Error message when you try to expand an entry in a Grouped By view
in Windows SharePoint Services, in SharePoint Server 2007, or in SharePoint Portal Server 2003
:
"<!-- #RENDER FAILED# -->"

Loopback configuration

2009년 여름 즈음 개발 PC 설치 작업을 하던 중 Windows 2003 Server 에 SharePoint 2007 을 설치하고 접속을 하려는데 인증창이 나타나고 별 생각없이 계정정보를 넣지만 인증이 되지 않고 급기야 3번이 넘어가서는 하얀색 화면이 나타났던 기억이 납니다. 로컬 PC 에서 개발할때는 보통 호스트 이름으로 접속을 하기에 자연스럽게 NTLM 인증이 되고 인증창 이슈 등은 없었는데 갑자기 나타난 상황에 잠시 당황을 했었습니다.

요즘엔 SPS 2003 환경에서 일을 하고 있고 설마 신규 환경을 구축할까 의문을 가지고 있었으나 의외로 많이 생기고 있습니다. Windows 2003 에 SPS 2003 을 설치, 포털 사이트를 하나 만들고 custom host header 에 ex. wss20.spnote.com (로컬) 을 할당하고 접속을 하니 과거에 경험했던 인증창이 계속 나타나고 HTTP 401.1 - Unauthorized: Logon Failed 이 나타났습니다.

# 401.1 - Unauthorized: Logon Failed

흠... 그런데 과거에 경험했음에도 한번에 Loopback 관련이라고 한번에 생각이 나지 않아서 Fiddler 부터 켜고 HTTP 코드부터 봤는데 역시나 검색하니 잘 나옵니다. 결론은 Windows 2003 Server Service Pack 1 부터 loopback 검사가 포함이 되서 그렇다고 합니다. 로컬 서버에서 FQDN 이나 custom host 로 접속하면 이 조건에 걸려서 로긴이 되지 않습니다. 이때 타 PC 등에서 custom host header 를 hosts 파일에 저장하고 접속을 시도하면 잘 되는데 여기서 이상한 상상하면 해결하기 어렵습니다.

접근 시도는 아래와 같습니다.
1. NTLM 인데 인증창이 나타남?
2. 올바른 계정인데도 401.1 나타남?

해결은 레지스트리를 수정해야 합니다.
1. Loopback 을 허용하는 사이트 추가 (권장)
2. Loopback 점검 제거 (disable)

# MS 에서 비추하지만 로컬이니 PASS

자세한 설명과 레지스트리 설정 방법은 아래의 링크를 참조하시면 됩니다.
http://support.microsoft.com/kb/896861 

Stop when creating a team site

When you create a team site, you could meet the issue which is the OK button is disabled when you click the button at Add Link to Site page. If you click the OK or Cancel button, the page stops responding.
Page Url is : /SiteDirectory/Lists/Sites/NewForm.aspx

# The issue occured page

 This issue occurs after I installed Microsoft Windows 2003 Service pack 2 (SP2) on the server and I found out this issue can be solved by upgrading SP2 to SP3 and also this issue occurs when SP1 with security update 933854 or together with security update 928365.

Here is a link for SP3.
Download the SharePoint Portal Server 2003 Service Pack 3 (SP3) package now.

 

There's a another way you could solve this issue but not recommended.
Not recommended is meaning that you should edit a SharePoint file but this could occur some other issues and microsoft will not allow this (like it could affect when you upgrade future service packs). Anyways, this can be useful for someone who has this issue but he or she cannot upgrade to SP3 for now.

 [Resolution]

  1. Open \60\TEMPLATE\1033\SPSSITES\LISTS\SITESLST\NewForm.aspx
  2. Go to line 90
  3. Change the InputFormButtonAtBottom to plain Input tag

 From
<SPSWC:InputFormButtonAtBottom ID="ButtonOk" runat="server" TextLocId="Page_OkButton_Text"/>

 To


 

 

JustDecompile - New Product from Telerik

Telerik 에서 Reflector 와 같은 .NET Assembly 를 decompiling 할 수 있는 개발자 생산성 툴을 출시하였다.

Beta 버전이라서 한번 돌려본 결과 아직은 Reflector 에 비해 많이 부족하다.

하지만 Reflector 가 RedGate 에 팔린 이후 버전 7부터 유료로 바뀐다고 하니,

이번 제품의 출시는 개발자들에게는 반가울만한 소식임에 틀림없다.

# Version 7 부터는 14일간 무료이고 이후부터는 돈 ($35) 내야한다.
image

image

 

# JustDecompile 샘플 화면
image

 

아직 부족한 기능이나 개선 요청에 대한 글은 남겨놓았다.

http://www.telerik.com/community/forums/justdecompile/general-discussions/request-settings-and-others.aspx

관련 링크

 

Get Team Site List by User ID or Group

Finding Team Sites user can access is not easy in SharePoint 2003 but my company needs that feature cause users are very demanding... Anyways, it could be solved with querying right into the SharePoint Content Database but it's not good for the SharePoint and database as well.

I don't know how this query affect to SharePoint and the database but I recommend you not to use for applications cause it takes many resources and could cause SharePoint not working properly. I saw an artile about this but I don't have an url for now. Anyways, use these for information check only.

If you have any info on this, please share it to here.

  1. Team Site Url by User ID or Group
    1. Query
      -- 1. Team Sites I can access using ID or Group
      SELECT w.FullUrl
      FROM UserInfo [u] WITH (NOLOCK)
      LEFT JOIN WebMembers [wm] WITH (NOLOCK) ON u.tp_ID = wm.UserID  
      LEFT JOIN Webs [w] WITH (NOLOCK) ON u.tp_SiteID = w.SiteID  
      LEFT JOIN WebGroupMemberShip [wgms] WITH (NOLOCK) 
          ON w.ID = wgms.WebID 
          AND u.tp_id = wgms.MemberID  
      LEFT JOIN WebGroups [wg] WITH (NOLOCK) 
          ON wgms.WebID = wg.WebID 
          AND wgms.GroupID = wg.ID  
      WHERE --wgms.MemberID IS NOT NULL AND 
          w.WebTemplate <> 21              -- except for personal sites
          AND w.FullUrl LIKE 'sites/%' 
          AND ( tp_Login = 'SPNOTE\nicole' OR tp_Login IN ('SPNOTE\bankershall2', 'SPNOTE\Domain Users') )
      GROUP BY w.FullUrl
      
    2. Query results
      image
  2. User Permission by User ID or Group
    1. Query
      --  Get permission info using ID or Group
      SELECT w.Title [Web Title], w.FullUrl, u.tp_Login, wg.Title [WebGroup Title]
      FROM UserInfo [u] WITH (NOLOCK)
      LEFT JOIN WebMembers [wm] WITH (NOLOCK) ON u.tp_ID = wm.UserID  
      LEFT JOIN Webs [w] WITH (NOLOCK) ON u.tp_SiteID = w.SiteID  
      LEFT JOIN WebGroupMemberShip [wgms] WITH (NOLOCK) 
          ON w.ID = wgms.WebID 
          AND u.tp_id = wgms.MemberID  
      LEFT JOIN WebGroups [wg] WITH (NOLOCK) 
          ON wgms.WebID = wg.WebID 
          AND wgms.GroupID = wg.ID  
      WHERE --wgms.MemberID IS NOT NULL AND 
          w.WebTemplate <> 21              -- except for personal sites
          AND w.FullUrl = 'sites/teamsite2'
          AND ( tp_Login = 'SPNOTE\nicole' OR tp_Login IN ('SPNOTE\bankershall2', 'SPNOTE\Domain Users') )
      GROUP BY w.FullUrl,u.tp_Login,wg.Title, w.Title
      
    2. Query results
      image
    3. user.aspx
      image
  3. All Team Site Users by Team Site Url
    1. Query
    2. -- Get All Team Site Users by Team Site Url
      SELECT 
      	tp_Login [Login]
      	, tp_Title [Title]
      	, tp_Email [Email]
      	, CASE
      		WHEN LEN(wg.Title) > 0 THEN wg.Title
      		ELSE ''
      	END [Group Title]
      	, tp_DomainGroup [Domain Group]
      	, CASE
      		WHEN wgms.MemberID IS NULL THEN 'Group'
      		ELSE 'Direct'
      	END [Direct or From group]
      FROM UserInfo [u] WITH (NOLOCK)
      LEFT JOIN Webs [w] WITH (NOLOCK) 
      	ON u.tp_SiteID = w.SiteID
      LEFT JOIN WebGroupMemberShip [wgms] WITH (NOLOCK) 
      	ON w.ID = wgms.WebID
      	AND u.tp_id = wgms.MemberID
      LEFT JOIN WebGroups [wg] WITH (NOLOCK) 
          ON wgms.WebID = wg.WebID 
          AND wgms.GroupID = wg.ID
      WHERE w.FullUrl = 'sites/teamsite2'
          AND wg.WebID IS NOT NULL
      ORDER BY wgms.MemberID DESC
      

    3. Query results
      image
    4. user.aspx
      same as above one

How to change the Maximum File Upload Size

I have no idea where this note comes from (maybe MS Doc?) but it will help you later when you need to change the upload size.

By default SharePoint allows a maximum file size of 50MB that can be uploaded into any document library. This might be too much as you might not want users downloading 50MB files over your LAN/WAN. To change the maximum file size

  1. Goto SharePoint Central Administration > Configure Virtual Server Settings from Virtual Server List Page.
  2. Select your server
  3. Goto Virtual Server General Settings (in Virtual Server Management)
  4. Change the value of the Maximum Upload Size in MB's.

If you increase the file size limit, your site might occassionally time out for users while they are uploading files. To accomodate this increase the default time out property for IIS.

Central Admin Health Analyzer

중앙 관리 사이트를 방문하면 Status Container (Title 아래) 에 Issue 가 있다고 친절히 알려줍니다.. (설정 상에 문제가 있을때 가르쳐주는 걸 보면 좋은 기능이라고 생각함) 이 Issue 를 보기 위해서 링크를 누르면, Central Administration > Monitering Tab > Review problems and solutions 의 위치로 이동합니다.

아무 생각없이 기존의 답습대로 Administrator 를 기준으로 SharePoint 2010 을 설치한 결과 앞으로는 하지 말라는 내용이 많이 포함되어 있습니다.


 # Review Problems and solutions

 

보통은 이런 메시지가 작업에 치명적인 영향을 미치지는 않으므로 무시하고 진행을 하겠지만, 오늘은 문제가 생겨서 짚고 넘어가려고 합니다. 다름이 아니라 Service Unavailable (HTTP Error 503) 이라는 끔찍한 메시지가 나와서 진상조사를 하던 중에 이 영향?을 알게 되었습니다.

 # Service Unavailable

 

Beta 버전이 불안정해서 그런지 하고 의심을 해보았으나 보통은 자신의 책임?이 항상 크기 마련이므로 SharePoint 관련 서비스 점검하던 찰나에 단서를 발견하였습니다. 평소 무거운 관계로 필요 없을 듯해 보이는 서비스들을 모조리 죽여놓았었는데... SPUserCodeV4 서비스를 실행하던 찰나에 아래와 같은 메시지를 발견하였습니다. (Sandboxed Solution 사용하면 필요 많습니다.)

 # Error while starting SPUserCodeV4

 

갑자기 인증 문제가 있다니??? 여튼, 단서를 발견하고 곰곰히 생각을 해보니 좀 전에 재부팅하면서 Administrator 암호를 바꾼 기억이 떠올랐습니다. ㅡㅡ; 여튼, 다시 바꾸고 SQL Server 부터 SharePoint 관련 서비스들을 다시 실행하니 정상적인 페이지를 만날 수 ���었습니다. Windows 2008 R2 를 사용 중인데... 암호가 기본적으로 42일만 살수가 있어서 그 이후엔 다시 바꾸게 되어 있더군요... 여튼, Windows 2003 시절처럼 가볍게 바꾸려고 했더니... 바꿀 수 없도록 비활성화가 되어 있었지만 구글링해서 적용하였습니다.  

당연한? 말이기도 하지만, 보안 및 설정 상에 있어서 Administrator 보다는 특정 계정을 생성하여 관리하기를 권장합니다. 오늘은 SharePoint Blog 에서 Enabling a Button on the Ribbon Based on Selection 를 따라하다가 Visual Studio 에서 제공하는 솔루션 관리 기능은 믿을게 못된다는 생각을 고집하면서 재부팅하다가 이런 문제를 만났습니다. 이상하게도 Custom Action 의 커스터마이즈가 잘 안되더군요... 중요한 것은 SDK 를 맹신하고 자료가 눈 앞에 없더라도 주변을 잘 둘러보면 해결이 되는 것 같습니다. 다음은 이 글을 이용하여 간단한 예제를 만들어 보겠습니다.

 

VS2010 편리한 기능 WSP 파일 복원

안녕하세요?

Will 입니다. 이번에는 VS2010 의 편리한 기능이 있어서 소개해 드리도록 하겠습니다 Moss2007을 개발 하셨던 분들은 .WSP파일을 기억

하시고 있을 것이라고 생각 합니다. 그런데 이런 파일들을 VS2010에서 자체적으로 압축을 풀고 Feature단위로 나뉘어서 Solution파일로

복원을 시켜주는 기능이 있습니다. 2007에서 개발 됬던 것들을 2010으로 converting시 매우 유용 하리라고 생각 합니다.

1. VS2010 에서 File -> New -> Project

2. Visual C# -> Sharepoint 0> 2010 -> Import SharePoint Solution Package

3. 배포할 서버 선택 -> Next

4. .wsp파일을 찾아서 선택해 달라는 내용입니다. -> Browser를 선택 해서 해당 파일을 선택

5. 파일을 선택 했으면은 Next

6. .wsp파일의 복원 파일들이 맞는지 체크를 해달라는 내용입니다. 체크를 확인 하고 Finish

7. 완료가 되면은 Success라는 팝업 창이 뜨고 파일들의 복원을 확인 할 수 있습니다.