Kategori Arşivleri: SharePoint geliştirme

En son değişiklikleri ItemStyle.xsl için dikkatli olun

İçerik Sorgusu Web Bölümü ve sağ öğle vakti görünümünü özelleştirmek için ItemStyle.xsl ile çalışıyordu., Xsl için değiştirmek bir kırılma yapılan. Bunu fark etmemişti, Ama bu kadar site koleksiyonu boyunca etkileri ulaşan vardı. Ben öğle yemeği için ve benim dönüş üzerine gitti, birkaç yerde görünen bu mesajı fark:

Bu Web Bölümü görüntülenemiyor. Sorun giderme, Bu Web sayfasını Microsoft Office SharePoint Designer gibi Windows SharePoint Services uyumlu bir HTML düzenleyicisinde açın.. Sorun devam ederse, Web sunucusu yöneticinize başvurun.

İstemci suçladı (Henüz bu noktada benim hatam olduğunu fark değil) Ama sonunda fark o visual Studio'nun IntelliSense bana hatalı biçimlendirilmiş XSL vardı uyarı yapıldı.. Ben düzeltilmiş ve her şey çalışmaya başladı.

Belâ ItemStyle.xsl ile çalışırken dikkatli olun (ve küresel XSL dosyaları) — Onları kırma site koleksiyonundaki birçok eserler etkiler..

<sonunda />

İçerik Sorgusu Web Bölümü sonuçları kılavuzunda / Tablo

Genel bakış ve amaç

Kutunun dışında, YOSUN’ İçerik Sorgusu Web Bölümü (CQWP) sonuçları liste biçiminde görüntüler., Arama sonuçlarına benzer. Sonuçları kılavuz biçiminde görüntülemek mümkündür (Yani. HTML tablo biçiminde). Kılavuz biçimleri bazı durumlarda daha iyi.. Ben bu yazıda bu etkiyi elde etmek nasıl tarif.

İş senaryosu

Bir kuruluş çapında MOSS rollout bir müşteriyle çalıştım. Projeler sıradüzeni içindeki ilk sınıf vatandaş ve kullanıcıların kendi üst düzey site vardır öyle ki onların taksonomisini tasarladık. Proje yöneticileri proje özet bilgileri, aynı cinsten tek adet listesini korumak, gibi başlık, bütçe, beklenen tamamlanma tarihi, kalan bütçe ve diğer Özet türü alanları. "Singleton tarafından" Demek istediğim sadece bir öğe içermesi için garantili özel bir SharePoint listesi. Basitçe, Bu gibi görünüyor:

görüntü

Teknik yaklaşım çok açıklananla aynıdır Burada (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP işlemek için tarayıcı için HTML yayılmasını sağlamak için bir XSL Dönüşümü kullanır.

Ben her zaman sonuç XSL bir kâbus çünkü XSL dalış önce öngörülüyor. İşte benim istenilen sonucu:

görüntü

Bu sonucu bu HTML oluşturur:

<HTML>
 <vücut>
 <Merkezi>
 <Tablo Kenarlık= 1>

<!-- Etiketleri...>
 <tr bgcolormavi =>
 <TD><yazı tipi RenkBeyaz =><b>Proje adı</b></yazı tipi></TD>
 <TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Tam bir Tarih</b></yazı tipi></TD>
 <TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Bütçe</b></yazı tipi></TD>
 <TD hizalamasağ =><yazı tipi RenkBeyaz =><b>Gerçek gider</b></yazı tipi></TD>
 <TD><yazı tipi RenkBeyaz =><b>Genel durum</b></yazı tipi></TD>
 </tr>

<tr>
 <TD>Bilgisayar odası yeniden tel.</TD>
 <TD hizalamasağ =>02/01/08</TD>
 <TD hizalamasağ =>22,500.00</TD>
 <TD hizalamasağ =>19,000.00</TD>
 <TD>Devam eden</TD>
 </tr>

<tr>
 <TD>Hüküm sunucuları SQL yükseltmek için</TD>
 <TD hizalamasağ =>04/01/08</TD>
 <TD hizalamasağ =>7,500.00</TD>
 <TD hizalamasağ =>0.00</TD>
 <TD>Planlanan</TD>
 </tr>

</Tablo>
 </Merkezi>
 </vücut>
</HTML>

Yaklaşım

Kılavuz oluşturmak için aşağıdaki adımları izleyin:

  1. Izgara bileşenleri belirle (satır/sütun).
  2. Gerekli site sütunları oluşturun ve tanımlayın.
  3. Projeler ve aynı cinsten tek adet listeler için alt site oluşturma.
  4. CQWP bir web sayfasına ekleyebilir ve listeleri için arama için yapılandırın.
  5. Ek sütunları toplamak için CQWP'in XML değiştirme.
  6. Bir tablo oluşturmak için XSL değiştirme.

Altı numara üzerinde konsantre olmaya gidiyorum. Dörde numara düz ileri ve herhangi bir CQWP kullanıcı zaten yaptığı bir şey vardır. Beş numaralı başkaları bu ayrıntılı ekran-shot bin Ladin'in makale--dan MSDN de dahil olmak üzere tarafından iyi belgelenmiş oldu Burada (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ve Heather Solomon's blog Burada (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Somun ve civata

Başlar ve birden beşe MSDN belgeleri ve Heather Süleyman'ın makale başına adımları uygulamak.

Bu noktada, Senin CQWP sayfaya ekledik ve var senin <CommonViewFields> gerektiği gibi yapılandırılmış.

Her zamanki gibi adımları takip, Bu ara sonuçlar elde:

1. İçerik türü oluştur, şablonlaştırılmış özel bir liste içerik türü ve iki site için. İşte içerik türü:

görüntü

İşte site yapısı:

görüntü

2. Benim proje alt siteler ve aynı cinsten tek adet proje özet liste oluşturduktan sonra CQWP Ekle:

görüntü

3. Via istediğim tüm ek bilgileri ekleyin <CommonViewFields>:

        <özelliği adı="CommonViewFields" türü="dize">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</özelliği>

Bir satır veya tüm özellik alanları tutmak zorunda notu-cekti değil iş (CQWP sorgu öğe döndürülen söylerdin).

4. Bu noktada, MSDN makalesine taşımak hazır olduğumuzu ve flip üzerinde Heather Süleyman'ın makale. Adım başlayan onun adımları izleyin #5 özelleştirilmiş oluşturmak için / unghosted yorum-in ItemStyle.xsl. Heather'ın tavsiyelerine uymak, yukarı adım adım 11 ve bu ara sonuçlar elde:

4.1: Aşağıdaki gibi benim XSL şablon adı:

<XSL:Şablon adı "Kılavuzu =" maç "satır =[@Style = 'Tablo']" Mode = "ItemStyle">

Ayrıca biraz ona önerilen değiştirme <XSL:for-each …> ekleyerek bir <br /> temiz bir liste sağlamak için etiket:

    <XSL:for-each seçin="@*">
      P:<XSL:value-of seçin="adı()" /><br/>
    </XSL:for-each>

4.2: Web bölümü'nü değiştirme, görünümüne gidin ve kılavuz"seçin" Stil:

görüntü

Değişikliği uygulayın ve sonuç:

görüntü

Biz yukarıda istediğimiz alanlar görebilirsiniz (Proje adı, gider, durumu, vb) bizim için ne zaman biz HTML yayarlar kullanmak kullanılabilir. Sadece bu değil, Ama biz hangi tarafından biz XSL bu sütunlar başvuru gerekir adlarını görmek. Örneğin, Biz proje durumu "Project_x005F_x0020_Name" referans.

Bu noktada, Heather'ın blog ve bu devlerin omuzları hareket, Kendi parçada.

ContentQueryMain.xsl

NOT: Hem ContentQueryMain.xsl hem de ItemStyle.xsl değişiklik yaparken, kontrol değişikliklerinizin etkisini görmeden önce bu dosyaları geri gerek.

Izgara yapma amaçlı, Biz bir CQWP görmek sonuçlar üretmek için iki farklı XSL dosyaları MOSS kullanır. Önceki bit çıkış oluşturmak için, ItemStyle.xsl modifiye. MOSS, aslında başka bir XSL dosyası kullanır, Kendi HTML oluşturmak için ItemStyle.xsl ile birlikte için ContentQueryMain.xsl. Adından da anlaşılacağı gibi, "Ana ContentQueryMain.xsl olduğunu" Çeviri genel akışını kontrol XSL. Bulunan öğeler arasında sırayla dolaşır ve ItemStyle.xsl içinde tek tek şablonlarına geçirir. ItemStyle.xsl açık oluşturmak için değiştirmeden <Tablo> ilk satır veri ve kapanış yayan önce etiketi <Tablo> son satırı yayan sonra etiketi. Bunu gerçekleştirmek için, Bizim "kılavuz için iki parametre iletmek için ContentQueryMain.xsl modifiye" ItemStyle.xsl şablonu, "son satırı" ve "geçerli satır". ItemStyle.xsl bunlar koşullu olarak gerekli Etiketler yayılmasını sağlamak için kullanır.

Heather Süleyman'ın tekniği kullanılarak, Biz ContentQueryMain.xsl bulun. Bu ItemStyle.xsl olarak aynı yerde bulunur. Bu ekran görüntüsü yardımcı olacaktır:

görüntü

Aşağıdaki değişiklikleri yapmanız gerekir:

  • Bir xsl şablonu değiştirme, "CallItemTemplate" Bu aslında bizim kılavuz şablonunda ItemStyle.xsl çağırır. Böylece koşullu olarak açılış ve kapanış oluşturmak için gerek duyduğu verileri olacaktır Biz iki parametre kılavuz şablon geçecek <Tablo> Etiketler.
  • "CallItemTemplate çağırır ContentQueryMain.xsl başka bit değiştirmek" "LastRow geçmek için" Böylece o LastRow bizim kılavuz şablonunu aktarılabilir parametresi.

"OuterTemplate.CallItemTemplate adlı şablonu bulun" dizesinde tanımlanan:

  <XSL:Şablon adı="OuterTemplate.CallItemTemplate">

Tüm şablon aşağıdaki gibi değiştirin:

  <XSL:Şablon adı="OuterTemplate.CallItemTemplate">
    <XSL:param adı="CurPosition" />

    <!--
      "LastRow Ekle" parametre.
      Biz sadece öğe stili geçişte "Kılavuz" olduğunda kullanmak.
    -->
    <XSL:param adı="LastRow" />

    <XSL:seçin>
      <XSL:Ne zaman test="@Style 'NewsRollUpItem' =">
        <XSL:uygulama şablonları seçin="." modu="ItemStyle">
          <XSL:param ile adı="EditMode" seçin="$cbq_iseditmode" />
        </XSL:uygulama şablonları>
      </XSL:Ne zaman>
      <XSL:Ne zaman test="@Style 'NewsBigItem' =">
        <XSL:uygulama şablonları seçin="." modu="ItemStyle">
          <XSL:param ile adı="CurPos" seçin="$CurPosition" />
        </XSL:uygulama şablonları>
      </XSL:Ne zaman>
      <XSL:Ne zaman test="@Style 'NewsCategoryItem' =">
        <XSL:uygulama şablonları seçin="." modu="ItemStyle">
          <XSL:param ile adı="CurPos" seçin="$CurPosition" />
        </XSL:uygulama şablonları>
      </XSL:Ne zaman>

      <!--
              Geçerli konum ve lastrow kılavuz itemstyle.xsl þablona geçirmek.
              ItemStyle.xsl bunu açığa çıkarmak için kullanacak ve kapanış <Tablo> Etiketler.
      -->
      <XSL:Ne zaman test="@Style = 'Tablo'">
        <XSL:uygulama şablonları seçin="." modu="ItemStyle">
          <XSL:param ile adı="CurPos" seçin="$CurPosition" />
          <XSL:param ile adı="Son" seçin="$LastRow" />
        </XSL:uygulama şablonları>
      </XSL:Ne zaman>

      <XSL:Aksi takdirde>
        <XSL:uygulama şablonları seçin="." modu="ItemStyle">
        </XSL:uygulama şablonları>
      </XSL:Aksi takdirde>
    </XSL:seçin>
  </XSL:Şablon>

Yorum değişiklikleri amacını açıklayın..

Elbette, "OuterTemplate.CallItemTemplate" kendisi başka bir şablon adı neydi. Bu şablon için bu metin dizesi arayarak bulun:

<XSL:Şablon adı="OuterTemplate.Body">

OuterTemplate.Body bu yönergeleri kaydırmak ve LastRow parametre aşağıdaki gibi yerleştirin (yorum italik olarak gösterilen):

<XSL:Call-template adı="OuterTemplate.CallItemTemplate">
  <XSL:param ile adı="CurPosition" seçin="$CurPosition" />
  <!-- LastRow parametre Ekle. -->
  <XSL:param ile adı="LastRow" seçin="$LastRow"/>
</XSL:Call-template>

Bütün bunlardan sonra, sonunda şeyler bizim ItemStyle.xsl yayarlar olabilir böylece düzgün kurmak var. <Tablo> Etiketler doğru yerde.

ItemStyle.Xsl

NOT: Tekrar, ItemStyle.xsl herhangi bir değişiklik yaptıktan sonra bu değişikliklerin etkisini görmek kontrol.

Burada iki görev var:

  • Tüm kılavuz şablonunu değiştirmek. Sen kopya/aşağıdan hamur.
  • "Formatcurrency sağlar şablon tanımının dışında bazı mırıldanmak jumbo Ekle" çalışmak için şablon. (XSL üzerinde ince bir kolu var söyleyebilirim).

İlk, ItemStyle.xsl üst kısmında, Bu satırı ekleyin:

  <!-- ABD görüntülemek sağlar bazı mırıldanmak jumbo. para birimi. -->
  <XSL:ondalık biçimi adı="personel" basamak="D" />

  <XSL:Şablon adı="Varsayılan" maç="*" modu="ItemStyle">

Not doğrudan daha önce eklediğim <XSL:Şablon adı "varsayılan =" …> tanımı.

Sonraki, bizim kılavuz şablona geri dön. Tüm kılavuz şablonu aşağıdaki kod ile değiştirin. İyice yorumladı, Ama bana e-posta veya sorularınız varsa, blog sayfamda yorum çekinmeyin.

  <XSL:Şablon adı="Kılavuz" maç="Satır[@Style = 'Tablo']" modu="ItemStyle">

    <!--
      CurPos ve son ContentMain.xsl geçer.
      Bunlar koşullu olarak açığa çıkarmak için kullandığımız ve kapanış <Tablo> Etiketler.
    -->
    <XSL:param adı="CurPos" />
    <XSL:param adı="Son" />

    <!-- Aşağıdaki değişkenler standart ItemStyle.xsl değişmemiş -->
    <XSL:değişken adı="SafeImageUrl">
      <XSL:Call-template adı="OuterTemplate.GetSafeStaticUrl">
        <XSL:param ile adı="UrlColumnName" seçin="'ImageUrl'"/>
      </XSL:Call-template>
    </XSL:değişken>
    <XSL:değişken adı="SafeLinkUrl">
      <XSL:Call-template adı="OuterTemplate.GetSafeLink">
        <XSL:param ile adı="UrlColumnName" seçin="'LinkUrl'"/>
      </XSL:Call-template>
    </XSL:değişken>
    <XSL:değişken adı="DisplayTitle">
      <XSL:Call-template adı="OuterTemplate.GetTitle">
        <XSL:param ile adı="Başlık" seçin="@Title"/>
        <XSL:param ile adı="UrlColumnName" seçin="'LinkUrl'"/>
      </XSL:Call-template>
    </XSL:değişken>
    <XSL:değişken adı="LinkTarget">
      <XSL:Eğer test="@OpenInNewWindow 'True' =" >_blank</XSL:Eğer>
    </XSL:değişken>

    <!--
      Buraya bir değişken tanımlamak, "tableStart".  Bu açılış tablo hem de sütun etiketlerini tanımlamak için kullanın HTML içeriyor.  Unutmayın CurPos = 1, bir CDATA etiketi içerisinde HTML içerir.
      Aksi takdirde, boş olacaktır.

      ItemStyle ContentQueryMain.xsl yolu ile adlandırılır her zaman tableStart emited değeridir.
    -->
    <XSL:değişken adı="tableStart">
      <XSL:Eğer test="$CurPos = 1">
        <![CDATA[
        <tablo kenarlığı = 1>
          <tr bgcolor = "blue">
            <TD><yazı tipi rengi "beyaz" =><b>Proje adı</b></yazı tipi></TD>
            <TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Tam bir Tarih</b></yazı tipi></TD>
            <TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Bütçe</b></yazı tipi></TD>
            <TD align = "sağ"><yazı tipi rengi "beyaz" =><b>Gerçek gider</b></yazı tipi></TD>
            <TD><yazı tipi rengi "beyaz" =><b>Genel durum</b></yazı tipi></TD>
          </tr>
        ]]>
      </XSL:Eğer>
    </XSL:değişken>

    <!--
      Başka bir değişken, tableEnd sadece kapanış tanımlar tablo etiketi.

      TableStart olduğu gibi, her zaman emited olduğunu.  Bu yüzden değerini koşullu olarak bağlı olup son satırı ContentQueryMain.xsl tarafından geçtik atanır.
    -->
    <XSL:değişken adı="tableEnd">
      <XSL:Eğer test="$CurPos $Last =">
        <![CDATA[ </Tablo> ]]>
      </XSL:Eğer>
    </XSL:değişken>

    <!--
      Her zaman tableStart içeriğini yayarlar.  Bu bize ContentQueryMain.xsl tarafından geçirilen ilk satır değilse, o zaman biliyoruz değeri boş olacaktır.

      Çünkü çıkış kaçan devre dışı bırakmak ne zaman tableStart değil boş, tarayıcı tarafından işlenip istediğiniz gerçek HTML içerir.  Biz anlatmazsan, devre dışı bırakmak için XSL ayrıştırıcısı kaçan çıkış, Bu gibi şeyler oluşturur"&lt;Tablo&gt;" yerine "<Tablo>".
    -->
    <XSL:value-of seçin="$tableStart" sakatlar çıkış kaçan="Evet"/>


    <tr>
      <!--
      P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status
      -->
      <TD>
        <XSL:value-of seçin="@Project_x005F_x0020_Name"/>
      </TD>

      <TD hizalama="sağ">
        <XSL:value-of seçin="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD hizalama="sağ">
        <XSL:Call-template adı="formatCurrency">
          <XSL:param ile adı="değer" 
seçin="@Project_x005F_x0020_Budget"></XSL:param ile> </XSL:Call-template> </TD> <TD hizalama="sağ"> <XSL:Call-template adı="formatCurrency"> <XSL:param ile adı="değer" seçin="@Project_x005F_x0020_Expenses">
</XSL:param ile> </XSL:Call-template> </TD> <TD> <XSL:value-of seçin="@Project_x005F_x0020_Status"/> </TD> <!-- Tüm aşağıdaki yorumladı dışarı şeyleri açıklamak için. Ancak, geri getirmek ve malzeme o içine bir <TD> etkisini görmek için. --> <!-- <div kimliği "linkitem =" sınıf "öğe" => <XSL:Eğer test "dize uzunluğu =($SafeImageUrl) != 0"> <div class = "resim alanı sol"> <bir href = "{$SafeLinkUrl}" hedef = "{$LinkTarget}"> <img sınıf "görüntü-sabit genişlikli =" src = "{$SafeImageUrl}"
alt = "{@ImageUrlAltText}"/> </bir> </div> </XSL:Eğer> <div class = "bağlantı-madde"> <XSL:Call-template
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <bir href = "{$SafeLinkUrl}"
hedef = "{$LinkTarget}" Title = "{@LinkToolTip}"> <XSL:Seçme değer-in "$DisXSLyTitle" = /> </bir> <div class = "açıklama"> <XSL:değer-in select="@Description" /> </div> </div> </div>
--> </tr> <!-- Kapanış yayarlar masa etiketi. Son satırda ise değil, Bu-ecek var olmak boş. --> <XSL:value-of seçin="$tableEnd" sakatlar çıkış kaçan="Evet"/> </XSL:Şablon> <XSL:Şablon adı="formatCurrency"> <XSL:param adı="değer" seçin="0" /> <XSL:value-of seçin='Format-number($değer, "$DDD,DDD,DDD.DD", "personel")' /> </XSL:Şablon>

Standart WSS/yosun veri giriş ekranları basamaklı açılır listeleri desteklemiyor (veya diğer intra-iletişim)

GÜNCELLEŞTİRME (04/2008): Bu sorun için bir iyi javascript dayalı yaklaşım bu büyük blog girdisini gösterir: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

II GÜNCELLEME: (04/2008): Bu blog girdisi de umut verici görünüyor: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Haftada birkaç kez, Eğer değil günlük, Forum kullanıcıları normalde basamaklı açılır listeleri tanıştım bir gereklilik açıklamak. Örneğin, I-si olmak iki açılır denetimi:

  • ABD listesi. Birleşik
  • ABD listesi. şehirler.

Sorumlu kullanıcı Arabirimi sağlayıcıları olarak, Biz böyle çalıştırmak istiyorum:

  • Paul bir ABD seçer. aşağı açılan devlet.
  • Bu şehirler sadece seçili durumuna ait şehir filtre uygulamak için açılan neden olur.
  • Paul bir şehir filtre uygulanmış listeden seçer..

Bu özellik için out-of--box destek. Aslında, OOB destek her türlü doğrudan içi-form iletişim. Bu program aracılığıyla herhangi bir konumda bulunan formu alan değişiklikler karşısında gizleme/etkinleştirme/devre dışı bırakma alanları içerir.

İçin olası çözümler ve bunlar tanımlamak için bu makalenin gerçek amacı olan seçenekleri onları biliyorum:

  1. Özel sütun türü geliştirmek. Özel sütun geliştirici olarak, "dünya üzerinde tam kontrole sahip" Bu özel sütun. Bu şekilde açılan basamaklı uygulayabilirsiniz.
  2. İş akışı kullanmayı düşünün. Bazı durumlarda, otomatik olarak başka bir alanın değerini temel alan bir değer atamak istediğiniz. Bu durumda, normalde bir hesaplanan sütun kullanmayı denemek istiyorsunuz, ama bazı zamanlarda, Onu sadece işini alamazsın. SharePoint Designer iş akışı kodu ve visual studio bırakarak bir nispeten yönetmek dostu alternatiftir. Eğer bu yol gitmek, tarafından açıklanan sorunun farkında olmak Bu makale (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Olay işleyicileri: İş akışı gibi, Bu bir gerçek sonra çözümdür. Bir .NET derlemesi, işleyicidir (C#, VB.NET) Hangi SharePoint için denetim geçer. Geliştirdiğiniz nesne listesinin veri erişimi (ve tüm nesne modeli) ve gerekli herhangi bir hesaplama yapabilir.
  4. Özel giriş formları oluşturmak için SharePoint Designer'ı kullanın. Bu yaklaşım ile doğrudan deneyimi yok, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Kendi ASP.NET veri girişi işlevi rulo (tek başına bir web sayfası veya web bölümü) ve bunun yerine kullanmak.

Herkes başka/veya daha iyi seçenekler bilir, Yorum yazmak için lütfen ve ben bu yazı gövdesini güncelleriz.

<sonunda />

Technorati Tags:

SharePoint çubuk grafikler oluşturma

Genel bakış:

(GÜNCELLEŞTİRME 12/04/07: Bu çok ilginç bir web bölümü adresleri başka bir blog bağlantı sonunda başka bir ilginç kaynak eklendi)

Bu blog girişi SharePoint'te bir çubuk grafik oluşturma açıklanmaktadır. Sadece veri görünümü web bölümü bağlıdır gibi bu WSS ve MOSS ortamlarda çalışır.

Genel yaklaşım aşağıdaki gibidir:

  1. Grafik istediğiniz verileri içeren bir liste veya belge kitaplığı oluşturma.
  2. Yer ilişkili belge kitaplığı / Özel liste bir sayfaya ve bir veri görünümü web bölümünü dönüştürmek (DVWP).
  3. DVWP'ın XSL bir grafik gösterir HTML oluşturmak için değiştirme.

İş senaryosu / Kurulum:

Standart başlık sütun içeren özel bir liste ve bir ek sütun oluşturduk, "Durum". Bu modelleri (çok basitçe) Masraf için bir "yetkilendirme" Senaryo burada başlık proje ve durumunu bir değer listesinden gösterir:

  • Önerilen
  • Süreç içinde
  • Durmuş

Bu durum kodları gösteren etkileşimli bir yatay çubuk grafik üretmek için hedeftir.

Liste doldurulur ve bu gibi görünüyor:

görüntü

Veri Görünümü Web Bölümü oluşturma:

DVWP özel listeyi bir sayfaya ekleyerek oluşturun. (Benim durumumda site sayfası) ve bu yönergeleri izleyin Burada (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Sadece DVWP oluşturmanın yanı sıra, Ayrıca tüm mevcut satırları göstermek için disk belleği özelliğini ayarlamanız gerekir. Benim için, Bu şuna benzer:

görüntü

Bu noktada, Ben her zaman SPD ve tarayıcı yakın. Tarayıcı kullanarak sayfa sonra yeniden açın. Bu sayfadaki web bölümü düzeni yanlışlıkla mucking önler.

XSLT değiştirme:

Şimdi XSLT değiştirme zamanı.

Her zaman bunun için visual studio kullanın. (Bkz: Burada için çok yardımcı olacaktır IntelliSense hakkında önemli not).

Boş bir projeyi oluşturmak dört yeni dosya ekleme ("orijinal kelimeler yerine" ve "yeni" uygun olarak):

  • Original.XSLT
  • New.XSLT
  • Özgün Params.xml
  • Yeni Params.xml

Benim durumumda, Bu gibi görünüyor:

görüntü

Web bölümü'nü değiştirme ve params ve XSL "orijinal kopya" Visual Studio sürümü.

Amaç burada XSL Dönüşümü geri içine bir grafik görüntüleyen bir HTML DVWP sorgudan almak sonuçları neden olmaktır..

Bu amaçla, ilk önce biz "XSL" bilinen delilik tarafından karışık HTML gibi görünmelidir düşünmeye yardımcı olur. (Açık olmak, Sadece bir örnek aşağıdadır; yok bu yazın veya kopya/visual Studio'ya Yapıştır. Bunun için daha sonra yazmak-Up başlangıç noktası tam bir darbe sağlamak). Aşağıdaki örnek grafik hemen ardından HTML göre işlenir:

Numune Çubuk Grafiği

Karşılık gelen HTML:

<HTML>
<vücut>
<Merkezi>
<Masa genişliği % 80 =>
<tr><TD><Merkezi>Yatay çubuk grafik</TD></tr>
<tr>
<TD align = "center">
<tablo kenarlığı = "1" Genişlik = >
<tr>
<TD genişlik = >Açık</TD>
<TD><Tablo CELLPADDING ="0" CellSpacing ="0" sınır = 0 genişlik = % 50><tr bgcolor = kırmızı><TD>&nbsp;</TD></tr></Tablo></TD>
</tr>
<tr>
<TD genişlik = >Kapalı</TD>
<TD><Tablo CELLPADDING ="0" CellSpacing ="0" Kenarlık genişliği 0 = % 25 =><tr bgcolor = kırmızı><TD>&nbsp;</TD></tr></Tablo></TD>
</tr>
<tr>
<TD genişlik = >Durmuş</TD>
<TD><Tablo CELLPADDING ="0" CellSpacing ="0" Kenarlık genişliği 0 = % 25 =><tr bgcolor = kırmızı><TD>&nbsp;</TD></tr></Tablo></TD>
</tr>
</Tablo>
</TD>
</tr>
</Tablo>
</vücut>
</HTML>

Ölü basit bir yaklaşım "kırmızı" satırının arka plan rengini ayarlayarak benim çubukları oluşturmak için kullanılan.

Bu paket var: Sonunda, Tüm yapıyoruz-oluştururken HTML satır ve sütunları.

XSLT şablonu:

Yatay bir çubuk grafik oluşturur XSLT kopyaladıktan sonra. Oldukça iyi öylesine çok burada dışında bu notlar eklemek olmayacak yorumladı:

  • Varsayılan DVWP ilk oluşturduğunuzda SharePoint Designer verdi XSL ile başladı.
  • SPD'den 's bu kesmek başardı 657 hatları için 166 satırları.
  • Parametreler XML dosyası ile uğraşmak istemedim (XSL ayrı olan ve DVWP değiştirmeye gittiğinde ne demek istediğimi anlarsınız; değiştirebileceğiniz iki dosya). Ancak, Bunu kolaylaştırmak için, Neredeyse tüm XSL kaldırmak. Bu demektir ki yapmak istiyorsanız bu parametreleri kullanın, Sadece onların değişken tanımlar XSL geri eklemek gerekir. Özgün XSL değişken tanımları, visual studio proje içinde olacak bu kolay olacaktır.
  • Kopyala ve yapıştır bu doğrudan visual studio projenize mümkün olsa gerek. O zaman, Telefonlarıma çıkartın ve takın "ShowBar" için bir arama.
  • Ayrıntıya inme oluşturarak çalışır bir <bir href> Böyle: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Bu teknik diğer bağlamlarda değerinin olabilir. İlk başta, Daha karmaşık bir biçimine uygun gerekir düşünüyordum.: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, Ama benim ortamında bu gerekli değil. Bu genelleme yapmak oldukça kolaydır listenin URL bize SharePoint tarafından geçirilmeden.

İşte:

<XSL:Stil sayfası Sürüm="1.0" Dışlama sonuç önekleri="RS z o s ddwrt dt msxsl" 
xmlns:msxsl="semaver:schemas-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/ 1999/XSL/Dönüştür"
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="semaver:schemas-microsoft-com:Office" xmlns:s="UUID:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns:DT="UUID:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:RS="semaver:schemas-microsoft-com:satır kümesi" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="semaver:FrontPage:iç"
> <XSL:çıkış yöntemi="HTML" girinti="Hayır" /> <XSL:ondalık biçimi NaN="" /> <XSL:param adı="ListUrlDir"></XSL:param> <!-- I lüzum bu bir ayrıntıya inme desteklemek için. --> <XSL:Şablon maç="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.microsoft.com/ASPNET/20"
> <XSL:değişken adı="dvt_StyleName">Tablo</XSL:değişken> <XSL:değişken adı="Satır" seçin="/dsQueryResponse/satır/satır" /> <XSL:değişken adı="dvt_RowCount" seçin="sayısı($Satır)" /> <XSL:değişken adı="IsEmpty" seçin="$dvt_RowCount = 0" /> <XSL:değişken adı="dvt_IsEmpty" seçin="$dvt_RowCount = 0" /> <XSL:seçin> <XSL:Ne zaman test="$dvt_IsEmpty"> Grafik için veri yok!<br/> </XSL:Ne zaman> <XSL:Aksi takdirde> <!-- Burada ilginç şeyler başlıyor. Grafikte bir değişkeni her satır için bir çifti tanımlamanız gerekir: toplam öğe sayısını ve toplam yüzdesi. --> <XSL:değişken adı="totalProposed" seçin="sayısı(/dsQueryResponse/satır/satır[normalize-uzay(@Status) 'Teklif' =])" /> <XSL:değişken adı="percentProposed" seçin="$totalProposed div $dvt_RowCount" /> <XSL:değişken adı="totalInProcess" seçin="sayısı(/dsQueryResponse/satır/satır[normalize-uzay(@Status) 'Sürecinde' =])" /> <XSL:değişken adı="percentInProcess" seçin="$totalInProcess div $dvt_RowCount" /> <XSL:değişken adı="totalStalled" seçin="sayısı(/dsQueryResponse/satır/satır[normalize-uzay(@Status) 'Stop' =])" /> <XSL:değişken adı="percentStalled" seçin="$totalStalled div $dvt_RowCount" /> <!-- Biz bizim HTML tablo tanımlar. Tutarlı hale getirmek için bazı standart SharePoint stillerden burada ödünç alıyorum. Bu tema geçersiz kılar yanı sıra küresel css dosyasındaki değişiklikler onur olacak sanırım. --> <Tablo Genişlik="100%" CellSpacing="0" CELLPADDING="2" Stil="Kenarlık sağ: 1 katı #C0C0C0; kenarlık-alt: 1 katı #C0C0C0; sol kenarlık stili: katı; Kenarlık-sol-genişliği: 1; Border-top-style: katı; Border-top-width: 1;"> <tr> <TD hizalama="Merkezi"> <Tablo Kenarlık="1" Genişlik="100%"> <!-- Grafik haline getirmek istiyoruz her durum için, "ShowBar diyoruz" Şablon. Biz geçmek: 1. Satır için bir etiket. Bu bir köprüye dönüştürüldükten. 2. Tamamlanma yüzdesi (değişken yukarıdan). 3. Alttaki liste koddan gerçek alan adı. Bu görüntü etiketini eşleştirmek gerekmez. 4. Alan değeri için bahisler #3. 5. Bu durum kodunun toplam öğe (tüm durum kodları değil genel toplamı). Bu yayar bir <tr></tr> ve yatay çubuk grafiği çizgi. Görüntülemek istediğiniz her durum kodu için bu þablonu çaðýrmak. --> <XSL:Call-template adı="ShowBar"> <XSL:param ile adı="BarDisplayLabel" seçin="'Teklif'"/> <XSL:param ile adı="BarPercent" seçin="$percentProposed"/> <XSL:param ile adı="QueryFilterFieldName" seçin=""Durum""/> <XSL:param ile adı="QueryFilterFieldValue" seçin="'Teklif'"/> <XSL:param ile adı="TotalItems" seçin="$totalProposed"></XSL:param ile> </XSL:Call-template> <XSL:Call-template adı="ShowBar"> <XSL:param ile adı="BarDisplayLabel" seçin="'Stop'"/> <XSL:param ile adı="BarPercent" seçin="$percentStalled"/> <XSL:param ile adı="QueryFilterFieldName" seçin=""Durum""/> <XSL:param ile adı="QueryFilterFieldValue" seçin="'Stop'"/> <XSL:param ile adı="TotalItems" seçin="$totalStalled"></XSL:param ile> </XSL:Call-template> <XSL:Call-template adı="ShowBar"> <XSL:param ile adı="BarDisplayLabel" seçin="'Sürecinde'"/> <XSL:param ile adı="BarPercent" seçin="$percentInProcess"/> <XSL:param ile adı="QueryFilterFieldName" seçin=""Durum""/> <XSL:param ile adı="QueryFilterFieldValue" seçin="'Sürecinde'"/> <XSL:param ile adı="TotalItems" seçin="$totalInProcess"></XSL:param ile> </XSL:Call-template> </Tablo> </TD> </tr> </Tablo> </XSL:Aksi takdirde> </XSL:seçin> </XSL:Şablon> <!-- Bu şablon çubuk grafik tek tek satırı görüntüleyerek çalışır. Muhtemelen çoğu burada tweaking yapacağım. --> <XSL:Şablon adı="ShowBar"> <XSL:param adı="BarDisplayLabel" /> <!-- göstermek için etiket --> <XSL:param adı="BarPercent"/> <!-- Toplamının yüzdesi olarak. --> <XSL:param adı="QueryFilterFieldName"/> <!-- Sorguya atlamak için kullanılan & Filtre --> <XSL:param adı="QueryFilterFieldValue"/> <!-- Sorguya atlamak için kullanılan & Filtre --> <XSL:param adı="TotalItems" /> <!-- Bu barlabel toplam sayısı --> <tr> <!-- Çubuk kendisini etiket. --> <TD sınıf="MS-formbody" Genişlik="30%"> <!-- Bu sonraki küme deyimleri temel verileri filtre uygulanmış bir görünüm aşağı matkap için bize izin verir bir sorgu dizesi oluşturur. Biz burada birkaç şeyi kullanın: 1. Biz FilterField1 ve FilterValue1 bir sütuna filtre uygulamak için bir liste geçirebilirsiniz. 2. SharePoint bir anahtar parametreyi bize geçiyor, Karşı bu DVWP "çalıştığı" alttaki liste Puan ListUrlDir. XSL eğlenceli değil? --> <XSL:metin sakatlar çıkış kaçan="Evet"> <![CDATA[<bir href ="]]></XSL:metin> <XSL:value-of seçin="$ListUrlDir"/> <XSL:metin sakatlar çıkış kaçan="Evet"><![CDATA[?FilterField1 =]]></XSL:metin> <XSL:value-of seçin="$QueryFilterFieldName"/> <XSL:metin sakatlar çıkış kaçan="Evet"><![CDATA[&FilterValue1 =]]></XSL:metin> <XSL:value-of seçin="$QueryFilterFieldValue"/> <XSL:metin sakatlar çıkış kaçan="Evet"><![CDATA[">]]></XSL:metin> <XSL:value-of seçin="$BarDisplayLabel"/> <XSL:metin sakatlar çıkış kaçan="Evet"><![CDATA[</bir>]]></XSL:metin> <!-- Sırada bazı sayılar biçiminde gösterir.: "(Toplam / % Toplam)" --> (<XSL:value-of seçin="$TotalItems"/> / <!-- Bu bizim için güzel bir yüzde etiket oluşturur. Teşekkürler, Microsoft! --> <XSL:Call-template adı="PercentFormat"> <XSL:param ile adı="yüzde" seçin="$BarPercent"/> </XSL:Call-template>) </TD> <!-- Nihayet, yayarlar bir <TD> etiket çubuğun kendisi.--> <TD> <Tablo CELLPADDING="0" CellSpacing="0" Kenarlık="0" Genişlik="{yuvarlak($BarPercent * 100)+1}%"> <tr bgcolor="Kırmızı"> <XSL:metin sakatlar çıkış kaçan="Evet"><![CDATA[&nbsp;]]></XSL:metin> </tr> </Tablo> </TD> </tr> </XSL:Şablon> <!-- Bu doğrudan bir MS şablonunda bulunan bazı XSL alınır. --> <XSL:Şablon adı="PercentFormat"> <XSL:param adı="yüzde"/> <XSL:seçin> <XSL:Ne zaman test="Format-number($yüzde, '#,##0%;-#,##0%')'NaN' =">0%</XSL:Ne zaman> <XSL:Aksi takdirde> <XSL:value-of seçin="Format-number($yüzde, '#,##0%;-#,##0%')" /> </XSL:Aksi takdirde> </XSL:seçin> </XSL:Şablon> </XSL:Stil sayfası>

Sonuçları:

XSL yukarıdan bu grafik oluşturur:

görüntü

Temel verilere durum kodu üzerinde tıklatarak ulaşmak:

görüntü

Sonuç düşünceler:

Bu Genelleştirilmiş?

Bu grafik kavram seviyorum, Ama içeri girip o kadar çok el kodlama yapmak zorunda aslında nefret ediyorum. Ben olup Genelleştirilmiş için biraz düşündüm ve ben iyimserim., Ama ben de bir yerde herhangi bir iş-çevrede teklif değil yol boyunca bir tuğla duvar olabilir biraz korkulu. Kimse bu konuda bazı iyi fikirler varsa, Lütfen Yorum not edin veya bana e-posta.

Dikey grafikler:

Yatay bir çubuk grafiği bu. Dikey bir grafik oluşturmak kesinlikle mümkün. HTML değiştirmeliyiz. Ben aynı şekilde başlamak istiyorum: Dikey bir çubuk grafik bir HTML temsilini oluşturmak ve sonra bu XSL almak nasıl anlamaya. Kimse ilgileniyor ise, Ben de denemek ve karışıklığı çözmek çalışmak için ikna edilebilir. Eğer birisi zaten yaptı, bana bildirin ve ben blogunuza bağlantı memnuniyetle duyarız 🙂

Meydan okuma ile dikey bir grafik için grafik etiketleri yönetmek daha zor olduğunu düşünüyorum., Ama kesinlikle imkansız.

Alan adı Gotcha's:

En az iki şey için alan adlarıyla dikkat.

İlk, boşluk içeren bir alan adı XSL öncelenmesi gerekir. Bu muhtemelen bir sorun olacak:

        <XSL:değişken adı="totalProposed" 
seçin="sayısı(/dsQueryResponse/satır/satır[normalize-uzay(@Status) 'Teklif' =])" />

Eğer durum"" sütun aslında "durum kodu adı" daha sonra "Status_x0020_Code" başvurmak gerekir:

   <XSL:değişken adı="totalProposed" 
seçin="sayısı(/dsQueryResponse/satır/satır[normalize-uzay(@Status_x0020_Code) 'Teklif' =])" />

İkinci, ve bu konuda biraz kafam, Ama sen de alan adı değişiklikleri için tetikte olmak gerekir. Senin alanın "durum kodu adı" ve daha sonra üzerinde, rename o-e doğru "AKKUŞ durumu", "iç adı" değişmez. İç adı hala "durum kodu olacak" ve "Status_x0020_Code" başvurulan gerekir. "Diğer kaynaklar" Linkler bu tür sorunları tanılamak ve sorununu yardımcı.

Bu renk hakkında:

"Red aldım" Çünkü şu anda bana hoş. Böylece bir numara sadece görsel bir açıklama sağlamak için farklı renk göstermek için büyük bir olay olmaz, Ama aynı zamanda yararlı bir KPI sağlamak için. Örneğin, Eğer yüzdesi "durdu" AKKUŞ'ın olduğunu > 10% o zaman kırmızı göster, Aksi halde siyah göster. Kullanımı <XSL:seçin> Bunu gerçekleştirmek için.

Diğer kaynaklar:

Mutlu dönüştürme!

<sonunda />

Benim blog abone!

Özel bir liste ile mevcut OM veri (veya, Henüz başka bir OM veri Displayor [YACC gibi, Ama farklı])

Bugün, A avuç-in belgili tanımlık kök neden "girdiğiniz sütun adı zaten kullanılıyor veya ayrılmış mesajı geride aşağı izleme saat geçirdim. Başka bir ad seçin."

Söz konusu sütun oluşturulabilir, silinecek ve başka bir ortamda yeniden oluşturulacak, ayrılan bir ad olmadığını biliyordum bu yüzden. Ancak, Sadece sütun herhangi bir yerde herhangi bir yerinde standart SharePoint kullanıcı arabirimi ile site koleksiyonunda bulamadım.

İçin gönderildi MSDN Forumları burada ve Yılmaz Andrew Woodward temel nesne modeli veri yönde beni işaret etti.

Ben gitti CodePlex alttaki OM veri ve yardım bana yardımcı olacak bazı araçlar eş bulmak sorun bulun bana.

Çeşitli araçlar denedim ve çok serin ve ilginç ama sonuçta, UI benim amaç için yeterince iyi değildi. Onları herhangi bir yolla eleştirmiyorum, Ama ne zaman onların UI oluşturdukları açıkça alet yapıcılar benim sorunum göz önünde :). Çoğu kişi zaman ve çaba iş istasyonu oluşturmanın adil bir miktar yatırım olacak gibi görünüyor / ağaç manzaralarına sahiptir Istemci uygulamaları, bağlam menüleri ve benzeri sağ tıklatın. Bunlar güzel ve tüm, Ama çok da çok esnek bir üst satır kullanıcı deneyimi oluşturmak için iş.

Gerçekten bu soruna bir cevap gerek. Eğer özel bir liste halinde site koleksiyonundaki tüm site sütunları alabilir ki aklıma geldi, Filtre uygulayabilirsiniz, sıralama ve sözde varolan bir sütunu bulmama yardımcı olacak bir görünüm oluşturma (hangi yaptı, BTW). I went önde ve bu ve bir ya da iki saat daha sonra yaptım, benim site sütunlarını gruplandırma ile özel bir liste içine yüklü, sıralama ve benzeri. Beş dakika sonra benim cevap buldum.

Başarılı bir şekilde dünyayı ele geçirmek ve ne zaman, Tüm SharePoint araçları sağlayıcıları ciddiye onların nesne modeli listedeki verileri, özel yüzey düşünmek gerekir ilan düşünüyorum. Bu şekilde, Güç bende arama yolu ben istiyorum (kısıtlı, Elbette, Standart sharepoint özellikleri).