Arkib Kategori: SharePoint Pembangunan

Berhati-hati Berbuka Perubahan kepada ItemStyle.xsl

Saya bekerja dengan ItemStyle.xsl untuk menyesuaikan rupa bahagian Web pertanyaan kandungan yang hak tentang waktu makan tengah hari, Saya buat berbuka menukar kepada xsl dalam. Saya tidak menyedari bahawa ia, tetapi ini telah meluas kesan seluruh koleksi tapak. Saya pergi untuk makan tengahari dan Sekembalinya saya, Perhatikan mesej ini muncul dalam banyak tempat-tempat:

Tidak dapat memapar bahagian Web ini. Untuk menyelesaikan masalah, Buka Laman Web ini merupakan penyunting HTML khidmat SharePoint Windows-serasi seperti Microsoft Office SharePoint Reka bentuk. Jika masalah berterusan, hubungi pentadbir pelayan Web anda.

Saya menyalahkan klien (tidak menyedari lagi bahawa ia adalah kesalahan saya pada ketika ini) tetapi akhirnya perasan intellisense visual studio itu adalah amaran saya bahawa saya mempunyai XSL rosak. Saya diperbetulkan ia dan segala-galanya mula bekerja.

Darned berhati-hati apabila bekerja dengan ItemStyle.xsl (dan mana-mana fail XSL global) — berbuka mereka mempengaruhi banyak artifak dalam koleksi laman web.

<akhir />

Memaparkan Kandungan Web Keputusan Query Bahagian dalam Grid / Jadual

Gambaran dan Objektif

Keluar dari kotak, MOSS’ Kandungan Pertanyaan Web Bahagian (CQWP) memaparkan keputusan dalam format senarai, serupa dengan hasil carian. Hal ini juga mungkin untuk memaparkan hasil dalam grid format (Dgn kata lain. Format jadual HTML). Format grid adalah lebih baik dalam keadaan sesetengah. Saya menerangkan bagaimana untuk mencapai kesan yang dalam artikel ini.

Senario Perniagaan

Saya telah bekerja dengan klien mengenai pelaksanaan MOSS menyeluruh untuk. Kami telah direka taksonomi mereka supaya projek-projek adalah warga negara kelas pertama dalam hierarki dalam dan mempunyai tapak aras tertinggi mereka sendiri. Pengurus Projek mengekalkan senarai singleton maklumat ringkasan projek, seperti tajuk, bajet, Tarikh dijangka siap, Baki belanjawan dan lain-lain bidang ringkasan jenis. Oleh "singleton" Senarai SharePoint tersuai dijamin mengandungi hanya satu perkara yang saya maksudkan. Dengan mudah, ia kelihatan seperti ini:

imej

Pendekatan teknikal adalah lebih kurang sama seperti yang dinyatakan di sini (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP yang menggunakan untuk mengubah XSL untuk mengeluarkan HTML untuk pelayar untuk memberi.

Saya sentiasa membayangkan hasil sebelum menganalisa XSL tersebut kerana XSL mimpi ngeri. Berikut adalah keputusan yang diingini saya:

imej

HTML seperti ini menjana hasil yang:

<html>
 <badan>
 <pusat>
 <jadual sempadan= 1>

<!-- Label ->
 <tr bgcolor= Biru>
 <td><font warna= Putih><b>Nama Projek</b></font></td>
 <td menyelaraskan= Betul><font warna= Putih><b>Tarikh melengkapkan</b></font></td>
 <td menyelaraskan= Betul><font warna= Putih><b>Bajet</b></font></td>
 <td menyelaraskan= Betul><font warna= Putih><b>Perbelanjaan sebenar</b></font></td>
 <td><font warna= Putih><b>Keseluruhan Status</b></font></td>
 </tr>

<tr>
 <td>Re-wayar bilik komputer.</td>
 <td menyelaraskan= Betul>02/01/08</td>
 <td menyelaraskan= Betul>22,500.00</td>
 <td menyelaraskan= Betul>19,000.00</td>
 <td>Dalam Kemajuan</td>
 </tr>

<tr>
 <td>Pelayan SQL Peruntukan Naik Taraf</td>
 <td menyelaraskan= Betul>04/01/08</td>
 <td menyelaraskan= Betul>7,500.00</td>
 <td menyelaraskan= Betul>0.00</td>
 <td>Dirancang</td>
 </tr>

</jadual>
 </pusat>
 </badan>
</html>

Pendekatan

Ikuti langkah-langkah untuk mewujudkan grid:

  1. Mengenalpasti komponen grid (baris / lajur).
  2. Menentukan dan mewujudkan ruangan tapak perlu.
  3. Mencipta laman sub bagi projek-projek dan senarai tunggal.
  4. Tambah CQWP untuk laman web dan mengkonfigurasi ia untuk mencari senarai anda.
  5. Ubahsuai XML CQWP untuk mengumpulkan ruangan tambahan.
  6. Ubah suai XSL untuk menjana jadual.

Saya akan menumpukan perhatian kepada nombor enam. Nombor satu melalui empat adalah lurus ke hadapan dan sesuatu yang telah melakukan mana-mana pengguna CQWP. Nombor lima telah didokumenkan oleh orang lain termasuk menyeluruh tembakan skrin penuh sarat artikel ini daripada MSDN di sini (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) dan blog Heather Sulaiman di sini (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Kacang Dan Bolt

Mulakan dan melaksanakan langkah-langkah yang salah melalui lima sebagai satu dokumentasi MSDN dan artikel Heather Sulaiman.

Pada ketika ini, anda telah menambah CQWP anda ke laman dan anda mempunyai anda <CommonViewFields> dikonfigurasi sebagai perlu.

Berikutan langkah-langkah yang biasa, Saya mendapat keputusan ini perantaraan:

1. Membuat jenis kandungan, templatized senarai tersuai untuk jenis kandungan itu dan dua tapak. Inilah jenis kandungan:

imej

Berikut adalah struktur tapak:

imej

2. Tambah CQWP selepas mewujudkan subsites projek saya dan tunggal senarai ringkasan projek:

imej

3. Tambah semua maklumat tambahan yang saya mahu melalui <CommonViewFields>:

        <harta Nama="CommonViewFields" Jenis="rentetan">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</harta>

Perhatikan bahawa saya terpaksa terus semua bidang hartanah dalam satu baris atau ia tidak akan bekerja (CQWP akan memberitahu saya bahawa pertanyaan itu kembali ada perkara).

4. Pada ketika ini, Kami sudah bersedia untuk bergerak melampaui artikel MSDN dan flip di atas untuk artikel Heather Solomon. Ikuti langkah-langkah beliau yang bermula berhampiran langkah #5 untuk mewujudkan disesuaikan / versi unghosted ItemStyle.xsl. Saya ikut nasihat Heather's, up melalui langkah 11 dan mendapatkan keputusan ini perantaraan:

4.1: Nama template XSL saya seperti berikut:

<Pemacu:nama templat = "Grid" sepadan dengan = "berturut-turut[@Style = 'Grid']" mod = "itemstyle">

Saya juga sedikit mengubah beliau mencadangkan <Pemacu:untuk setiap …> dengan menambah <br /> tag untuk menyediakan senarai yang lebih bersih:

    <Pemacu:untuk setiap pilih="@ *">
      P:<Pemacu:nilai-of pilih="Nama()" /><br/>
    </Pemacu:untuk setiap>

4.2: Saya mengubah suai sebahagian web, pergi ke penampilan dan pilih saya "Grid" gaya:

imej

Melaksanakan perubahan dan di sini adalah hasil:

imej

Kita boleh lihat dari atas bahawa bidang yang kita mahu (Nama projek, perbelanjaan, status, dan sebagainya.) disediakan untuk kita gunakan apabila kita mengeluarkan HTML. Bukan itu sahaja, tetapi kita melihat nama-nama yang kami perlu rujukan kolum tersebut dalam XSL dalam. Sebagai contoh, kami rujukan Status projek sebagai "Project_x005F_x0020_Name".

Pada ketika ini, kami bertolak dari blog Heather dan dari bahu gergasi ini, Saya menambah sedikit saya sendiri sedikit.

ContentQueryMain.xsl

NOTA: Apabila membuat perubahan kepada kedua-dua ContentQueryMain.xsl serta ItemStyle.xsl, anda perlu menyemak fail-fail kembali sebelum anda melihat kesan perubahan.

Bagi tujuan membuat grid, MOSS menggunakan dua fail XSL yang berbeza untuk menghasilkan keputusan yang kita lihat dari CQWP yang. Untuk menjana bit sebelumnya output, kami kali ItemStyle.xsl. MOSS sebenarnya menggunakan fail XSL yang lain, ContentQueryMain.xsl untuk bersama-sama dengan ItemStyle.xsl untuk menghasilkan HTML yang. Seperti namanya, ContentQueryMain.xsl adalah "utama" XSL yang mengawal aliran keseluruhan penterjemahan. Ia iterates melalui semua barang-barang yang dijumpai dan Pas mereka satu per satu untuk template di ItemStyle.xsl. Kami akan ubah suai ItemStyle.xsl untuk menjana terbuka <jadual> tag sebelum mengeluarkan baris pertama data dan penutup <jadual> Tag selepas mengeluarkan baris terakhir. Untuk mencapai matlamat ini, ContentQueryMain.xsl kali meluluskan dua parameter untuk kami "grid" template dalam ItemStyle.xsl, "baris terakhir" dan "semasa baris". ItemStyle.xsl menggunakan ini untuk mengeluarkan tag perlu bersyarat.

Menggunakan teknik Heather Sulaiman, kita mencari ContentQueryMain.xsl. Ia terletak di tempat yang sama sebagai ItemStyle.xsl. Pukulan skrin ini akan membantu:

imej

Kita perlu membuat perubahan berikut:

  • Ubahsuai template XSL, "CallItemTemplate" yang benar-benar menggunakan template Grid kami di ItemStyle.xsl. Kita akan melewati dua parameter untuk Grid template supaya ia akan mempunyai data yang diperlukan untuk menjana dengan membuka dan menutup <jadual> tags.
  • Ubah suai sedikit lain ContentQueryMain.xsl yang menyeru "CallItemTemplate" meluluskan "LastRow" parameter supaya LastRow boleh disampaikan kepada template Grid kami.

Mencari template yang dinamakan "OuterTemplate.CallItemTemplate" dikenal pasti oleh tali:

  <Pemacu:template Nama="OuterTemplate.CallItemTemplate">

Menggantikan template keseluruhan seperti berikut:

  <Pemacu:template Nama="OuterTemplate.CallItemTemplate">
    <Pemacu:param Nama="CurPosition" />

    <!--
      Tambah "LastRow" parameter.
      Kami hanya menggunakannya apabila item gaya Pas dalam "Grid".
    -->
    <Pemacu:param Nama="LastRow" />

    <Pemacu:memilih>
      <Pemacu:apabila ujian="@ Gaya = 'NewsRollUpItem'">
        <Pemacu:terpakai-template pilih="." mod="itemstyle">
          <Pemacu:dengan-param Nama="EditMode" pilih="$cbq_iseditmode" />
        </Pemacu:terpakai-template>
      </Pemacu:apabila>
      <Pemacu:apabila ujian="@ Gaya = 'NewsBigItem'">
        <Pemacu:terpakai-template pilih="." mod="itemstyle">
          <Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
        </Pemacu:terpakai-template>
      </Pemacu:apabila>
      <Pemacu:apabila ujian="@ Gaya = 'NewsCategoryItem'">
        <Pemacu:terpakai-template pilih="." mod="itemstyle">
          <Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
        </Pemacu:terpakai-template>
      </Pemacu:apabila>

      <!--
              Pas kedudukan semasa dan lastrow kepada template itemstyle.xsl Grid.
              ItemStyle.xsl akan menggunakannya untuk mengeluarkan terbuka dan tutup <jadual> tags.
      -->
      <Pemacu:apabila ujian="@ Gaya = 'Grid'">
        <Pemacu:terpakai-template pilih="." mod="itemstyle">
          <Pemacu:dengan-param Nama="CurPos" pilih="$CurPosition" />
          <Pemacu:dengan-param Nama="Last" pilih="$LastRow" />
        </Pemacu:terpakai-template>
      </Pemacu:apabila>

      <Pemacu:sebaliknya>
        <Pemacu:terpakai-template pilih="." mod="itemstyle">
        </Pemacu:terpakai-template>
      </Pemacu:sebaliknya>
    </Pemacu:memilih>
  </Pemacu:template>

Komen-komen yang menerangkan maksud perubahan.

Kursus, "OuterTemplate.CallItemTemplate" dirinya dipanggil dari template lain. Mencari templat tersebut dengan mencari rentetan teks ini:

<Pemacu:template Nama="OuterTemplate.Body">

Tatal melalui manual OuterTemplate.Body dan masukkan parameter LastRow seperti berikut (ditunjukkan sebagai komen dalam italik):

<Pemacu:panggilan template Nama="OuterTemplate.CallItemTemplate">
  <Pemacu:dengan-param Nama="CurPosition" pilih="$CurPosition" />
  <!-- Memasukkan parameter LastRow yang. -->
  <Pemacu:dengan-param Nama="LastRow" pilih="$LastRow"/>
</Pemacu:panggilan template>

Selepas semua ini, kami akhirnya telah perkara ditubuhkan dengan betul supaya ItemStyle.xsl kita boleh mengeluarkan <jadual> tags di tempat yang betul.

ItemStyle.Xsl

NOTA: Lagi, mendaftar masuk ItemStyle.xsl selepas membuat apa-apa perubahan supaya anda melihat kesan perubahan-perubahan.

Kami mempunyai dua tugas di sini:

  • Menggantikan seluruh template Grid. Anda boleh copy/paste dari bawah.
  • Tambah beberapa mumbo jumbo di luar definisi template yang membolehkan "formatcurrency" template untuk bekerja. (Anda boleh memberitahu bahawa saya mempunyai mengendalikan lemah pada Pemacu).

Pertama, berhampiran bahagian atas ItemStyle.xsl, tambah baris ini:

  <!-- Beberapa jumbo kosong yang membolehkan kita untuk memaparkan U.S. mata wang. -->
  <Pemacu:perpuluhan-format Nama="kakitangan" digit="D" />

  <Pemacu:template Nama="Default" perlawanan="*" mod="itemstyle">

Perhatikan bahawa saya berkata ia secara langsung sebelum <Pemacu:nama templat = "lalai" …> definisi.

Seterusnya, kembali ke template Grid kami. Menggantikan seluruh template Grid dengan kod di bawah. Ia adalah benar-benar mengulas, tetapi tidak teragak-agak untuk e-mel saya atau meninggalkan komen di blog saya jika anda mempunyai soalan.

  <Pemacu:template Nama="Grid" perlawanan="Berturut-turut[@ Gaya = 'Grid']" mod="itemstyle">

    <!--
      ContentMain.xsl pas CurPos dan terakhir.
      Kami menggunakan ini untuk mengeluarkan bersyarat terbuka dan tutup <jadual> tags.
    -->
    <Pemacu:param Nama="CurPos" />
    <Pemacu:param Nama="Last" />

    <!-- Pembolehubah berikut diubahsuai dari ItemStyle.xsl standard -->
    <Pemacu:berubah-ubah Nama="SafeImageUrl">
      <Pemacu:panggilan template Nama="OuterTemplate.GetSafeStaticUrl">
        <Pemacu:dengan-param Nama="UrlColumnName" pilih="'ImageUrl'"/>
      </Pemacu:panggilan template>
    </Pemacu:berubah-ubah>
    <Pemacu:berubah-ubah Nama="SafeLinkUrl">
      <Pemacu:panggilan template Nama="OuterTemplate.GetSafeLink">
        <Pemacu:dengan-param Nama="UrlColumnName" pilih="'LinkUrl'"/>
      </Pemacu:panggilan template>
    </Pemacu:berubah-ubah>
    <Pemacu:berubah-ubah Nama="Displaytitle">
      <Pemacu:panggilan template Nama="OuterTemplate.GetTitle">
        <Pemacu:dengan-param Nama="Title" pilih="@ Title"/>
        <Pemacu:dengan-param Nama="UrlColumnName" pilih="'LinkUrl'"/>
      </Pemacu:panggilan template>
    </Pemacu:berubah-ubah>
    <Pemacu:berubah-ubah Nama="LinkTarget">
      <Pemacu:jika ujian="@ OpenInNewWindow = 'Sebenar'" >_blank</Pemacu:jika>
    </Pemacu:berubah-ubah>

    <!--
      Di sini kita menentukan ubah, "tableStart".  Ini mengandungi HTML
      .  Perhatikan bahawa jika CurPos = 1, ia termasuk HTML dalam tag CDATA.
      Jika tidak, ia akan menjadi kosong.

      Nilai tableStart adalah emited setiap ItemStyle masa dipanggil melalui
      .
    -->
    <Pemacu:berubah-ubah Nama="tableStart">
      <Pemacu:jika ujian="$CurPos = 1">
        <![CDATA[
        <sempadan meja = 1>
          <TR bgcolor = "biru">
            <td><warna font = "putih"><b>Nama Projek</b></font></td>
            <TD menyelaraskan = "kanan"><warna font = "putih"><b>Tarikh melengkapkan</b></font></td>
            <TD menyelaraskan = "kanan"><warna font = "putih"><b>Bajet</b></font></td>
            <TD menyelaraskan = "kanan"><warna font = "putih"><b>Perbelanjaan sebenar</b></font></td>
            <td><warna font = "putih"><b>Keseluruhan Status</b></font></td>
          </tr>
        ]]>
      </Pemacu:jika>
    </Pemacu:berubah-ubah>

    <!--
      Berubah lagi, tableEnd hanya mentakrifkan tag jadual penutupan.

      Seperti tableStart, ia sentiasa emited.  Inilah sebabnya mengapa nilainya
      .
    -->
    <Pemacu:berubah-ubah Nama="tableEnd">
      <Pemacu:jika ujian="$CurPos = $ Last">
        <![CDATA[ </jadual> ]]>
      </Pemacu:jika>
    </Pemacu:berubah-ubah>

    <!--
      Sentiasa mengeluarkan kandungan tableStart.  Jika ini bukan yang pertama
      , maka kita tahu nilai
      .

      Melumpuhkan output melarikan diri kerana apabila tableStart ia tidak kosong, ia
      .  Jika
      , ini akan menghasilkan barangan seperti"&lt;jadual&gt;" bukannya daripada"<jadual>".
    -->
    <Pemacu:nilai-of pilih="$tableStart" melumpuhkan-output-melarikan diri="ya"/>


    <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>
        <Pemacu:nilai-of pilih="@ Project_x005F_x0020_Name"/>
      </td>

      <td menyelaraskan="betul">
        <Pemacu:nilai-of pilih="@ Project_x005F_x0020_End_x005F_x0020_Date"/>
      </td>

      <td menyelaraskan="betul">
        <Pemacu:panggilan template Nama="formatcurrency">
          <Pemacu:dengan-param Nama="nilai" 
pilih="@ Project_x005F_x0020_Budget"></Pemacu:dengan-param> </Pemacu:panggilan template> </td> <td menyelaraskan="betul"> <Pemacu:panggilan template Nama="formatcurrency"> <Pemacu:dengan-param Nama="nilai" pilih="@ Project_x005F_x0020_Expenses">
</Pemacu:dengan-param> </Pemacu:panggilan template> </td> <td> <Pemacu:nilai-of pilih="@ Project_x005F_x0020_Status"/> </td> <!-- Semua yang berikut adalah komen keluar untuk menjelaskan perkara-perkara. Walau bagaimanapun, membawa kembali dan barang-barang ke dalam <td> untuk melihat yang         . --> <!-- <DIV id = "linkitem" Class = "perkara"> <Pemacu:Jika ujian = "tali panjang($SafeImageUrl) != 0"> <DIV class = "imej kawasan-kiri"> <a href = "{$SafeLinkUrl}" target = "{$LinkTarget}"> <IMG class = "imej-fixed-width" SRC = "{$SafeImageUrl}"
Alt = "{@ ImageUrlAltText}"/> </1> </div> </Pemacu:jika> <DIV class = "pautan-barang"> <Pemacu:panggilan template
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href = "{$SafeLinkUrl}"
target = "{$LinkTarget}" Tajuk = "{@ LinkToolTip}"> <Pemacu:nilai daripada pilih = "$DisplayTitle" /> </1> <DIV class = "Perihalan"> <Pemacu:nilai bagi select="@Description" /> </div> </div> </div>
--> </tr> <!-- Mengeluarkan tag jadual penutupan. Jika kita tidak berada di barisan lepas, ini akan menjadi kosong. --> <Pemacu:nilai-of pilih="$tableEnd" melumpuhkan-output-melarikan diri="ya"/> </Pemacu:template> <Pemacu:template Nama="formatcurrency"> <Pemacu:param Nama="nilai" pilih="0" /> <Pemacu:nilai-of pilih='format-nombor($nilai, "$DDD,Ddd,DDD. DD", "kakitangan")' /> </Pemacu:template>

Standard WSS / MOSS Skrin Kemasukan Data Tidak Menyokong Cascading Drop-surut (atau lain-lain intra-dari komunikasi)

UPDATE (04/2008): Ini entry blog yang hebat menunjukkan pendekatan javascript yang baik berasaskan kepada masalah ini: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

UPDATE II: (04/2008): Ini blog nampaknya baik: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Beberapa kali seminggu, jika tidak setiap hari, Forum pengguna menerangkan keperluan yang biasanya boleh dicapai melalui penurunan-downs dihasratkan. Sebagai contoh, Saya mempunyai dua kawalan drop-down:

  • Senarai U.S. negeri
  • Senarai U.S. bandar-bandar.

Sebagai pembekal yang bertanggungjawab UI, kita mahu ia beroperasi seperti ini:

  • Paul yang memilih U.S. Negeri daripada drop-down.
  • Hal ini menyebabkan bandar-bandar jatuh untuk menapis hanya bandar kepunyaan negeri terpilih.
  • Paul memilih sebuah bandar daripada senarai ini ditapis.

Terdapat tiada sokongan out-of-the-box untuk ciri ini. Malah, Terdapat tiada sokongan OOB untuk apa-apa jenis komunikasi intra-form langsung. Ini termasuklah pengaturcaraan bidang bersembunyi/membolehkan/melumpuhkan sebagai tindak balas kepada perubahan bidang lain di dalam borang.

Objektif sebenar artikel ini untuk menerangkan penyelesaian yang mungkin dan ini adalah pilihan yang saya tahu mereka:

  1. Membangunkan sejenis adat lajur. Sebagai adat-medan-pemaju, anda mempunyai kawalan penuh ke atas dunia"" dari medan adat yang. Anda boleh melaksanakan yang melata jatuh dengan cara.
  2. Pertimbangkan untuk menggunakan aliran kerja. Dalam sesetengah kes, anda hendak peruntukkan nilai secara automatik ke dalam bidang yang berdasarkan nilai bidang lain. Dalam kes ini,, anda biasanya akan cuba menggunakan ruang yang dikira, tetapi beberapa kali, Ia hanya tidak akan mendapatkan pekerjaan yang dilakukan. Aliran Reka bentuk SharePoint adalah alternatif agak mentadbir mesra yang menjatuhkan ke bawah ke dalam kod dan visual studio. Jika anda pergi laluan ini, sedar isu ini ditangani oleh artikel ini (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Pengendali Acara: Seperti aliran kerja, ini adalah satu penyelesaian selepas fakta. Anda pengendali acara adalah perhimpunan .NET (C #, VB.NET) untuk SharePoint yang melepasi kawalan. Objek yang anda membangunkan mempunyai akses kepada data senarai (dan model objek keseluruhan) dan boleh melakukan apa-apa pengiraan diperlukan.
  4. Menggunakan Reka bentuk SharePoint untuk mencipta borang penyertaan adat. Saya tidak mempunyai pengalaman langsung dengan pendekatan ini, tetapi saya dengar mereka melakukan perkara yang baik dengan NewForm.aspx hari ini 🙂
  5. Roll ASP.NET fungsi kemasukan data anda sendiri (sebagai laman web yang berdiri sendiri atau sebagai sebahagian web) dan menggunakan yang bukan.

Jika sesiapa tahu dan / atau pilihan yang lebih baik, sila menghantar komen dan saya akan mengemaskini badan selepas ini.

<akhir />

Technorati Tags:

Buat Graf Bar di SharePoint

Tinjauan:

(UPDATE 12/04/07: Ditambah sumber lain yang menarik di hujung menghubungkan ke blog lain yang menangani ini melalui sebahagian web yang sangat menarik)

Entri blog ini menerangkan bagaimana untuk mencipta graf bar dalam SharePoint. Ini bekerja dalam persekitaran WSS dan MOSS kerana ia hanya bergantung kepada bahagian data paparan web.

Pendekatan keseluruhan adalah seperti berikut:

  1. Buat senarai atau perpustakaan dokumen yang mengandungi data yang anda ingin graf.
  2. Meletakkan perpustakaan dokumen yang berkaitan / Senarai adat ke halaman dan menukarkan ia kepada pandangan sebahagian data web (DVWP).
  3. Ubahsuai XSL yang DVWP untuk menjana HTML yang menunjukkan sebagai graf.

Senario Perniagaan / Persediaan:

Saya telah mencipta satu senarai adat dengan ruangan Title standard dan satu ruang tambahan, "Status". Model ini (sangat simplistically) Kebenaran"untuk perbelanjaan" senario di mana tajuk mewakili projek dan Status nilai daripada senarai:

  • Cadangan
  • Dalam Proses
  • Terhenti

Tujuannya adalah untuk menghasilkan graf bar interaktif mendatar yang menunjukkan kod status.

Saya telah penduduk senarai dan ia kelihatan seperti ini:

imej

Membuat Data Lihat laman web Bahagian:

Buat DVWP dengan menambah senarai adat ke halaman (halaman tapak dalam kes saya) dan ikut arahan di sini (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Di samping itu untuk hanya mewujudkan DVWP yang, kita juga perlu menetapkan harta penghalaman untuk menunjukkan semua baris yang ada. Bagi saya, ini kelihatan seperti ini:

imej

Pada ketika ini, Saya sentiasa menutup SPD dan pelayar. Saya kemudian buka semula laman menggunakan pelayar. Ini mengelakkan secara tidak sengaja mucking atas susun atur bahagian web pada halaman.

Ubah suai XSLT:

Ia kini masa untuk mengubah suai XSLT.

Saya sentiasa menggunakan visual studio ini. (Lihat di sini untuk nota penting tentang INTELLISENSE yang akan membantu anda banyak).

Saya buat projek kosong menambah empat fail baru (menggantikan perkataan "asal" dan "New" yang sesuai):

  • Original.xslt
  • New.xslt
  • Params.xml Asal
  • New Params.xml

Dalam kes saya,, ia kelihatan seperti ini:

imej

Ubahsuai bahagian web dan Salin params dan XSL asalnya"" versi dalam Visual Studio.

Objektif di sini ialah untuk menyebabkan XSL untuk mengubah keputusan yang kita kembali dari pertanyaan DVWP ke dalam HTML yang menjadikan sebagai graf.

Untuk tujuan ini, Ia membantu untuk pertama kali mempertimbangkan apa HTML akan terlihat seperti sebelum kami mendapatkan keliru dengan gila yang dikenali sebagai "XSL". (Untuk menjadi jelas, berikut adalah hanya contoh; Jangan menaip atau copy/paste ke dalam visual studio. Saya memberi tamparan hebat penuh titik awal untuk itu kemudian dalam penulisan). Graf contoh berikut diberikan seperti HTML dengan serta-merta berikutan:

Contoh Graf Bar

Sama HTML:

<html>
<badan>
<pusat>
<lebar jadual = 80%>
<tr><td><pusat>Graf Bar mendatar</td></tr>
<tr>
<TD menyelaraskan = "Pusat">
<Jadual border = "1" width = 80%>
<tr>
<td width = 10%>Buka</td>
<td><jadual cellpadding ="0" cellspacing ="0" border = 0 width = 50%><tr bgcolor = red><td>&nbsp;</td></tr></jadual></td>
</tr>
<tr>
<td width = 10%>Ditutup</td>
<td><jadual cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = red><td>&nbsp;</td></tr></jadual></td>
</tr>
<tr>
<td width = 10%>Terhenti</td>
<td><jadual cellpadding ="0" cellspacing ="0" border = 0 width = 25%><tr bgcolor = red><td>&nbsp;</td></tr></jadual></td>
</tr>
</jadual>
</td>
</tr>
</jadual>
</badan>
</html>

Saya menggunakan satu pendekatan yang mudah mati untuk mewujudkan Bar saya dengan menetapkan warna latarbelakang baris yang "merah".

Pengambilalihan jauh di sini adalah ini: Pada akhir, semua yang kita lakukan adalah mewujudkan HTML dengan baris dan lajur.

Templat XSLT:

Saya telah Salin XSLT yang menjana graf bar melintang. Ianya agak baik komen supaya saya tidak akan menambah banyak di sini kecuali Nota ini:

  • Saya bermula dengan lalai XSL yang SharePoint Designer memberikan saya apabila saya mula-mula dicipta DVWP yang.
  • Saya dapat memotong ini turun dari itu SPD 657 garisan 166 garisan.
  • Saya tidak kucar-kacir di sekitar dengan parameter fail XML (yang berasingan daripada XSL dan anda akan tahu apa yang saya maksudkan apabila anda pergi untuk mengubah suai DVWP itu sendiri; terdapat dua fail yang anda boleh mengubah suai). Walau bagaimanapun, untuk memudahkan ia, Saya pula mengeluarkan hampir semua daripada mereka dari XSL dalam. Ini bermakna bahawa jika anda ingin menggunakan parameter tersebut, anda hanya perlu menambah definisi pembolehubah mereka kembali ke XSL dalam. Yang akan menjadi mudah kerana anda akan mempunyai definisi pembolehubah XSL yang asal projek visual studio anda.
  • Anda sepatutnya mampu untuk copy dan paste ini terus ke dalam projek visual studio anda. Kemudian, panggilan saya Keluarkan dan masukkan sendiri panggilan ke "ShowBar".
  • Gerudi ke bawah kerja-kerja dengan mewujudkan <a href> seperti ini: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Teknik ini mungkin nilai-nilai dalam konteks lain. Pada mulanya, Saya fikir saya akan perlu mematuhi format yang lebih kompleks: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, tetapi dalam persekitaran saya yang tidak perlu. Dalam senarai URL yang dihantar kepada kami oleh SharePoint jadi ini adalah agak mudah untuk umum.

Di sini adalah:

<Pemacu:stylesheet versi="1.0" tidak termasuk-hasil-awalan="rs z o s ddwrt dt msxsl" 
xmlns:msxsl="urn:skema-microsoft-com:xslt" xmlns:Pemacu="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:o="urn:skema-microsoft-com:pejabat" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:skema-microsoft-com:rowset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:frontpage:dalaman"
> <Pemacu:output kaedah="html" inden="tidak" /> <Pemacu:perpuluhan-format NaN="" /> <Pemacu:param Nama="ListUrlDir"></Pemacu:param> <!-- Saya perlu ini untuk menyokong satu latihan-down. --> <Pemacu:template perlawanan="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.microsoft.com/ASPNET/20"
> <Pemacu:berubah-ubah Nama="dvt_StyleName">Jadual</Pemacu:berubah-ubah> <Pemacu:berubah-ubah Nama="Baris" pilih="/dsQueryResponse / Baris / Row" /> <Pemacu:berubah-ubah Nama="dvt_RowCount" pilih="mengira($Baris)" /> <Pemacu:berubah-ubah Nama="IsEmpty" pilih="$dvt_RowCount = 0" /> <Pemacu:berubah-ubah Nama="dvt_IsEmpty" pilih="$dvt_RowCount = 0" /> <Pemacu:memilih> <Pemacu:apabila ujian="$dvt_IsEmpty"> Tidak ada data untuk graf!<br/> </Pemacu:apabila> <Pemacu:sebaliknya> <!-- Bahan yang menarik bermula di sini. Kita perlu menentukan pemboleh ubah untuk setiap baris dalam graf: jumlah           . --> <Pemacu:berubah-ubah Nama="totalProposed" pilih="mengira(/dsQueryResponse / Baris / Row[menormalkan-ruang(@ Status) = 'Cadangan'])" /> <Pemacu:berubah-ubah Nama="percentProposed" pilih="$totalProposed div $ dvt_RowCount" /> <Pemacu:berubah-ubah Nama="totalInProcess" pilih="mengira(/dsQueryResponse / Baris / Row[menormalkan-ruang(@ Status) = 'Dalam Proses'])" /> <Pemacu:berubah-ubah Nama="percentInProcess" pilih="$totalInProcess div $ dvt_RowCount" /> <Pemacu:berubah-ubah Nama="totalStalled" pilih="mengira(/dsQueryResponse / Baris / Row[menormalkan-ruang(@ Status) = 'Terhenti'])" /> <Pemacu:berubah-ubah Nama="percentStalled" pilih="$div totalStalled $ dvt_RowCount" /> <!-- Kami mentakrifkan jadual HTML kami di sini. Saya meminjam dari beberapa standard           . Saya fikir ia akan menghormati           . --> <jadual lebar="100%" cellspacing="0" cellpadding="2" gaya="sempadan kanan: 1 pepejal # C0C0C0; sempadan-bawah: 1 pepejal # C0C0C0; sempadan-gaya-kiri: pepejal; sempadan-left-lebar: 1; -top gaya sempadan: pepejal; sempadan-top-lebar: 1;"> <tr> <td menyelaraskan="pusat"> <jadual sempadan="1" lebar="100%"> <!-- Bagi setiap status yang kita mahu graf, kita panggil "ShowBar" template. Kami lulus: 1. A label untuk baris. Ini akan berubah menjadi hyperlink. 2. Peratus (berubah-ubah dari atas). 3. Nama medan sebenar kod dari senarai asas. Ini                      . 4. Nilai medan dipadankan #3. 5. Jumlah item kod status ini (bukan jumlah besar sekali                      ). Ia mengeluarkan <tr></tr> dan garis graf bar mendatar. Kami menyeru template ini bagi setiap kod status kita mahu melihat. --> <Pemacu:panggilan template Nama="Showbar"> <Pemacu:dengan-param Nama="BarDisplayLabel" pilih="'Cadangan'"/> <Pemacu:dengan-param Nama="BarPercent" pilih="$percentProposed"/> <Pemacu:dengan-param Nama="QueryFilterFieldName" pilih="'Status'"/> <Pemacu:dengan-param Nama="QueryFilterFieldValue" pilih="'Cadangan'"/> <Pemacu:dengan-param Nama="TotalItems" pilih="$totalProposed"></Pemacu:dengan-param> </Pemacu:panggilan template> <Pemacu:panggilan template Nama="Showbar"> <Pemacu:dengan-param Nama="BarDisplayLabel" pilih="'Terhenti'"/> <Pemacu:dengan-param Nama="BarPercent" pilih="$percentStalled"/> <Pemacu:dengan-param Nama="QueryFilterFieldName" pilih="'Status'"/> <Pemacu:dengan-param Nama="QueryFilterFieldValue" pilih="'Terhenti'"/> <Pemacu:dengan-param Nama="TotalItems" pilih="$totalStalled"></Pemacu:dengan-param> </Pemacu:panggilan template> <Pemacu:panggilan template Nama="Showbar"> <Pemacu:dengan-param Nama="BarDisplayLabel" pilih="'Dalam Proses'"/> <Pemacu:dengan-param Nama="BarPercent" pilih="$percentInProcess"/> <Pemacu:dengan-param Nama="QueryFilterFieldName" pilih="'Status'"/> <Pemacu:dengan-param Nama="QueryFilterFieldValue" pilih="'Dalam Proses'"/> <Pemacu:dengan-param Nama="TotalItems" pilih="$totalInProcess"></Pemacu:dengan-param> </Pemacu:panggilan template> </jadual> </td> </tr> </jadual> </Pemacu:sebaliknya> </Pemacu:memilih> </Pemacu:template> <!-- Template ini berfungsi memaparkan talian individu dalam graf bar. Anda mungkin akan melakukan kebanyakan Tweaker anda di sini. --> <Pemacu:template Nama="Showbar"> <Pemacu:param Nama="BarDisplayLabel" /> <!-- label untuk menunjukkan --> <Pemacu:param Nama="BarPercent"/> <!-- Peratus daripada jumlah. --> <Pemacu:param Nama="QueryFilterFieldName"/> <!-- Digunakan untuk melompat kepada pertanyaan & menapis --> <Pemacu:param Nama="QueryFilterFieldValue"/> <!-- Digunakan untuk melompat kepada pertanyaan & menapis --> <Pemacu:param Nama="TotalItems" /> <!-- jumlah kiraan barlabel ini --> <tr> <!-- Label bar sendiri. --> <td kelas="ms-formbody" lebar="30%"> <!-- Ini set seterusnya penyata membina rentetan pertanyaan yang membolehkan           . Kami menggunakan beberapa perkara di sini: 1. Kami boleh lulus FilterField1 dan FilterValue1 ke senarai untuk menapis lajur. 2. SharePoint berlalu parameter penting bagi kami, ListUrlDir yang menghala ke senarai asas yang DVWP ini "berjalan". Bukankah XSL menyeronokkan? --> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"> <![CDATA[<a href ="]]></Pemacu:teks> <Pemacu:nilai-of pilih="$ListUrlDir"/> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"><![CDATA[?FilterField1 =]]></Pemacu:teks> <Pemacu:nilai-of pilih="$QueryFilterFieldName"/> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"><![CDATA[&= FilterValue1]]></Pemacu:teks> <Pemacu:nilai-of pilih="$QueryFilterFieldValue"/> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"><![CDATA[">]]></Pemacu:teks> <Pemacu:nilai-of pilih="$BarDisplayLabel"/> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"><![CDATA[</1>]]></Pemacu:teks> <!-- Sedikit seterusnya menunjukkan beberapa nombor dalam format: "(jumlah / % daripada jumlah)" --> (<Pemacu:nilai-of pilih="$TotalItems"/> / <!-- Ini mewujudkan label nice peratus untuk kita. Terima kasih, Microsoft! --> <Pemacu:panggilan template Nama="percentformat"> <Pemacu:dengan-param Nama="peratus" pilih="$BarPercent"/> </Pemacu:panggilan template>) </td> <!-- Akhirnya, mengeluarkan <td> tag untuk bar itu sendiri.--> <td> <jadual cellpadding="0" cellspacing="0" sempadan="0" lebar="{pusingan($BarPercent * 100)+1}%"> <tr bgcolor="merah"> <Pemacu:teks melumpuhkan-output-melarikan diri="ya"><![CDATA[&nbsp;]]></Pemacu:teks> </tr> </jadual> </td> </tr> </Pemacu:template> <!-- Ini diambil secara langsung dari beberapa XSL saya dapati dalam template MS. --> <Pemacu:template Nama="percentformat"> <Pemacu:param Nama="peratus"/> <Pemacu:memilih> <Pemacu:apabila ujian="format-nombor($peratus, '#, # # 0%;-#,##0%')= 'NaN'">0%</Pemacu:apabila> <Pemacu:sebaliknya> <Pemacu:nilai-of pilih="format-nombor($peratus, '#, # # 0%;-#,##0%')" /> </Pemacu:sebaliknya> </Pemacu:memilih> </Pemacu:template> </Pemacu:stylesheet>

Keputusan:

The XSL dari atas menjana graf ini:

imej

Mengesan kepada data asas dengan klik pada kod status:

imej

Kesimpulan Pemikiran:

Bolehkah ini Be umum?

Saya suka konsep grafik ini, tapi aku benci hakikat bahawa saya perlu masuk dan melakukan begitu banyak tangan-pengkodan. Saya telah diberi sedikit pemikiran sama ada ia boleh teritlak dan saya yakin, tetapi saya juga berasa sedikit takut mungkin ada dinding batu-bata di suatu tempat di sepanjang laluan yang tidak menawarkan apa-apa kerja-sekitar. Jika sesiapa yang mempunyai beberapa idea yang bernas ini, sila membuat nota dalam komen atau e-mel saya.

Graf menegak:

Ini adalah graf bar melintang. Ini pasti mungkin untuk membuat graf menegak. Kita hanya perlu mengubah HTML. Saya akan memulakan dengan cara yang sama: Mencipta satu perwakilan HTML graf bar menegak dan kemudian mencari jalan bagaimana untuk mendapatkan bahawa melalui XSL. Kalau ada yang berminat untuk yang, Saya dapat dipujuk untuk mencubanya dan bekerja di luar The kinks. Jika seseorang telah melakukan yang, sila beritahu saya dan saya dengan senang hati akan memautkan ke blog anda 🙂

Saya berfikir bahawa cabaran dengan graf tegak bahawa label untuk graf adalah lebih sukar untuk menguruskan, tetapi sudah tentu tidak mustahil.

Nama Field Gotcha:

Terdapat sekurang-kurangnya dua perkara untuk melihat keluar untuk dengan nama-nama bidang anda.

Pertama, nama bidang dengan ruang yang terpaksa melarikan diri dalam XSL dalam. Ini mungkin akan menjadi satu isu di sini:

        <Pemacu:berubah-ubah Nama="totalProposed" 
pilih="mengira(/dsQueryResponse / Baris / Row[menormalkan-ruang(@ Status) = 'Cadangan'])" />

Jika Status"anda" kolum sebenarnya dinamakan "Kod Status" maka anda perlu untuk rujukan sebagai "Status_x0020_Code":

   <Pemacu:berubah-ubah Nama="totalProposed" 
pilih="mengira(/dsQueryResponse / Baris / Row[menormalkan-ruang(@ Status_x0020_Code) = 'Cadangan'])" />

Kedua, dan saya sedikit kabur mengenai perkara ini, tetapi anda juga perlu menjadi amaran bagi Pertukaran nama bidang. Jika anda sebut sahaja bidang anda "Kod Status" dan kemudian pada, menamakannya "AFE status", "dalaman nama" tidak berubah. Nama dalaman masih akan "Kod Status" dan mesti dirujuk sebagai "Status_x0020_Code". "Sumber-sumber lain" link boleh membantu mendiagnosis dan membetulkan jenis ini masalah.

Mengenai Warna yang:

Saya memilih "merah" kerana ia adalah menyenangkan bagi saya buat masa ini. Ia tidak akan menjadi masalah besar untuk menunjukkan warna yang berbeza bagi memberikan lebih daripada sekadar huraian visual beberapa, tetapi juga menyediakan KPI yang berguna. Sebagai contoh, Jika peratusan "terhenti." Ini adalah AFE > 10% kemudian menunjukkan ia merah, Jika tidak menunjukkannya dalam warna hitam. Gunakan <Pemacu:memilih> untuk mencapai ini.

Sumber-sumber Lain:

Happy mengubah!

<akhir />

Langgan ke blog saya!

Present Data Melalui OM Custom Senarai (atau, Namun lagi OM Data Displayor [seperti Yacc, tetapi berbeza])

Hari ini, Saya menghabiskan masa selama beberapa jam mengesan punca di sebalik mesej "lajur nama yang anda masukkan sedang digunakan atau disimpan. Pilih nama yang lain."

Ruangan yang berkenaan boleh diwujudkan, dipadam dan dicipta semula dalam persekitaran yang lain, Jadi saya tahu tak nama yang telah ditempah. Walau bagaimanapun, Saya hanya tidak dapat mencari medan di mana-mana melalui antaramuka pengguna SharePoint standard di mana-mana tapak dalam koleksi laman web.

Saya dimasukkan ke MSDN forum di sini dan yang tidak Andrew Woodward menunjuk saya ke arah data model objek yang asas.

Saya pergi ke codeplex untuk mencari beberapa alat yang akan membantu saya rakan data OM yang asas dan membantu saya mengesan masalah.

Saya cuba beberapa alat dan mereka sangat cool dan menarik tetapi di hujung, UI tidak cukup baik untuk tujuan saya. Saya saya tidak mengkritik mereka dengan apa cara, tetapi dengan jelas pembuat alat-tidak mempunyai masalah saya di rumah apabila mereka dicipta UI mereka :). Kebanyakan orang seolah-olah akan melabur jumlah masa dan usaha dalam mewujudkan stesen kerja yang saksama / applikasi pelanggan yang menyediakan pemandangan pokok, klik kanan menu konteks dan sebagainya. Ini adalah bagus dan semua, tapi banyak kerja untuk mewujudkan pengalaman pengguna top-of-the-line yang juga sangat fleksibel.

Saya benar-benar perlukan jawapan kepada masalah ini. Ia telah berlaku kepada saya bahawa jika saya boleh mendapatkan semua lajur yang lokasi dalam koleksi laman web ke senarai tersuai, Saya dapat menapis, menyusun dan mewujudkan pemandangan yang akan membantu saya mencari lajur ini kononnya sedia ada (yang ia tidak, BTW). Aku pergi ke depan dan pula yang dan satu atau dua jam kemudian, Semua Lajur Laman web saya yang telah dimuatkan ke dalam senarai tersuai dengan Kumpulan, menyusun dan sebagainya. Aku menemukan jawapan lima minit kemudian.

Jika dan apabila saya berjaya mengambil alih dunia, Saya fikir saya akan dekri bahawa semua pembekal alat SharePoint mesti serius mempertimbangkan permukaan data model objek mereka dalam senarai tersuai. Dengan cara ini, Saya mempunyai kuasa untuk mencari apa-apa cara nak (dihalang, sudah tentu, oleh ciri-ciri standard sharepoint).