간만에 창우랑 한판 뛰는데...
전에는 이 놈 나타나믄 글케도 사람이 달라 붙더니..
오늘은 쓸쓸히 3명이서 -_-;;
그렇다고 굇수였음 잡기라도 하지.. 단지 기스만 내가며.. 간간히 간간히 미는데..
답이 안나온다.
누군지 모를 한 분이 함께 뛰어 주긴 했지만, 역쉬 -_-;;;;
'전체 글'에 해당되는 글 1243건
- 2007.11.11 쓸쓸한 거대 웜 잡기.
- 2007.11.05 간단한 SPList 권한 체크 방법
- 2007.10.26 내 생애 최고 엽기 요금 통지서 2
- 2007.10.25 Sybase SQL 2005에서 Linked Server(연결된 서버)로 구성하기.
- 2007.10.24 SPList 추가 또는 SPList 템플릿 Feature 추가 중에 발생되는 오류 중.
- 2007.10.24 MOSS 내 가상 디렉토리내에 Output Cache 비활성화 하기. 2
- 2007.10.15 C#에서 operator [] 만드는 방법
- 2007.09.29 고베에서 먹었던 그 볶음밥... 1
SPList 개체에서 특정 사용자의 특정 권한을 체크하고 싶을 때 사용하는 방법이다.
일전 SK 에너지(구 SK Corp)에서 게시판에서 처리한 방법을 보면
아래와 같이 처리되어 있었다.
SPList list = SPContext.Current.Web.GetList(".....");
newItemGroup = 1;
usableNewItem = false;
SPGroup group = SPContext.Current.Web.Groups[newItemGroup];
if( group.ContainsCurrentUser == true )
{
// SPList에 글쓰기가 있으니.. 쓰는 권한에 관련된 처리를 여기에..
SPListItem newItem = list.items.Add();
......
}
위의 방법대로 하기 위해서는 newItemGroup의 그룹을 찾아야 되는 문제가 있다.
이에 간단하게 해결하는 방법이 있는데 아래와 같다.
if(list.DoesUserHavePermissions(SPBasePermissions.AddListItems))
{
// SPList에 글쓰기가 있으니.. 쓰는 권한에 관련된 처리를 여기에..
SPListItem newItem = list.items.Add();
......
}
DoesUserHavePermissions 이 메소드 안에, SPBasePermissions 항목에
체크하고자 하는 권한들을 넣으면 된다.
만일 여러개의 권한 체크가 필요할 시에는 '&'로 연결해서 체크하면 된다.
{
// SPList에 글쓰기가 있으니.. 쓰는 권한에 관련된 처리를 여기에..
SPListItem newItem = list.items.Add();
......
}
수정 : if(list.DoesUserHavePermissions(SPBasePermissions.AddListItems & SPBasePermissions.EditListItems)) 라고 썼던 부분을
if(list.DoesUserHavePermissions(SPBasePermissions.AddListItems | SPBasePermissions.EditListItems)) 로 수정합니다.
& -> |
사실 Oracle로는 이미 구성해봐서, 요즘은 개인기로 대략 붙인뒤,
즉시 OpenQuery를 시도하곤 한다.
그런데, 뜬금없이 출현한 Sybase에 뜬금없는 역습에....
일단, 이 Sybase를 연결하는 방법에 대해서 이리저리 Site를 누리다가,
좋은 글을 발견, 내 나름대로 정리해 본다.
[ 참고 글 링크 ]
1. Sybase 클라이언트 설치.
자신이 연결하려는 Sybase 데이터베이스 연결용 클라이언트를 구한다.
x86이든, x64든, 클라이언트들이 다 있으므로, 적절한 제품에 맞게 구하여 설치한다.
2. Data Service Name 구성하기.
클라이언트를 설치하면 Sybase ASE Data Source Administrator가 설치되게 되는데(DB 클라이언트 종류에 따라 이름이 조금씩을 다를 지도...) 이 프로그램을 실행한다.
시작 -> 모든 프로그램 -> Sybase -> Data Acess -> Sybase ASE Data Source Administrator 이다.
이 프로그램을 실행하면, Sybase Administrator 도구가 실행되는데,
여기서 Add 버튼을 클릭해서 Sybase 연결 관련된 정보를 넣는다.
중요한 부분은 Data Source Name 부분인데, 실제 SQL 2005 의 Linked Server 설정시에
이 정보를 사용하게 된다. 최종적으로 등록한 DSN이 정상적으로 연결되는지 Test Connection을 해주고, 확인이 되면 OK를 클릭해 저장한다.
2. Linked Server(연결된 서버) 구성하기.
먼저 SQL Management Studio 를 실행한다.
그리고 자신이 Linked Server를 구성하고자 하는 DB 서버에 연결한다.
DB 서버에 정상적으로 로그인 되었으면,
왼편의 트리를 펼쳐서 연결된 서버라는 항목에서 오른쪽 버튼을 클릭해서 새 연결된 서버(N)를 선택한다. 그러면 아래와 같은 설정 화면이 나오게 된다.
설정 화면에서 다음과 같이 정보를 넣는다.
연결된 서버(N) 에는 이 Linked Server의 이름을 넣는다. SQL에서 OpenQuery 쓸 때 이름이므로 원하는대로 알아보기 쉽게 적는다. 대표이름이므로 당근, 영/숫자로만 적는 것을 권장한다.
공급자(P) 에는 Sybase OLEDB를 선택한다. 만일 이 사항이 없으면, 다시 Sybase 설치 작업을 검토해주어야 한다. 이게 없으면 만들수 없다고 판단하는 것이 옳다.
제품이름(U) / 데이터 원본(D) 에는 앞서 Sybase Administrator 도구에서 만든 DSN 이름을 넣는다.
이번엔 왼쪽 메뉴에서 보안을 선택한 뒤, Sybase에 접속할 때 쓸 계정과 암호를 입력한다.
맨마지막 메뉴 - 서버 옵션을 선택한 뒤, 아래 그림과 같이 설정하고 확인한다.
마지막으로 이 연결 Provider 설정을 하면 된다.
설정 방법은 앞서 만든 Linked Server 들 목록 윗쪽의 공급자 항목을 펼치면 볼 수 있다.
해당 항목의 속성에 들어간다.
속성에 들어가서 아래 그림과 같이 Inprocess 허용을 선택한다.
이제.. 해당 Linked Server에 오픈 쿼리를 때려본다!
SELECT * FROM OPENQUERY(TESTLNK, 'SELECT * FROM tb_test')
List 템플릿 추가 중에 아래와 같은 오류가 끊임없이 발생하여,
추가 List 템플릿으로 web.Lists.Add(".....", "......", listTemplate) 메소드로 SPList를 추가할 수 없는 경우가 있습니다.
System.Data.SqlClient.SqlException: 테이블 'WSS_Content.dbo.EventReceivers', 열 'Name'에 NULL 값을 삽입할 수 없습니다. 열에는 NULL을 사용할 수 없습니다. INSERT이(가) 실패했습니다. 문이 종료되었습니다. 위치: System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 위치: System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, 위치: System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 위치: Microsoft.SharePoint.Utilities.SqlSession.ExecuteNonQuery(SqlCommand command) |
이 내용을 확인해 본 결과 List Template 안의 Event Add 하는 부분에서 아래와 같은 부분을 확인 할 수 있었습니다.
List Template 의 Element.xml 을 살펴본 결과 아래와 같습니다.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <!-- 리스트 템플릿 정의부분 --> <ListTemplate Name="FreeTalk_Board" Type="8000" BaseType="0" OnQuickLaunch="TRUE" SecurityBits="12" Sequence="392" DisplayName="FreeTalk_Board" Description="FreeTalk_Board" Image="/_layouts/images/itann.gif" /> <!-- 이벤트 리시버 정의부분 --> <Receivers ListTemplateId="8000"> <Receiver> <Name>CollectBoardEventReceivers</Name> <Type>ItemAdded</Type> <SequenceNumber>50000</SequenceNumber> <Assembly>SKT.TSquare.SPS.FreeTalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=388b774ba96c947e</Assembly> <Class>SKT.TSquare.SPS.FreeTalk.CollectBoardEventReceivers</Class> <Data /> <Filter /> </Receiver> <Receiver> <Name>CollectBoardEventReceivers</Name> <Type>ItemDeleting</Type> <SequenceNumber>50000</SequenceNumber> <Assembly>SKT.TSquare.SPS.FreeTalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=388b774ba96c947e</Assembly> <Class>SKT.TSquare.SPS.FreeTalk.CollectBoardEventReceivers</Class> <Data /> <Filter /> </Receiver> </Receivers> </Elements> |
일단 <Receivers> .... </Receivers> 부분에 있는 내용을 모두 삭제해 보고 리스트를 추가해 본 결과,
위의 오류가 발생하지 않았습니다.
이번에 다시 추가해서 적용해 본 결과 오류가 재발하였습니다.
그래서 이번에는 각 Event의 이름을 다르게 적용해 보았습니다.
.... <Receivers ListTemplateId="8000"> <Receiver> <Name>FTEventItemAdded</Name> <Type>ItemAdded</Type> <SequenceNumber>50000</SequenceNumber> <Assembly>SKT.TSquare.SPS.FreeTalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=388b774ba96c947e</Assembly> <Class>SKT.TSquare.SPS.FreeTalk.CollectBoardEventReceivers</Class> <Data /> <Filter /> </Receiver> <Receiver> <Name>FTEventItemUpdated</Name> <Type>ItemDeleting</Type> <SequenceNumber>50000</SequenceNumber> <Assembly>SKT.TSquare.SPS.FreeTalk, Version=1.0.0.0, Culture=neutral, PublicKeyToken=388b774ba96c947e</Assembly> <Class>SKT.TSquare.SPS.FreeTalk.CollectBoardEventReceivers</Class> <Data /> <Filter /> </Receiver> </Receivers> .... |
확인해 본 결과 위와 같이 변경하니, 그 이상의 오류는 발생하지 않았습니다.
그 이후에는 이름이 동일해도 오류가 발생하지 않았습니다.
초기에 리스트 템플릿 상에서 동일한 이름으로 등록할 때 발생되는 오류로 생각됩니다.
간혹 Output Cache가 정상적으로 동작하지 않는 경우가 있다.
그런 경우 아래와 같은 이벤트가 계속 쌓이게 된다.
이벤트 원본: Office SharePoint Server
이벤트 범주: 게시 캐시
이벤트 ID: 5785
날짜: 2007-10-01
시간: 오전 8:36:03
사용자: N/A
컴퓨터: PORTAL
설명:
출력 캐싱에 대한 게시 사용자 지정 문자열 처리기에 연결할 수 없습니다. IIS 인스턴스 ID는 '677781685'이고 URL은 'http://portal/TestSite/ServiceFrom.aspx'입니다.
정확히 확인하진 않았지만, 위와 같은 현상이 발생되는 가상 디렉토리는 보통 SPS 쪽이 NTLM이고, 가상 디렉토리 부분이 Anonymous 형태로, 인증 자체가 아예 틀린 경우다.
그런 경우 SPS 쪽의 Output Cache 프로필 중에 Anonymous 대응용 프로필이 없어 발생하는 것으로 생각된다.
이 경우 처리 방법은 해당 가상 디렉토리 내에 web.config를 별도로 생성해서 아래와 같이 처리해 주면 된다. [ 굵은 색 부분을 추가해 주면 된다. ]
<system.web>
<httpModules>
<remove name="OutputCache"/>
<remove name="PublishingHttpModule"/>
</httpModules>
<!--
컴파일된 페이지에 디버깅 기호를 삽입하려면
compilation debug="true"로 설정하십시오. 이렇게 하면
성능에 영향을 주므로 개발하는 동안에만 이 값을
true로 설정하십시오.
-->
<compilation debug="false">
물론 정확하게는 anonymous에 대응되는 Cache 프로필을 만드는 것이 더욱 좋긴 하지만, 설정 처리 방법을 잘 모르니....
후에 Cache에 대해서 더 자세히 알게 되면 추가하도록 하겠다.
C++에서 종종 이 operator를 오버라이딩해서 구현하곤 했는데,
내가 기억하는 C++ operator 처리 방법때로는 계속 에러를 뿜어 댔다.
문법을 정확히 기억하지 못해 헤매다가,
MS에서 제공하는 csharp language specification.doc 라는 파일을 구해서
간신히 찾아서 해결했다.
C#에 있는 Property 문법을 사용해서 구현하면 operator [] 를 생각보다 간단하게
구현할 수 있었다.
public object this[string sKey] { get { return this.GetData(sKey); } set { this.SetData(sKey, value); } }
대략 코드를 보면 알 수 있긴 하지만,
키 코드는 this 이 부분이다. 즉 보통 배열의 인덱스를 사용하는 방법을 보게 되면,
KK[i] = 44;
라는 형식으로 KK 부분이 바로 해당 클래스의 변수 자체를 가르키게 된다. 그러므로 operator
에서 this를 쓴다. 그리고 난 뒤 , [ ] 안쪽에 무슨 값으로 구분하는지에 따라,
해당하는 변수를 구성해주면 된다.
만일 숫자인 경우 [int nIndex] 형식으로 써주면 되고, 지금 필자 같이 문자열이라면
[string sKey] 이런 식으로 쓰면 된다.
나머지는 C#의 get / set 의 구현 방법에 맞게 원하는 코드를 넣기만 하면 된다.
내가 초딩때. 아마 연도로 따지면 1980년도 즈음.
그 당시 중국집에서 평범(?)하게 먹을 수 있는 것은 짜장이였고,
돈이 조금 있으면 볶음밥, 아주 특별한 날에 탕수육을 먹을 수 있었다.
그런 시절 중국집에서 만들어 주던 볶음밥이 아직도 내 기억속에 아직도 남아 있다.
그런데, 어느날 부터 인가, 그 볶음밥이 변질된 것 같았다.
게맛살이 들어가 있거나, 햄이 들어가거나, 요즘은 밥 옆에 짜장 부어 놓는게
당연하게 되버린 것 같고.....
그러다 친구와 함께 일본에 가서 처음으로 밥을 먹을 때,
중국집에 들어갔다. 사실 외관만 봐서는 중국집이라고 생각되지 않는 시설이였지만,
일단 음식들은 라면 및 볶음밥 그 외 간단한 식사류들... 이 모든 것을 파는데
가 일단 일본식 중국집.
그곳에서..그 옛날 먹던 그 중국집의 볶음밥을 먹을 수 있었다.
계란, 약간의 야채, 그리고 돼지고기.
보관이야 어쨌던 부드러운 맛과 꼬돌 부드러운 밥은 정말이지....
최소한 일본에서는 먹는것 가지고 장난 안친다는데...
부러울 뿐이다.
이런 볶음밥 먹을 수 있는 곳이... 우리나라에 이젠 없겠지?
Copyright © 2015-2025 Socialdev. All Rights Reserved.