Архиви на категоријата: SharePoint развој

Пазете се Ударни Промени во ItemStyle.xsl

Јас работев со ItemStyle.xsl да го прилагодите изгледот на содржината на Барањето Веб Дел и право за ручек време, I made a breaking change to the xsl. I didn’t realize it, but this had far reaching effects throughout the site collection. I went off to lunch and upon my return, забележав оваа порака се појавува во еден куп места:

Не можам да се прикаже оваа веб Дел. За смена на проблемот, ја отворите оваа веб страница во Windows SharePoint Services-компатибилен HTML едитор како на пример Microsoft Office SharePoint Designer. Ако проблемот продолжи, контактирајте го вашиот веб сервер администратор.

Јас ја обвини клиент (не сфаќајќи што се уште дека тоа беше моја вина во овој момент) but eventually noticed that visual studio intellisense was warning me that I had malformed XSL. I corrected it and everything started working.

Биде плетен внимателни кога се работи со ItemStyle.xsl (и сите на глобалната XSL датотеки) — кршење на нив влијае на многу артефакти во сајт за собирање.

<крај />

Покажи Содржина Пребарување Веб Дел Резултати во мрежа / Табела

Преглед и цел

Надвор од кутијата, Мос’ Содржината Пребарување Веб Дел (CQWP) покажува своите резултати во листата формат, similar to search results. It is also possible to display the results in a grid format (i.e. HTML табела формат). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.

Бизнис сценарио

I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, како што е насловот, буџет, очекува завршување, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, тоа би изгледало вака:

сликата

На технички пристап е речиси иста како што е опишано тука (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.

I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:

сликата

HTML вака генерира, кои се резултат:

<html>
 <тело>
 <центар>
 <маса границата= 1>

<!-- Етикети ->
 <tr bgcolor= Сина>
 <td><фонт боја= Бело><б>Име на проектот</б></фонт></td>
 <td усогласување на= Право><фонт боја= Бело><б>Заврши Датум</б></фонт></td>
 <td усогласување на= Право><фонт боја= Бело><б>Буџет</б></фонт></td>
 <td усогласување на= Право><фонт боја= Бело><б>Крај на трошоците</б></фонт></td>
 <td><фонт боја= Бело><б>Целокупната состојба</б></фонт></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. Креирате под-сајтови за проекти и Singleton листи.
  4. Додадете CQWP на веб страница и конфигурирајте го да пребарувате за вашиот листи.
  5. Менувате XML на CQWP да собере дополнителни колони.
  6. Менувате XSL да генерира табела.

I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN тука (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) и блог Хедер Соломон тука (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Ореви и завртки

Започнете и спроведување чекори едно преку пет, како за на MSDN документација и член Хедер Соломон.

Во овој момент, сте ги додале на вашиот CQWP на страница и имате <CommonViewFields> конфигуриран како што е потребно.

По вообичаените чекори, Јас се добијат овие средно резултати:

1. Креирај типот на содржина, a templatized custom list for that content type and two sites. Here is the content type:

сликата

Тука е сајт структура:

сликата

2. Додадете CQWP по создавањето на мојот проект под-сајтови и Singleton проект резиме листи:

сликата

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. Во овој момент, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 да креираш кориснички / unghosted version of ItemStyle.xsl. I follow Heather’s advice, нагоре низ чекор 11 и да се овие средно резултати:

4.1: Името на мојата XSL дефиниција како што следува:

<XSL:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">

Јас исто така, малку менувате нејзиниот предложи <XSL:за секој- …> со додавање на <Br /> ознака за да се обезбеди почиста оглас:

    <XSL:за секој- изберете="@ *">
      P:<XSL:вредност на изберете="име()" /><BR/>
    </XSL:за секој->

4.2: Јас менувате веб дел, go to appearance and select my "Grid" стил:

сликата

Применуваат промени и тука е резултат:

сликата

Можеме да видиме од погоре дека на полиња сакаме (Име на проектот, сметка, статус, итн) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. На пример, we reference Project Status as "Project_x005F_x0020_Name".

Во овој момент, ќе заминеме од блог Хедер и од рамениците на овие гиганти, Додадам моето малку.

ContentQueryMain.xsl

ЗАБЕЛЕШКА: Кога правење на промени во двете ContentQueryMain.xsl како и ItemStyle.xsl, што треба да се провери оние датотеки назад, и пред да го видите ефектот на вашите промени.

За мрежа одлуки цели, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <маса> ознака пред емитуваат првиот ред на податоци и затворање <маса> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" дефиниција во ItemStyle.xsl, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.

Користење на техника Хедер Соломон, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:

сликата

Ние треба да направите следниве промени:

  • Менување на дефиниција XSL, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <маса> тагови.
  • Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" параметар, така што LastRow може да се пренесат на нашите Решетка дефиниција.

Locate the template named "OuterTemplate.CallItemTemplate" идентификувани од страна на низа:

  <XSL:дефиниција име="OuterTemplate.CallItemTemplate">

Замени целата дефиниција како што следува:

  <XSL:дефиниција име="OuterTemplate.CallItemTemplate">
    <XSL:престанат име="CurPosition" />

    <!--
      Add the "LastRow" параметар.
      We only use it when the item style pass in is "Grid".
    -->
    <XSL:престанат име="LastRow" />

    <XSL:изберете>
      <XSL:кога тест="@ Style = "NewsRollUpItem"">
        <XSL:применува-шаблони изберете="." владата="itemstyle">
          <XSL:со-Парам име="EditMode" изберете="$cbq_iseditmode" />
        </XSL:применува-шаблони>
      </XSL:кога>
      <XSL:кога тест="@ Style = "NewsBigItem"">
        <XSL:применува-шаблони изберете="." владата="itemstyle">
          <XSL:со-Парам име="CurPos" изберете="$CurPosition" />
        </XSL:применува-шаблони>
      </XSL:кога>
      <XSL:кога тест="@ Style = "NewsCategoryItem"">
        <XSL:применува-шаблони изберете="." владата="itemstyle">
          <XSL:со-Парам име="CurPos" изберете="$CurPosition" />
        </XSL:применува-шаблони>
      </XSL:кога>

      <!--
              Помине моментална позиција и lastrow да Мрежните itemstyle.xsl дефиниција.
              ItemStyle.xsl ќе ја користат таа да се емитуваат на отворено и затворање <маса> тагови.
      -->
      <XSL:кога тест="@ Style = "Мрежа"">
        <XSL:применува-шаблони изберете="." владата="itemstyle">
          <XSL:со-Парам име="CurPos" изберете="$CurPosition" />
          <XSL:со-Парам име="Последно" изберете="$LastRow" />
        </XSL:применува-шаблони>
      </XSL:кога>

      <XSL:во спротивно>
        <XSL:применува-шаблони изберете="." владата="itemstyle">
        </XSL:применува-шаблони>
      </XSL:во спротивно>
    </XSL:изберете>
  </XSL:дефиниција>

Коментари опише целта на промени.

Се разбира, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:

<XSL:дефиниција име="OuterTemplate.Body">

Движете се низ инструкциите во OuterTemplate.Body и вметнете ја параметар LastRow како што следува (прикажани како коментар во закосени букви):

<XSL:повик-дефиниција име="OuterTemplate.CallItemTemplate">
  <XSL:со-Парам име="CurPosition" изберете="$CurPosition" />
  <!-- Вметнете ја параметар LastRow. -->
  <XSL:со-Парам име="LastRow" изберете="$LastRow"/>
</XSL:повик-дефиниција>

По сето ова, ние конечно работите се постави правилно, така што нашите ItemStyle.xsl можат да емитуваат <маса> тагови на вистинското место.

ItemStyle.Xsl

ЗАБЕЛЕШКА: Повторно, провери во ItemStyle.xsl по правење било какви промени, така што ќе го видите ефектот на тие промени.

Имаме две задачи овде:

  • Replace the entire Grid template. You can copy/paste from below.
  • Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (Можете да кажете дека имам слаб рачка на XSL).

Прва, во близина на врвот на ItemStyle.xsl, додадете оваа линија:

  <!-- Некои mumbo џамбо што ни овозможува да се прикаже U.S. валута. -->
  <XSL:децимална формат име="персонал" цифрениот="D" />

  <XSL:дефиниција име="Стандардно" одговара="*" владата="itemstyle">

Имајте на ум дека јас се додава непосредно пред <XSL:template name="Default" …> дефиниција.

Следна, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, но немојте да се двоумите да ми пишете или оставете коментари на мојот блог, ако имате прашања.

  <XSL:дефиниција име="Решетка" одговара="Ред[@ Style = "Мрежа"]" владата="itemstyle">

    <!--
      ContentMain.xsl поминува CurPos и ​​Последен.
      Ние ги користиме овие да се условно емитуваат на отворено и затворање <маса> тагови.
    -->
    <XSL:престанат име="CurPos" />
    <XSL:престанат име="Последно" />

    <!-- Следниве променливи се немодифицирана од стандардниот ItemStyle.xsl -->
    <XSL:променлива име="SafeImageUrl">
      <XSL:повик-дефиниција име="OuterTemplate.GetSafeStaticUrl">
        <XSL:со-Парам име="UrlColumnName" изберете=""ImageUrl""/>
      </XSL:повик-дефиниција>
    </XSL:променлива>
    <XSL:променлива име="SafeLinkUrl">
      <XSL:повик-дефиниција име="OuterTemplate.GetSafeLink">
        <XSL:со-Парам име="UrlColumnName" изберете=""LinkUrl""/>
      </XSL:повик-дефиниција>
    </XSL:променлива>
    <XSL:променлива име="DisplayTitle">
      <XSL:повик-дефиниција име="OuterTemplate.GetTitle">
        <XSL:со-Парам име="Наслов" изберете="@ Наслов"/>
        <XSL:со-Парам име="UrlColumnName" изберете=""LinkUrl""/>
      </XSL:повик-дефиниција>
    </XSL:променлива>
    <XSL:променлива име="LinkTarget">
      <XSL:ако тест="@ OpenInNewWindow = 'точно'" >_blank</XSL:ако>
    </XSL:променлива>

    <!--
      Еве ние се дефинира променлива, "tableStart".  Таа содржи HTML
      .  Имајте на ум дека ако CurPos = 1, тоа вклучува HTML во таг CDATA.
      Во спротивно, таа ќе биде празна.

      Вредноста на tableStart е emited секој пат ItemStyle се вика преку
      .
    -->
    <XSL:променлива име="tableStart">
      <XSL:ако тест="$CurPos = 1">
        <![CDATA[
        <маса границата = 1>
          <tr bgcolor="blue">
            <td><font color="white"><б>Име на проектот</б></фонт></td>
            <td align="right"><font color="white"><б>Заврши Датум</б></фонт></td>
            <td align="right"><font color="white"><б>Буџет</б></фонт></td>
            <td align="right"><font color="white"><б>Крај на трошоците</б></фонт></td>
            <td><font color="white"><б>Целокупната состојба</б></фонт></td>
          </tr>
        ]]>
      </XSL:ако>
    </XSL:променлива>

    <!--
      Уште една променлива, tableEnd едноставно дефинира затворање табелата таг.

      Како и со tableStart, тоа е секогаш emited.  Ова е причината зошто неговата вредност е
      .
    -->
    <XSL:променлива име="tableEnd">
      <XSL:ако тест="$CurPos = $ Минатата">
        <![CDATA[ </маса> ]]>
      </XSL:ако>
    </XSL:променлива>

    <!--
      Секогаш емитуваат на содржината на tableStart.  Ако ова не е прв
      , тогаш знаеме неговата вредност
      .

      Оневозможи излез избега, бидејќи кога tableStart не го полето празно, тоа
      .  Ако
      , it will generate
      stuff like "&lt;маса&GT;" instead of "<маса>".
    -->
    <XSL:вредност на изберете="$tableStart" disable-излез-бегство="Да"/>


    <tr>
      <!--
      P:Project_x005F_x0020_Name
      :Project_x005F_x0020_End_x005F_x0020_Date
      :Project_x005F_x0020_Budget
      :Project_x005F_x0020_Expenses
      :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:со-Парам име="вредност" 
изберете="@ Project_x005F_x0020_Budget"></XSL:со-Парам> </XSL:повик-дефиниција> </td> <td усогласување на="право"> <XSL:повик-дефиниција име="formatcurrency"> <XSL:со-Парам име="вредност" изберете="@ Project_x005F_x0020_Expenses">
</XSL:со-Парам> </XSL:повик-дефиниција> </td> <td> <XSL:вредност на изберете="@ Project_x005F_x0020_Status"/> </td> <!-- Сите од следниве е коментира надвор да се разјаснат работите. Сепак, да се вратиме и работи го во <td> да ја видиме нејзината         . --> <!-- <div id="linkitem" class="item"> <XSL:if test="string-length($SafeImageUrl) != 0"> <div class="image-area-left"> <a href="{$SafeLinkUrl}" target="{$LinkTarget}"> <img class="image-fixed-width" src="{$SafeImageUrl}"
alt="{@ ImageUrlAltText}"/> </на> </div> </XSL:ако> <div class="link-item"> <XSL:повик-дефиниција
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href="{$SafeLinkUrl}"
target="{$LinkTarget}" title="{@ LinkToolTip}"> <XSL:value-of select="$DisplayTitle"/> </на> <div class="description"> <XSL:value-of select="@Description" /> </div> </div> </div>
--> </tr> <!-- Емитуваат на завршната табела таг. Ако ние не сме на последниот ред, ова ќе биде празна. --> <XSL:вредност на изберете="$tableEnd" disable-излез-бегство="Да"/> </XSL:дефиниција> <XSL:дефиниција име="formatcurrency"> <XSL:престанат име="вредност" изберете="0" /> <XSL:вредност на изберете="формат-број($вредност, "$DDD,ДДД,DDD.DD", "staff")" /> </XSL:дефиниција>

Стандард WSS / Мос внес на податоци екрани не поддржуваат Cascading зависници-падови (или други интра-од комуникацијата)

Ажурирање (04/2008): Овој голем блог запис покажува добар вклучите Javascript-базирани на пристап кон овој проблем: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

Ажурирање II: (04/2008): Овој блог запис изгледа ветувачки, како и: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Неколку пати неделно, ако не секојдневно, forum users describe a requirement that would normally be met via cascading drop-downs. На пример, Имам две паѓачката контроли:

  • Листа на U.S. држави
  • Листа на U.S. cities.

As responsible UI providers, we want it to operate like this:

  • Paul selects a U.S. state from the drop-down.
  • This causes the cities drop-down to filter only those cities that belong to the selected state.
  • Paul selects a city from this filtered list.

There is no out-of-the-box support for this feature. Всушност, there is no OOB support for any kind of direct intra-form communication. This includes programmatically hiding/enabling/disabling fields in response to field changes elsewhere on the form.

The real objective of this article to to describe possible solutions and these are the options as I know them:

  1. Develop a custom column type. As a custom-column-developer, you have full control over the "world" of that custom column. You can implement a cascading drop-down that way.
  2. Consider using workflow. In some cases, you want to automatically assign a value to field based on another field’s value. Во овој случај, you would normally try to use a calculated column, but some times, it just won’t get the job done. SharePoint Designer workflow is a relatively administer-friendly alternative to dropping down into code and visual studio. If you go this route, be aware of the issue addressed by овој член (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Event handlers: Like workflow, this is an after-the-fact solution. Your event handler is a .NET assembly (C #, VB.NET) to which SharePoint passes control. The object you develop has access to the data of the list (and the whole object model) и можат да прават сите потребни пресметка.
  4. Use SharePoint Designer to create custom entry forms. I don’t have direct experience with this approach, но слушам дека прават добри работи со NewForm.aspx овие денови 🙂
  5. Се тркалаат свој ASP.NET податоци влез функција (како самостојна веб-страница или како веб дел) и ја користат таа наместо.

Ако некој знае други и / или подобри опции, Ве молиме да објавувате коментар и јас ќе се ажурира на телото на овој пост.

<крај />

Technorati Тагови:

Креирај Бар графики во SharePoint

Преглед:

(Ажурирање 12/04/07: Додаде уште еден интересен ресурс на крајот поврзување во друг блог во кој се обраќа ова преку еден многу интересен веб дел)

This blog entry describes how to create a bar graph in SharePoint. This works in both WSS and MOSS environments as it only depends upon the data view web part.

Целокупниот пристап е како што следува:

  1. Создаде листа или документ библиотека која ги содржи податоците кои сакате да графикон.
  2. Место придружните документ библиотека / обичај листа врз една страница и да го претворите во податоци видите веб дел (DVWP).
  3. Менувате DVWP е XSL да генерира HTML, која покажува како графика.

Бизнис сценарио / Подесување:

Имам креирано сопствен листа со стандардот Наслов колона и еден дополнителен колона, "Status". This models (Многу simplistically) an "Authorization For Expense" сценарио, каде што насловот го претставува проектот и статус вредност од листата на:

  • Предложени
  • Во Процес
  • Квадрирање

Целта е да се произведе интерактивна хоризонтална бар графикон кој го покажува овие статусот кодови.

Имам населени листата и тоа би изгледало вака:

сликата

Креирај Data View Веб Дел:

Создаде DVWP со додавање на сопствени листа на страница (сајт страница во мојот случај) и следете ги инструкциите тука (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Во прилог на едноставно креирање на DVWP, we also need to set the paging property to show all available rows. За мене, ова изгледа нешто како ова:

сликата

Во овој момент, I always close SPD and the browser. I then re-open the page using the browser. This avoids accidentally mucking up the web part layout on the page.

Измени на XSLT:

Сега е време за менување на XSLT.

I always use visual studio for this. (Види тука за важна забелешка за IntelliSense кои ќе ви помогнат многу).

Јас создаде празен проект додадете четири нови датотеки (replacing the words "Original" and "New" како што е соодветно):

  • Original.xslt
  • New.xslt
  • Оригинални Params.xml
  • Нови Params.xml

Во мојот случај, тоа би изгледало вака:

сликата

Modify the web part and copy the params and XSL to the "Original" верзија во Visual Studio.

Целта тука е да се предизвика XSL да се трансформира на резултатите кои ги добивме назад од DVWP пребарување во HTML дека прави како графика.

За таа цел, it helps to first consider what the HTML should look like before we get confused by the insanity that is known as "XSL". (Да биде јасно, следниве е само пример; don’t type it or copy/paste into visual studio. I provide a full blow starting point for that later in the write-up). The following sample graph is rendered as per the HTML immediately following:

Sample Bar Graph

Соодветните HTML:

<html>
<тело>
<центар>
<маса широчина = 80%>
<tr><td><центар>Хоризонтална Бар График</td></tr>
<tr>
<td align="center">
<table border="1" ширина = 80%>
<tr>
<td ширина = 10%>Отворете</td>
<td><маса ќелии: ="0" пополнувањето ="0" border = 0 width = 50%><tr bgcolor = црвена><td>&nbsp;</td></tr></маса></td>
</tr>
<tr>
<td ширина = 10%>Затворена</td>
<td><маса ќелии: ="0" пополнувањето ="0" border = 0 width = 25%><tr bgcolor = црвена><td>&nbsp;</td></tr></маса></td>
</tr>
<tr>
<td ширина = 10%>Квадрирање</td>
<td><маса ќелии: ="0" пополнувањето ="0" border = 0 width = 25%><tr bgcolor = црвена><td>&nbsp;</td></tr></маса></td>
</tr>
</маса>
</td>
</tr>
</маса>
</тело>
</html>

I used a dead simple approach to creating my bars by setting the background color of a row to "red".

Се-далеку тука е овој: На крајот, сите што го правиме е создавање HTML со редови и колони.

Шаблон XSLT:

I’ve copied the XSLT that generates a horizontal bar graph. It’s fairly well commented so I won’t add much here except for these notes:

  • Почнав со стандардната XSL дека SharePoint Designer ми даде кога јас прв пат создадоа DVWP.
  • Јас бев во можност да се намали оваа надолу од СПД 657 линии за 166 lines.
  • Јас не збрка околу со параметрите XML датотека (кој е одделен од XSL и ќе знаеш што сакам да кажам кога ќе одат да ги менувате DVWP себе; постојат две датотеки можете да менувате). Сепак, со цел да се поедностави, I did remove nearly all of them from the XSL. This means that if you want to make use of those parameters, you just need to add their variable definitions back to the XSL. That will be easy since you will have the original XSL variable definitions in your visual studio project.
  • You ought to be able to copy and paste this directly into your visual studio project. Потоа, remove my calls and insert your own calls to "ShowBar".
  • На разбивка работи со создавање на <a href> вака: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. This technique may be of value in other contexts. На прв, Мислев дека ќе треба да се во согласност со посложени формат: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, but in my environment that is not necessary. The List’s URL is passed to us by SharePoint so this is quite easy to generalize.

Тука е:

<XSL:интерфејс верзија="1.0" исклучи-резултат-префикси="rs, со грејс z о е DDWRT dt msxsl" 
xmlns:msxsl="затрупано:шеми-Microsoft-COM:XSLT" xmlns:XSL="HTTP://www.w3.org/1999/XSL/Transform"
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:на="затрупано:шеми-Microsoft-COM:канцеларија" xmlns:на="UUID:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="UUID:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs, со грејс="затрупано:шеми-Microsoft-COM:rowset" xmlns:од="#RowsetSchema"
xmlns:ddwrt2="затрупано:Насловна:внатрешна"
> <XSL:излез метод="html" алинеја="не" /> <XSL:децимална формат NaN="" /> <XSL:престанат име="ListUrlDir"></XSL:престанат> <!-- Сакам тоа да ја поддржи вежба-долу. --> <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 / Редови / Row" /> <XSL:променлива име="dvt_RowCount" изберете="смета($Редови)" /> <XSL:променлива име="IsEmpty" изберете="$dvt_RowCount = 0" /> <XSL:променлива име="dvt_IsEmpty" изберете="$dvt_RowCount = 0" /> <XSL:изберете> <XSL:кога тест="$dvt_IsEmpty"> Нема податоци за графикон!<BR/> </XSL:кога> <XSL:во спротивно> <!-- На интересни нешта започнува тука. Ние треба да се дефинираат еден пар на варијабли за секој ред во графиконот: вкупниот број           . --> <XSL:променлива име="totalProposed" изберете="смета(/dsQueryResponse / Редови / Row[нормализираат-простор(@ Статус) = 'Предлог "])" /> <XSL:променлива име="percentProposed" изберете="$totalProposed div $ dvt_RowCount" /> <XSL:променлива име="totalInProcess" изберете="смета(/dsQueryResponse / Редови / Row[нормализираат-простор(@ Статус) = 'Во Процес "])" /> <XSL:променлива име="percentInProcess" изберете="$totalInProcess div $ dvt_RowCount" /> <XSL:променлива име="totalStalled" изберете="смета(/dsQueryResponse / Редови / Row[нормализираат-простор(@ Статус) = 'Возастој "])" /> <XSL:променлива име="percentStalled" изберете="$totalStalled div $ dvt_RowCount" /> <!-- Ние се дефинираат нашите HTML табела овде. Јас сум позајмување од некои стандардни           . Мислам дека тоа ќе го уважиме           . --> <маса ширина="100%" пополнувањето="0" ќелии:="2" стил="граница-десно: 1 солидна # C0C0C0; границата дното: 1 солидна # C0C0C0; граница-лево-стил: солидна; граница-лево-ширина: 1; граница-топ-стил: солидна; граница-топ-ширина: 1;"> <tr> <td усогласување на="центар"> <маса границата="1" ширина="100%"> <!-- За секој статусот што сакаме да графикон, we call the "ShowBar" дефиниција. Ние го помине: 1. А етикета за ред. Ова се претвора во хиперврска. 2. На проценти (променлива од горе). 3. Вистинската име на поле на кодот од основната листа. Овој                      . 4. Областа вредност се исти за #3. 5. Вкупно предмети од овој статус код (не големото вкупниот износ на сите                      ). Тоа емитира <tr></tr> и хоризонтална графика линија. Ние го нарекуваме овој образец за секој код за статус сакаме да ја видите. --> <XSL:повик-дефиниција име="ShowBar"> <XSL:со-Парам име="BarDisplayLabel" изберете=""Предлог""/> <XSL:со-Парам име="BarPercent" изберете="$percentProposed"/> <XSL:со-Парам име="QueryFilterFieldName" изберете=""Статус""/> <XSL:со-Парам име="QueryFilterFieldValue" изберете=""Предлог""/> <XSL:со-Парам име="TotalItems" изберете="$totalProposed"></XSL:со-Парам> </XSL:повик-дефиниција> <XSL:повик-дефиниција име="ShowBar"> <XSL:со-Парам име="BarDisplayLabel" изберете=""Возастој""/> <XSL:со-Парам име="BarPercent" изберете="$percentStalled"/> <XSL:со-Парам име="QueryFilterFieldName" изберете=""Статус""/> <XSL:со-Парам име="QueryFilterFieldValue" изберете=""Возастој""/> <XSL:со-Парам име="TotalItems" изберете="$totalStalled"></XSL:со-Парам> </XSL:повик-дефиниција> <XSL:повик-дефиниција име="ShowBar"> <XSL:со-Парам име="BarDisplayLabel" изберете=""Во процесот""/> <XSL:со-Парам име="BarPercent" изберете="$percentInProcess"/> <XSL:со-Парам име="QueryFilterFieldName" изберете=""Статус""/> <XSL:со-Парам име="QueryFilterFieldValue" изберете=""Во процесот""/> <XSL:со-Парам име="TotalItems" изберете="$totalInProcess"></XSL:со-Парам> </XSL:повик-дефиниција> </маса> </td> </tr> </маса> </XSL:во спротивно> </XSL:изберете> </XSL:дефиниција> <!-- Овој шаблон не работата за прикажување на индивидуалните линии во бар графикон. Најверојатно ќе направи поголемиот дел од вашето tweaking овде. --> <XSL:дефиниција име="ShowBar"> <XSL:престанат име="BarDisplayLabel" /> <!-- етикетата за да се покаже --> <XSL:престанат име="BarPercent"/> <!-- Проценти од вкупно. --> <XSL:престанат име="QueryFilterFieldName"/> <!-- Се користи за да скокнат до пребарување & филтер --> <XSL:престанат име="QueryFilterFieldValue"/> <!-- Се користи за да скокнат до пребарување & филтер --> <XSL:престанат име="TotalItems" /> <!-- вкупно пребројувањето на овој barlabel --> <tr> <!-- Бар етикета себе. --> <td класа="MS-formbody" ширина="30%"> <!-- Ова следниот сет на изјавите гради на барањето кој им овозможува на           . Ние се направи употреба на неколку работи тука: 1. Ние може да помине FilterField1 и FilterValue1 на листата за филтрирање на колона. 2. SharePoint поминува клучен параметар за нас, ListUrlDir that points to the underlying list against which this DVWP is "running". Не XSL забава? --> <XSL:текст disable-излез-бегство="Да"> <![CDATA[<a href ="]]></XSL:текст> <XSL:вредност на изберете="$ListUrlDir"/> <XSL:текст disable-излез-бегство="Да"><![CDATA[?FilterField1 =]]></XSL:текст> <XSL:вредност на изберете="$QueryFilterFieldName"/> <XSL:текст disable-излез-бегство="Да"><![CDATA[&FilterValue1 =]]></XSL:текст> <XSL:вредност на изберете="$QueryFilterFieldValue"/> <XSL:текст disable-излез-бегство="Да"><![CDATA[">]]></XSL:текст> <XSL:вредност на изберете="$BarDisplayLabel"/> <XSL:текст disable-излез-бегство="Да"><![CDATA[</на>]]></XSL:текст> <!-- На следната малку покажува некои броеви во формат: "(вкупно / % од вкупните)" --> (<XSL:вредност на изберете="$TotalItems"/> / <!-- Ова создава убаво проценти етикета за нас. Благодарение, Мајкрософт! --> <XSL:повик-дефиниција име="percentformat"> <XSL:со-Парам име="проценти" изберете="$BarPercent"/> </XSL:повик-дефиниција>) </td> <!-- Конечно, испуштаат <td> ознака за бар себе.--> <td> <маса ќелии:="0" пополнувањето="0" границата="0" ширина="{коло($BarPercent * 100)+1}%"> <tr bgcolor="црвена"> <XSL:текст disable-излез-бегство="Да"><![CDATA[&nbsp;]]></XSL:текст> </tr> </маса> </td> </tr> </XSL:дефиниција> <!-- Тоа се зема директно од некои XSL го најдов во дефиниција МСП. --> <XSL:дефиниција име="percentformat"> <XSL:престанат име="проценти"/> <XSL:изберете> <XSL:кога тест="формат-број($проценти, "#, # # 0%;-#,##0%")= 'На Nan">0%</XSL:кога> <XSL:во спротивно> <XSL:вредност на изберете="формат-број($проценти, "#, # # 0%;-#,##0%")" /> </XSL:во спротивно> </XSL:изберете> </XSL:дефиниција> </XSL:интерфејс>

Резултатите:

На XSL од горе генерира овој графикон:

сликата

Разбивка на основните податоци со кликнување на статусот кодот:

сликата

Склучување на мисли:

Ова може да се генерализира?

Ја сакам оваа графики концепт, but I hate the fact that I have to go in and do so much hand-coding. I’ve given a little thought to whether it can be generalized and I’m optimistic, but I’m also a little fearful that there may be a brick wall somewhere along the path that won’t offer any work-around. If anyone has some good ideas on this, Ве молиме да направите белешка во коментари или е-мејл мене.

Вертикални графикони:

This is a horizontal bar graph. It’s certainly possible to create a vertical graph. We just need to change the HTML. I would start the same way: Create an HTML representation of a vertical bar graph and then figure out how to get that via XSL. If anyone is interested in that, I could be persuaded to try it out and work out the kinks. If someone has already done that, please let me know and I’ll gladly link to your blog 🙂

Мислам дека предизвикот со вертикална графикон е дека етикетите за графикон се потешко да се управува, но сигурно не е невозможно.

Поле Име Gotcha на:

Постојат најмалку две работи кои треба да внимавате со вашето поле имиња.

Прва, a field name with a space has to be escaped in the XSL. This will probably be an issue here:

        <XSL:променлива име="totalProposed" 
изберете="смета(/dsQueryResponse / Редови / Row[нормализираат-простор(@ Статус) = 'Предлог "])" />

If your "Status" column is actually named "Status Code" then you need to reference it as "Status_x0020_Code":

   <XSL:променлива име="totalProposed" 
изберете="смета(/dsQueryResponse / Редови / Row[нормализираат-простор(@ Status_x0020_Code) = 'Предлог "])" />

Вториот, и јас сум малку нејасни на овој, but you also need to be on the alert for field name changes. If you name your field "Status Code" а потоа подоцна, rename it to "AFE Status", the "internal name" does not change. The internal name will still be "Status Code" and must be referenced as "Status_x0020_Code". The "other resources" врски може да им помогне на дијагностицира и точни овој вид на проблем.

За таа боја:

I picked "red" because it’s pleasing to me at the moment. It would not be a big deal to show different colors so as to provide more than just a visual description of a number, but to also provide a useful KPI. На пример, if the percentage of "stalled" AFE е > 10% тогаш тоа покажува црвена, otherwise show it in black. Користат <XSL:изберете> да се оствари ова.

Други ресурси:

Среќен трансформирање!

<крај />

Да се ​​претплатите на мојот блог!

Присутни на податоци преку OM Прилагодено Листа (или, Уште еден OM податоци Displayor [како Yacc, но различни])

Денес, I spent a handful of hours tracking down the root cause behind the message "The column name that you entered is already in use or reserved. Choose another name."

Колоната во прашање може да се креира, брише и повторно креиран во друга средина, so I knew it wasn’t a reserved name. Сепак, Јас едноставно не можев да најдам на колоната насекаде преку стандардниот SharePoint кориснички интерфејс на било кој сајт во сајт за собирање.

Јас испратени до MSDN форуми тука и неукротим Ендрју Вудворд посочи мене во насока на основните објект модел на податоци.

Јас отиде да CodePlex да се најдат некои алатки кои ќе ми помогне пир во основните OM податоци и да ми помогне да се лоцира проблеми.

Се обидов неколку алатки и тие беа многу кул и интересен, но на крајот, the UI wasn’t good enough for my purpose. I’m not criticizing them by any means, но јасно ја алатката на одлуки немаат мојот проблем во умот кога тие создале нивните адаптери :). Most people seem to be investing a fair amount of time and effort in creating workstation / клиент апликации кои обезбедуваат дрво пати, right-click context menus and so forth. These are nice and all, но тоа е многу работа за да се создаде топ-of-the-линија корисник искуство кое исто така е многу флексибилен.

Јас навистина потребно одговор на овој проблем. Тоа се случи да ме дека ако би можел да ги добиете сите на сајтот колони во сајт за собирање во обичај листа, Јас би филтрирал, сортирање и создаде ставови дека ќе ми помогне да го најдете на оваа наводно постоечките колона (што тоа го правеше, BTW). I went ahead and did that and an hour or two later, ги имаше сите мојот сајт колони натоварена во обичај листа со групирање, sorting and so forth. I found my answer five minutes later.

Ако и кога јас успешно го преземе целиот свет, I think I will decree that all SharePoint tools providers must seriously consider surfacing their object model data in a custom list. That way, Имам моќ за да пребарувате било кој начин сакам (ограничени, се разбира, од стандардниот SharePoint карактеристики).