Categorie Archieven: SharePoint ontwikkeling

Eenvoudige uitleg: “De waarde valt niet binnen het verwachte bereik.”

UPDATE: Een anonieme poster liet grote commentaar over interne namen. Zorg ervoor dat om het te lezen.

Bij het werken met gebeurtenis ontvangers en andere code die verwijst naar de SharePoint-lijstitems via het objectmodel, Ik maken vaak fouten dat deze fout tijdens runtime te genereren:

Fout laden en event receiver Conchango.xyzzyEventReceiver uitgevoerd in xyzzy, Versie = 1.0.0.0, Cultuur = neutraal, PublicKeyToken = 0dc50a750396c3ac. Aanvullende informatie is hieronder. : De waarde valt niet binnen het verwachte bereik.

Ik denk dat dit is een vrij algemene fout die potentieel veel verschillende manieren wordt veroorzaakt. Echter, een simpele uitleg is dat ik een veld onjuist referencement ben. Als de naam van het veld "Vervaldatum", Ik moet verwijzen naar het als dit in een event receiver:

Eigenschappen.ListItem["Vervaldatum"]

Als ik verkeerd spelt of de verkeerde gebruiksvoorbeeld wanneer wordt verwezen naar het veld, SharePoint genereert de hierboven genoemde runtime-fout. Bijvoorbeeld, Dit is verkeerd:

Eigenschappen.ListItem["vervaldatum"]

</einde>

Abonneren op mijn blog.

Technorati Tags:

Snelle & Gemakkelijk: Een map maken en toewijzen van een inhoudstype (Of, Hebben uw KPI's en hen ook eten)

Om te werken rond een KPI-probleem Schreef ik over hier, Ik heb een aantal testen en ontdekte dat KPI's werk tegen mappen met metagegevens op dezelfde manier dat zij tegen documenten werken of lijstitems. Ik bleek het uit door het creëren van een nieuw inhoudstype gebaseerd op het inhoudstype van de map en vervolgens een paar velden toegevoegd. Ik sommige indicatoren gemaakt en bewezen bij mezelf dat KPI's werken zoals verwacht. Dit was welkom nieuws. Het is niet perfect, omdat de DrillDown u van krijgen is de KPI tegen de mappen niet precies wat je wilt. Dit is niet te veel een nadeel in mijn geval omdat 1) de eind-de gebruikers weet niet beter en 2) de drill-down gaat naar een map. Ze klikt u op de mapnaam en ze zijn op het item. Het is twee keer klikken in plaats van een, dat is niet het einde van de wereld.

Dit stroomde mooi met het werk dat ik deed. Ik ben het creëren van een map voor elk document dat wordt geüpload. Dit wordt gedaan via een gebeurtenis ontvanger. Als een resultaat, het is een fluitje van een cent te houden de bovenliggende map meta-gegevens in sync met de KPI-gedreven meta-gegevens uit het bestand zelf want het sanitair al in plaats is. Hierdoor kan ik mijn KPI's hebben en ze ook opeten

Ik wijzigde de ontvanger van de gebeurtenis om de map toevoegen en stel deze nieuwe map inhoudstype aan mijn aangepaste KPI-vriendelijke inhoudstype. Dit codefragment did naar de truc:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Documenten").Submappen;
  SPFolder addedFolder = srcFolders.Add(Eigenschappen.ListItem.ID.ToString());
  SPContentTypeId kpiCT = Nieuw SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Content Type ID"] = kpiCT;
  addedFolder.Item.Update();

Om de werkelijke inhoudstype-ID zoeken, Ik benaderd dat inhoudstype via site-instellingen en kopie/plak deze via de URL zoals:

afbeelding

</einde>

Abonneren op mijn blog!

Technorati Tags: ,

Snel en eenvoudig: De SPFolder van een SPListItem krijgen in een Event Receiver

Ik haat om het toe te, maar ik worstelde met deze alle dag. Mijn ontvanger gebeurtenis nood voor bijwerken van een veld van de bovenliggende map. Dit beetje laat zien hoe om het te doen:

privé VOID UpdateParentFolder(SPItemEventProperties eigenschappen)
{

SPFolder thisItemFolder = eigenschappen.ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ goedkeuringsstatus"] = "Goed nieuws, iedereen!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

In dit geval, Ik ben bezig met een documentbibliotheek en de eigenschappen zijn afkomstig uit een gebeurtenis ItemAdded.

De truc is dat u de SPFolder van het item rechtstreeks vanuit het item zelf niet kan krijgen (dwz. Eigenschappen.ListItem.Folder is leeg). In plaats daarvan, Ga naar het lijstitem gekoppelde bestand en het bestand map ophalen.

</einde>

Abonneren op mijn blog!

Technorati Tags:

Nog een ander Event Receiver Debug truc

Ik weet zeker dat ik ben niet de eerste persoon om te komen met dit. Echter, Ik heb niet gemerkt dat iedereen publiceren een truc als dit sinds ik begon veel aandacht aan de Gemeenschap afgelopen juli. Dus, Ik dacht dat ik post-it deze snelle en gemakkelijke debug tip.

Ik ben bezig met een gebeurtenis-ontvanger die begon te genereren deze fout in de 12 korf:

Fout laden en event receiver Conchango.xyzzyEventReceiver uitgevoerd in xyzzy, Versie = 1.0.0.0, Cultuur = neutraal, PublicKeyToken = blahbalhbalh. Aanvullende informatie is hieronder. : Object reference not set to een exemplaar van een object.

Ik wist niet waar ik deze bug had ingevoerd omdat ik had te veel dingen in een van mijn code/implementeren/testcycli gedaan.

Ik heb geprobeerd deze oplossing om mijn VOB in er met de hoop dat SharePoint 12 component zou tonen de stacktrace, maar geen geluk. Ik weet niet of het is mogelijk en als iemand doet, laat het me weten 🙂

Ik weet dat het is mogelijk om te schrijven van uw eigen berichten in het logboek om de 12 korf. Eerlijk gezegd, Ik wilde iets een beetje minder eng en sneller uit te voeren.

Het kwam bij me op dat ik op zijn minst sommige fundamentele trace-informatie krijgen kon door vangen en opnieuw gooien generieke uitzonderingen zoals dit:

  Probeer {
    UpdateEditionDate(eigenschappen);
  }
  vangst (Uitzondering e)
  {
    gooien Nieuw Uitzondering("Dispatcher, UpdateEditionDate(): Uitzondering: [" + e.ToString() + "].");
  }

Dit kwam in de 12 thusly component:

Fout laden en event receiver Conchango.xyzzyEventReceiver uitgevoerd in xyzzy, Versie = 1.0.0.0, Cultuur = neutraal, PublicKeyToken = blahblahblah. Aanvullende informatie is hieronder. : Dispatcher, UpdateEditionDate(): Uitzondering: [NullReferenceException.: Object reference not set to een exemplaar van een object. op Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties eigenschappen) op Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties eigenschappen, String eventDescription)].

Dat gaf me alle details die ik nodig had om de sporen van dit probleem en ik verwacht om het veel gaan vooruit te gebruiken.

</einde>

Abonneren op mijn blog!

Oplossing: SPQuery wordt niet gezocht in mappen

Deze afgelopen week was ik de uitvoering van een "ontwikkeling" oplossing voor een client die gebruikt BDC en SPQuery en liep naar moeite met behulp van SPQuery tegen een documentbibliotheek met mappen. Bottom line: "recursieve toewijzen" met het kenmerk van de weergave van de query.

Mijn scenario:

  • Op maandag, Ik een document uploaden en sommige metagegevens verstrekken.
  • De volgende week, Ik uploaden een nieuw document. Veel van dit nieuwe document meta-gegevens is gebaseerd op het document dat ik heb geüpload op maandag (wat wij noemen het "master document").
  • We hebben gemaakt de gevel van een web-dienst waarmee een BDC-vriendelijke interface aan de lijst, zodat gebruikers gemakkelijk dat maandag document via een titel zoeken vinden kunnen.
  • Een gegevenskolom BDC biedt een vriendelijke user-interface. (Dit is onderdeel van mijn poging om met behulp van BDC voor een vriendelijker opzoekkolom).

De uiteindelijke BDC gevel dienst maakt gebruik van een query als dit te doen de zoekactie:

 // U2U tool gebruikt om te helpen bij het genereren van deze CAML query.
      oQuery.Query =
        "<Waar>";

      Als (titleFilter.Length > 0)
        oQuery.Query  =
          "  <En>";

      oQuery.Query  =
        "    <En>" +
        "      <GEQ>" +
        "        <FieldRef naam =  "DocumentId" />" +
        "        <Type waarde =  "Tekst">" + minId + "</Waarde>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <FieldRef naam =  "DocumentId" />" +
        "        <Type waarde =  "Tekst">" + maxId + "</Waarde>" +
        "      </Leq>" +
        "    </En>";

      Als (titleFilter.Length > 0)
        oQuery.Query  =
          "    <Bevat>" +
          "      <FieldRef naam =  "Title" />" +
          "      <Type waarde =  "Tekst">" + titleFilter + "</Waarde>" +
          "    </Bevat>" +
          "  </En>";
      oQuery.Query  =
        "</Waar>";

Tijdens de eerste fase van ontwikkeling, Dit werkte prima. Echter, we ingevoerd mappen in de map sommige problemen op te lossen en plotseling, mijn BDC datumkiezer niet zou opleveren. Ik dit aan het feit dat de SPQuery geen resultaten nooit meer zou terugkeren bijgehouden. We mappen voornamelijk gebruikt voor het toestaan van meerdere bestanden met dezelfde naam te uploaden, maar met andere meta-gegevens. Wanneer het bestand is geüpload, We maken een map gebaseerd op de lijstitem-ID en verplaats het bestand er (Ik schreef over dat Hier; We hebben gemengde resultaten met deze benadering, maar over het geheel genomen, het werkt goed). De gebruiker niet schelen over mappen en in feite, niet echt begrijpen dat er mappen aanwezig zijn. We hebben alle weergaven op de bibliotheek voor het tonen van items ongeacht mappen geconfigureerd.

Ik raakte dit probleem twee keer als de technische uitvoering geëvolueerd en opgelost het anders elke keer. De eerste keer, Ik was niet met behulp van de operator CONTAINS gebruikt in de query. Zonder een operator CONTAINS, Ik was in staat om op te lossen het probleem door te geven van het uitzicht op de SPQuery bussenbouwer. In plaats van met behulp van de standaard constructor:

SPList oList = web.Lijsten["Documenten"];

SPQuery oQuery = Nieuw SPQuery();

Ik gebruikte in plaats daarvan een constructor die een weergave hebt opgegeven:

SPList oList = web.Lijsten["Documenten"];

SPQuery oQuery = Nieuw SPQuery(oList.Views["Alle documenten"]);

Dat het probleem opgelost en ik begon te krijgen van mijn resultaten.

Vervolgens voegde ik de operator CONTAINS in de mix en het brak opnieuw. Het blijkt dat de operator CONTAINS, zover ik kan vertellen, doet niet werken met de weergave op dezelfde manier als de een eenvoudiger GEQ / LEQ exploitanten. Ik heb wat zoeken en leerde dat van de query ViewAttributes moet worden ingesteld op "Recursieve", Als in:

oQuery.ViewAttributes = "Werkingssfeer = "Recursive"";

Dat het probleem opgelost voor bevat. Eigenlijk, dit ook mijn originele zoek probleem opgelost en als ik de recursieve had opgegeven kenmerk de eerste keer, Ik zou niet hebben lopen in de kwestie opnieuw.

Het feit dat een weergave gebaseerde SPQuery voor sommige exploitanten werkt (GEQ/LEQ) en andere niet (BEVAT), in combinatie met het feit dat KPI's lijken niet te werken op alle met map-bevattende document bibliotheken leidt mij te geloven dat SPQuery sommige uitvaardiging orthogonaliteit heeft.

Speciale dank:

  • De goede mensen van U2U en hun queryprogramma.
  • Michael Hoffer is geweldig "leren door te doen" blogbericht, opmerkingen en reacties.

</einde>

Abonneren op mijn blog!

MOSS KPI bug? Lijstindicator gebonden aan documentbibliotheek met mappen

UPDATE 02/29/08: Ik heb dit probleem opgelost door een map te maken en vervolgens een inhoudstype toe te wijzen aan de map die de meta-gegevens die ik nodig voor de KPI 's. Ik beschreven die een beetje meer in detail hier.

Wij hebben uitgevoerd een technische oplossing waar gebruikers documenten naar een documentbibliotheek uploaden. Een gebeurtenis ontvanger wordt een map gemaakt en wordt het bestand verplaatst naar die map (met behulp van een techniek vergelijkbaar met wat ik schreef over Hier). We hebben met succes genavigeerd rond de potentiële problemen veroorzaakt door gebeurtenis-ontvangers die ge-uploade bestanden hernoemen (vooral omdat gebruikers nooit hun document starten door te klikken op "New" maar in plaats daarvan de docs lokaal maken en ze vervolgens uploaden).

De meta-gegevens voor deze documenten bevat een Ja/geen sitekolom genaamd 'Urgent" en een ander sitekolom genaamd "Status". We moeten voldoen aan de eis van een bedrijf dat het percentage van "Urgent toont" documenten waarvan de status 'In behandeling'.

Dit is meestal eenvoudig te doen en ik beschreven iets heel graag dit op de SharePoint-Beagle met veel screenshots als je geïnteresseerd bent.

In een notendop, Ik heb de volgende:

  • Een weergave op de documentbibliotheek genaamd 'In behandeling' maken.
  • De weergave om te negeren mapstructuur configureren.
  • Een KPI-lijst maken.
  • Maken van een indicator in de lijst die naar de lib doc en die verwijst 'in behandeling" weergave.

Dit gewoon werkt niet. De KPI toont mijn doel (bijvoorbeeld. vijf dringende documenten) maar het werkelijke aantal dringende documenten als nul worden altijd weergegeven. Paradoxaal genoeg, Als u een drilldownbewerking tot in de details uitvoeren, het toont de vijf dringende documenten in de lijst. Ik heb een zeer eenvoudige scenario gemaakt met twee documenten, een in een map en een niet. Hier is de screenshot:

afbeelding

De bovenstaande screenshot toont duidelijk aan dat er zijn twee documenten in de weergave, maar de waarde"" is een. De CamlSchema"" met leeg document-Id is in de hoofdmap en de andere is in een map met de naam "84".

Het lijkt me dat alhoewel u een weergave opgeven, de KPI eren niet de "Toon alle items zonder mappen" instellen en in plaats daarvan, beperkt zich tot de root-map.

Als ik verkeerd ben, Gelieve stuur me een lijn of een reactie achterlaten.

</einde>

Abonneren op mijn blog!

Technorati Tags:

Oplossing voor probleem: “FileNotFoundException” Met mijn functie ontvanger.

Ik was bezig met een functie vorige week dat sommige ontvangers gebeurtenis aan een specifieke lijst exemplaar toevoegen zou. (Ik geblogd een beetje over die lijst ontvanger hier).

Via de opdrachtregel, Mij konden installeren de functie met geen fout (maar zie hieronder voor de verborgen fout). Toen ik probeerde om het implementeren van de functie op de site, MOSS klaagde over een "FileNotFoundException" fout. Deze blog entry beschrijft hoe ik heb het opgelost.

Dit is de fout die MOSS me in de webbrowser liet:

Functie ' b2cb42e3-4f0a-4380-sequence-1ef9cd526f20’ kan niet worden geïnstalleerd omdat het laden van gebeurtenis ontvanger montage "xyzzyFeatureReceiver_0" is mislukt: System.io.FileNotFoundException: Kan niet laden bestand of vergadering ' xyzzyFeatureReceiver_0’ of één van zijn gebiedsdelen. Het systeem kan het opgegeven bestand niet vinden.
Bestandsnaam: ' xyzzyFeatureReceiver_0’
op System.Reflection.Assembly.nLoad(AssemblyName bestandsnaam, Tekenreeks codeBase, Bewijs assemblySecurity, Vergadering locationHint, StackCrawlMark& stackMark, Booleaanse throwOnFileNotFound, Booleaanse forIntrospection)
op System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Bewijs assemblySecurity, StackCrawlMark& stackMark, Booleaanse forIntrospection)
op System.Reflection.Assembly.InternalLoad(String assemblyString, Bewijs assemblySecurity, StackCrawlMark& stackMark, Booleaanse forIntrospection)
op System.Reflection.Assembly.Load(String assemblyString)
op Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Vergadering bindende logboekregistratie is ingeschakeld OFF.
Vergadering bind mislukking logboekregistratie inschakelen, instellen van de registerwaarde [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Aan 1.
Opmerking: Er is enige prestatiessanctie die zijn gekoppeld aan de assemblage bind mislukking logboekregistratie.
Deze functie uitschakelen, de registerwaarde verwijderen [HKLMSoftwareMicrosoftFusion!EnableLog].

Oplossen van problemen met Windows SharePoint Services.

Ik weet hoe te het opzettelijk veroorzaken die fout: de vergadering niet installeren in de GAC. Maar, het was in de GAC. Ik installatie normaal van assembly's in de GAC door ze te slepen in de c:\windowsassembly map met behulp van windows verkenner. Ik heb nooit gevoeld 100% comfortabel dat te doen want ik heb altijd gedacht dat gacutil bestond voor een reden … dus ik dat probeerde. Het maakte geen verschil.

Ik zocht de Internets en vond dit bericht: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

De poster is er gebeurd met de dezelfde wortel bits van code gebruiken (uit het boek binnen WSS uit deze lijst) dus dat een hoopvol teken was. Echter, de suggestie van het verfraaien van de vergadering met een [vergadering: ] richtlijn zinvol niet voor mij. Ik probeerde het toch en ik had gelijk. Het maakte geen verschil.

Dan merkte ik dat mijn klassendefinitie niet openbaar was. Ik maakte het publiek en dat maakte geen verschil.

Volgende, Ik ging naar het probleem van de "vergadering bind mislukking log inschakelen" (naar aanleiding van de nuttige en nauwkeurige instructies geboden) en dit is waar de dingen begonnen om interessante. Dit logboek toont me dat de runtime overal op die server voor mijn vergadering zoeken is. Het lijkt zelfs zoeken naar het in mijn medicijnkastje. Maar … het zal niet zoeken naar het in de GAC.

Ik zette mijn winter jas en de Internets opnieuw gaan zoeken en vinden dat iemand dit probleem te heeft. De lange discussie in dat bericht peters uit in het niets en ik kan niet het vinden van een oplossing.

Ik verplaatst mijn vergadering naar een van de plaatsen die het logboek beweert het op zoek en ik een beetje meer vooruitgang. Ik ben beloond met een nieuwe fout in de browser wanneer ik probeer om de functie te activeren:

Functie ontvanger object het maken van vergadering "xyzzyFeatureReceiver_0" is mislukt, type "Conchango.xyzzyFeatureReceiver" voor de functie b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Waarde kan niet null.
Parameternaam: type
op System.Activator.CreateInstance(Type type, Boolean nonPublic)
op System.Activator.CreateInstance(Type type)
op Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Oplossen van problemen met Windows SharePoint Services.

Tijd voor een laatste reis naar de Internets!

Deze keer ik erachter, voorspelbaar genoeg, dat MOSS deze fout problemen omdat de assemblage zich niet in de GAC.

Ik wil te krijgen iets positief uit dit en probeer te voelen een beetje trots op dat ik heb gemaakt de Vluchteling van assemblages MSIL, maar het werkt niet. Ik ben gewoon geïrriteerd. Ik vind mezelf mompelen "kip of het ei" onder mijn adem.

Tot slot besluit ik om punt. Ik maak een geheel nieuw project en kopieer/plak de code van de incredible-cloaked-from-the-GAC-assembly niet-werkende project over aan dit nieuwe project. (Ik zoek een build vlag met de naam iets als "verbergen van vergadering bindend als geïnstalleerd in de GAC" maar kan niet vinden).

Ik installeer de functie en het activeren en … het werkt! Dus, na al dat, Ik moest eigenlijk ' opnieuw opstarten’ mijn project. Dit is een andere reden waarom ik computers haat.

Ik leerde iets nuttigs hieruit. Ik had het installeren van functies met behulp van de opdrachtregel stsadm hele dag lang en met behulp van de "-kracht" optie uit gewoonte. Voor sommige reden, Ik heb geen gebruik de - force optie toen ik het nieuwe project installeerde. Deze keer, Ik deed eigenlijk, echt vergeten vergadering van dit nieuwe project kopiëren naar de GAC. Als een resultaat, Ik kreeg die "-FielNotFoundException" fout. Deze keer, Ik heb het uit stsadm, niet toen ik probeerde om de functie via de webbrowser te activeren. Dus, -kracht speelt eigenlijk twee rollen. Hiermee kunt u een bestaande functie opnieuw te installeren. Ook kunt u een buggy voorziening die door het onderdrukken van de fout werkt niet tijdens runtime te installeren. Het zegt waarschijnlijk zo veel in de help van ergens, maar ik merkte nooit het.

</einde>

Snelle & Gemakkelijk: Naam van geüploade bestand met behulp van SharePoint-objectmodel Via een Event Receiver

UPDATE: Dit werkt maar er zijn belangrijke beperkingen die worden beschreven in de commentaren. Dit kan nog steeds nuttig in sommige doen zijn.

UPDATE 2: In mijn huidige project, gebruikers uploaden altijd documenten. Als een resultaat, Ik lopen niet in een probleem waar MS Word wordt uitgevoerd en denkt dat het bestand werd gewijzigd op het. Ik heb lopen in een probleem, "het bestand is bewerkt door iemand anders" en dit opgelost via een eenvoudige semafoor type vlag. Gebruikers moeten een meta data-veld wijzigen van de standaardwaarde naar iets anders. De itemupdated() ontvanger zoekt naar een geldige waarde er voordat u eigenlijk de naam wijzigen en sindsdien, Ik heb niet had ieder problematiek. Jouw snelheid kan variëren.

Ik heb een vereiste van de client de naam van de bestanden naar een bepaalde documentbibliotheek om te voldoen aan een bepaalde naamgevingsconventie wijzigen. De API voorziet niet in een "hernoemen()" methode. In plaats daarvan, We gebruiken "MoveTo(…)". Hier is een minimale beetje van code om dit te bereiken:

 openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen)
        {
            SPFile f = eigenschappen.ListItem.File;

            f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.update();

        }

De alleen lastig bit is de "Eigenschappen. ListItem.ParentList.RootFolder.Url". De VerplaatsenNaar() methode vereist een URL. Die puree tekenreeks punten mij naar de root-map van mijn huidige documentbibliotheek. Dit kan ik om te voorkomen dat een harde codering in mijn gebeurtenis ontvanger.

Dit is een meer nuttige versie die het zelfde ding doet, maar de naam van het bestand wordt toegewezen aan "Titel":

 openbare overschrijven VOID ItemToegevoegd (ItemAdded)(SPItemEventProperties eigenschappen)
        {
            DisableEventFiring();

            // De titel van dit item toewijzen aan de naam van het bestand zelf.
 // OPMERKING: Deze toewijzing moet plaatsvinden voordat we het bestand zelf wijzigen.
 // Update aanroepen() lijkt op de SPFile om de eigenschappen in ongeldig te maken
 // sommige zin.  Updates voor "titel" totdat dat wijzigen is mislukt (en update() oproep)
 // voor de verandering werden verplaatst naar de bestandsnaam.
            Eigenschappen.ListItem["Titel"] = Eigenschappen.ListItem.File.Name;

            Eigenschappen.ListItem.Update();

            SPFile f = eigenschappen.ListItem.File;

            // Krijgen de extensie van het bestand.  Wij moeten dat later.
 tekenreeks spfileExt = Nieuw FileInfo(f.name).Extensie;

            // Hernoem het bestand naar het item in de lijst-ID en de extensie gebruiken om te houden
 // dat deel van het intact.
            f.moveTo(Eigenschappen.ListItem.ParentList.RootFolder.Url +
                "/" + Eigenschappen.ListItem["ID"] + spfileExt);

            // Plegen de verhuizing.
            f.update();

            EnableEventFiring();
        }

Quick Tip: Webonderdeel Inhoudsquery, Waarde van de kolom opzoeken en XSL

Ik heb de kolomnaam van een in een inhoudstype genaamd "Real Estate locatie".

Die kolom is van het type "opzoeken".

Ik heb bewerkt <CommonViewFields> en ItemStyle.xsl de kolom wilt weergeven.

Een eenvoudige <XSL:Selecteer waarde-van =…> retourneert terug een interne waarde die de ordinale positiegegevens bevat, zoals:

1;#Miami

Als u de waarde van de mens-vriendelijke, gebruik xsl subtekenreeks-na, zoals:

<XSL:(@ Real_x005F_x0020_Estate_x005F_x0020_Location, '#') ">< / xsl:waarde-van >(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:waarde-van>

Deze techniek gebruiken wanneer u met opzoekwaarden in XSL-transformaties werkt en moet ertoe de mens-vriendelijke waarde.

<einde />

Technorati Tags: , ,

Snel en eenvoudig: Interne kolomnaam van de sitekolom van een bepalen

UPDATE: Jeremy Thake heeft geblogd over dit en sommige opgemaakt code voor een consoletoepassing dat toont interne namen.

Ik probeerde om een webonderdeel Inhoudsquery een einddatum van een taak weer en omdat het scherm label is "Vervaldatum", Ik veronderstelde dat de kolomnaam te gebruiken <CommonViewFields> is "Due_x0020_Date".

Verkeerde!

De echte kolomnaam was in dit geval "DueDate".

Hoe vond ik het? Ik herlezen Heather Solomon's blog entry over het wijzigen van CQWP om te laten zien van extra kolommen met gegevens. Ze beschrijft dit proces bij stap #13. Vertrouwt op het. Het is juist. Ten minste, het was voor mij juiste. Ik heb niet vertrouwt op het eerste voor een andere kolom met een veel langere naam.

Ik zeg "Trust het" want ik niet vertrouwt heb en waarschijnlijk verspild in de buurt van twee uur stoten mijn hoofd tegen een muur. Nadat ik de "DueDate opgelost" naam, Ik wilde toevoegen aan een ander veld <CommonViewFields>. Met behulp van de Solomon-techniek, Ik kreeg een kolomnaam als "XYZ_x0020_Project_x0020_Due_x00".

Ik dacht bij mezelf, dat is duidelijk een afgekapte naam. Ging ik vooruit en un-afgekapte met geen succes. Ik ten slotte de schijnbaar afgekapte naam gebruikt en het werkte.

Uiteinde van de bonus: Toen ik bezig was met de CQWP, Als ik een slechte interne naam aan toegevoegd <CommonViewFields>, de CQWP zou vertellen me dat de query had heeft geen resultaten opgeleverd. Maar, Als ik een gegevenstype aan het veldnaam toegevoegd, het zou een resultaat te retourneren. Toevoegen van de gegevens type eigenlijk gemaskeerd een probleem aangezien ik was referencement een onbestaande veld. Ik zou het toevoegen, maar toen ik probeerde om de waarde weer te geven, Ik zou altijd krijgen een leeg.

Dit deed de fout niet maskeren:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Dit het maskeren van de fout:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</einde>