Bar is nog steeds vrij hoog te breiden MOSS

Vandaag, Ik was werken met een klant en waarin wordt beschreven hoe het webonderdeel Inhoudsquery wijzigen en weergeven van extra stukjes informatie uit een inhoudstype.

"Eerste., u configureert de CQWP verbinden met de gegevensbronnen, dan u het exporteren naar uw werkstation, wijzigen <CommonViewFields>, Upload, verwijderen van het origineel en nu is het ' primer’ om die andere kolommen weer te geven. Volgende, Open SharePoint designer, Navigeer naar de hoofdmap van de site-verzameling en zoek ItemStyle.xsl. Een van de sjablonen kopiëren als een nuttig uitgangspunt. Ga terug en wijzigen van de CQWP maken gebruik van deze nieuwe sjabloon. Tot slot, Wijzig de sjabloon om uw nieuwe velden! (Vergeet niet om dat het terug in zo dat andere gebruikers de resultaten kunt zien)."

Het is allemaal heel duidelijk voor mij (en de meeste van ons SharePoint ontwikkelaar types) wat er gaande is en hoe het is heel leuk, echt, dat de gegevens ophalen aspecten van de CQWP zo goed-apart van de aspecten van de presentatie gegevens zijn. Maar, het is niet zo makkelijk uit te leggen, is het?

<einde />

Technorati Tags: ,

Content Query Web deel resultaten weergegeven in een raster / Tabel

Overzicht en doelstelling

Out of the box, MOSS’ Webonderdeel Inhoudsquery (CQWP) de resultaten worden in een lijstindeling weergegeven, vergelijkbaar met zoekresultaten. Het is ook mogelijk om de resultaten in een grid-formaat weergeven (dwz. HTML-tabelindeling). Raster formaten zijn beter in bepaalde omstandigheden. Beschrijf ik hoe om te bereiken dat effect in dit artikel.

Bedrijfsscenario

Ik heb gewerkt met een cliënt op de uitrol van een ondernemingsbreed MOSS. Wij hebben hun taxonomie ontworpen zodanig dat projecten eerste klassenburgers in de hiërarchie zijn en hun eigen site van het hoogste niveau hebben. Projectmanagers handhaven een singleton lijst van projectsamenvattingsgegevens, zoals de titel van, begroting, verwachte Voltooiingsdatum, resterende begroting en andere velden resumétype. Door "singleton" Ik bedoel een aangepaste SharePoint-lijst gegarandeerd bevatten slechts één item. Simplistisch, het ziet er als volgt:

afbeelding

De technische aanpak is veel hetzelfde als beschreven Hier (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). De CQWP maakt gebruik van een XSL-transformatie voor het uitzenden van HTML voor de browser weer te geven.

Ik altijd het resultaat voordat duiken in de XSL omdat XSL een nachtmerrie is voor ogen. Hier is mijn gewenste resultaat:

afbeelding

HTML als dit genereert dat resultaat:

<HTML>
 <lichaam>
 <Center>
 <tabel grens= 1>

<!-- Etiketten-->
 <tr bgcolor= blauw>
 <TD><lettertype Kleur= wit><b>Naam van het project</b></lettertype></TD>
 <TD uitlijnen= rechts><lettertype Kleur= wit><b>Datum voltooid</b></lettertype></TD>
 <TD uitlijnen= rechts><lettertype Kleur= wit><b>Begroting</b></lettertype></TD>
 <TD uitlijnen= rechts><lettertype Kleur= wit><b>Werkelijke kosten</b></lettertype></TD>
 <TD><lettertype Kleur= wit><b>Algemene Status</b></lettertype></TD>
 </tr>

<tr>
 <TD>Boren computerlokaal.</TD>
 <TD uitlijnen= rechts>02/01/08</TD>
 <TD uitlijnen= rechts>22,500.00</TD>
 <TD uitlijnen= rechts>19,000.00</TD>
 <TD>In uitvoering</TD>
 </tr>

<tr>
 <TD>Bepaling servers voor SQL Upgrade</TD>
 <TD uitlijnen= rechts>04/01/08</TD>
 <TD uitlijnen= rechts>7,500.00</TD>
 <TD uitlijnen= rechts>0.00</TD>
 <TD>Gepland</TD>
 </tr>

</tabel>
 </Center>
 </lichaam>
</HTML>

Aanpak

Als volgt te werk als u wilt maken het raster:

  1. Identificatie van de bestanddelen van het raster (rijen en kolommen).
  2. Definiëren en maken noodzakelijk sitekolommen.
  3. Maak sub sites voor de projecten en het singleton lijsten.
  4. De CQWP aan een webpagina toevoegen en configureren om te zoeken naar uw lijsten.
  5. De CQWP van XML naar het verzamelen van de aanvullende kolommen wijzigen.
  6. De XSL voor het genereren van een tabel wijzigen.

I 'm gonna concentreren op nummer zes. Getallen tot en met 4 zijn rechttoe-rechtaan en iets dat elke gebruiker CQWP heeft al gedaan. Nummer vijf is goed gedocumenteerd door anderen met inbegrip van dit volledig scherm-schot beladen artikel van MSDN Hier (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) en Heather Solomon's blog Hier (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Moeren en bouten

Beginnen en uit te voeren stappen 1 tot en met 5 vanaf de MSDN-documentatie en Heather Solomon artikel.

Op dit punt, u kunt uw CQWP aan de pagina hebt toegevoegd en u hebt uw <CommonViewFields> zo nodig geconfigureerd.

De gebruikelijke stappen uit te voeren, Ik krijg deze tussentijdse resultaten:

1. Een inhoudstype maken, een templatized aangepaste lijst voor dat inhoudstype en twee sites. Hier wordt het type inhoud:

afbeelding

Hier is de structuur van de site:

afbeelding

2. De CQWP na het maken van mijn project subsites en het singleton project samenvatting lijsten toevoegen:

afbeelding

3. Voeg de aanvullende informatie die ik wil via de <CommonViewFields>:

        <eigenschap naam="CommonViewFields" type="tekenreeks">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</eigenschap>

Merk op dat ik moest houden de eigenschapsvelden op één lijn of het zou niet werken (CQWP zou vertellen me dat de query heeft geen resultaten opgeleverd).

4. Op dit punt, we klaar om te gaan dan het MSDN-artikel en tik op over Heather Solomon's artikel. Haar stappen beginnen in de buurt van stap #5 een aangepaste maken / unghosted versie van ItemStyle.xsl. Ik volg Heather's advies, door stap omhoog 11 en krijg deze tussentijdse resultaten:

4.1: Mijn XSL-sjabloon als volgt de naam:

<XSL:Sjabloonnaam = "Grid" overeenkomen met = "rij[@Style = 'Raster']" modus = "itemstyle">

Ik wijzigen ook iets haar voorgesteld <XSL:for-each …> door het toevoegen van een <BR /> label voor een schonere:

    <XSL:for-each Selecteer="@*">
      P:<XSL:waarde-van Selecteer="naam()" /><BR/>
    </XSL:for-each>

4.2: Ik wijzigen het webonderdeel, Ga naar uiterlijk en selecteer mijn "Grid" stijl:

afbeelding

De wijziging door te voeren en hier is het resultaat:

afbeelding

Uit het bovenstaande kunnen we zien dat de velden die we willen (Naam van het project, kosten, status, etc) beschikbaar zijn voor ons om te gebruiken wanneer we de HTML-code uitstoten. Niet alleen dat, maar we zien de namen waaraan we moeten verwijzen naar die kolommen in de XSL. Bijvoorbeeld, We verwijzen naar de statusdatum van het Project als "Project_x005F_x0020_Name".

Op dit punt, We vertrekken van Heather's blog en van de schouders van deze reuzen, Ik voeg mijn eigen beetje.

ContentQueryMain.xsl

OPMERKING: Wanneer u wijzigingen aanbrengt aan zowel ContentQueryMain.xsl als ItemStyle.xsl, u moet controleren dat deze bestanden terug in voordat u het effect van uw wijzigingen zien.

Voor doeleinden van het raster maken, MOSS maakt gebruik van twee verschillende XSL-bestanden voor de productie van de resultaten die we van een CQWP zien. Voor het genereren van de vorige bit van output, We bewerkt ItemStyle.xsl. MOSS daadwerkelijk gebruik maakt van een andere XSL-bestand, ContentQueryMain.xsl om in combinatie met ItemStyle.xsl voor het genereren van de HTML-code. Zoals de naam al impliceert, ContentQueryMain.xsl is de belangrijkste"" XSL waarmee de totale stroom van vertaling. Het doorlopen van alle gevonden items en geeft ze één voor één aan sjablonen in ItemStyle.xsl. We zullen wijzigen ItemStyle.xsl voor het genereren van de open <tabel> Label vóór dat de eerste rij van de gegevens en de afronding <tabel> Label na de laatste rij uitstoten. Om dit te bereiken, ContentQueryMain.xsl is aangepast om twee parameters doorgeven aan onze "grid" sjabloon in ItemStyle.xsl, "laatste rij" en "huidige rij". ItemStyle.xsl maakt gebruik van deze voorwaardelijk uitstoten de nodige codes.

Met behulp van Heather Solomon techniek, Wij zoeken ContentQueryMain.xsl. Het is gelegen in de dezelfde plaats als ItemStyle.xsl. Dit schermschot moet helpen:

afbeelding

We moeten de volgende wijzigingen aanbrengen:

  • Een XSL-sjabloon wijzigen, "CallItemTemplate" dat roept eigenlijk onze raster sjabloon in ItemStyle.xsl. We zullen twee parameters doorgeven aan de Grid-sjabloon, zodat het de vereiste gegevens hebben zal voor het genereren van voorwaardelijk openen en sluiten <tabel> Tags.
  • Een ander stukje van ContentQueryMain.xsl waarin de "CallItemTemplate wijzigen" geschiedde het een "LastRow" met de parameter dus dat LastRow kan worden doorgegeven aan onze raster sjabloon.

Zoek de sjabloon met de naam "OuterTemplate.CallItemTemplate" geïdentificeerd door de tekenreeks:

  <XSL:sjabloon naam="OuterTemplate.CallItemTemplate">

De hele sjabloon als volgt vervangen:

  <XSL:sjabloon naam="OuterTemplate.CallItemTemplate">
    <XSL:param naam="CurPosition" />

    <!--
      De "LastRow toevoegen" met de parameter.
      We alleen gebruiken wanneer het item stijl pass in zich "Grid".
    -->
    <XSL:param naam="LastRow" />

    <XSL:Kies>
      <XSL:Wanneer test="@Style = 'NewsRollUpItem'">
        <XSL:apply-templates Selecteer="." modus="itemstyle">
          <XSL:met-param naam="EditMode" Selecteer="$cbq_iseditmode" />
        </XSL:apply-templates>
      </XSL:Wanneer>
      <XSL:Wanneer test="@Style = 'NewsBigItem'">
        <XSL:apply-templates Selecteer="." modus="itemstyle">
          <XSL:met-param naam="CurPos" Selecteer="$CurPosition" />
        </XSL:apply-templates>
      </XSL:Wanneer>
      <XSL:Wanneer test="@Style = 'NewsCategoryItem'">
        <XSL:apply-templates Selecteer="." modus="itemstyle">
          <XSL:met-param naam="CurPos" Selecteer="$CurPosition" />
        </XSL:apply-templates>
      </XSL:Wanneer>

      <!--
              Huidige positie en lastrow doorgeven aan de Grid itemstyle.xsl sjabloon.
              ItemStyle.xsl gebruik dat het uitzenden van de open en sluiten <tabel> Tags.
      -->
      <XSL:Wanneer test="@Style = 'Raster'">
        <XSL:apply-templates Selecteer="." modus="itemstyle">
          <XSL:met-param naam="CurPos" Selecteer="$CurPosition" />
          <XSL:met-param naam="Laatste" Selecteer="$LastRow" />
        </XSL:apply-templates>
      </XSL:Wanneer>

      <XSL:anders>
        <XSL:apply-templates Selecteer="." modus="itemstyle">
        </XSL:apply-templates>
      </XSL:anders>
    </XSL:Kies>
  </XSL:sjabloon>

De opmerkingen beschrijving van het doel van de wijzigingen.

Natuurlijk, de OuterTemplate.CallItemTemplate"" zelf wordt aangeroepen vanuit een andere sjabloon. Die sjabloon vinden door te zoeken naar deze tekenreeks:

<XSL:sjabloon naam="OuterTemplate.Body">

Blader door de instructies in OuterTemplate.Body en de parameter LastRow bijvoegen (weergegeven als een commentaar in cursief):

<XSL:oproep-sjabloon naam="OuterTemplate.CallItemTemplate">
  <XSL:met-param naam="CurPosition" Selecteer="$CurPosition" />
  <!-- De LastRow parameter invoegen. -->
  <XSL:met-param naam="LastRow" Selecteer="$LastRow"/>
</XSL:oproep-sjabloon>

Na dit alles, We hebben eindelijk dingen correct ingesteld zodat onze ItemStyle.xsl kunnen uitstoten <tabel> Tags op de juiste plaats.

ItemStyle.Xsl

OPMERKING: Weer, check in ItemStyle.xsl na wijzigingen zodat u het effect van die wijzigingen zien.

We hebben hier twee taken:

  • Vervang de gehele Grid-sjabloon. U kunt kopiëren/plakken uit de onderstaande lijst.
  • Sommige mumbo jumbo buiten de definitie van de sjabloon waarmee "formatcurrency toevoegen" sjabloon om te werken. (U kunt vertellen dat ik heb een ijle greep op XSL).

Eerste, in de buurt van de top van ItemStyle.xsl, Voeg deze regel toe:

  <!-- Sommige mumbo jumbo waarmee we kunnen U.S weergeven. valuta. -->
  <XSL:decimaal-formaat naam="personeel" cijfers="D" />

  <XSL:sjabloon naam="Standaard" wedstrijd="*" modus="itemstyle">

Opmerking dat ik toegevoegd het direct vóór de <XSL:Sjabloonnaam = "standaard" …> definitie.

Volgende, Ga terug naar onze raster sjabloon. De gehele Grid sjabloon vervangen door de onderstaande code. Het is grondig toegelicht, maar aarzel dan niet om me e-mail of reacties op mijn blog als u vragen hebt.

  <XSL:sjabloon naam="Raster" wedstrijd="Rij[@Style = 'Raster']" modus="itemstyle">

    <!--
      ContentMain.xsl gaat CurPos en laatste.
      We deze gebruiken om voorwaardelijk uitstoten het openen en sluiten <tabel> Tags.
    -->
    <XSL:param naam="CurPos" />
    <XSL:param naam="Laatste" />

    <!-- De volgende variabelen zijn tussentijds niet zijn gewijzigd van de standaard ItemStyle.xsl -->
    <XSL:variabele naam="SafeImageUrl">
      <XSL:oproep-sjabloon naam="OuterTemplate.GetSafeStaticUrl">
        <XSL:met-param naam="UrlColumnName" Selecteer="'ImageUrl'"/>
      </XSL:oproep-sjabloon>
    </XSL:variabele>
    <XSL:variabele naam="SafeLinkUrl">
      <XSL:oproep-sjabloon naam="OuterTemplate.GetSafeLink">
        <XSL:met-param naam="UrlColumnName" Selecteer="'LinkUrl'"/>
      </XSL:oproep-sjabloon>
    </XSL:variabele>
    <XSL:variabele naam="DisplayTitle">
      <XSL:oproep-sjabloon naam="OuterTemplate.GetTitle">
        <XSL:met-param naam="Titel" Selecteer="@Title"/>
        <XSL:met-param naam="UrlColumnName" Selecteer="'LinkUrl'"/>
      </XSL:oproep-sjabloon>
    </XSL:variabele>
    <XSL:variabele naam="LinkTarget">
      <XSL:Als test="@OpenInNewWindow = 'True'" >_blank</XSL:Als>
    </XSL:variabele>

    <!--
      Hier definiëren we een variabele, "tableStart".  Dit bevat de HTML-code die we gebruiken om te definiëren van de opening van de tabel, alsmede de kolomlabels.  Merk op dat als CurPos = 1, het bevat de HTML-code in een CDATA-tag.
      Anders, het is leeg.

      De waarde van tableStart is emited telkens wanneer ItemStyle wordt aangeroepen via ContentQueryMain.xsl.
    -->
    <XSL:variabele naam="tableStart">
      <XSL:Als test="$CurPos = 1">
        <![CDATA[
        <tabelrand = 1>
          <TR bgcolor = "blauw">
            <TD><tekstkleur = "wit"><b>Naam van het project</b></lettertype></TD>
            <TD align = "rechts"><tekstkleur = "wit"><b>Datum voltooid</b></lettertype></TD>
            <TD align = "rechts"><tekstkleur = "wit"><b>Begroting</b></lettertype></TD>
            <TD align = "rechts"><tekstkleur = "wit"><b>Werkelijke kosten</b></lettertype></TD>
            <TD><tekstkleur = "wit"><b>Algemene Status</b></lettertype></TD>
          </tr>
        ]]>
      </XSL:Als>
    </XSL:variabele>

    <!--
      Een andere variabele, tableEnd gewoon definieert de afsluitende tag tabel.

      Zoals met tableStart, het is altijd emited.  Dit is de reden waarom de waarde is toegewezen voorwaardelijk op basis van de vraag of we de laatste rij met ContentQueryMain.xsl heb zijn aangenomen.
    -->
    <XSL:variabele naam="tableEnd">
      <XSL:Als test="$CurPos = $Last">
        <![CDATA[ </tabel> ]]>
      </XSL:Als>
    </XSL:variabele>

    <!--
      Altijd het uitzenden van de inhoud van tableStart.  Als dit niet de eerste rij doorgegeven aan ons door ContentQueryMain.xsl, dan weten we de waarde leeg zal worden.

      Uitschakelen uitvoer ontsnappen omdat wanneer tableStart het niet leeg, Het omvat werkelijke HTML die we willen worden weergegeven door de browser.  Als we niet vertellen uitvoer de XSL-parser uitschakelen ontsnappen, zal het genereren van dingen zoals"&lt;tabel&gt;" in plaats van"<tabel>".
    -->
    <XSL:waarde-van Selecteer="$tableStart" uitschakelen-uitvoer-ontsnappen="Ja"/>


    <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:waarde-van Selecteer="@Project_x005F_x0020_Name"/>
      </TD>

      <TD uitlijnen="recht">
        <XSL:waarde-van Selecteer="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD uitlijnen="recht">
        <XSL:oproep-sjabloon naam="FormatCurrency">
          <XSL:met-param naam="waarde" 
Selecteer="@Project_x005F_x0020_Budget"></XSL:met-param> </XSL:oproep-sjabloon> </TD> <TD uitlijnen="recht"> <XSL:oproep-sjabloon naam="FormatCurrency"> <XSL:met-param naam="waarde" Selecteer="@Project_x005F_x0020_Expenses">
</XSL:met-param> </XSL:oproep-sjabloon> </TD> <TD> <XSL:waarde-van Selecteer="@Project_x005F_x0020_Status"/> </TD> <!-- Alle van de volgende handelingen is uitgecommentarieerd te verduidelijken dingen. Echter, het terug te brengen en dat soort dingen in een <TD> om het effect te zien. --> <!-- <div id = "linkitem" klasse = "post"> <XSL:Als test = "tekenreeks-lengte($SafeImageUrl) != 0 "> <div class = & quoSafeImageUrl-links "> <een href = "{$SafeLinkUrl}" target = "{$LinkTarget}"> <img klasse = "afbeelding-fixed-width" src = "{$SafeImageUrl}"
ALT = "{@ImageUrlAltText}"/> </een> </div> </XSL:Als> <div class = "link-item"> <XSL:oproep-sjabloon
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <een href = "{$SafeLinkUrl}"
target = "{$LinkTarget}" titel = "{@LinkToolTip}"> <XSL:Selecteer waarde-van "$DispXSLTitle" = /> </een> <div class = "omschrijving"> <XSL:waarde-van select="@Description" /> </div> </div> </div>
--> </tr> <!-- Uitstoten de afsluitende tag tabel. Als we niet op de laatste rij, Dit is leeg. --> <XSL:waarde-van Selecteer="$tableEnd" uitschakelen-uitvoer-ontsnappen="Ja"/> </XSL:sjabloon> <XSL:sjabloon naam="FormatCurrency"> <XSL:param naam="waarde" Selecteer="0" /> <XSL:waarde-van Selecteer='getalnotatie($waarde, "$DDD,DDD,DDD.DD", "personeel")' /> </XSL:sjabloon>

Standaard WSS/MOSS gegevens invoerschermen ondersteunen geen trapsgewijze Drop-downs (of andere intra-in de mededeling van)

UPDATE (04/2008): Deze geweldige blog entry toont een goede javascript gebaseerde aanpak van dit probleem: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

UPDATE II: (04/2008): Deze blog entry ziet er veelbelovend zo goed: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Meerdere malen per week, Als niet dagelijks, forumgebruikers beschrijven een eis die gewoonlijk zou worden voldaan via trapsgewijze drop-downs. Bijvoorbeeld, Ik heb twee besturingselementen van vervolgkeuzelijst:

  • Lijst van U.S. Staten
  • Lijst van U.S. steden.

Als verantwoordelijk UI aanbieders, We wilt werken als dit:

  • Paul selecteert een U.S. staat uit de drop-down.
  • Dit zorgt ervoor dat de steden vervolgkeuzelijst om te filteren alleen die steden die deel uitmaken van de geselecteerde status.
  • Paul kiest dit gefilterde lijst een stad.

Er is geen out-of-the-box ondersteuning voor deze functie. Eigenlijk, Er is geen OOB ondersteuning voor elk soort directe intra-vorm mededeling. Dit omvat programmatisch verbergen/activeren/deactiveren velden in reactie op veld veranderingen elders op het formulier.

Het echte doel van dit artikel om te beschrijven mogelijke oplossingen en deze zijn de opties aangezien ik ken ze:

  1. Ontwikkelen van een aangepaste kolomtype. Als een aangepaste-kolom-ontwikkelaar, u hebt volledige controle over de wereld"" van die aangepaste kolom. U kunt implementeren een trapsgewijze keuzelijst die manier.
  2. Overweeg het gebruik van de werkstroom. In sommige gevallen, u wilt een waarde automatisch aan veld op basis van de waarde van een ander veld toewijzen. In dit geval, u zou normaal probeert te gebruiken een berekende kolom, maar sommige tijden, het krijgen gewoon niet de klus te klaren. SharePoint Designer workflow is een relatief beheren-vriendelijk alternatief voor het laten vallen naar beneden in de code en visual studio. Als je deze route te gaan, zich bewust zijn van de kwestie die in dit artikel (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Gebeurtenis-handlers: Als de werkstroom, Dit is een oplossing na-de-feit. De gebeurtenis-handler is een .NET-assembly (C#, VB.NET) naar welke SharePoint wordt de controle overgedragen. Het object dat u ontwikkelen heeft toegang tot de gegevens van de lijst (en het hele objectmodel) en elke benodigde berekening kunt doen.
  4. SharePoint Designer gebruiken om aangepaste vermelding formulieren te maken. Ik heb geen directe ervaring met deze aanpak, maar ik hoor ze doen goede dingen met NewForm.aspx deze dagen 🙂
  5. Uw eigen ASP.NET-gegevensfunctie vermelding roll (Als een zelfstandige webpagina of als een webonderdeel) en dat in plaats daarvan gebruiken.

Als iemand andere en/of betere opties weet, post een reactie en ik zal updaten de tekst van dit bericht.

<einde />

Technorati Tags:

Ja/Nee (selectievakje) filteren in het webonderdeel Inhoudsquery

Om te filteren op een query voor de Ja/geen selectievakje getiteld "PG mijlpaal", configureren CQWP zoals dit:

afbeelding

Dit is een andere een van deze voor de hand liggende-keer-u-weet-it maar hard-to-find-an-answer-to vragen: Hoe om te filteren op een Ja/geen selectievakje met behulp van het webonderdeel Inhoudsquery.

De eerste zoekresultaat Ik vind met behulp van de zoekterm 'filter Ja/Nee Inhoudsquery webonderdeel" flat out verkeerd is, dus ik dacht dat zou ik dit omhoog daar gezet en zien als het de onjuiste resultaten in typische zoekresultaten vervangen kan.

Het is vrij gemakkelijk: Waar waarden = "1" en foutieve waarden niet gelijk "1" (mooie retro, eigenlijk).

In het bovenstaande voorbeeld, Ik heb gemaakt sitekolom soort Ja/Nee" (checkbox)" benoemde "PG mijlpaal". Ik toegevoegd aan een documentbibliotheek, een paar documenten geüpload, Stel de waarde voor een paar en getest.

<einde />

Bar Grafieken maken in SharePoint

Overzicht:

(UPDATE 12/04/07: Een andere interessante bron toegevoegd aan het einde te koppelen aan een andere blog dat dit via een zeer interessante webonderdeel adressen)

Deze blog entry wordt beschreven hoe u een staafdiagram in SharePoint. Dit werkt in zowel WSS en MOSS omgevingen zoals het hangt alleen af van het webonderdeel voor gegevensweergave.

De algemene aanpak is als volgt:

  1. Maken van een lijst of documentbibliotheek die de gegevens bevat die u wilt grafiek.
  2. Plaats de bijbehorende documentbibliotheek / aangepaste lijst naar een pagina en het omzetten in een webonderdeel voor gegevensweergave (DVWP).
  3. De DVWP de XSL voor het genereren van HTML-code als een grafiek toont wijzigen.

Bedrijfsscenario / Setup:

Ik heb een aangepaste lijst met de standaard titelkolom en één extra kolom, 'Status'. Deze modellen (zeer simplistisch) "vergunning voor kosten" scenario waar de titel het project en de Status van een waarde uit de lijst met vertegenwoordigt:

  • Voorgesteld
  • In proces
  • Vastgelopen

De doelstelling is het produceren van een interactieve horizontale staafgrafiek waarin deze statuscodes.

Ik heb de lijst gevuld en het ziet er als volgt:

afbeelding

Webonderdeel Gegevensweergave maken:

De DVWP door de aangepaste lijst toe te voegen aan een pagina maken (pagina van de site in mijn geval) en volg de instructies Hier (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Naast de DVWP eenvoudig te maken, We moeten ook het wisselbestand instelt zodat alle beschikbare rijen. Voor mij, Dit ziet er iets als dit:

afbeelding

Op dit punt, Ik sluiten altijd EPD en de browser. Ik open vervolgens opnieuw de pagina met behulp van de browser. Dit voorkomt het per ongeluk mucken het web deel lay-out op de pagina.

Het XSLT-bestand wijzigen:

Het is nu tijd om het XSLT-bestand wijzigen.

Ik altijd gebruikt u visual studio hiervoor. (Zie Hier voor een belangrijke opmerking over intellisense die u een hoop helpen zal).

Ik maak een leeg project vier nieuwe bestanden toevoegen (vervangen van de woorden "origineel" en "New" in voorkomend geval):

  • Original.XSLT
  • New.XSLT
  • Originele Params.xml
  • Nieuwe Params.xml

In mijn geval, het ziet er als volgt:

afbeelding

Het webonderdeel wijzigen en kopiëren de params en XSL naar de origineel"" versie in Visual Studio.

Het doel hier is om te veroorzaken de XSL te transformeren de resultaten die we terug uit de query DVWP in HTML maakt als een grafiek.

Te dien einde, het helpt om eerst overwegen hoe de HTML-code eruit moet komen te zien voordat we krijgen verward door de waanzin die bekend als "XSL staat". (Om duidelijk te zijn, het volgende is gewoon een voorbeeld; niet deze typen of kopiëren/plakken in visuele studio. Ik verstrek een volledige slag vertrekpunt voor die verderop in de write-up). De volgende steekproef grafiek wordt weergegeven volgens de HTML-code direct na:

Proef Bar Graph

Overeenkomstige HTML:

<HTML>
<lichaam>
<Center>
<tabel breedte = 80%>
<tr><TD><Center>Horizontale staafgrafiek</TD></tr>
<tr>
<TD align = "center">
<tabelrand = "1" breedte = 80%>
<tr>
<TD breedte = 10%>Open</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 50%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
<tr>
<TD breedte = 10%>Gesloten</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 25%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
<tr>
<TD breedte = 10%>Vastgelopen</TD>
<TD><tabel-cellpadding ="0" Cellspacing ="0" border = 0 breedte = 25%><TR bgcolor = rood><TD>&nbsp;</TD></tr></tabel></TD>
</tr>
</tabel>
</TD>
</tr>
</tabel>
</lichaam>
</HTML>

Ik gebruikte een dode eenvoudig benadering van mijn bars maken door het instellen van de achtergrondkleur van een rij 'Red'.

De take-away hier is dit: In het einde, alles wat we doen is het creëren van HTML met rijen en kolommen.

Sjabloon XSLT:

Ik heb de XSLT die een horizontale staafgrafiek genereert gekopieerd. Het is vrij goed commentaar dus ik zal niet veel hier met uitzondering van deze nota's toevoegen:

  • Ik begon met de standaard XSL die SharePoint Designer gaf me toen ik voor het eerst de DVWP gemaakt.
  • Ik was in staat om te bezuinigen dit uit de SPD 657 lijnen te 166 lijnen.
  • Ik prutsen niet met de parameters XML-bestand (die losstaat van de XSL en je weet wat ik bedoel als je naar de DVWP zelf wijzigen; Er zijn twee bestanden die u kunt wijzigen). Echter, om te vereenvoudigen het, Ik bijna alle van hen verwijderen uit de XSL. Dit betekent dat als je wilt om gebruik van deze parameters, u hoeft hun variabele definities opnieuw toevoegen aan de XSL. Dat zal gemakkelijk zijn aangezien zul je de oorspronkelijke XSL-variabele definities in uw visual studio-project.
  • U moet zitten kundig voor kopieer en plak deze direct in uw visual studio-project. Vervolgens, Verwijder mijn oproepen en plaats uw eigen oproepen naar "ShowBar".
  • De drill down werken door het creëren van een <een href> Als dit: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Deze techniek kan worden van waarde in andere contexten. Op het eerste, Ik dacht dat ik zou moeten voldoen aan een meer complexe indeling: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, maar in mijn omgeving dat is niet nodig. De lijst-URL wordt doorgegeven aan ons door SharePoint dus dit is vrij eenvoudig om te generaliseren.

Hier is het:

<XSL:Stylesheet Versie="1.0" uitsluiten-resultaat-voorvoegsels="RS z o s ddwrt dt msxsl" 
xmlns:msxsl="urn:schemas-microsoft-com:XSLT" xmlns:XSL="http://www.w3.org/1999/XSL/Transform"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.Microsoft.com/webParts/v2/DataView/Designer"
xmlns:ASP="http://schemas.Microsoft.com/ASPNET/20" xmlns:DDWRT="http://schemas.Microsoft.com/webParts/v2/DataView/runtime"
xmlns:o="urn:schemas-microsoft-com:Office" xmlns:s="uuid:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns:DT="uuid:C2F41010-65B3-11 d 1-A29F-00AA00C14882" xmlns:RS="urn:schemas-microsoft-com:rijenset" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="urn:FrontPage:interne"
> <XSL:uitvoer methode="HTML" streepje="niet" /> <XSL:decimaal-formaat NaN="" /> <XSL:param naam="ListUrlDir"></XSL:param> <!-- Mij nood zulks ter ondersteuning van een drill-down. --> <XSL:sjabloon wedstrijd="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:ASP="http://schemas.Microsoft.com/ASPNET/20"
> <XSL:variabele naam="dvt_StyleName">Tabel</XSL:variabele> <XSL:variabele naam="Rijen" Selecteer="/dsQueryResponse/rijen/rij" /> <XSL:variabele naam="dvt_RowCount" Selecteer="Graaf($Rijen)" /> <XSL:variabele naam="IsEmpty" Selecteer="$dvt_RowCount = 0" /> <XSL:variabele naam="dvt_IsEmpty" Selecteer="$dvt_RowCount = 0" /> <XSL:Kies> <XSL:Wanneer test="$dvt_IsEmpty"> Er zijn geen gegevens aan grafiek!<BR/> </XSL:Wanneer> <XSL:anders> <!-- De interessante dingen begint hier. We moeten definiëren een paar variabelen voor elke rij in de grafiek: totale aantal items en percent van totaal. --> <XSL:variabele naam="totalProposed" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Voorgesteld'])" /> <XSL:variabele naam="percentProposed" Selecteer="$totalProposed div $dvt_RowCount" /> <XSL:variabele naam="totalInProcess" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'In proces'])" /> <XSL:variabele naam="percentInProcess" Selecteer="$totalInProcess div $dvt_RowCount" /> <XSL:variabele naam="totalStalled" Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Geblokkeerd'])" /> <XSL:variabele naam="percentStalled" Selecteer="$totalStalled div $dvt_RowCount" /> <!-- We definiëren hier onze HTML-tabel. Ik ben lenen van sommige standaard SharePoint stijlen hier om er consistente. Ik denk dat het zal eer wijzigingen in het globale css bestand evenals thema overschrijft. --> <tabel Breedte="100%" Cellspacing="0" cellpadding="2" stijl="grens-recht: 1 Solid # C0C0C0; border-bottom: 1 Solid # C0C0C0; Border-links-style: solide; grens-links-breedte: 1; border-top-style: solide; border-top-width: 1;"> <tr> <TD uitlijnen="Center"> <tabel grens="1" Breedte="100%"> <!-- Voor elke status die we willen grafiek, Wij noemen het "ShowBar" sjabloon. We passeren het: 1. Een label voor de rij. Dit wordt omgezet in een hyperlink. 2. Het percentage (variabele van boven). 3. Het veld werkelijke naam van de code van de onderliggende lijst. Dit hoeft niet overeenkomt met het label weergeven. 4. Veldwaarde afgestemd voor #3. 5. Totale items van deze statuscode (niet het eindtotaal van alle statuscodes). Het straalt een <tr></tr> en de horizontale staafgrafiek lijn. We noemen deze sjabloon voor elke statuscode die we wilt weergeven. --> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'Voorgesteld'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentProposed"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'Voorgesteld'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalProposed"></XSL:met-param> </XSL:oproep-sjabloon> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'Geblokkeerd'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentStalled"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'Geblokkeerd'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalStalled"></XSL:met-param> </XSL:oproep-sjabloon> <XSL:oproep-sjabloon naam="ShowBar"> <XSL:met-param naam="BarDisplayLabel" Selecteer="'In proces'"/> <XSL:met-param naam="BarPercent" Selecteer="$percentInProcess"/> <XSL:met-param naam="QueryFilterFieldName" Selecteer="'Status'"/> <XSL:met-param naam="QueryFilterFieldValue" Selecteer="'In proces'"/> <XSL:met-param naam="TotalItems" Selecteer="$totalInProcess"></XSL:met-param> </XSL:oproep-sjabloon> </tabel> </TD> </tr> </tabel> </XSL:anders> </XSL:Kies> </XSL:sjabloon> <!-- Deze sjabloon doet het werk van afzonderlijke regels in het staafdiagram weergeven. U zal waarschijnlijk niet de meeste van uw tweaken hier. --> <XSL:sjabloon naam="ShowBar"> <XSL:param naam="BarDisplayLabel" /> <!-- Label weergeven --> <XSL:param naam="BarPercent"/> <!-- Percentage van totaal. --> <XSL:param naam="QueryFilterFieldName"/> <!-- Gebruikt om de query naar & filter --> <XSL:param naam="QueryFilterFieldValue"/> <!-- Gebruikt om de query naar & filter --> <XSL:param naam="TotalItems" /> <!-- totale telling van dit barlabel --> <tr> <!-- De bar label zelf. --> <TD klasse="MS-formbody" Breedte="30%"> <!-- Deze volgende reeks verklaringen bouwt een queryreeks dat ons toelaat om boor neer aan een gefilterde weergave van de onderliggende gegevens. We maken gebruik van een paar dingen hier: 1. We kunt FilterField1 en FilterValue1 doorgeven aan een lijst te filteren op een kolom. 2. SharePoint is een belangrijke parameter doorgeven aan ons, ListUrlDir die naar de onderliggende lijst waartegen deze DVWP verwijst "draait". Is niet XSL-leuk? --> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"> <![CDATA[<een href ="]]></XSL:tekst> <XSL:waarde-van Selecteer="$ListUrlDir"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[?FilterField1 =]]></XSL:tekst> <XSL:waarde-van Selecteer="$QueryFilterFieldName"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[&FilterValue1 =]]></XSL:tekst> <XSL:waarde-van Selecteer="$QueryFilterFieldValue"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[">]]></XSL:tekst> <XSL:waarde-van Selecteer="$BarDisplayLabel"/> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[</een>]]></XSL:tekst> <!-- De volgende bits toont enkele getallen in de notatie: "(totaal / % totaal)" --> (<XSL:waarde-van Selecteer="$TotalItems"/> / <!-- Dit creëert een mooie percentage label voor ons. Bedankt, Microsoft! --> <XSL:oproep-sjabloon naam="percentformat"> <XSL:met-param naam="procent" Selecteer="$BarPercent"/> </XSL:oproep-sjabloon>) </TD> <!-- Tot slot, uitstoten een <TD> tag voor de bar zelf.--> <TD> <tabel cellpadding="0" Cellspacing="0" grens="0" Breedte="{ronde($BarPercent * 100)+1}%"> <tr bgcolor="rood"> <XSL:tekst uitschakelen-uitvoer-ontsnappen="Ja"><![CDATA[&nbsp;]]></XSL:tekst> </tr> </tabel> </TD> </tr> </XSL:sjabloon> <!-- Dit is rechtstreeks overgenomen uit sommige XSL ik in een sjabloon MS gevonden. --> <XSL:sjabloon naam="percentformat"> <XSL:param naam="procent"/> <XSL:Kies> <XSL:Wanneer test="getalnotatie($procent, '#,##0%;-#,##0%')= 'NaN'">0%</XSL:Wanneer> <XSL:anders> <XSL:waarde-van Selecteer="getalnotatie($procent, '#,##0%;-#,##0%')" /> </XSL:anders> </XSL:Kies> </XSL:sjabloon> </XSL:Stylesheet>

De resultaten:

De XSL van bovenaf genereert deze grafiek:

afbeelding

Boor neer aan de onderliggende gegevens door te klikken op de statuscode:

afbeelding

Gedachten sluiten:

Dit kan worden gegeneraliseerd?

Ik hou van deze grafische concept, maar ik haat het feit dat ik moet gaan en doen zo veel hand-codering. Ik heb een beetje denken aan of het kan worden gegeneraliseerd gegeven en ik ben optimistisch, maar ik ben ook een beetje bang dat er mogelijk een bakstenen muur ergens langs het pad dat zal niet een werk-around bieden. Als iedereen heeft een aantal goede ideeën op dit, Maak een notitie in de commentaren of e-mail me.

Verticale grafieken:

Dit is een horizontale staafgrafiek. Het is zeker mogelijk een verticale grafiek maken. We moeten alleen de HTML-code wijzigen. Ik zou start op de dezelfde manier: Maak een HTML-weergave van een verticale staafdiagram en vervolgens erachter te komen hoe om die via XSL. Als iemand geïnteresseerd in die is, Ik kan worden overgehaald om uitproberen en werken uit the kinks. Als iemand heeft dat al gedaan, laat het me weten en ik leg graag een link naar uw blog 🙂

Ik denk dat dat de uitdaging met een verticale grafiek is dat de labels voor de grafiek moeilijker zijn te beheren, maar zeker niet onmogelijk.

Veld naam Gotcha's:

Er zijn ten minste twee dingen om uit te kijken voor met uw veldnamen.

Eerste, de naam van een veld met een spatie moet worden ontsnapte in de XSL. Waarschijnlijk zal dit een probleem hier:

        <XSL:variabele naam="totalProposed" 
Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@Status) = 'Voorgesteld'])" />

Als uw Status"" kolom heet eigenlijk "Status Code" dan moet u verwijzen naar het als "Status_x0020_Code":

   <XSL:variabele naam="totalProposed" 
Selecteer="Graaf(/dsQueryResponse/rijen/rij[normaliseren-ruimte(@ Status_x0020_Code) = 'Voorgesteld'])" />

Tweede, en ik ben een beetje vaag op dit, maar je moet ook op de waarschuwing voor de veldnaam wordt dan gewijzigd. Als u de naam van het veld "Status Code" en later op, Hernoem het naar "AFE Status", de interne naam"" verandert niet. De interne naam zal nog steeds worden "Status Code" en moet worden verwezen als "Status_x0020_Code". De "andere middelen" links kan helpen opsporen en corrigeren van dit soort probleem.

Over die kleur:

Ik pakte "rood" omdat het is prettig voor mij op dit moment. Het zou niet een big deal voor het weergeven van verschillende kleuren zodat er meer dan slechts een visuele beschrijving van een getal, maar ook om een nuttige KPI. Bijvoorbeeld, Als het percentage van de "vastgelopen" AFE van is > 10% dan Toon het rode, anders laten zien in het zwart. Gebruik <XSL:Kies> om dit te bereiken.

Andere bronnen:

Gelukkig transformeren!

<einde />

Abonneren op mijn blog!

SharePoint biedt geen “Wie heeft toegang” Rapporten

UPDATE 01/28/08: Dit codeplex project behandelt deze kwestie: http://www.codeplex.com/AccessChecker. Ik heb het niet gebruikt, maar het ziet er veelbelovend uit als dit is een kwestie die u adres in uw omgeving moet.

UPDATE 11/13/08: Joel Oleson schreef een zeer goede post op de grotere veiligheid bestuurlijke kwestie hier: http://www.sharepointjoel.com/ Lists/Posts/Post.aspx?Lijst = 0cd1a63d % 2D183c % 2D4fc2 %2 D 8320% 2Dba5369008acb&ID = 113. Het verbindt met een aantal andere nuttige middelen.

Forumgebruikers en clients vraag vaak een vraag langs deze lijnen: "Hoe genereer ik een lijst van alle gebruikers met toegang tot een site" of "Hoe kan ik automatisch waarschuwen alle gebruikers met toegang tot de lijst over wijzigingen die in de lijst?"

Er is geen out van de box oplossing voor dit. Als je erover nadenkt voor een moment, het is niet moeilijk te begrijpen waarom.

SharePoint veiligheid is zeer flexibel. Er zijn ten minste vier grote categorieën van gebruikers:

  • Anonieme gebruikers.
  • SharePoint gebruikers en groepen.
  • Active Directory: gebruikers.
  • Formulieren gebaseerde verificatie (FBA) gebruikers.

De flexibiliteit betekent dat vanuit een veiligheidsperspectief, een bepaalde SharePoint-site zullen drastisch afwijken van een andere. Oog op het genereren van een access-rapport lijst, Men moet nagaan hoe de site is beveiligd, query meerdere andere gebruiker profiel archieven en vervolgens presenteren op een nuttige wijze. Dat is een moeilijk probleem op te lossen generieke.

Hoe organisaties omgaan met dit? Ik zou graag van u horen in commentaren of E-mail.

</einde>

MOSS vertelt Me mijn kolomnaam is voorbehouden of In gebruik … Maar het is niet

UPDATE 12/04/07: Zie Deze Microsoft KB (http://support.microsoft.com/kb/923589) voor verwante informatie.

Eigenlijk, het blijkt dat het is, maar tricksy MOSS moest maken het moeilijk.

Mijn klant doet sommige ontwikkelingswerk op zijn site MOSS in het weekend. Het is een beetje een allegaartje dat wat hij eigenlijk deed, maar het eindresultaat is dit:

  • Hij probeert toe te voegen een sitekolom genaamd "hoeveelheid" en MOSS antwoorden: "De naam van de kolom die u hebt ingevoerd is al in gebruik of gereserveerde. Kies een andere naam."
  • Hij probeert toe te voegen aan een andere omgeving en welk werken. Daarom, "Hoeveelheid" is niet een gereserveerde naam.
  • Hij probeert te vinden van een bestaande sitekolom met de naam "hoeveelheid" in die siteverzameling. Hij kan het niet vinden.

Ik heb een aantal onderzoek, en zelfs sommige codering, geboend filosofische en ten slotte vond dat een kolom met de naam hoeveelheid deed, Eigenlijk, bestaan. Het was in de "_Verborgen" groep. Vandaar, We konden het niet vinden via de gebruikersinterface van SharePoint.

Hoe kreeg het er? Ik weet het niet, maar ik heb een theorie (of als mijn vrouw zou noemen het, "blah blah blah"). Ergens langs de lijn, een Fabulous veertig sjabloon werd toegevoegd en waarschijnlijk geactiveerd op een site in de siteverzameling. Het was dan gedeactiveerd (of de site verwijderd). De sitekolom, echter, maar in de '_Verborgen bleef" groep. Als iemand beter weet, laat het me weten via E-mail of post in de commentaren.

SharePoint vertelde de waarheid. Het is nauwelijks de moeite waard erop te wijzen dat die boodschap niet zo nuttig is als het zou kunnen zijn. Het zou leuk om te zien dat bericht vork in twee verschillende boodschappen in de toekomst: 1) Zeggen dat de naam van de kolom is gereserveerd of het is niet. 2) Als het niet gereserveerd, Toon de site, of op zijn minst de groep, waar de kolomnaam wordt al gebruikt.

</einde>

Huidige OM gegevens Via een aangepaste lijst (of, Nog een andere OM gegevens Displayor [Als YACC, maar verschillende])

Vandaag, Ik heb een handvol uur opsporen van de oorzaak achter het bericht "de naam van de kolom die u hebt ingevoerd is al in gebruik of voorbehouden. Kies een andere naam."

De kolom in kwestie kan worden gemaakt, verwijderd en opnieuw gemaakt in een andere omgeving, dus ik wist dat het niet een gereserveerde naam. Echter, Gewoon kon ik niet vinden de kolom overal via de standaard SharePoint-gebruikersinterface op elke site in de siteverzameling.

Ik gepost op MSDN forums hier en de ontembare Andrew Woodward wees me in de richting van het onderliggende object modelgegevens.

Ik ging naar codeplex om te zoeken naar enkele tools die me helpen te zou peer in de onderliggende OM gegevens en help me de moeite zoeken.

Ik probeerde verschillende tools en zij waren erg cool en interessant maar in het einde, de UI was goed genoeg voor mijn doel niet. Ik ben niet kritiseren van hen geenszins, maar duidelijk de hulpprogramma-makers niet heb mijn probleem in gedachten wanneer ze hun UI gemaakt :). De meeste mensen lijken te investeren een behoorlijke hoeveelheid tijd en inspanning in het creëren van werkstation / clienttoepassingen die bieden een boom uitzicht, Klik en ga zo maar door met de rechtermuisknop contextmenu 's. Deze zijn leuk en alle, maar wel een heleboel werk te maken van een top-of-the-line gebruikerservaring dat is ook zeer flexibel.

Ik echt nodig een oplossing voor dit probleem. Het kwam aan me dat als ik alle sitekolommen in de siteverzameling in een aangepaste lijst krijgen kon, Ik kan filteren, sorteren en weergaven maken die zou mij helpen vinden deze zogenaamd bestaande kolom (die het deed, BTW). Ik ging door en deed dat en een uur of twee later, had mijn sitekolommen geladen in een aangepaste lijst met grouping, sorteren enzovoort. Mij stichten mijn bescheid vijf minuten later.

Als en wanneer ik met succes over de hele wereld nemen, Ik denk dat ik zal decreet dat alle aanbieders van de hulpmiddelen van de SharePoint serieus moeten overwegen verhardingen hun modelgegevens object in een aangepaste lijst. Op die manier, Ik heb de macht Als u wilt zoeken een wil manier waarop ik (beperkt, Natuurlijk, door standaard sharepoint-functies).

SharePoint Designer Workflow aangepaste actie — Opmerking over <FieldBind Ontwerper Type =”StringBuilder” … />

Slechts een korte opmerking dat er een heel belangrijk verschil tussen deze twee definities is:

<FieldBind veld "InParam1 =" DesignerType = "StringBuilder" ID = "2" Tekst = "Input parameter # 1" />

versus:

<FieldBind veld "InParam1 =" ID = "2" Tekst = "Input parameter # 1" />

De eerste shows zoals dit in het EPD:

afbeelding

terwijl de laatste shows zoals dit:

afbeelding

Ik ben niet zeker hoe nuttig deze screen shots zijn maar ik zet in de inspanning om ze te maken, dus je moet om ze te bekijken 🙂

De observatie is dit: StringBuilder kunt u een tekenreeks bouwen (Uiteraard) door het mengen samen letterlijke tekenreeksen en workflowgegevens (via de "Add Lookup" knop in de linkerbenedenhoek). Wanneer u de knop Opzoeken toevoegen gebruiken, het voegt een token in de vorm"[%token %]". Wanneer SharePoint roept uw aangepaste actie, (C#-code in mijn geval), SharePoint passeert het token zelf, niet de waarde van het token. Als u het standaardtype ontwerper (het tweede type), SharePoint breidt het token en werkelijke waarde van het token worden doorgegeven aan uw actie.

StringBuilder = slecht, standaard ontwerper type = goed.

Natuurlijk, dat is niet wat ik werkelijk bedoel. Gewoon niet proberen en een parameter doorgeven aan uw aangepaste actie wanneer de ontwerper typt = StringBuilder. De ontwerper standaardtype en de keten een StringBuilder ernaar vooraan gebruiken als u nodig hebt om te bouwen van complexe tekenreeksen in uw workflow (dat is overigens precies wat men doet voor het maken van een dynamische onderwerp voor de actie e-mail, maar dat is een onderwerp voor een andere blog entry, Har-har).

<einde />

Voortijdige Workflow activeren — Een niet-medische oplossing

UPDATE: Zie dit MSDN-discussie, vooral de laatste post: http://forums.microsoft.com/MSDN/showpost.aspx?postid=2631057&siteid=1. Het beschrijft een aandoening die kan kort dit hele ding circuit. In het kort, het kan zijn zo eenvoudig als het maken van ten minste één van de velden verplicht.

Ik heb een documentbibliotheek die acht inhoudstypen ondersteunt.

Ik heb een SharePoint Designer workflow die wil om te berekenen en een "herinneringsdatum toewijzen" door gewoon af te trekken 30 dagen van een andere kolom, "vervaldatum". Dit moet alleen gebeuren voor een van de typen inhoud, 'Insurance'. De business-doelstelling is het produceren van een KPI waarin twee soorten autoverzekeringsdocumenten: "zowat voor vervallen" en 'verlopen." (U kunt lees meer over dit soort KPI en meer substantiële drill-down Hier).

Ik hebt geconfigureerd de werkstroom gestart wanneer een nieuw item is gemaakt en wanneer een item wordt gewijzigd. Het idee is dat als er een verzekering document wordt geüpload, Wij berekenen een "waarschuwing datum" op basis van de vervaldatum. Een paar van weergaven werken in verband met een KPI-lijst Markeer deze voorwaarden wanneer gebruikers hun home page hit.

Deze strategie werkt niet wanneer ik een document uploaden.

Ik upload het document en ik ben voorgesteld met de invoerscherm van de meta-gegevens. Op dit punt, Ik ben al in de problemen. SharePoint reeds, voortijdig vanuit mijn perspectief, ontslagen van de werkstroom. Ik heb niet had een kans om te kiezen van het juiste type inhoud noch een vervaldatum toewijzen. Op hetzelfde moment, de werkstroom wordt niet geactiveerd wanneer ik klik op de verzendknop op dit moment. Er is sommige ingebouwde logica "is van mening dat" die dienen eerst maakt deel uit van de "maken" gebeurtenis. Dus … mijn workflow is gestart en wanneer het uitgevoerd, het werd aangenomen standaard meta gegevenswaarden.

De beste werk-around die ik ken is het invoegen van een "pauze tot" activiteit in de workflow. Ik heb de workflow onderbreken voor 1 minuut. Terwijl het wordt onderbroken, Ik selecteer het juiste type inhoud, de meta-gegevens invoeren en verzenden. De pauze is voltooid en de werkstroom verloopt zo nodig. (Merk op dat in mijn omgeving, timer workflowactiviteiten uit SPD werken niet uit de doos. Moet u wellicht het zelfde probleem. Zie Hier voor meer details).

Ik houd niet van "magische vertraging" werk-around. Wat gebeurt er als de gebruiker een document en de telefoon overgaat en de daaruit voortvloeiende gesprek uploadt outlasts de pauze? Ik kan de pauze langer maken, maar ik nog steeds niet leuk.

Ik schreef over dit op de MSDN forums hier: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2430725&SiteID=1