Цатегори Арцхивес: Развој система СхареПоинт

Чувајте Бреакинг Промене ИтемСтиле.ксл

Радио сам са ИтемСтиле.ксл да прилагодите изглед сегмент упита садржаја Веб и праву за време ручка, 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, noticed this message appearing in a bunch of places:

Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Windows SharePoint Services-compatible HTML editor such as Microsoft Office SharePoint Designer. If the problem persists, contact your Web server administrator.

I blamed the client (not realizing as yet that it was my fault at this point) but eventually noticed that visual studio intellisense was warning me that I had malformed XSL. I corrected it and everything started working.

Be darned careful when working with ItemStyle.xsl (and any of the global XSL files) — breaking them affects many artifacts in the site collection.

<крај />

Покажи резултате Цонтент Веб сегмента упита у Грид / Табела

Преглед и циљ

Оут оф тхе бок, МОСС’ Веб сегмент за упит садржаја (ЦКВП) приказује резултате у виду листе, similar to search results. It is also possible to display the results in a grid format (и.е. ХТМЛ формат табеле). 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:

слика

ХТМЛ овако ствара тај резултат:

<ХТМЛ>
 <тело>
 <центар>
 <табела граница= 1>

<!-- Етикете ->
 <тр бгцолорПлава =>
 <тд><фонт боја= Бело><Б>Назив пројекта</Б></фонт></тд>
 <тд алигнДесно =><фонт боја= Бело><Б>Комплетан датум</Б></фонт></тд>
 <тд алигнДесно =><фонт боја= Бело><Б>Буџет</Б></фонт></тд>
 <тд алигнДесно =><фонт боја= Бело><Б>Стварни трошак</Б></фонт></тд>
 <тд><фонт боја= Бело><Б>Генерално статус</Б></фонт></тд>
 </тр>

<тр>
 <тд>Поново жица рачунара соба.</тд>
 <тд алигнДесно =>02/01/08</тд>
 <тд алигнДесно =>22,500.00</тд>
 <тд алигнДесно =>19,000.00</тд>
 <тд>У току</тд>
 </тр>

<тр>
 <тд>Резервисања СКЛ сервера за надоградњу</тд>
 <тд алигнДесно =>04/01/08</тд>
 <тд алигнДесно =>7,500.00</тд>
 <тд алигнДесно =>0.00</тд>
 <тд>Планиран</тд>
 </тр>

</табела>
 </центар>
 </тело>
</ХТМЛ>

Приступ

Следите ове кораке да створи мрежу:

  1. Идентификовати компоненте мреже (редове / колоне).
  2. Дефинисати и створити неопходне колоне локације.
  3. Направите под сајтова за пројекте и једноплодним листама.
  4. Додајте ЦКВП на веб страницу и подесите га да тражи своје листе.
  5. Измена КСМЛ је ЦКВП да покупи додатне колоне.
  6. Измените КССЛ за генерисање табеле.

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).

Ораси и навртке

Почните и спроводи кроз пет корака један по МСДН документацију и Хедер Соломоновом чланак.

У овом тренутку, Додали сте свој ЦКВП на страницу и имате <ЦоммонВиевФиелдс> конфигурисан као неопходно.

Након уобичајене кораке, Имам те међурезултате:

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

слика

Овде је сајт структура:

слика

2. Додајте ЦКВП након стварања мој пројекат подлокација и Синглтон листе резиме пројекта:

слика

3. Додајте све додатне информације путем желим <ЦоммонВиевФиелдс>:

        <имовина име="ЦоммонВиевФиелдс" тип="ниска">Пројецт_к0020_Наме;Пројецт_к0020_Екпенсес;Пројецт_к0020_Статус;Пројецт_к0020_Старт_к0020_Дате;Пројецт_к0020_Енд_к0020_Дате;Пројецт_к0020_Будгет</имовина>

Имајте на уму да сам морао да задржи сва поља имовине на једној линији, или то не би ишло (ЦКВП би ми рекао да је упит вратио ниједан артикал).

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: Име мог шаблон КССЛ следећи:

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

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

    <клс:-за сваки изабрати="@ *">
      П:<клс:вредности од изабрати="име()" /><БР/>
    </клс:-за сваки>

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".

У овом тренутку, Крећемо из блога Хедер и са раменима ових гиганата, Да додам свој мало.

ЦонтентКуериМаин.ксл

НАПОМЕНА: Приликом измене у оба ЦонтентКуериМаин.ксл као ИтемСтиле.ксл, потребно је да проверите те фајлове назад пре него што будете видели ефекат променама.

За израду Грид-сврхе, 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" шаблон у ИтемСтиле.ксл, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.

Using Heather Solomon’s technique, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:

слика

We need to make the following changes:

  • Modify an xsl template, "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" ЛастРов параметар тако да се могу пренети на нашу Грид предлошку.

Locate the template named "OuterTemplate.CallItemTemplate" препознати по низу:

  <клс:шаблон име="ОутерТемплате.ЦаллИтемТемплате">

Замените цео шаблон на следећи начин:

  <клс:шаблон име="ОутерТемплате.ЦаллИтемТемплате">
    <клс:парам име="ЦурПоситион" />

    <!--
      Add the "LastRow" параметар.
      We only use it when the item style pass in is "Grid".
    -->
    <клс:парам име="ЛастРов" />

    <клс:изабрати>
      <клс:када тест="@ Стил = 'НевсРоллУпИтем'">
        <клс:аппли-темплатес изабрати="." начин="итемстиле">
          <клс:са парам- име="ЕдитМоде" изабрати="$цбк_иседитмоде" />
        </клс:аппли-темплатес>
      </клс:када>
      <клс:када тест="@ Стил = 'НевсБигИтем'">
        <клс:аппли-темплатес изабрати="." начин="итемстиле">
          <клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
        </клс:аппли-темплатес>
      </клс:када>
      <клс:када тест="@ Стил = 'НевсЦатегориИтем'">
        <клс:аппли-темплатес изабрати="." начин="итемстиле">
          <клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
        </клс:аппли-темплатес>
      </клс:када>

      <!--
              Пасс тренутну позицију и ластров у шаблон Грид итемстиле.ксл.
              ИтемСтиле.ксл ће користити да се емитују отворен и затварање <табела> ознаке.
      -->
      <клс:када тест="@ Стил = 'Мрежа'">
        <клс:аппли-темплатес изабрати="." начин="итемстиле">
          <клс:са парам- име="ЦурПос" изабрати="$ЦурПоситион" />
          <клс:са парам- име="Последњи" изабрати="$ЛастРов" />
        </клс:аппли-темплатес>
      </клс:када>

      <клс:иначе>
        <клс:аппли-темплатес изабрати="." начин="итемстиле">
        </клс:аппли-темплатес>
      </клс:иначе>
    </клс:изабрати>
  </клс:шаблон>

Коментари описују сврху промене.

Наравно, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:

<клс:шаблон име="ОутерТемплате.Боди">

Кретање кроз упутства у ОутерТемплате.Боди и убаците ЛастРов параметар на следећи начин (приказано у напомени у курзиву):

<клс:позива шаблон име="ОутерТемплате.ЦаллИтемТемплате">
  <клс:са парам- име="ЦурПоситион" изабрати="$ЦурПоситион" />
  <!-- Убаците ЛастРов параметар. -->
  <клс:са парам- име="ЛастРов" изабрати="$ЛастРов"/>
</клс:позива шаблон>

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

ИтемСтиле.Кссл

НАПОМЕНА: Поново, пријавите ИтемСтиле.ксл после доношења било какве промене, тако да можете видети ефекат тих промена.

Овде имамо два задатка:

  • 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. (Можете рећи да имам слабу регулатор на КССЛ).

Прво, близу врха ИтемСтиле.ксл, Додајте ову линију:

  <!-- Неки мамбо џамбо који нам омогућава да прикажете У.С. валута. -->
  <клс:Децимално формату име="особље" цифра="Д" />

  <клс:шаблон име="Уобичајено" меч="*" начин="итемстиле">

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

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

  <клс:шаблон име="Решетка" меч="Ред[@ Стил = 'Мрежа']" начин="итемстиле">

    <!--
      ЦонтентМаин.ксл пролази и ЦурПос Последња.
      Користимо ово да емитују условно отворена и затварање <табела> ознаке.
    -->
    <клс:парам име="ЦурПос" />
    <клс:парам име="Последњи" />

    <!-- Следеће променљиве су немодификоване из стандардног ИтемСтиле.ксл -->
    <клс:варијабла име="СафеИмагеУрл">
      <клс:позива шаблон име="ОутерТемплате.ГетСафеСтатицУрл">
        <клс:са парам- име="УрлЦолумнНаме" изабрати=""УРЛ слике '"/>
      </клс:позива шаблон>
    </клс:варијабла>
    <клс:варијабла име="СафеЛинкУрл">
      <клс:позива шаблон име="ОутерТемплате.ГетСафеЛинк">
        <клс:са парам- име="УрлЦолумнНаме" изабрати="'ЛинкУрл'"/>
      </клс:позива шаблон>
    </клс:варијабла>
    <клс:варијабла име="ДисплаиТитле">
      <клс:позива шаблон име="ОутерТемплате.ГетТитле">
        <клс:са парам- име="Наслов" изабрати="@ Титле"/>
        <клс:са парам- име="УрлЦолумнНаме" изабрати="'ЛинкУрл'"/>
      </клс:позива шаблон>
    </клс:варијабла>
    <клс:варијабла име="ЛинкТаргет">
      <клс:ако тест="@ ОпенИнНевВиндов = 'труе'" >_бланк</клс:ако>
    </клс:варијабла>

    <!--
      Сада ћемо дефинисати променљива, "tableStart".  Овај садржи ХТМЛ
      .  Имајте на уму да ако ЦурПос = 1, обухвата ХТМЛ у ЦДАТА таг.
      Иначе, то ће бити празан.

      Вредност таблеСтарт се емитед сваки пут ИтемСтиле се зове преко
      .
    -->
    <клс:варијабла име="таблеСтарт">
      <клс:ако тест="$ЦурПос = 1">
        <![ЦДАТА[
        <Табела бордер = 1>
          <tr bgcolor="blue">
            <тд><font color="white"><Б>Назив пројекта</Б></фонт></тд>
            <td align="right"><font color="white"><Б>Комплетан датум</Б></фонт></тд>
            <td align="right"><font color="white"><Б>Буџет</Б></фонт></тд>
            <td align="right"><font color="white"><Б>Стварни трошак</Б></фонт></тд>
            <тд><font color="white"><Б>Генерално статус</Б></фонт></тд>
          </тр>
        ]]>
      </клс:ако>
    </клс:варијабла>

    <!--
      Још једна променљива, таблеЕнд једноставно дефинише затварања табеле ознаку.

      Као и код таблеСтарт, Увек је емитед.  То је разлог зашто је његова вредност
      .
    -->
    <клс:варијабла име="таблеЕнд">
      <клс:ако тест="$ЦурПос = $ Последња">
        <![ЦДАТА[ </табела> ]]>
      </клс:ако>
    </клс:варијабла>

    <!--
      Увек емитују садржаје таблеСтарт.  Ако ово није први
      , онда знамо његову вредност
      .

      Онемогући да излази излаз, јер када таблеСтарт није празно, она
      .  Ако
      , it will generate
      stuff like "&То;табела&гт;" instead of "<табела>".
    -->
    <клс:вредности од изабрати="$таблеСтарт" дисабле-излаз-беже="да"/>


    <тр>
      <!--
      П:Пројецт_к005Ф_к0020_Наме
      :Пројецт_к005Ф_к0020_Енд_к005Ф_к0020_Дате
      :Пројецт_к005Ф_к0020_Будгет
      :Пројецт_к005Ф_к0020_Екпенсес
      :Пројецт_к005Ф_к0020_Статус
      -->
      <тд>
        <клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Наме"/>
      </тд>

      <тд алигн="право">
        <клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Енд_к005Ф_к0020_Дате"/>
      </тд>

      <тд алигн="право">
        <клс:позива шаблон име="ФорматЦурренци">
          <клс:са парам- име="вредност" 
изабрати="@ Пројецт_к005Ф_к0020_Будгет"></клс:са парам-> </клс:позива шаблон> </тд> <тд алигн="право"> <клс:позива шаблон име="ФорматЦурренци"> <клс:са парам- име="вредност" изабрати="@ Пројецт_к005Ф_к0020_Екпенсес">
</клс:са парам-> </клс:позива шаблон> </тд> <тд> <клс:вредности од изабрати="@ Пројецт_к005Ф_к0020_Статус"/> </тд> <!-- Све од наведеног коментаром да разјасни ствари. Међутим, вратите га и угура га у <тд> да бисте видели њену         . --> <!-- <div id="linkitem" class="item"> <клс:if test="string-length($СафеИмагеУрл) != 0"> <div class="image-area-left"> <a href="{$СафеЛинкУрл}" target="{$ЛинкТаргет}"> <img class="image-fixed-width" src="{$СафеИмагеУрл}"
alt="{@ ИмагеУрлАлтТект}"/> </a> </див> </клс:ако> <div class="link-item"> <клс:позива шаблон
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href="{$СафеЛинкУрл}"
target="{$ЛинкТаргет}" title="{@ ЛинкТоолТип}"> <клс:value-of select="$DisplayTitle"/> </a> <div class="description"> <клс:value-of select="@Description" /> </див> </див> </див>
--> </тр> <!-- Емит ознаку затварања табеле. Ако нисмо у последњем реду, ово це бити празно. --> <клс:вредности од изабрати="$таблеЕнд" дисабле-излаз-беже="да"/> </клс:шаблон> <клс:шаблон име="ФорматЦурренци"> <клс:парам име="вредност" изабрати="0" /> <клс:вредности од изабрати='формат-број($вредност, "$DDD,ДДД,DDD.DD", "staff")' /> </клс:шаблон>

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

УПДАТЕ (04/2008): Овај велики блога показује добру Јава Сцрипт приступ овом проблему: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

Ажурирање ИИ: (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. На пример, Имам две падајуће контроле:

  • Списак У.С. државе
  • Списак У.С. 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.

Стварни циљ овог чланка да опише на могућа решења и то су опције као што их знам:

  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. У овом случају, што то обично покушати да користе израчунате колоне, али неки пута, 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) and can do any needed calculation.
  4. Use SharePoint Designer to create custom entry forms. I don’t have direct experience with this approach, али чујем да ових дана чине добре ствари са НевФорм.аспк 🙂
  5. Roll your own ASP.NET data entry function (as a stand-alone web page or as a web part) and use that instead.

If anyone knows other and/or better options, please post a comment and I’ll update the body of this post.

<крај />

Креирање Грапхс Бар у СхареПоинт

Преглед:

(УПДАТЕ 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. Поставите повезане библиотеку докумената / прилагођене листе на страници и претворити га у део података видели Веб (ДВВП).
  3. Измените ДВВП КССЛ да генерише ХТМЛ који приказује као графикон.

Пословни сценарио / Намештаљка:

Ја сам створио прилагођене листе са стандардним наслова колоне и још једну колону, "Status". This models (Веома упрошћено) an "Authorization For Expense" сценарио где наслов представља пројекат и статус вредности са листе:

  • Предложена
  • У процесу
  • Застоју

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

Су насељена сам листу и то изгледа овако:

слика

Креирање података Парт видели Веб:

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

Поред једноставно креирање ДВВП, 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.

Измените КССЛТ:

Сада је време да се мења КССЛТ.

I always use visual studio for this. (Видети овде за Важна напомена о ИнтеллиСенсе који ће вам помоћи да много).

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

  • Оригинал.кслт
  • Нев.кслт
  • Оригинални Парамс.кмл
  • Нови Парамс.кмл

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

слика

Modify the web part and copy the params and XSL to the "Original" Верзија за Висуал Студио.

Циљ је да се изазову КССЛ трансформације резултата се вратимо из ДВВП упита у ХТМЛ који чини као графикону.

У том циљу, 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

Одговарајући ХТМЛ:

<ХТМЛ>
<тело>
<центар>
<Ширина стола = 80%>
<тр><тд><центар>Хоризонтална бар грапх</тд></тр>
<тр>
<td align="center">
<table border="1" видтх = 80%>
<тр>
<тд видтх = 10%>Отворено</тд>
<тд><Табела целлпаддинг ="0" бордер ="0" бордер = 0 видтх = 50%><тр бгцолор = црвена><тд>&нбсп;</тд></тр></табела></тд>
</тр>
<тр>
<тд видтх = 10%>Затворено</тд>
<тд><Табела целлпаддинг ="0" бордер ="0" бордер = 0 видтх = 25%><тр бгцолор = црвена><тд>&нбсп;</тд></тр></табела></тд>
</тр>
<тр>
<тд видтх = 10%>Застоју</тд>
<тд><Табела целлпаддинг ="0" бордер ="0" бордер = 0 видтх = 25%><тр бгцолор = црвена><тд>&нбсп;</тд></тр></табела></тд>
</тр>
</табела>
</тд>
</тр>
</табела>
</тело>
</ХТМЛ>

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

Понијети овде је ово: На крају, сви ми радимо је стварање ХТМЛ са редовима и колонама.

Шаблон КССЛТ:

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:

  • Почео сам са подразумеваним КССЛ СхареПоинт Десигнер који ми је дао када сам креирао ДВВП.
  • Био сам у стању да смањи ово доле из СПД 657 линије до 166 lines.
  • Нисам се зезају са параметрима КСМЛ датотеке (која је одвојена од КССЛ а ви ћете знати шта мислим када одете да измените ДВВП себе; постоје две датотеке можете да измените). Међутим, да би га поједноставио, 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".
  • Дрилл довн ради стварањем <хреф> овако: 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.

Овде је:

<клс:стиловима верзија="1.0" искључују-резултат-префикси="рс З О с ддврт ДТ мсксл" 
КСМЛнс:мсксл="урна:шеме-мицрософт-цом:КССЛТ" КСМЛнс:клс="хттп://ввв.в3.орг/1999/КССЛ/Трансформ"
КСМЛнс:СхареПоинт="Мицрософт.СхареПоинт.ВебЦонтролс" КСМЛнс:__десигнер="хттп://сцхемас.мицрософт.цом/ВебПартс/в2/ДатаВиев/десигнер"
КСМЛнс:аспида="хттп://сцхемас.мицрософт.цом/АСПНЕТ/20" КСМЛнс:ддврт="хттп://сцхемас.мицрософт.цом/ВебПартс/в2/ДатаВиев/рунтиме"
КСМЛнс:О="урна:шеме-мицрософт-цом:канцеларија" КСМЛнс:с="УУИД:БДЦ6Е3Ф0-6ДА3-11Д1-А2А3-00АА00Ц14882"
КСМЛнс:ДТ="УУИД:Ц2Ф41010-65Б3-11Д1-А29Ф-00АА00Ц14882" КСМЛнс:РС="урна:шеме-мицрософт-цом:РовСет" КСМЛнс:З="#РовсетСцхема"
КСМЛнс:ддврт2="урна:фронтпаге:унутрашњи"
> <клс:излаз метод="ХТМЛ" увући="не" /> <клс:Децимално формату НаН="" /> <клс:парам име="ЛистУрлДир"></клс:парам> <!-- Морам ово да подржи дрилл-доле. --> <клс:шаблон меч="/" КСМЛнс:СхареПоинт="Мицрософт.СхареПоинт.ВебЦонтролс"
КСМЛнс:__десигнер=http://schemas.microsoft.com/WebParts/v2/DataView/designer КСМЛнс:аспида="хттп://сцхемас.мицрософт.цом/АСПНЕТ/20"
> <клс:варијабла име="двт_СтилеНаме">Табела</клс:варијабла> <клс:варијабла име="Редови" изабрати="/дсКуериРеспонсе / редове / Ров" /> <клс:варијабла име="двт_РовЦоунт" изабрати="рачунати($Редови)" /> <клс:варијабла име="ИсЕмпти" изабрати="$двт_РовЦоунт = 0" /> <клс:варијабла име="двт_ИсЕмпти" изабрати="$двт_РовЦоунт = 0" /> <клс:изабрати> <клс:када тест="$двт_ИсЕмпти"> Нема података на графикону!<БР/> </клс:када> <клс:иначе> <!-- Интересантне ствари почиње овде. Морамо да дефинишемо пар променљивих за сваки ред у графикону: укупан број           . --> <клс:варијабла име="тоталПропосед" изабрати="рачунати(/дсКуериРеспонсе / редове / Ров[нормализује-простор(@ Статус) = 'Предлог'])" /> <клс:варијабла име="перцентПропосед" изабрати="$тоталПропосед див $ двт_РовЦоунт" /> <клс:варијабла име="тоталИнПроцесс" изабрати="рачунати(/дсКуериРеспонсе / редове / Ров[нормализује-простор(@ Статус) = "У процесу"])" /> <клс:варијабла име="перцентИнПроцесс" изабрати="$тоталИнПроцесс див $ двт_РовЦоунт" /> <клс:варијабла име="тоталСталлед" изабрати="рачунати(/дсКуериРеспонсе / редове / Ров[нормализује-простор(@ Статус) = 'Сталлед'])" /> <клс:варијабла име="перцентСталлед" изабрати="$тоталСталлед див $ двт_РовЦоунт" /> <!-- Ми смо овде дефинишемо нашу ХТМЛ табелу. Ја сам позајмљивање из неких стандарда           . Мислим да ће поштовати           . --> <табела ширина="100%" бордер="0" целлпаддинг="2" стил="бордер-ригхт: 1 солид # Ц0Ц0Ц0; бордер-боттом: 1 солид # Ц0Ц0Ц0; бордер-лефт-стилу: солидан; бордер-лефт-ширина: 1; бордер-топ-стилу: солидан; бордер-топ-ширина: 1;"> <тр> <тд алигн="центар"> <табела граница="1" ширина="100%"> <!-- За сваки статус који желимо да графикон, we call the "ShowBar" шаблон. Ми смо га проћи: 1. Ознака за ред. Ово се претвара у хипервезу. 2. Посто (променљива одозго). 3. Теренски име код са основне листе. Ово                      . 4. Поље за упарен #3. 5. Укупно ставки овог статуса код (није велика сума свих                      ). Емитује <тр></тр> и хоризонтална трака Линија. Позивамо овај шаблон за сваки статус код желимо да видите. --> <клс:позива шаблон име="СховБар"> <клс:са парам- име="БарДисплаиЛабел" изабрати=""Предложени '"/> <клс:са парам- име="БарПерцент" изабрати="$перцентПропосед"/> <клс:са парам- име="КуериФилтерФиелдНаме" изабрати="'Статус'"/> <клс:са парам- име="КуериФилтерФиелдВалуе" изабрати=""Предложени '"/> <клс:са парам- име="ТоталИтемс" изабрати="$тоталПропосед"></клс:са парам-> </клс:позива шаблон> <клс:позива шаблон име="СховБар"> <клс:са парам- име="БарДисплаиЛабел" изабрати="'Сталлед'"/> <клс:са парам- име="БарПерцент" изабрати="$перцентСталлед"/> <клс:са парам- име="КуериФилтерФиелдНаме" изабрати="'Статус'"/> <клс:са парам- име="КуериФилтерФиелдВалуе" изабрати="'Сталлед'"/> <клс:са парам- име="ТоталИтемс" изабрати="$тоталСталлед"></клс:са парам-> </клс:позива шаблон> <клс:позива шаблон име="СховБар"> <клс:са парам- име="БарДисплаиЛабел" изабрати=""У процесу""/> <клс:са парам- име="БарПерцент" изабрати="$перцентИнПроцесс"/> <клс:са парам- име="КуериФилтерФиелдНаме" изабрати="'Статус'"/> <клс:са парам- име="КуериФилтерФиелдВалуе" изабрати=""У процесу""/> <клс:са парам- име="ТоталИтемс" изабрати="$тоталИнПроцесс"></клс:са парам-> </клс:позива шаблон> </табела> </тд> </тр> </табела> </клс:иначе> </клс:изабрати> </клс:шаблон> <!-- Овај шаблон чини дело приказивања појединих линија у хистограма. Вероватно ћете урадити већину свог дотеривања овде. --> <клс:шаблон име="СховБар"> <клс:парам име="БарДисплаиЛабел" /> <!-- ознака за приказивање --> <клс:парам име="БарПерцент"/> <!-- Проценат од укупног броја. --> <клс:парам име="КуериФилтерФиелдНаме"/> <!-- Користи се за скок у упит & филтрирате --> <клс:парам име="КуериФилтерФиелдВалуе"/> <!-- Користи се за скок у упит & филтрирате --> <клс:парам име="ТоталИтемс" /> <!-- укупан број овог барлабел --> <тр> <!-- Сама трака ознака. --> <тд класа="МС-формбоди" ширина="30%"> <!-- Овај следећи скуп исказа гради упита који омогућава           . Ми се овде користи неколико ствари: 1. Можемо проћи ФилтерФиелд1 и ФилтерВалуе1 у листу за филтрирање на колону. 2. СхареПоинт пролази кључни параметар за нас, ListUrlDir that points to the underlying list against which this DVWP is "running". Зар није забавно КССЛ? --> <клс:текст дисабле-излаз-беже="да"> <![ЦДАТА[<хреф ="]]></клс:текст> <клс:вредности од изабрати="$ЛистУрлДир"/> <клс:текст дисабле-излаз-беже="да"><![ЦДАТА[?ФилтерФиелд1 =]]></клс:текст> <клс:вредности од изабрати="$КуериФилтерФиелдНаме"/> <клс:текст дисабле-излаз-беже="да"><![ЦДАТА[&ФилтерВалуе1 =]]></клс:текст> <клс:вредности од изабрати="$КуериФилтерФиелдВалуе"/> <клс:текст дисабле-излаз-беже="да"><![ЦДАТА[">]]></клс:текст> <клс:вредности од изабрати="$БарДисплаиЛабел"/> <клс:текст дисабле-излаз-беже="да"><![ЦДАТА[</a>]]></клс:текст> <!-- Следећи део показује неке бројеве у формату: "(укупан / % од укупног броја)" --> (<клс:вредности од изабрати="$ТоталИтемс"/> / <!-- То ствара леп одсто ознаку за нас. Хвала, Мицрософт! --> <клс:позива шаблон име="перцентформат"> <клс:са парам- име="проценат" изабрати="$БарПерцент"/> </клс:позива шаблон>) </тд> <!-- Коначно, емитују <тд> ознака за сам бар.--> <тд> <табела целлпаддинг="0" бордер="0" граница="0" ширина="{заокружити($БарПерцент * 100)+1}%"> <тр бгцолор="црвен"> <клс:текст дисабле-излаз-беже="да"><![ЦДАТА[&нбсп;]]></клс:текст> </тр> </табела> </тд> </тр> </клс:шаблон> <!-- Ово је директно преузет из неког КССЛ сам нашао у МС шаблону. --> <клс:шаблон име="перцентформат"> <клс:парам име="проценат"/> <клс:изабрати> <клс:када тест="формат-број($проценат, "#, # # 0%;-#,##0%')= 'НаН'">0%</клс:када> <клс:иначе> <клс:вредности од изабрати="формат-број($проценат, "#, # # 0%;-#,##0%')" /> </клс:иначе> </клс:изабрати> </клс:шаблон> </клс:стиловима>

Резултати:

КССЛ одозго генерише овај графикон:

слика

Дрилл до основних података кликом на статусној коду:

слика

Закључна разматрања:

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

Волим овај концепт градите, 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 🙂

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

Поље Име је Готцха:

Постоје најмање две ствари треба обратити пажњу са називима поља.

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

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

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

   <клс:варијабла име="тоталПропосед" 
изабрати="рачунати(/дсКуериРеспонсе / редове / Ров[нормализује-простор(@ Статус_к0020_Цоде) = 'Предлог'])" />

Други, и ја сам мало нејасно ово, 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" АФЕ је > 10% затим га покаже црвени, otherwise show it in black. Коришћење <клс:изабрати> ово постићи.

Остали ресурси:

Срећан претварајући!

<крај />

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

ОМ доставе податке Виа прилагођену листу (или, Још један ОМ Подаци Дисплаиор [као иацц, али другачије])

Данас, 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. Међутим, Једноставно нисам могао наћи нигде колону преко стандардне СхареПоинт корисничког интерфејса на било којој локацији у колекцији локација.

Ја постед се МСДН блог овде и несавладиво Ендрју Вудворд истакао ме у правцу основних података објектних модела.

Сам отишао на цодеплек да пронађете неки алати који ће помоћи пеер ме у ОМ основних података и да ми помогну пронађите проблема.

Покушао сам неколико алата и они су били веома кул и занимљиво, али на крају, 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, али је много рада да се створи врхунски-лине корисничко искуство које је такође веома флексибилан.

Ја стварно потребан одговор на овај проблем. То је пало на памет да ако бих могао добити све колона локације у колекцији локација у прилагођену листу, Могао бих да филтрирам, сортирате и креирате погледе који би помогли да нађем ово наводно постојећу колону (што се и десило, БТУ). 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, Имам моћ да претражујете било како ја хоћу (ограничен, наравно, стандардном СхареПоинт функцијама).