2010-07-14 4 views
0

SQL 서버를 사용하여 새 SharePoint 목록 항목을 직접 생성하려고합니다. 나를 막는 것은 망할 tp_DirName 열입니다. 이 값을 만드는 방법에 대한 아이디어가 없습니다.MOSS 2007 : "디렉터리"의 원본은 무엇입니까?

예를 들어, AllUserData에서 모든 작업을 선택했으며 열에 'MySite/Lists/Task', 'Lists/Task'및 'MySite/Lists/List2'값을 입력 할 수 있습니다.

MySite는 Webs 테이블의 FullUrl 값입니다. 나는 그것을 얻을 수있다. 그러나 'Lists/Task'및 '/ Lists/List2'는 어떻습니까? 저장 장소는 어디입니까?

SQL 컨텍스트를 피하려고하면 다음과 같은 방식으로 공식화 할 수 있습니다. '/ Lists/List2'와 같은 특성을 가진 개체는 무엇입니까? 어디에서 GUI로 설정할 수 있습니까?

+4

왜 API를 사용하지 않습니까? http://en.wikipedia.org/wiki/Windows_SharePoint_Services#Sharepoint_API_overview – gbn

+0

아래의 답변에 대한 내 의견보기. – noober

답변

1

[AllDocs] 테이블에는 제목과 달리 tp_DirName을 생성하는 데 사용할 수있는 "디렉토리"에 대한 정보가 들어 있습니다. 적어도 [AllDocs]. [tp_Leaf] 열에 "List2"및 "Task"항목이 있습니다.

그래서 해결책은 다음과 같습니다 - tp_DirName를 얻기 위해 다음의 두 구성 요소를 연결하여 :

  1. [웹을] [FullUrl] 웹에 포함, 목록을 포함하는 항목을 선택합니다..
  2. [AllDocs]. 항목이 들어있는 목록의 [tp_Leaf].

연결할 항목에 대한 tp_Leaf를 얻기 위해이 개 구성 요소를 다음

  1. (목록의 항목 수) + 1
  2. '_.000'

안부,

1

참고하시기 바랍니다. SharePoint의 SQL 테이블에 직접 시도하고 쓰는 것은 매우 지원되지 않습니다. SharePoint 개체 모델을 사용하는 무언가를 실제로 작성하고 작성해야합니다. SharePoint 데이터베이스에 직접 작성한다는 것은 Microsoft가 환경을 지원하지 않는다는 것을 의미합니다.

+0

누구나이 기사를 읽는다면 충분히 복잡한 SP 응용 프로그램을 작성할 때 할 수있는 가장 무서운 실수라는 것을 알아야합니다. OM, CAML 등을 통해 모든 것을 구현하려고 시도하지 마십시오. OM 버전을 작성하는 데 절반의 비용이 소요됩니다. 그런 다음 느리고 성능이 최적화 될 수 없으며 원하는 모든 기능을 만들 수 없습니다. . 당신이 전쟁에 대해 알아야 할 가장 중요한 것은 무엇입니까? 전쟁에서 싸우지 마라. 저의 MS SP OM을 사용하여 6 개월 만에 배운 가장 중요한 것은 무엇입니까? 전혀 사용하지 마십시오. – noober

+0

P. Sp OM을 피할 수없는 경우 드문 상황 (예 : 필드 유효성 검사 및 일부 웹 파트)을 제외하고는 – noober

+4

나는 아직도 그것을 추천하지 않을 것이다. 당신은 본질적으로 블랙 박스이고, 매끄럽게 돌아가는 것을 기대한다. 이것은 책임있는 접근법이 아닙니다. –

0

음, 내 이전 대답은별로 유용하지 않았습니다.하지만 마법에 대한 열쇠가있었습니다. 이제는 정말 유용한 도구가 있습니다.

그들은 무엇이든간에 M $는 MOSS DB 해커에게 매우 자유 롭다고 말합니다.

http://msdn.microsoft.com/en-us/library/dd304112(PROT.13).aspx http://msdn.microsoft.com/en-us/library/dd358577(v=PROT.13).aspx

읽기 : 적어도 그들은 다음과 같은 서류를 제출? 그런 다음 모든 폴더가 [유형] 열에 '1'이 표시된 [AllDocs] 테이블에 나열되어 있음을 알고 있습니다.

이제 전체 목록에서 'tp_RootFolder'열을 살펴 보겠습니다. 폴더 ID 같아 보이지? 따라서, Id = tp_RootFolder 및 Type = 1 인 [AllDocs]에서 단일 행을 선택하십시오. 그런 다음 DirName + LeafName을 연결하면 목록에서 새로 생성 된 항목의 'tp_DirName'값은 다음과 같아야합니다. . 마치 단단한 록 솔루션처럼 보입니다.

이제 새 항목의 tp_LeafName에 대해 설명합니다. 전에는 대답이 (항목의 항목 수) + 1 + '_이라고 썼습니다.000 '이며 다음 쿼리에 해당합니다.

DECLARE @itemscount int; 
SELECT @itemscount = COUNT(*) FROM [dbo].[AllUserData] WHERE [tp_ListId] = '...my list id...'; 
INSERT INTO [AllUserData] (tp_LeafName, ...) VALUES(CAST(@itemscount + 1 AS NVARCHAR(255)) + '_.000', ...) 

따라서 항상 작동하는지 확신 할 수 없습니다. 항목 - 예,하지만 문서에 대한 ... 나는 질문에 대해 문의 할 것입니다. 보고서를 읽으려면 의견을 남기십시오.

0

Hehe에는 proc_AddListItem이라는 저장 프로 시저가 있습니다. 나는 거의 옳았다. MS 사람들은 똑같은 일을하지만 (카운트 + 1) 대신에 그들은 단지 ... tp_ID :)

어쨌든, 지금 나는 단 하나의 정확한 대답을 알고있다 : 나는 proc_AddListItem을 호출해야한다.

업데이트 : [AllDocs]의 새 항목으로 [AllUserData] 테이블의 데이터를 표시하는 것을 잊지 마십시오 (단지 ID와 리프 이름을 삽입하십시오. SP에서 어떻게 처리하는지보십시오).

관련 문제