Бар је још увек прилично високе за продужење Мосс

Данас, I was working with a client and describing how to modify the content query web part and display additional bits of information from a content type.

"First, конфигурисања ЦКВП да се повезује са њеним изворима података, онда га извезете на вашем радном месту, модификовати <ЦоммонВиевФиелдс>, отпремање, remove the original and now it’s ‘primed’ to display those other columns. Следећи, отворити СхареПоинт Десигнер, navigate to the site collection root and locate ItemStyle.xsl. Copy one of the templates as a useful starting point. Go back and modify the CQWP to make use of this new template. Коначно, измените шаблон да донесе своје нове поља! (Не заборавите да проверите поново тако да остали корисници могу да виде резултате)."

Све је потпуно јасно (и већина од нас СхареПоинт девелопер врсте) шта се дешава и како је то сасвим лепо, заиста, that the data retrieval aspects of the CQWP are so well-separate from the data presentation aspects. Али, то није тако лако објаснити, да ли је?

<крај />

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

Преглед и циљ

Оут оф тхе бок, МОСС’ Веб сегмент за упит садржаја (ЦКВП) приказује резултате у виду листе, 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.

<крај />

Yes/No (потврду) филтрирање садржаја на Веб сегмента за упит

To filter for a query for the Yes/No check box entitled "PG Milestone", конфигурише ЦКВП овако:

слика

Ово је још једна од оних очигледан-када-си-знате-то, али тешко наћи-на-одговор-питања: Како за филтрирање на ДА / НЕ потврду помоћу Веб сегмента упита садржаја.

Први Резултат претраге I find using the search term "filter yes/no content query web part" стан је погрешна, па сам помислио бих ставио ово горе и види да ли може да замени неисправну резултат у типичним резултатима претраге.

То је прилично лако: True values = "1" and false values do not equal "1" (прилично ретро, заправо).

У горњем примеру, I created site column of type "Yes/No (поље за потврду)" named "PG Milestone". I added it to a doc library, отпремио неколико докумената, поставите вредност за пару и тестирали га.

<крај />

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

Преглед:

(УПДАТЕ 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. Коришћење <клс:изабрати> ово постићи.

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

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

<крај />

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

СхареПоинт не пружа “Ко има приступ” Извештаји

УПДАТЕ 01/28/08: Овај ЦодеПлек пројекат се бави овим питањем: http://www.codeplex.com/AccessChecker. I have not used it, али изгледа обећавајуће, ако је ово питање потребно је да се обрати у вашем окружењу.

УПДАТЕ 11/13/08: Џоел Олесон написао горе веома добар пост на ширем питању управљања безбедношћу овде: хттп://ввв.схарепоинтјоел.цом / Листе / Постови / Пост.аспк?List=0cd1a63d-183c-4fc2-8320-ba5369008acb&ID=113. It links to a number of other useful resources.

Forum users and clients often ask a question along these lines: "How do I generate a list of all users with access to a site" or "How can I automatically alert all users with access to list about changes made to the list?"

There is no out of the box solution for this. If you think about it for a moment, it’s not hard to understand why.

SharePoint security is very flexible. There are at least four major categories of users:

  • Anonymous users.
  • SharePoint Users and Groups.
  • Active Directory users.
  • Обрасци потврда идентитета заснована на (ФБА) корисници.

The flexibility means that from a security perspective, any given SharePoint site will be dramatically different from another. In order to generate an access list report, one needs to ascertain how the site is secured, query multiple different user profile repositories and then present it in a useful fashion. That’s a hard problem to solve generically.

How are organizations dealing with this? I’d love to hear from you in comments or е-маил.

</крај>

MOSS Tells Me My Column Name is Reserved or In Use … But It’s Not

УПДАТЕ 12/04/07: Видети this Microsoft KB (http://support.microsoft.com/kb/923589) for related information.

Заправо, it turns out it is, али tricksy MOSS had to make it difficult.

My customer does some development work on his MOSS site over the weekend. It’s a bit of a jumble as to what he actually did, but the end result is this:

  • He tries to add a site column called "Quantity" and MOSS replies: "The column name that you entered is already in use or reserved. Choose another name."
  • He attempts to add it to another environment and that works. Стога, "Quantity" is not a reserved name.
  • He tries to find an existing site column named "Quantity" in that site collection. He cannot find it.

I did some research, and even some coding, waxed philosophical and finally found that a column named Quantity did, заправо, exist. It was in the "_Hidden" group. Hence, we could not find it via the SharePoint user interface.

How did it get there? I do not know, but I have a theory (or as my wife would call it, "blah blah blah"). Негде дуж линије, a fabulous forty template was added and probably activated at a site in the site collection. It was then deactivated (or the site removed). The site column, међутим, remained but in the "_Hidden" group. If someone knows better, please let me know via е-маил or post in the comments.

SharePoint was telling the truth. It’s hardly worth pointing out that that message is not as helpful as it could be. It would be nice to see that message fork into two different messages in the future: 1) Say that the column name is reserved or it is not. 2) If it’s not reserved, show the site, or at least the group, where the column name is already used.

</крај>

Тецхнорати Тагс: , ,

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

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

СхареПоинт Десигнер прилагођени ток посла Акција — Посматрање О <Поље Тип Кравата Дизајнер =”СтрингБуилдер” … />

Само брза запажање да је веома важна разлика између ове две дефиниције:

<FieldBind Field="InParam1" DesignerType="StringBuilder" Id="2" Text="Input parameter #1"/>

против:

<FieldBind Field="InParam1" Id="2" Text="Input parameter #1"/>

Први показује као ово у СПД:

слика

док други показује овако:

слика

Нисам сигуран како помоћи ови снимци екрана су, али сам ставио у настојању да их направи тако да ћете морати да их видели 🙂

Посматрање је ово: СтрингБуилдер вам омогућава да направите ниску (очигледно) мешањем заједно ниски литерале и тока података (via the "Add Lookup" дугме у доњем левом углу). When you use the Add Lookup button, it inserts a token in the form "[%знак%]". When SharePoint invokes your custom action, (Ц # код у мом случају), СхареПоинт пролази сама токен, not the value of the token. If you use the default designer type (Друга врста), СхареПоинт проширује токен и пролази стварну вредност токена за вашу акцију.

СтрингБуилдер = ЛОШЕ, подразумевани тип = добар дизајнер.

Наравно, that’s not what I really mean. Just don’t try and pass a parameter to your custom action when the designer type = StringBuilder. Use the default designer type and chain a StringBuilder to it up front if you need to build complex strings in your workflow (који узгред је управо оно што чини да се створи динамичан субјецт за е-акције, али то је тема за другу блогу, је).

<крај />

Превремено Воркфлов Активација — Немедицинских решење

УПДАТЕ: Погледајте ову дискусију МСДН, посебно последњи унос: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. It describes a condition that may short circuit this whole thing. Укратко, то може бити као једноставан као што најмање једно од поља обавезно.

Имам библиотеку докумената који подржава осам типова садржаја.

I have a SharePoint Designer workflow that wants to calculate and assign a "reminder date" једноставним одузимањем 30 дана из друге колоне, "due date". This should only happen for one of the content types, "Insurance". The business objective is to produce a KPI that shows two categories of insurance documents: "about to expire" and "expired." (Можете прочитати више о овој врсти КПИ и више суштинска дрилл-довн овде).

I have configured the workflow to fire when a new item is created and when an item is modified. The idea is that when an insurance document is uploaded, we calculate a "warning date" based on the expiration date. A pair of views work in connection with a KPI List to highlight these conditions when users hit their home page.

Ова стратегија не ради када сам отпремите документ.

I upload the document and I am presented with the meta data entry screen. У овом тренутку, I’m already in trouble. SharePoint has already, прерано из мог угла, fired the workflow. I haven’t had a chance to pick the correct content type nor assign a due date. Истовремено, the workflow does not fire when I hit the submit button at this time. There’s some built-in logic that "believes" that first submit is part of the "create" event. Тако … мој ток посла је пуцао и када је извршена, it was passed default meta data values.

The best work-around I know of is to insert a "pause until" activity in the workflow. I have the workflow pause for 1 minute. While it’s pausing, Ја изаберите одговарајући тип садржаја, enter the meta data and submit. The pause completes and the workflow proceeds as needed. (Имајте на уму да у мом окружењу, timer workflow activities from SPD do not work out of the box. You may have the same trouble. Видети овде за више детаља).

I don’t like "magic delay" work-around. What happens if the user uploads a document and the phone rings and the ensuing conversation outlasts the pause? I can make the pause longer, али ја и даље не свиђа.

Писао сам о овоме на МСДН форумима овде: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1