카테고리 아카이브: SharePoint 개발

주의 주요 변경 내용 ItemStyle.xsl

콘텐츠 쿼리 웹 파트와 점심 시간에 대 한 권리의 모양을 사용자 지정 하는 Itemstyle.xsl을 사용 했다, 속보를 xsl을 변경 했다. 나는 그것을 실현 하지 않았다, 하지만이 사이트 모음에 걸쳐 효과 도달 했다. 내 반환 시 점심을 떠났고, 한 무리의 장소에서 나타나는이 메시지 발견:

이 웹 파트를 표시할 수 없습니다. 문제를 해결, Microsoft Office SharePoint Designer와 같은 Windows SharePoint 서비스 호환 HTML 편집기에서이 웹 페이지를 엽니다. 문제가 지속 되는 경우, 웹 서버 관리자에 게 문의.

클라이언트를 비난 (그것이 나의 잘못이 시점에서 아직 실현 되지) 하지만 결국 발견 그 visual studio intellisense 했다 경고 나 잘못 된 XSL 했다. 나는 그것을 수정 모든 일을 하기 시작 했다.

ItemStyle.xsl 작업 시 darned 조심 (그리고 글로벌 XSL 파일) — 사이트 모음에서 많은 인공 물에 영향을 미치는 그들을 깨는.

<끝 />

콘텐츠 쿼리 웹 파트 결과 눈금에 표시 / 테이블

개요 및 목표

상자, 모스’ 콘텐츠 쿼리 웹 파트 (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>

접근

표를 만들려면 다음이 단계를 따르십시오:

  1. 그리드의 구성 요소 식별 (행/열).
  2. 정의 하 고 필요한 사이트 열 만들기.
  3. 프로젝트 및 단일 목록에 대 한 하위 사이트 만들기.
  4. CQWP 웹 페이지에 추가 하 고 귀하의 목록에 대 한 검색 구성.
  5. 추가 열을 수집 하는 CQWP XML 수정.
  6. 테이블을 생성 하는 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 파서가 사용 하지 않으려면 출력 이스케이프, 그것은 같은 물건을 생성 됩니다 "&lt;테이블&gt는;" 대신 "<테이블>".
    -->
    <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으로 이름="" 
선택="@Project_x005F_x0020_Budget"></xsl:param으로> </xsl:통화 서식> </td> <td 정렬="오른쪽"> <xsl:통화 서식 이름="formatcurrency"> <xsl:param으로 이름="" 선택="@Project_x005F_x0020_Expenses">
</xsl:param으로> </xsl:통화 서식> </td> <td> <xsl:값의 선택="@Project_x005F_x0020_Status"/> </td> <!-- 다음의 모든 것 들을 명확 하 게 주석으로 처리. 그러나, 그것을 돌려 보내야 하 고 그것으로 물건을 <td> 그것의 효과 볼 수. --> <!-- <div id = "linkitem" 클래스 = "항목"> <xsl:만약 테스트 = "문자열 길이($SafeImageUrl) != 0"> <사업부 클래스 = "이미지 영역 왼쪽"> <a href = "{$SafeLinkUrl}" 대상 = "{$LinkTarget}"> <img 클래스 = "이미지-조정-너비" src = "{$SafeImageUrl}"
alt = "{@ImageUrlAltText}"/> </는> </div> </xsl:만약> <사업부 클래스 = "링크 항목"> <xsl:통화 서식
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href = "{$SafeLinkUrl}"
대상 = "{$LinkTarget}" 제목 = "{@LinkToolTip}"> <xsl:값의 선택 = "$DisxslyTitle" /> </는> <사업부 클래스 = "설명"> <xsl:select="@Description 값의" /> </div> </div> </div>
--> </tr> <!-- 방출 닫는 태그 테이블. 우리는 마지막 행에 있지 않은 경우, 이 비어 있을 것입니다.. --> <xsl:값의 선택="$tableEnd" 사용 안 함-출력 이스케이프=""/> </xsl:서식 파일> <xsl:서식 파일 이름="formatcurrency"> <xsl:param 이름="" 선택="0" /> <xsl:값의 선택='형식 번호($값, "$DDD,DDD,DDD입니다.DD ", "직원")' /> </xsl:서식 파일>

계단식 드롭다운 표준 WSS 또는 MOSS 데이터 입력 화면을 지원 하지 않습니다. (또는 다른 내부-통신에서)

업데이트 (04/2008): 이 멋진 블로그 항목 표시이 문제에 대 한 좋은 자바 스크립트 기반의 접근: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

2 차 업데이트: (04/2008): 이 블로그 항목 것도 같네요: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

일주일에 여러 번, 아니 매일 하는 경우, 포럼 사용자 설명 일반적으로 계단식 드롭다운을 통해 만난 것 요구. 예를 들어, 나는 두 개의 드롭다운 컨트롤:

  • 미국의 목록. 상태
  • 미국의 목록. 도시.

책임 UI 제공으로, 우리가이 같은 운영 고 싶어요:

  • Paul 선택 미국. 드롭-다운에서 상태.
  • 그러면 드롭 다운 선택한 상태에 속하는 도시만을 필터링 할 도시.
  • Paul이 필터링 된 목록에서 도시를 선택.

이 기능에 대 한 아웃-오브-더-박스 지원 되지 않습니다.. 사실, 직접 내부 형식 통신의 어떤 종류에 대 한 OOB 지원 되지 않습니다.. 이 양식에 다른 필드 변경 숨기기/활성화/비활성화 필드 프로그래밍 방식으로 포함.

가능한 솔루션 및이 설명 하기 위해이 문서의 진짜 목적은 옵션은 그들을 알고:

  1. 사용자 지정 열 유형 개발. 사용자 지정 열 개발자로 서, "전세계 완전 통제가" 해당 사용자 지정 열의. 구현할 수는 계단식 드롭다운 그런 식으로.
  2. 워크플로 사용 하 여. 경우에 따라, 자동으로 다른 필드의 값을 기준 필드에 값을 할당.. 이 경우에, 일반적으로 계산 된 열을 사용 하려고, 그러나 일부 시간, 그것은 단지 일을 하지 않습니다.. SharePoint Designer 워크플로 코드 및 visual studio에 아래로 떨어지고 상대적으로 관리 친화적인 대안입니다.. 이 경로 이동 하는 경우, 인식 문제 해결 이 문서 (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. 이벤트 처리기: 워크플로 처럼, 이것은 후--사실 솔루션. 이벤트 처리기는 닷넷 어셈블리 (C#, VB.NET) 어떤 SharePoint에 제어 전달. 개발 하는 개체 목록의 데이터에 액세스할 수는 (전체 개체 모델) 어떤 필요한 계산을 할 수 있습니다.
  4. SharePoint Designer를 사용 하 여 사용자 지정 입력 폼을 만들. 이 이렇게 직접 경험 없어, 하지만 요즘에는 NewForm.aspx로 좋은 일을 하고 있다고 들었습니다.
  5. ASP.NET 데이터 항목 기능을 자신의 롤 (독립 실행형 웹 페이지 또는 웹 파트) 그리고 사용 하는 대신.

누구 든 지 안다면 다른 또는 더 나은 옵션, 코멘트를 하시기 바랍니다 그리고이 게시물의 본문을 업데이 트 거 야.

<끝 />

테크노 태그:

Sharepoint에서 막대 그래프 만들기

개요:

(업데이트 12/04/07: 아주 흥미 있는 웹 파트를 통해 이것을 해결 하는 다른 블로그에 링크 끝에 또 다른 흥미로운 리소스 추가)

이 블로그 항목을 SharePoint에서 막대 그래프를 만드는 방법을 설명 합니다.. 이 데이터 보기 웹 파트에 따라 달라 집니다 WSS 및 MOSS 환경에서 작동.

전반적인 접근은 다음과 같습니다.:

  1. 그래프 데이터를 포함 하는 목록 또는 문서 라이브러리 만들기.
  2. 장소 관련된 문서 라이브러리 / 사용자 지정 페이지에 나열 하 고 데이터 뷰 웹 파트를 변환 (DVWP).
  3. 그래프로 보여주는 HTML을 생성 하기 위해 DVWP의 XSL을 수정.

비즈니스 시나리오 / 설치:

내가 만든 표준 제목 열이 있는 사용자 지정 목록, 추가 열, "상태". 이 모델 (매우 simplistically) 비용에 대 한 "권한 부여" 여기서 제목을 나타냅니다 프로젝트 및 상태 값의 목록에서 시나리오:

  • 제안
  • 과정에서
  • 지연

이 상태 코드를 표시 하는 대화형 수평 막대 그래프를 생성 하는 목표는.

사람이 거주 케 된을 목록 하 고 이런 모습:

이미지

데이터 보기 웹 파트 만들기:

페이지에 사용자 지정 목록을 추가 하 여는 DVWP를 만들 (내 경우에서 사이트 페이지) 지침에 따라 여기 (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

간단 하 게는 DVWP를 만들 뿐만 아니라, 우리는 또한 사용할 수 있는 행을 모두 표시 하려면 페이징 속성을 설정 해야. 나를 위해, 이 같이 보입니다.:

이미지

이 시점에서, 난 항상 SPD 및 브라우저를 닫습니다.. 난 다음 다시 브라우저를 사용 하 여 페이지를 엽니다.. 이 페이지에 웹 파트 레이아웃을 실수로 청소 방지.

XSLT를 수정:

그것은 지금 시간 XSLT를 수정 하려면.

나는 항상이 대 한 visual studio를 사용. (참조 여기 많은 도움이 될 것입니다 intellisense에 대 한 중요 사항에 대 한).

빈 프로젝트를 만들려면 네 개의 새 파일 추가 ("원래 단어를 교체" "new" 적절 한):

  • Original.xslt
  • New.xslt
  • 오리지널 Params.xml
  • 새로운 Params.xml

내 경우에는, 그것은 이것 처럼 보인다:

이미지

웹 파트를 수정 하 고 매개 변수 및 XSL 원본"에 복사" Visual Studio에서 버전.

목표는 여기 우리가 다시 들어가서 DVWP 쿼리에서 그래프를 렌더링 하는 HTML 결과 변환 하는 XSL 원인입니다..

이 위해, 그것은 어떤 HTML 처럼 보여야 우리가 "XSL" 이라고 하는 광 기에 의해 혼란 스 러 워 하기 전에 먼저 고려 하는 데 도움이. (확실 하 게 하려면, 다음은 간단 하 게 예; 하지 그것을 입력 또는 복사/붙여넣기 visual studio에. 전체 타격 나중에 쓰기를 위한 출발점을 제공합니다). 다음 샘플 그래프 당 바로 다음 HTML 렌더링:

막대 그래프 샘플

해당 HTML:

<html>
<바디>
<센터>
<테이블 너비 = 80%>
<tr><td><센터>가로 막대 그래프</td></tr>
<tr>
<td 정렬 = "센터">
<표 테두리 = "1" 너비 = 80%>
<tr>
<td width = 10%>오픈</td>
<td><테이블의 cellpadding ="0" cellspacing ="0" 국경 = 0 너비 = 50%><tr bgcolor = 빨간색><td>&nbsp;</td></tr></테이블></td>
</tr>
<tr>
<td width = 10%>폐쇄</td>
<td><테이블의 cellpadding ="0" cellspacing ="0" 국경 = 0 너비 = 25%><tr bgcolor = 빨간색><td>&nbsp;</td></tr></테이블></td>
</tr>
<tr>
<td width = 10%>지연</td>
<td><테이블의 cellpadding ="0" cellspacing ="0" 국경 = 0 너비 = 25%><tr bgcolor = 빨간색><td>&nbsp;</td></tr></테이블></td>
</tr>
</테이블>
</td>
</tr>
</테이블>
</바디>
</html>

"빨간색" 행의 배경색을 설정 하 여 내 막대를 만드는 죽은 간단한 접근 방식을 사용.

테이크아웃 여기가: 끝에서, 우리가 일을 하는 행과 열으로 HTML을 만들고 있다.

XSLT 템플릿:

수평 막대 그래프를 생성 하는 XSLT를 복사 했습니다.. 그것은 꽤 잘 그래서 난 추가 하지 않습니다 훨씬 여기이 노트를 제외한 주석:

  • 기본 XSL SharePoint Designer 준 처음에 DVWP를 만들 때 시작.
  • SPD의에서이 줄일 수 있었다 657 라인을 166 라인.
  • 매개 변수 XML 파일 럽 하지 않았다 (XSL에서 별도 및 DVWP 자체 수정에 갈 때 무슨 뜻인지 알게 될 거 야; 파일을 수정할 수 있습니다.). 그러나, 그것을 간단 하 게 하기 위해, XSL에서 거의 모든 그들을 제거 했 어. 즉 수 있도록 하려는 경우 이러한 매개 변수 사용, XSL에 다시 그들의 변수 정의 추가 하기만 하면. Visual studio 프로젝트에는 원래 XSL 변수 정의 할 것 이기 때문에 쉽게 될 것입니다..
  • 복사 하 여 visual studio 프로젝트에 직접 붙여넣기이 수 해야. 다음, 내 전화를 제거 하 고 "ShowBar"를 직접 호출을 삽입.
  • 작품을 만들어 내려 드릴은 <a href> 이것처럼: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. 이 기술은 다른 문맥에 있는 값의 수 있습니다.. 처음에, 더 복잡 한 포맷을 준수 필요가 있을 것입니다 생각: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, 하지만 내 환경에는 필요 하지 않습니다.. 목록의 URL 전달 됩니다 우리에 게 sharepoint 일반화 하기 매우 쉽습니다 그래서.

그것은 여기:

<xsl:스타일 시트 버전="1.0" 제외-결과-접두사="rs z o s ddwrt dt msxsl" 
xmlns:msxsl="항아리:스키마-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/ 1999/XSL/변환"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="항아리:스키마-microsoft-com:사무실" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:rs="항아리:스키마-microsoft-com:행 집합" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="항아리:frontpage:내부"
> <xsl:출력 메서드="html" 들여쓰기="아니" /> <xsl:10 진수 형식 NaN="" /> <xsl:param 이름="ListUrlDir"></xsl:param> <!-- 드릴 다운을 지 원하는이 필요. --> <xsl:서식 파일 경기="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:변수 이름="dvt_StyleName">테이블</xsl:변수> <xsl:변수 이름="" 선택="/dsQueryResponse/행/행" /> <xsl:변수 이름="dvt_RowCount" 선택="개수($행)" /> <xsl:변수 이름="IsEmpty" 선택="$dvt_RowCount = 0" /> <xsl:변수 이름="dvt_IsEmpty" 선택="$dvt_RowCount = 0" /> <xsl:선택> <xsl:때 테스트="$dvt_IsEmpty"> 그래프에 데이터가 없는!<br/> </xsl:때> <xsl:그렇지 않으면> <!-- 흥미로운 물건을 여기 시작. 그래프에서 한 쌍의 각 행에 대 한 변수를 정의 해야: 항목 및 총의 %의 총 수. --> <xsl:변수 이름="totalProposed" 선택="개수(/dsQueryResponse/행/행[정상화 공간(@Status) '제안' =])" /> <xsl:변수 이름="percentProposed" 선택="$totalProposed div $dvt_RowCount" /> <xsl:변수 이름="totalInProcess" 선택="개수(/dsQueryResponse/행/행[정상화 공간(@Status) = ' 프로세스'])" /> <xsl:변수 이름="percentInProcess" 선택="$totalInProcess div $dvt_RowCount" /> <xsl:변수 이름="totalStalled" 선택="개수(/dsQueryResponse/행/행[정상화 공간(@Status) '지연' =])" /> <xsl:변수 이름="percentStalled" 선택="$totalStalled div $dvt_RowCount" /> <!-- 우리가 여기 우리의 HTML 테이블 정의. 일관 된 수 있도록 몇 가지 표준 SharePoint 스타일 여기에서 대출 오전. 난 그것 뿐만 아니라 테마 재정의 글로벌 css 파일에 변경 돼 영광 이다. --> <테이블 너비="100%" cellspacing="0" cellpadding="2" 스타일="국경-오른쪽: 1 단단한 #C0C0C0; 국경-하단: 1 단단한 #C0C0C0; 국경 왼쪽 스타일: 단단한; 국경-왼쪽-폭: 1; 국경-가기-스타일: 단단한; 국경-가기-폭: 1;"> <tr> <td 정렬="센터"> <테이블 테두리="1" 너비="100%"> <!-- 그래프를 각 상태에 대 한, 우리 "ShowBar 전화" 서식 파일. 우리는 그것을 통과합니다: 1. 행 레이블. 이 하이퍼링크로 변환. 2. 백분율 (위에서 변수). 3. 기본 목록에서 코드의 실제 필드 이름. 이 표시 라벨에 맞게 필요 하지 않습니다.. 4. 필드 값에 대 한 일치 #3. 5. 이 상태 코드의 전체 항목 (모든 상태 코드 하지 그랜드 총). 그것은 방출 한다는 <tr></tr> 그리고 수평 막대 그래프 선. 우리는 우리가 보려는 각 상태 코드에 대 한이 템플릿을 전화합니다. --> <xsl:통화 서식 이름="ShowBar"> <xsl:param으로 이름="BarDisplayLabel" 선택="' 제안 '"/> <xsl:param으로 이름="BarPercent" 선택="$percentProposed"/> <xsl:param으로 이름="QueryFilterFieldName" 선택="' 상태 '"/> <xsl:param으로 이름="QueryFilterFieldValue" 선택="' 제안 '"/> <xsl:param으로 이름="TotalItems" 선택="$totalProposed"></xsl:param으로> </xsl:통화 서식> <xsl:통화 서식 이름="ShowBar"> <xsl:param으로 이름="BarDisplayLabel" 선택="' 지연 '"/> <xsl:param으로 이름="BarPercent" 선택="$percentStalled"/> <xsl:param으로 이름="QueryFilterFieldName" 선택="' 상태 '"/> <xsl:param으로 이름="QueryFilterFieldValue" 선택="' 지연 '"/> <xsl:param으로 이름="TotalItems" 선택="$totalStalled"></xsl:param으로> </xsl:통화 서식> <xsl:통화 서식 이름="ShowBar"> <xsl:param으로 이름="BarDisplayLabel" 선택="' 과정'에서"/> <xsl:param으로 이름="BarPercent" 선택="$percentInProcess"/> <xsl:param으로 이름="QueryFilterFieldName" 선택="' 상태 '"/> <xsl:param으로 이름="QueryFilterFieldValue" 선택="' 과정'에서"/> <xsl:param으로 이름="TotalItems" 선택="$totalInProcess"></xsl:param으로> </xsl:통화 서식> </테이블> </td> </tr> </테이블> </xsl:그렇지 않으면> </xsl:선택> </xsl:서식 파일> <!-- 이 템플릿은 막대 그래프에서 개별 줄을 표시 하는 작업을 수행. 당신은 아마 당신의 여기 조정의 대부분을 할 거 야. --> <xsl:서식 파일 이름="ShowBar"> <xsl:param 이름="BarDisplayLabel" /> <!-- 레이블 표시 --> <xsl:param 이름="BarPercent"/> <!-- 합계의 %. --> <xsl:param 이름="QueryFilterFieldName"/> <!-- 쿼리를 이동 하는 데 사용 & 필터 --> <xsl:param 이름="QueryFilterFieldValue"/> <!-- 쿼리를 이동 하는 데 사용 & 필터 --> <xsl:param 이름="TotalItems" /> <!-- 이 barlabel의 총 수 --> <tr> <!-- 막대 자체 레이블. --> <td 클래스="ms-formbody" 너비="30%"> <!-- 이 다음 문 집합 빌드 쿼리 문자열을 기본 데이터의 필터링 된 보기 내려 드릴 수 있습니다.. 우리가 여기에 몇 가지 사용: 1. 우리 열에서 필터링 할 목록에 FilterField1 및 FilterValue1를 전달할 수 있습니다.. 2. SharePoint는 우리에 게 키 매개 변수를 전달, 기본 목록에이 DVWP "실행"을 가리키는 ListUrlDir. XSL 재미? --> <xsl:텍스트 사용 안 함-출력 이스케이프=""> <![CDATA[<a href ="]]></xsl:텍스트> <xsl:값의 선택="$ListUrlDir"/> <xsl:텍스트 사용 안 함-출력 이스케이프=""><![CDATA[?FilterField1 =]]></xsl:텍스트> <xsl:값의 선택="$QueryFilterFieldName"/> <xsl:텍스트 사용 안 함-출력 이스케이프=""><![CDATA[&FilterValue1 =]]></xsl:텍스트> <xsl:값의 선택="$QueryFilterFieldValue"/> <xsl:텍스트 사용 안 함-출력 이스케이프=""><![CDATA[">]]></xsl:텍스트> <xsl:값의 선택="$BarDisplayLabel"/> <xsl:텍스트 사용 안 함-출력 이스케이프=""><![CDATA[</는>]]></xsl:텍스트> <!-- 다음 비트는 형식에 몇 가지 숫자를 보여줍니다.: "(총 / % 총의)" --> (<xsl:값의 선택="$TotalItems"/> / <!-- 이 우리를 위해 좋은 백분율 레이블을 만듭니다.. 감사, 마이크로 소프트! --> <xsl:통화 서식 이름="percentformat"> <xsl:param으로 이름="%" 선택="$BarPercent"/> </xsl:통화 서식>) </td> <!-- 마지막으로, 방출 한 <td> 바에 대 한 태그 자체.--> <td> <테이블 cellpadding="0" cellspacing="0" 테두리="0" 너비="{라운드($BarPercent * 100)+1}%"> <tr bgcolor="레드"> <xsl:텍스트 사용 안 함-출력 이스케이프=""><![CDATA[&nbsp;]]></xsl:텍스트> </tr> </테이블> </td> </tr> </xsl:서식 파일> <!-- 이 MS 서식 파일에서 발견 일부 XSL에서 직접 가져온 것입니다.. --> <xsl:서식 파일 이름="percentformat"> <xsl:param 이름="%"/> <xsl:선택> <xsl:때 테스트="형식 번호($%, '#,##0%;-#,##0%')= '앤'">0%</xsl:때> <xsl:그렇지 않으면> <xsl:값의 선택="형식 번호($%, '#,##0%;-#,##0%')" /> </xsl:그렇지 않으면> </xsl:선택> </xsl:서식 파일> </xsl:스타일 시트>

결과:

위의 XSL이이 그래프 생성:

이미지

상태 코드를 클릭 하 여 기본 데이터 드릴:

이미지

결론 의견:

이 일반화 될 수 있다?

이 그래프 개념을 사랑, 하지만 난에 너무 많은 손 코딩 할 필요가 사실 싫어. 일반화 될 수 있는지 여부를 조금 생각을 부여 했습니다 그리고 나는 낙관적, 그러나 나는 또한 약간 벽돌 벽 어딘가에 경로의 어떤 해결 제공 하지 않습니다 있을 수 있습니다 두려워. 누구 든 지이 대 한 몇 가지 좋은 아이디어를 가진다면, 코멘트에 메모를 확인 하십시오 또는 이메일 날.

수직 그래프:

이것은 가로 막대 그래프. 그것은 확실히 수직 그래프를 만들 수. 우리는 단지 HTML을 바꿀 필요가. 같은 방법으로 시작: 수직 막대 그래프의 HTML 표현을 생성 하 고 XSL을 통해 얻을 하는 방법. 아무도에 관심이 있다면, 내가 그것을 밖으로 시도 하 고 단점을 보완 하기 밖으로 작동 하도록 설득할 수 있습니다.. 누군가가 이미 하는 경우, 알려주세요 그리고 난 당신의 블로그에 링크 기꺼이 드리겠습니다 🙂

나는 생각 한다 도전 수직 그래프와 그래프의 레이블을 관리 하기가 더 어렵습니다., 하지만 확실히 불가능.

필드 이름 잡았다:

적어도 두 가지 필드 이름에 대 한 밖을 봐합니다.

첫 번째, 공간 필드 이름에 XSL에 이스케이프. 이 문제가 여기 있을 것입니다.:

        <xsl:변수 이름="totalProposed" 
선택="개수(/dsQueryResponse/행/행[정상화 공간(@Status) '제안' =])" />

경우 "상태" 열 상태 코드 "라는 사실" 그런 다음 "Status_x0020_Code"로 참조 해야:

   <xsl:변수 이름="totalProposed" 
선택="개수(/dsQueryResponse/행/행[정상화 공간(@Status_x0020_Code) '제안' =])" />

두 번째, 나는 이것에 약간 퍼지, 필드 이름 변경에 대 한 경계 해야 하지만. 당신이 당신의 분야 "상태 코드의 이름을 하는 경우" 그리고 나중에, 이름을 "AFE 상태"로, "내부 이름" 변경 되지 않습니다.. 내부 이름 "상태 코드를 있을 것입니다." "Status_x0020_Code"으로 참조 되어야 합니다. "다른 리소스" 링크 진단 하 고 이런이 종류의 문제를 해결 도움이 될 수 있습니다..

그 색상에 대 한:

"레드 골 랐 어 요" 그것은 순간에 나를 기쁘게 하기 때문에. 그것은 단순한 숫자의 시각적 설명을 제공 하기 위해 서로 다른 색을 큰 문제가 되지 않을 것 이다, 하지만 유용한 KPI 제공 하. 예를 들어, 비율 "지연 하는 경우" AFE의은 > 10% 그런 다음 빨간색 표시, 그렇지 않으면 검은 표시. 사용 <xsl:선택> 이렇게 하려면.

기타 리소스:

행복 한 변화!

<끝 />

내 블로그를 구독!

사용자 지정 목록을 통해 옴 데이터 표시 (또는, 아직 다른 OM 데이터 Displayor [YACC와 같은, 하지만 다른])

오늘, 소수의 "입력 한 열 이름이 이미 사용 중이거나 예약 메시지 뒤에 근본 원인을 아래로 추적 하는 시간을 보냈다. 다른 이름을 선택 하십시오."

질문에 열을 만들 수 있습니다., 삭제 하 고 다시 또 다른 환경에서 만든, 그래서 난 그것을 알고 아니 예약 된 이름. 그러나, 간단 하 게 찾을 수 없습니다 어디서 나 열 사이트에서 표준 SharePoint 사용자 인터페이스를 통해 사이트 모음에서.

에 게시 됨 MSDN 포럼 여기 그리고는 불굴의 앤드류 우드 워드 기본 개체 모델 데이터의 방향으로 나를 지적 했다.

으로 떠나 갔다 codeplex 기본 OM 데이터에 피어 날 도와 문제를 찾아 도움이 될 몇 가지 도구를 찾을 수.

여러 가지 도구를 시도 하 고 그들이 매우 쿨 및 흥미로운 하지만 결국, UI 내 목적을 위해 충분히 좋지 않았다. 어떤 방법으로 그들을 비판 하지 오전, 하지만 명확 하 게 도구 제조 업체 없 내 문제가 마음에 그들은 그들의 UI를 만들 때 :). 대부분의 사람들이 상당한 양의 워크스테이션을 만들기에 시간과 노력 투자 될 것 / 트리 보기를 제공 하는 클라이언트 응용 프로그램, 등등 상황에 맞는 메뉴를 마우스 오른쪽 단추로 클릭. 이들은 좋은 모두, 하지만 그것은 또한 매우 유연 최고의 라인 사용자 환경을 만들기 위한 작업을 많이.

정말이 문제에 대 한 답변을 필요로. 그것은 나에 게 발생 하는 사용자 지정 목록에는 사이트 모음의 모든 사이트 열을 얻을 수 있다면, 필터링 할 수 있습니다., 정렬 그리고 두 일 걸 요 기존 열을 찾을 수 있도록 것 이라고 하는 보기를 만들 (그것이, BTW). 내가 서 서 고는 1 시간 또는 2 나중에, 내 모든 사이트 열 그룹화를 사용자 지정 목록으로 적재 했다, 정렬 및 등등. 5 분 후 내 대답을 발견.

나는 성공적으로 세계를 정복 하면, 나는 모든 SharePoint 도구 공급자 심각 하 게 고려해 야 합니다 사용자 지정 목록에서 개체 모델 데이터 서피싱 법령 것 같아요. 그런 식으로, 힘을가지고 어떤 검색 방법을 내가 원합니다 (제한 된, 물론, 표준 sharepoint 기능).