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


 

 

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 를 맹신하고 자료가 눈 앞에 없더라도 주변을 잘 둘러보면 해결이 되는 것 같습니다. 다음은 이 글을 이용하여 간단한 예제를 만들어 보겠습니다.

 

BlogEngine Language Pack Maintainers...

지금 사용하고 있는 Blogging Platform 은 BlogEngine.NET 입니다. ASP.NET 용 어플리케이션이 별로 없어서 슬픔에 잠겨 있을 시절에 만난 고마운 App 이었는데 한글 Resource 가 없어서 제출하였는데, 이번 1.5 Version 에 포함되어 있더군요~ 하지만 문제가 있습니다. 이번과는 별개로 다국어 작업을 하면서 알고 있었던 예전부터 알고 있었던 사실!!! "한글 OS 에 Internet Explorer 의 기본 언어는 ko (한글)" 이라는 것을 잠시 망각하고 ko-KR.resx 보낸 실수를 알게 되었습니다. 그래서 이번엔 ko.resx 하나만 보내겠습니다.
  - BlogEngine.NET Article: Attention To Language Pack Maintainers

Windos 2008 Server 에 VS 2008 를 켜고 ASP.NET Development Server 를 통해 잠시 확인을 해보았는데... 이런~~ 깨져서 나옵니다. 인코딩 문제인가 싶어서 구글링해서 전체 파일을 Unicode 인코딩으로, (UTF-8 With Signature) Codepage - 65001  저장했음에도 여전히 깨졌습니다. 좀 더 구글링해보니 VS 의 템플릿 어쩌구저쩌구 했는데... 다음에 시간날때 해결하려고 잠시 미뤘습니다.

어쨌든, 우선은 깔끔하게 Control Panel > Region and Languate > Administrative Tab
  > Change System Locale > Korean (Korea)
로 바꿔주도 재부팅~~ 하고 우선 돌려보고 제출했습니다.
Win 2008 부터 VS 와 문제가 있는건지 잘 모르겠네요~

 

[솔루션 전체 인코딩 적용 방법]
  - PowerShell 로 한번 해보고 싶은 욕망은 있었으나 시간 관계상 윈폼으로 주저없이 이동했습니다.

[code:c#;ln=off]

string path = "PathToApply";

foreach (var f in new DirectoryInfo(path).GetFiles("*.cs", SearchOption.AllDirectories))
{
    string s = File.ReadAllText(f.FullName);
    File.WriteAllText(f.FullName, s, Encoding.UTF8);

    txtStatuses.Text += f.Name + Environment.NewLine;
}

[/code]

 

[Version 1.6 을 위한 Resource 파일]
- Download labels.ko.zip (6.77 kb) for Version 1.6

 

ReGhosting in SharePoint Server 2003 and WSS 2.0

SharePoint 2007 is my first SharePoint exprience and developed for it all the time but I moved to a new company and its Flatform is SharePoint Portal Server 2003 environments... The main reason I moved is a upcoming upgrade for SharePoint 2010.

but I'm frustrating at this moment. ㅠㅠ (crying...)

I was given a simple task which is to edit few javascript lines and I was doing on default.aspx files living in \60\TEMPLATE\1042\SPS??? directories. But SPSSITES directory is different than others and I looked on the url and found a url is different and it is /C9/SiteDirectory/Lists/List/Summary.aspx, not default.aspx.

With my SP 2007 knowledge, the url like /Lists/Summary.aspx means the page is from Database. So I opened the path using Map Network Drive (Open as Web Folder option is disappeared in IE 8) and edited it and the page is worked well. But!!! My colleague asked me how to do that??? She said, it is uncommon way here I want the old way back. I thought if I delete it from Web Folder, the page is coming from local drive again.

As someone SPS 2003 experts expects, a big problem happened!!! The summary.aspx page is gone and AllItems.aspx is displayed. After some walkaournds I could do, I realized nothing I can do at that time cause I'm new for it... I tried copying the Summary.aspx back to Web Folder and create views and ETC... and I started googling on this and found lots of info on Reghosting...

Unfortunately, reghosting is not my solution but I'm here to write on reghosting. I still have the problem to recover... (I'm installing SPS 2003 on my local PC now)
Googling on reghosting, they said "UPDATE Content to NULL from Docs table" and the way worked well. Because the MS has not mentioned on this, you sould use this carefully. One thing I'm a little satifisfied was the GhostHunter is using this way but this updates MetaInfo and MetaInfoSize columns more.

 

Directions are

  1. Connect to the SiteName_SITE database and open the Docs table
  2. Find the unghosted page
  3. Execute a sql statements which is to update Content, MetaInfo, and MetaInfoSize columns to NULL 

The SQL Query I used is

[code:tsql;ln=off]

-- Find Unghosted pages
SELECT SiteId, DirName, LeafName, MetaInfo, MetaInfoSize, Content
FROM Docs
WHERE LeafName = 'default.aspx'

-- Find Unghosted pages2 (If there are lots of records...)
SELECT SiteId, DirName, LeafName, MetaInfo, MetaInfoSize, Content
FROM Docs
WHERE SiteId = '9DAB8065-EA68-4021-BFEA-5A49D63540E2'
AND WebId = '77973AB7-EDB5-4D0E-BD55-17CC1F2C1C48'

-- UPDATE to Re-Ghost
UPDATE Docs
SET Content=NULL, MetaInfo=NULL, Size=0, MetaInfoSize = 13528
WHERE Id = '3BF58ADD-A7B2-4BB9-A255-D4B1FBF4BFE8'

[/code]

 

You need to get the size of file and Site and Web Ids. Main reason I used this is my condition that the docs table contains more than 1.6 million so that it is too slow. Here is the code to get Ids.

[code:c#;ln=off]

SPSite spServer = SPControl.GetContextSite(Context);
SPWeb spWeb = SPControl.GetContextWeb(Context);
Response.Write("Site ID: " + spServer.ID.ToString().ToUpper() + "<br />");
Response.Write("Web ID: " + spWeb.ID.ToString().ToUpper());

[/code]

 

The Columns whose value is chaged are

  1. Size MetaInfoSize
  2. Version
  3. DocFlags
  4. CharSet
  5. TimeLastModified
  6. NextToLastTimeModified
  7. MetaInfoTimeLastModified
  8. TimeLastWritten
  9. VersionCreatedSinceSTCheckout
  10. MetaInfo
  11. Content

 

After I deleted this Summary.aspx file, the record is disappeared and I found that coping the Summary.aspx file to the Web Folder created a new record with new Id. I still have the problem recovering the Summary.aspx. I tried many ways I could do such as set other columns and IISRESET, etc but I couldn't get a solution. So now I'm installing SPS 2003 to deep dive into it.

 

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 이름과의 충돌을 막기 위해서라는 생각밖엔...) 만약 이 부분이 커스터마이징이 안된다면 저 책들을 사던지, 아님 돈 없으면 시간과 노력을 투자하던지 할 것 같습니다.

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