개요 및 목표
상자, 모스’ 콘텐츠 쿼리 웹 파트 (CQWP) 목록 형식으로 결과를 표시 합니다., 검색 결과 유사. 그것은 또한 표 형태로 결과 표시 수 (즉. HTML 테이블 형식). 그리드 포맷은 어떤 경우에 더 나은. 나는이 기사에서 그 효과 달성 하는 방법 설명.
비즈니스 시나리오
엔터프라이즈 모스 롤아웃에는 클라이언트와 일. 우리는 디자인의 분류는 프로젝트 계층 구조에서 첫 번째 클래스 시민 그들의 자신의 최상위 사이트. 프로젝트 관리자 프로젝트 요약 정보의 단일 목록을 유지합니다, 제목과 같은, 예산, 예상된 완료 날짜, 남은 예산 및 다른 요약 형식 필드. "단일에 의해" 사용자 지정 SharePoint 목록을 하나의 항목을 포함 하는 보장을 의미합니다. Simplistically, 그것은 이것 처럼 보인다:
기술 방식은 거의 같은 설명 여기 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP XSL 변환을 사용 하 여 렌더링 하는 브라우저에 대 한 HTML을 방출.
난 항상 XSL XSL은 악몽 때문에 다이빙 하기 전에 결과를 그리 다. 여기는 내 원하는 결과:
이 처럼 HTML 생성 결과:
<html> <바디> <센터> <테이블 테두리= 1> <!-- 라벨-> <tr bgcolor블루 => <td><글꼴 색= 흰색><b>프로젝트 이름</b></글꼴></td> <td 정렬오른쪽 =><글꼴 색= 흰색><b>완료 날짜</b></글꼴></td> <td 정렬오른쪽 =><글꼴 색= 흰색><b>예산</b></글꼴></td> <td 정렬오른쪽 =><글꼴 색= 흰색><b>실제 비용</b></글꼴></td> <td><글꼴 색= 흰색><b>전반적인 상태</b></글꼴></td> </tr> <tr> <td>다시 컴퓨터 룸.</td> <td 정렬오른쪽 =>02/01/08</td> <td 정렬오른쪽 =>22,500.00</td> <td 정렬오른쪽 =>19,000.00</td> <td>진행 중</td> </tr> <tr> <td>SQL 업그레이드에 대 한 제공 서버</td> <td 정렬오른쪽 =>04/01/08</td> <td 정렬오른쪽 =>7,500.00</td> <td 정렬오른쪽 =>0.00</td> <td>계획</td> </tr> </테이블> </센터> </바디> </html> |
접근
표를 만들려면 다음이 단계를 따르십시오:
- 그리드의 구성 요소 식별 (행/열).
- 정의 하 고 필요한 사이트 열 만들기.
- 프로젝트 및 단일 목록에 대 한 하위 사이트 만들기.
- CQWP 웹 페이지에 추가 하 고 귀하의 목록에 대 한 검색 구성.
- 추가 열을 수집 하는 CQWP XML 수정.
- 테이블을 생성 하는 XSL을 수정.
6 번에 집중 하려고 해요. 숫자 4를 통해 직선-앞으로 이며 뭔가 CQWP 사용자 이미 완료. 숫자 5는 MSDN에서이 완전 한 스크린 샷 라덴된 문서를 포함 하 여 다른 사람에 의해 문서화 되었습니다. 여기 (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) 그리고 헤더 솔로몬의 블로그 여기 (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
볼트와 너트
시작 및 MSDN 설명서와 헤더 솔로몬 제 5-1 단계를 구현.
이 시점에서, 당신의 CQWP 페이지에 추가 하 고 당신은 당신의 <CommonViewFields> 필요에 따라 구성.
다음 일반적인 단계, 이러한 중간 결과 얻을:
1. 콘텐츠 형식 만들기, 해당 콘텐츠 형식 및 두 사이트에 대 한 templatized 사용자 지정 목록. 여기는 콘텐츠 형식:
여기에 사이트 구조:
2. 내 프로젝트 하위 사이트와 단일 프로젝트 요약 목록을 만든 후에 CQWP 추가:
3. 통해 원하는 모든 추가 정보를 추가 합니다 <CommonViewFields>:
<속성 이름="CommonViewFields" 유형="문자열">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</속성>
참고 한 줄에 모든 속성 필드 유지 했다 작동 하지 않을 (CQWP 쿼리 반환 항목이 없습니다 내게 말할 것 이다).
4. 이 시점에서, 우리는 MSDN 문서 넘어 이동할 준비와 헤더 솔로몬의 기사를 통해 플립에. 그녀의 단계 단계 근처 시작 #5 사용자 정의 만들려면 / ItemStyle.xsl의 고스트 되지 않은 버전. 내가 헤더의 조언에 따라, 단계까지 11 이러한 중간 결과 얻을:
4.1: 나 XSL 서식 파일을 다음과 같이 이름을:
<xsl:서식 파일 이름 = "그리드" 경기 = "행[@Style = '그리드']" 모드 = "itemstyle">
나는 또한 약간 제안 그녀 수정 <xsl:각각에 대 한 …> 추가 하 여 한 <br /> 청소기 목록을 제공 하는 태그:
<xsl:각각에 대 한 선택="@*"> P:<xsl:값의 선택="이름()" /><br/> </xsl:각각에 대 한>
4.2: 웹 파트를 수정, 모양에가 서 하 고 내 "그리드를 선택" 스타일:
변경 내용을 적용 하 고 여기 결과입니다.:
우리가 우리가 원하는 필드 위의에서 볼 수 있습니다. (프로젝트 이름, 비용, 상태, 등) 우리가 HTML을 내보낼 때 사용 하는 사용할 수 있습니다.. 뿐만 아니라, 하지만 우리는 우리가 XSL에 해당 열을 참조 해야 합니다 이름을. 예를 들어, 우리는 "Project_x005F_x0020_Name"로 프로젝트 상태를 참조.
이 시점에서, 우리이 거 인의 어깨 및 헤더의 블로그에서 출발, 난 내 자신의 작은 비트를 추가.
ContentQueryMain.xsl
참고: ItemStyle.xsl와 ContentQueryMain.xsl 모두를 변경 하는 경우, 변경의 효과 보고 하기 전에 이러한 파일에 다시 체크 해야.
그리드 만들기 위해, 모스 두 개의 다른 XSL 파일을 사용 하 여 우리는 CQWP에서 참조 하는 결과 생성 하. 출력의 이전 비트를 생성 하, ItemStyle.xsl 수정. MOSS는 실제로 다른 XSL 파일을 사용 하 여, ContentQueryMain.xsl에는 HTML을 생성 하는 ItemStyle.xsl와 함께. 그 이름에서 알 수 있듯이, ContentQueryMain.xsl은 "메인" 번역의 전반적인 흐름을 제어 하는 XSL. 그것은 발견된 된 모든 항목을 반복 하 고 ItemStyle.xsl에 한 명씩 템플릿에 전달. 우리는 오픈을 생성 하는 ItemStyle.xsl를 수정 합니다. <테이블> 데이터 및 폐쇄의 첫 번째 행을 방출 하기 전에 태그 <테이블> 마지막 행을 방출 후 태그. 이렇게 하려면, ContentQueryMain.xsl은 우리의 "모눈에 두 개의 매개 변수를 전달 하도록 수정" ItemStyle.xsl 서식 파일, "마지막 행" 그리고 "현재 행". ItemStyle.xsl 사용 하 여 이러한 조건에 따라 필요한 태그를 방출.
헤더 솔로몬의 기술을 사용 하 여, 우리는 ContentQueryMain.xsl를 찾습니다.. 그것은 ItemStyle.xsl와 같은 장소에 있습니다. 이 스크린 샷을 도움이 될:
우리는 다음과 같이 변경 해야:
- Xsl 서식 파일 수정, "CallItemTemplate" 그는 실제로 ItemStyle.xsl에 우리의 격자 서식 파일 호출. 우리을 것입니다 열고 닫는 조건에 따라 생성 하는 데 필요한 데이터 표 서식 파일에 두 개의 매개 변수를 전달 합니다. <테이블> 태그.
- "CallItemTemplate을 호출 하는 ContentQueryMain.xsl의 또 다른 비트 수정" LastRow"전달" 그 LastRow 우리의 격자 서식 전달 될 수 있도록 하는 매개 변수.
"OuterTemplate.CallItemTemplate 라는 서식 파일을 찾습니다" 문자열에 의해 식별:
<xsl:서식 파일 이름="OuterTemplate.CallItemTemplate">
모든 서식 파일을 다음과 같이 바꿉니다:
<xsl:서식 파일 이름="OuterTemplate.CallItemTemplate"> <xsl:param 이름="CurPosition" /> <!-- LastRow"추가" 매개 변수. 우리만 사용할 때에 항목 스타일 패스 "그리드". --> <xsl:param 이름="LastRow" /> <xsl:선택> <xsl:때 테스트="@Style = 'NewsRollUpItem'"> <xsl:적용 템플릿 선택="." 모드="itemstyle"> <xsl:param으로 이름="EditMode" 선택="$cbq_iseditmode" /> </xsl:적용 템플릿> </xsl:때> <xsl:때 테스트="@Style = 'NewsBigItem'"> <xsl:적용 템플릿 선택="." 모드="itemstyle"> <xsl:param으로 이름="CurPos" 선택="$CurPosition" /> </xsl:적용 템플릿> </xsl:때> <xsl:때 테스트="@Style = 'NewsCategoryItem'"> <xsl:적용 템플릿 선택="." 모드="itemstyle"> <xsl:param으로 이름="CurPos" 선택="$CurPosition" /> </xsl:적용 템플릿> </xsl:때> <!-- 표 itemstyle.xsl 서식 파일을 현재 위치 및 lastrow 전달. ItemStyle.xsl 열기를 방출 하는 사용 하는 것입니다 및 닫기 <테이블> 태그. --> <xsl:때 테스트="@Style = '그리드'"> <xsl:적용 템플릿 선택="." 모드="itemstyle"> <xsl:param으로 이름="CurPos" 선택="$CurPosition" /> <xsl:param으로 이름="최근" 선택="$LastRow" /> </xsl:적용 템플릿> </xsl:때> <xsl:그렇지 않으면> <xsl:적용 템플릿 선택="." 모드="itemstyle"> </xsl:적용 템플릿> </xsl:그렇지 않으면> </xsl:선택> </xsl:서식 파일> |
변경의 용도 설명 하는 코멘트.
물론, "OuterTemplate.CallItemTemplate" 다른 서식 파일에서 호출 자체. 이 텍스트 문자열에 대 한 검색 하 여 해당 서식 파일을 찾습니다:
<xsl:서식 파일 이름="OuterTemplate.Body">
OuterTemplate.Body의 지침을 통해 스크롤 및 LastRow 매개 변수를 다음과 같이 삽입 (기울임꼴로 표시 된 주석으로 표시):
<xsl:통화 서식 이름="OuterTemplate.CallItemTemplate"> <xsl:param으로 이름="CurPosition" 선택="$CurPosition" /> <!-- LastRow 매개 변수 삽입. --> <xsl:param으로 이름="LastRow" 선택="$LastRow"/> </xsl:통화 서식>
이 모든 후, 우리는 마침내 우리의 ItemStyle.xsl 방출 수 있도록 제대로 설정 하는 것이 <테이블> 바로 이곳에서 태그.
ItemStyle.Xsl
참고: 다시, 이러한 변경의 효과 볼 수 있도록 변경한 후 ItemStyle.xsl에서 확인.
우리는 여기에 두 가지 작업:
- 전체 격자 서식 파일 바꾸기. 당신이 수 있는 복사/붙여넣기 아래에서.
- 일부 점보 "formatcurrency 수 있도록 템플릿 정의 외부 추가" 작업 서식 파일. (XSL에 얇은 핸들 것을 알 수 있습니다.).
첫 번째, ItemStyle.xsl의 위쪽, 이 라인을 추가:
<!-- 미국 표시를 수 있도록 몇 가지 미신 적 점보. 통화. --> <xsl:10 진수 형식 이름="직원" 자리="D" /> <xsl:서식 파일 이름="기본" 경기="*" 모드="itemstyle">
내가 직접 전에 추가 하는 참고는 <xsl:서식 파일 이름을 "기본 =" …> 정의.
다음, 다시 우리의 격자 서식 파일 이동. 아래 코드와 함께 전체 그리드 서식 파일 교체. 그것은 철저 하 게 주석 처리, 하지만 이메일로 또는 질문이 있으시면 제 블로그에 덧 글을 남길 주저 하지 마시고.
<xsl:서식 파일 이름="그리드" 경기="행[@Style = '그리드']" 모드="itemstyle"> <!-- ContentMain.xsl 전달 CurPos 및 마지막. 이를 사용 하 여 조건부로 열기를 방출 및 닫기 <테이블> 태그. --> <xsl:param 이름="CurPos" /> <xsl:param 이름="최근" /> <!-- 다음 변수는 표준 ItemStyle.xsl에서 수정 --> <xsl:변수 이름="SafeImageUrl"> <xsl:통화 서식 이름="OuterTemplate.GetSafeStaticUrl"> <xsl:param으로 이름="UrlColumnName" 선택="' ImageUrl'"/> </xsl:통화 서식> </xsl:변수> <xsl:변수 이름="SafeLinkUrl"> <xsl:통화 서식 이름="OuterTemplate.GetSafeLink"> <xsl:param으로 이름="UrlColumnName" 선택="' LinkUrl'"/> </xsl:통화 서식> </xsl:변수> <xsl:변수 이름="DisplayTitle"> <xsl:통화 서식 이름="OuterTemplate.GetTitle"> <xsl:param으로 이름="제목" 선택="@Title"/> <xsl:param으로 이름="UrlColumnName" 선택="' LinkUrl'"/> </xsl:통화 서식> </xsl:변수> <xsl:변수 이름="LinkTarget"> <xsl:만약 테스트="@OpenInNewWindow = 'true'" >_blank</xsl:만약> </xsl:변수> <!-- 우리는 변수를 정의 하는 여기, "tableStart". 이 테이블의 열 레이블을 오프닝 정의를 사용 하 여 HTML을 포함. 경우 CurPos = 1, 그것은 CDATA 태그에 HTML을 포함. 그렇지 않으면, 그것은 비어 있을 것입니다.. TableStart의 값은 emited ContentQueryMain.xsl 통해 ItemStyle를 호출할 때마다. --> <xsl:변수 이름="tableStart"> <xsl:만약 테스트="$CurPos = 1"> <![CDATA[ <표 테두리 = 1> <tr bgcolor = "블루"> <td><글꼴 색 = "화이트"><b>프로젝트 이름</b></글꼴></td> <td 정렬 "오른쪽" =><글꼴 색 = "화이트"><b>완료 날짜</b></글꼴></td> <td 정렬 "오른쪽" =><글꼴 색 = "화이트"><b>예산</b></글꼴></td> <td 정렬 "오른쪽" =><글꼴 색 = "화이트"><b>실제 비용</b></글꼴></td> <td><글꼴 색 = "화이트"><b>전반적인 상태</b></글꼴></td> </tr> ]]> </xsl:만약> </xsl:변수> <!-- 또 다른 변수, tableEnd 단순히 정의 닫는 태그 테이블. TableStart와 마찬가지로, 그것은 항상 emited. 이 때문에 그 값이 조건부로 여부 우리 ContentQueryMain.xsl에 의해 마지막 행 통과 되었습니다 했습니다 따라 할당. --> <xsl:변수 이름="tableEnd"> <xsl:만약 테스트="$CurPos = $Last"> <![CDATA[ </테이블> ]]> </xsl:만약> </xsl:변수> <!-- TableStart의 내용을 항상 방출. 이것이 ContentQueryMain.xsl에 의해 우리에 게 전달 된 첫 번째 행, 그럼 우리가 그 값은 비게 됩니다 알고. 때문에 출력 이스케이프를 비활성화 때 tableStart 하지 비워두고, 우리는 브라우저에서 렌더링 하고자 하는 실제 HTML을 포함 하 고 있습니다.. 우리가 말하지 않는 XSL 파서가 사용 하지 않으려면 출력 이스케이프, 그것은 같은 물건을 생성 됩니다 "<테이블>는;" 대신 "<테이블>". --> <xsl:값의 선택="$tableStart" 사용 안 함-출력 이스케이프="예"/> <tr> <!-- P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status --> <td> <xsl:값의 선택="@Project_x005F_x0020_Name"/> </td> <td 정렬="오른쪽"> <xsl:값의 선택="@Project_x005F_x0020_End_x005F_x0020_Date"/> </td> <td 정렬="오른쪽"> <xsl:통화 서식 이름="formatcurrency"> <xsl:param으로 이름="값" |
이것은 매우 유용 하 게 되었습니다.. 감사합니다!
아… 그건 내 목록 스타일 이름이 있기 때문에 그것은 "스타일"에 대 한 검사는 ContentQueryMain.xsl에 몰 랐 어 요:
<xsl:때 test="@Style='NameOfMyStyle'">
개명 하는 그것은 일 한. 🙂
그것은 거의 나를 위해 일했다: 출력 관리는 </테이블> 끝 태그를 올바르게, 하지만 시작 태그 누락. 그것은 테스트 것 = "$CurPos = 1" true를 반환 하지 않습니다.. 그런데 왜?
위대한 게시물. 폴 위의 모든 것 들을. 쿼리를가지고, 어떻게 내가 달성 "총 실제 Expences 합 수" 또는 두 개의 열 값의 합계.
사용자 ContentQueryMain 및 ItemStyle xsl 파일을 만드는 모든 작업을 완료 해야? 내가 묻는 이유는 내 사용자 정의 스타일 패치 또는 업그레이드 덮어쓰는 걱정 싶지 않아. 예 당신은? 나 시도 ContentQueryMain.xsl의 동일한 복사본을 만들고 복사본을 새 사용자 지정 스타일 라이브러리에 업로드. 때.webpart의 MainXslLink 속성에서이 xsl 파일에 대 한 참조, 내가 얻을 401 권한이 없습니다.. 사용자 지정 xsl 파일은 게시 된 버전 및 모두는 그것에 대 한 읽기.
환상적인 게시물 감사! 지난 몇 일 동안이 지금 싸우고 왔다.
안녕, 이것은 정말 도움이 게시. 나는 그것을 모든 작업, 또한 구현 된 마이크 브라운 변경 그래서 그룹화
CQWB의 속성의 그룹에 의해 매개 변수로 선택 무엇 이건 여 테이블 안에 결과.
만든 제목 링크 또한, 그래서 정중 하 게 작동. 난 여전히 문제가 하나, 비록. 사이트 이름으로 결과 그룹화 해요. 내부 테이블, 그것은 그들을 친절 하 게 그룹, 멋지다, 하지만 여전히 모든 그룹 인쇄
이름(내 경우에는 사이트 이름) 테이블 위에. 누구 든 지이 제거 하는 방법을 알고 있나요?
감사,
그렉
좋은 기사. 모습을 주고 내 테이블 기본 Sharepoint 목록의 목록의 소스 코드를 분석 하 여 관리. 여기는 ItemStyle에 적응 하는 데 필요한 주요 HTML 블록:
<테이블 너비 = "100%" 클래스 = "ms-listviewtable" 테두리 0 cellspacing = 0 cellpadding = 1 dir = = "없음">
<!–헤더–>
<TR 클래스 = "ms-viewheadertr" VALIGN = 최고>
<목 넘김 범위 "열 =" 클래스 = "ms-vh2"><div 스타일 = "너비:100%;위치:상대;왼쪽:0;맨 위로:0;">
<테이블 스타일 = "너비:100%;" CtxNum = "1" 높이 = 100% "" cellspacing = 1 cellpadding = 0 클래스 = "ms-unselectedtitle">
<TR>
<TD width = "100%" 클래스 = "ms-vb" nowrap>
텍스트 뒤 titre 시오
</TD>
<TD 스타일 = "위치:절대;">
</TD>
</TR>
</테이블></div>
</TH>
<!–모든 머리글 셀에 대 한 반복–>
</TR>
<!– 테이블 데이터 –>
<TR 클래스 = "">
<!–데이터 열, 하이퍼링크와 첫 번째에 대 한 바울의 코드를 사용 하 여 –>
<TD 클래스 = "ms-vb2">여기에 데이터</TD>
<!–빈 열–>
<TD 클래스 = "ms-vb2">
<dir 스팬 = 없음></범위><
/TD>
<!–날짜 열–>
<TD 클래스 = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</TR>
<!–***대체 행 – 2 나머지 현재 행에 따라 다른 클래스 삽입 새 XSL 변수 사용–>
<TR 클래스 = "ms 교류">
…
</TR>
</테이블>
Thatz 정확 하 게 내가 찾던...당신은 바위 사람...오래 살고...게시물에 대 한 사랑 해요..
<xsl:적용 템플릿 선택 = "." 모드 = "itemstyle">
<xsl:param으로 이름 "CurPos =" 선택 "$CurPosition =" />
<xsl:param으로 이름 = "마지막" 선택 "$LastRow =" />
<xsl:param으로 이름 "StartNewGroup =" select="@__begingroup" />
</xsl:때>
<xsl:언제 테스트 = "$StartNewGroup = 'True'">
<tr>
<td >
<xsl:호출 템플릿은 name="OuterTemplate.GetGroupName">
<xsl:param으로 이름 "그룹 이름 =" select="@*[이름()$Group =]"/>
<xsl:param으로 이름 = "그룹 종류" 선택 "$GroupType" = />
</xsl:통화 서식>
</td>
</tr>
</xsl:때>
<xsl:그렇지 않으면>
</xsl:그렇지 않으면>
</xsl:선택>
안녕 폴,
Xml/xsl 및 콘텐츠 쿼리 웹 파트를 사용 하는 경우, 당신의 xslt 형식에 어떤 좋은 방법으로 찾을 수 있나요? 에 바로 고통을 증명 변경 및 디자인을 테스트 하는 한 * * 그냥 텍스트 편집기를 사용 하 여…
모든 최고
(예를 들어. https://myweb.com/Marketing/images/icn-order.gif, )
CommonViewFields 필드 형식에서 이미지 또는 그림을 사용 해야 나? (예를 들어. InternalColumnName, 이미지)
귀하의 게시물은 정확 하 게 무엇을 찾고. 그러나, 나는 작동 하기 위하여 그것을 얻을 수 없다.
나는 다양 한 문서에 저장 된 문서에. 사용자 지정 클래스의 열을 사용 하 여 분류 하지만 라이브러리 (선택: 1 또는 2. CQWP를 사용 하 여 자신의 클래스에 따라이 문서를 표시 하 고 싶습니다..
나는 CQWP 추가할 수 있었다, SPD에 수출, 목록 보기에 사용자 지정 fileds를 표시 하려면 itemStyle.xls 구성. 그러나, 내가 수 성공적으로 구현 하지 당신이 여기 무엇을 설명합니다.
이들은 내 CQWP에 표시 하려는 열:
파일 형식 (아이콘을 표시 하려면)
파일 제목
마지막으로 수정한 날짜
누가 수정
체크 아웃
코멘트에서를 확인
현재 목록 형식으로 결과가지고. 어떻게 내가 talble 형식으로 변경 하려면.
감사.
사지
내 이름은 확실 하지에 missspelling에 대 한 죄송 합니다 어디에 ” 온.