Categorie Archieven: SharePoint ontwikkeling

Bamboe kalender interactie met SharePoint veroorzaakt "een onverwachte fout opgetreden"

Vandaag, Ik heb gewerkt in een omgeving die een bamboe kalenderwebonderdeel voor sommige verbeterde samenwerking gebruikt. Dit een standaard medium/kleine boerderij met twee taakverdeling WFEs, een "application server" voor het indexeren en InfoPath en een geclusterde SQL terug einde.

De client geïnstalleerd sommige ramp herstel software op een van de WFEs en dat resulteerde in een gebroken WFE voor een specifieke site in de siteverzameling. Wanneer taakverdeling wees op de getroffen WFE en die site, gebruikers zag een grotendeels leeg wit scherm met de zin 'een onverwachte fout opgetreden'. Geen andere info toonde, uitsluitend die zin.

Ze vroegen me om naar te kijken. Ik het probleem eenvoudig gereproduceerd en vervolgens voegde een ?inhoud = 1 toe aan het einde van de URL. Dit is hoe ik geleerd dat ze waren met behulp van het webonderdeel bamboe. Ik ging terug naar de pagina en nu, plotseling, het liet me een mooi ordelijke foutbericht:

image

Ik weet niet wat er gaande was of wat ik deed om de gecontroleerde foutbericht op weergave van andere dan toe te voegen de ?inhoud = 1 bit van de queryreeks.

Dit is waarschijnlijk een zeer zeldzame rand geval maar als u dat bericht, "Een onverwachte fout opgetreden" ga je gang en toevoegen ?inhoud = 1 toe aan de query-tekenreeks en zie waar dat leidt.

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Technorati Tags: ,

Met behulp van de Reflector op Microsoft.SharePoint.dll

Redgate .NET-reflector Michael Blumenthal heeft opgemaakt een artikel over waarschuwingen en uitzicht ("Welke weergaven kunnen worden gebruikt bij het maken van een waarschuwing ?"), dat is interessant op zijn eigen merites. Echter, Ik was zelfs meer geïnteresseerd om te zien hoe hij methodisch doorloopt aan het proces van het gebruik van Redgate van .NET Reflector. Stap voor stap, Hij laat zien hoe met die hulpmiddel track down hoe SharePoint bepaalt of een weergave in een lijst "subscribable moet uitmaken" bij gebrek aan een beter woord (hij legt dit veel beter uit dan ik 🙂 ).

Op dit punt in het tijdperk van SharePoint, u zou bijna moeten worden doof en blind voor niet hebben gehoord of gelezen over het gebruik van dat gereedschap. Het heeft geavanceerde spullen en mijn eigen gevoel is dat het is in veel opzichten een instrument van laatste redmiddel. Echter, Als u denkt dat u nodig hebt, maar niet echt weet hoe, Michael's write-up lijkt een geweldige tutorial over dit onderwerp.

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Sorteren van Agenda-Items in de kalenderweergave

Ik ben met behulp van een kalender voor het bijhouden van panel discussies op een bepaalde dag. Ik heb twee sessies: ochtend en middag. Ik wil een weergave maken die ochtend sessies toont alleen alfabetisch via een sessie-ID. Dit is een beetje lastig te bereiken (tenzij ik iets echt duidelijk miste).

Ik kan gemakkelijk maken een gefilterde weergave toont alleen de gebeurtenissen van die dag. De kalender zal Toon alle die gebeurtenissen en als zij alle nemen plaats op hetzelfde uur, het geeft u deze naast elkaar weer in de uur-sleuf. Goed hoor. Het lastige deel is dat, standaard, het wil noemen in ID-indeling. Dus, Als ik toevoegen "sessie 02" en vervolgens "sessie 01" naar de agenda, het toont ze in die volgorde (dwz, Sessie 02 en vervolgens sessie 01). Aan de lijst in volgorde van de sessie-ID, Ik dacht dat om deze dingen te proberen:

  1. Configureren met behulp van de webinterface. Geen geluk. Er zijn geen opties om items te sorteren op deze manier.

    Aangezien dat niet werkte, Ik ben nu hopen er is een CAML query ergens in daar dat me om te overschrijven de soort zal toestaan. CQWP laat me Controleer soort wijzigen, Misschien zal de agenda zo goed?

  2. Bewerken van het webonderdeel, Kijk voor een "export" functie en … BZZZT! Ik kan niet de XML exporteren. Er is geen exportoptie.

    Ik ben nog steeds bedrijf uit hoop dat ik kan vinden en sommige CAML query wijzigen. Aangezien ik niet het webonderdeel exporteren, dat laat SharePoint Designer.

  3. Ik het webonderdeel Agenda toevoegen aan een sandbox-site en open dat site met behulp van SharePoint Designer. Ik kijk naar de markering voor het webonderdeel en ik vind wat ik ben op zoek naar. Het is gecodeerd waanzin, maar het is daar: "<ListViewXml …. >gecodeerde waanzin</ListViewXml>". Specifiek, Er is dit juweeltje:

<Query>
<Waar>
<DateRangesOverlap>
<FieldRef naam = "EventDate" />
<FieldRef naam = "EndDate" />
<FieldRef naam = "RecurrenceID" />
<Waarde Type = "DateTime">
<Maand />
</Waarde>
</DateRangesOverlap>
</Waar>
<OrderBy><FieldRef naam = "Session_x0020_ID" /></OrderBy>
</Query>

(Ik heb gedecodeerd de &lt;de en &de gt en hen uit te splitsen naar meerdere lijnen voor alle duidelijkheid).

Voeg de <OrderBy> beetje en nu het gesorteerd sessie-ID, niet de interne lijst item-ID.

GIGANTISCHE tip o’ de hoed te Becky Isserman voor haar reactie op Isha Sagi blogpost: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Ik zou niet hebben de <OrderBy> op de juiste plaats zonder haar commentaar.

Ik hoop dat ik schrijf dit duidelijker met het schermschoten snel, maar in het geval dat ik nooit doen, tenminste deed ik dit veel.

</einde>

SharePoint-functies & Management oplossingen — Vergeet niet de u in CRUD (of de d voor die kwestie)

We besteden collectief een groot deel van tijd te denken over SharePoint oplossingen — hoe ze te maken, welke tool om te gebruiken, Wat gebeurt er wanneer ze niet implementeren, timeropdrachten, scopes, etc. Wij besteden zoveel tijd te denken over de up-front bits dat het is gemakkelijk om te vergeten dat we moeten ze ook intrekken. Intrekken van oplossingen is waarschijnlijk moeilijker, vanuit een ontwerp perspectief, dan het implementeren van hen. Implementatie is in feite een kookboek-affaire. Meestal, installeren van een functie, Misschien hebben een functie ontvanger laden van sommige gegevens in een lijst, dat soort dingen. Echter, intrekken is potentieel meer complexe.

Een bepaalde oplossing kan leiden tot artefacten als deze:

  • Type inhoud
  • Lijstdefinitie voor
  • Sitedefinitie
  • Gegevens in een lijst
  • Zelfs ontvangers
  • InfoPath-formulieren

De lijst gaat op.

Terwijl het is uiteraard van groot belang om een oplossing te ontwerpen instantieert die die artefacten correct, het is net zo belangrijk rekening houden met de update en gevallen verwijderen. Als uw oplossing wordt een nieuwe lijst gemaakt en wordt die lijst met gegevens gevuld, Wat gebeurt er als de oplossing wordt teruggetrokken? In sommige gevallen, de lijst moet worden verwijderd. In andere gevallen, het moet worden intact gelaten voor historische doeleinden. Uw zakelijke behoeften zal u begeleiden naar de juiste beslissing.

Om te helpen met dit, een matrix waarin elke artefact die uw oplossing op SharePoint implementeert maken. Lijst drie kolommen per artefact, een voor maken, bijwerken en verwijderen. Voor elk geval, de juiste uitkomst voor die bewerking bepalen.

Dit soort analyse is uiteraard het beste gedaan voordat de oplossing is ooit geïmplementeerd op een SharePoint-farm. Echter, Als roken, het is nooit te laat om te beginnen om dingen goed te doen. Dat matrix maken en ontwikkelen van een plan om aan te pakken van de ontbrekende update/verwijderen-scenario 's. Het kan zijn een moeilijk probleem op te lossen, maar in ieder geval zult u een vak rond het probleem hebben gezet.

</einde>

Abonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Technorati Tags:

Quick Fix: Webservices die Interact met SharePoint, InvalidOperationException

Een miljoen jaar geleden, Ik hielp ontwikkeld van een webservice die is aangeroepen via een aangepaste actie van een werkstroom-SharePoint Designer. Deze week, de klant wilde naar productie te verplaatsen (tot slot!) dus we deden.

De aangepaste actie werkte boete, maar de het aangeroepen webservice niet, het geven van ons deze fout:

System.InvalidOperationException: Deze bewerking kan worden uitgevoerd alleen op een computer die lid is van een server-farm door gebruikers die over machtigingen beschikken in SQL Server om te lezen uit de configuratiedatabase. Deze server verbinden met de server-farm, Gebruik de SharePoint-producten en technologieën configuratiewizard, gelegen in het menu Start in de groep Systeembeheer.
op Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Blijkt dat ik vergat om de service toevoegen aan de SharePoint-toepassingen in IIS. Zodra ik deed dat, het werkte boete.

Dit MSDN forum bericht gaf me de aanwijzing die ik nodig had: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</einde>

Abonneren op mijn blog.

Volg mij op twitter: http://twitter.com/pagalvin

Technorati Tags:

Snel en eenvoudig: SPFolder van SPItemList krijgen

Ik houd dit probleem tegenkomt en de Google nooit lijkt te begrijpen wat ik wil doen, dus ik dacht dat ik zou dit opschrijven.

Ik heb gedaan een heleboel gebeurtenis ontvanger foutopsporing in de laatste week of twee. De ER is gedefinieerd tegen een documentbibliotheek. De afzonderlijke items in de documentbibliotheek zijn nauw gerelateerd aan hun bovenliggende mappen. Dus, Ik krijg altijd de map van het item voor verschillende manipulaties. Tijdens het opsporen van fouten, Ik nodig had om de metagegevens van een map voor een bepaald item waarvan ik weet dat de ID bijwerken.

Hier is een beetje consoletoepassing (ontworpen om te draaien op de server in de farm) dat duurt twee argumenten: de ID van een item en een waarde toewijzen aan een veld, "Goedkeuringsstatus". Het is moeilijk een heleboel dingen codes en heeft geen foutcontrole.

De code ziet er een hard gecodeerde site, krijgt een hard gecodeerde documentbibliotheek en vervolgens vindt het aangegeven item. Vervolgens vindt de bovenliggende map van dat item en wordt de statuswaarde toegewezen.

De belangrijke les hier voor mij is dat SPItem niet u toegang tot de map krijgt. U moet gebruiken SPListItem.File.

Als iemand cares te bieden een kritiek of suggereren een betere manier om de map van een item, laat alstublieft een reactie.

<code>
met behulp van Systeem;
met behulp van System.Collections.generic;
met behulp van System.Text;
met behulp van Microsoft.SharePoint;
met behulp van System.Collections;

naamruimte Conchango
{
    /// <Samenvatting>
 /// </Samenvatting>
 klasse ManualFolderUpdate
    {
        statische VOID Main(tekenreeks[] args)
        {
            tekenreeks MSH = "ManualFolderUpdate (v1.0): "; // MSH = "berichtkop"

 Console.WriteLine(MSH + "Opstarten.  Ik is het laatst bewerkt op 08/04/08.");

            tekenreeks URL = http://localhost/xyzzy;

            met behulp van (SPSite oSPSite = Nieuw SPSite(URL))
            {

                met behulp van (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documenten"];

                    Console.WriteLine(MSH + "Got de documentbibliotheek.");

                    Console.WriteLine(MSH + "Doc lib item count: [" + docLib.ItemCount + "].");

                    int FolderID = 0;
                    tekenreeks NewStatus = "xyzzy";

                    FolderID = System.Converteren.ToInt32(args[0].ToString());
                    Console.WriteLine("Op zoek naar map voor object: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Console.WriteLine(MSH + "Got de bovenliggende map.");

                    NewStatus = args[1].ToString();
                    Console.WriteLine("Status is ingesteld op [" + NewStatus + "].");

                    Console.WriteLine("Druk op return om te plegen de update of de CTRL-C om af te breken.");

                    Console.ReadLine();

                    thisItemFolder.Item["Goedkeuringsstatus"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Console.WriteLine(MSH + "Klaar bent met het bijwerken van de map.  Verlaten.");

                } // met behulp van SPWeb

            } // met behulp van SPSite

 Console.WriteLine(MSH + "Afgewerkt.");

        } // Main

    } // klasse foldersync
} // naamruimte
</code>

</einde>

Abonneren op mijn blog.

Technorati Tags:

Verbergen van aangepaste acties in SharePoint

Enkele maanden geleden, tijdens het werken aan een project voor een client, Ik heb gemaakt een functie. Onder andere, die functie gedefinieerd een aangepaste actie (deze berichten worden weergegeven onder site-instellingen). Het enige doel voor deze aangepaste actie was om aan te tonen dat de activering functie werkte zoals verwacht. In principe, Ik gebruikte het als een ruwe vorm van foutopsporing.

Veel tot mijn verlegenheid, Deze debugging artefact gemaakte zijn zin van dev tot UAT en tot productie voordat iemand heb rond om te vragen, "wat is dit xyzzy link?"

Door nu, We zijn in productie en ik echt niet wilt verwijderen van de functie, Positiebepaling elements.xml en vervolgens opnieuw te installeren.

Todd somberder een gemakkelijke manier om het te behandelen op gewezen. In zijn woorden:

"CustomActions worden niet gekopieerd naar de database, ze zijn rechtstreeks uit het Elements.xml-bestand gelezen en gekopieerd naar de status van de toepassing in runtime. Dus, u hoeft niet te deactiveren, verwijderen, opnieuw installeren, en de functie als u wilt verwijderen de CustomAction verkeersrapporten opnieuw activeren. Gewoon verwijderen uit het bestand Elements.xml en de groep van toepassingen te recyclen(s) verricht. De volgende keer dat de functie in omvang is, u zal niet de CustomAction meer zien."

Ik volgde zijn instructies en, Natuurlijk, ze werken.

In mijn geval, Dit is een departement niveau installatie met slechts een enkele WFE. Als je jezelf met dit probleem in de toekomst en met meerdere WFE vinden, Ik denk dat u zult moeten maken van de verandering in elk.

</einde>

Abonneren op mijn blog.

Quick Fix: Toegang tot SharePoint-Site gooit [HttpException (0x 80004005): Request timed out.]

Een van mijn collega's ontwikkelaar werkte aan een project deze week en liep in een timeout probleem tijdens het werken op het opbouwen van sommige gek webonderdeel. Zijn webonderdeel was prima, maar "plotseling" een niet-verbonden site werd erg traag en vaak time-out met deze fout:

[HttpException (0x 80004005): Request timed out.]

Ik ingelogd en zag dat diverse andere sites prima waren. Ik vermoed dat er sommige verborgen webonderdelen op de pagina en het gebruik van de vertrouwde ?inhoud = 1 debug techniek, Ik heb in feite vinden 11 webonderdelen op de pagina, slechts twee daarvan waren zichtbaar. Nog beter (vanuit een let's-hope-I-find-something-ugly-here-that-I-can-fix perspectief), drie van deze gesloten webonderdelen had een naam van "Fout".

Ik heb verwijderd deze webonderdelen (die zelf een verrassend lang geduurd) en dat het probleem opgelost. Voor vandaag 🙂

</einde>

Abonneren op mijn blog.

Technorati Tags:

Inroepen SSRS webservices van WSS / MOSS in FBA omgeving

We nodig zich te beroepen op de CreateSubscription"" methode op een SSRS-webservice die wordt gehost in een FBA beheerd MOSS milieu vanuit een aangepast webonderdeel. Wij hield krijgend variaties van:

  • 401: Niet toegestaan
  • Object verplaatst

Het "object verplaatst" bericht was het meest interessant omdat het zei dat het "object" (onze SSRS-service) had "verplaatst" aan login.aspx. Dit betekende duidelijk hadden we een soort van probleem met verificatie.

Uiteindelijk besefte ik dat ik had bladwijzer van een blogbericht door Robert Garret die beschreef hoe zich te beroepen op een algemene doel WSS/MOSS-webservice die leeft in een omgeving FBA. Merk op dat ik kan rechtstreeks aan het artikel koppelen (als van 06/09/08) omdat het om te verifiëren dat wil. De link die ik bieden brengt u naar een "alle berichten" en u kunt de specifieke artikel vinden door te zoeken naar "Toegang tot MOSS webservices met behulp van verificatie met formulieren op basis van".

Hier is de code die voor ons werkte:

ReportingService2006 rs = Null; 
// Verifiëren Verificatie auth = Nieuw Verificatie(); 
auth. URL = "http://URL/_vti_bin/Authentication.asmx";
auth. CookieContainer =
Nieuw CookieContainer();
LoginResult resultaat = auth. Login("userid", "wachtwoord");
Als (resultaat. ErrorCode == LoginErrorCode.NoError) 
{
// Geen fout, Zo krijgen de cookies.
CookieCollection cookies = auth. CookieContainer.GetCookies(Nieuw URI(auth. URL));
Cookie authCookie = cookies[resultaat. CookieName];
RS =
Nieuw ReportingService2006();
RS. URL =
"http://server/_vti_bin/ReportServer/ReportService2006.asmx";
RS. CookieContainer =
Nieuw CookieContainer();
RS. CookieContainer.Add(authCookie);
}
Probeer
{
  RS. CreateSubscription(verslag, extSettings, desc, eventType, matchData, PARAMETERS1);
}
vangst (Uitzondering ex)
{
  Console.WriteLine(ex. Message.ToString());
}

Ik interpreteer dingen om te werken als dit:

  • Onze webonderdeel moet dial-up van de verificatieservice en zeggen, "Hey, Tony, It's me!".
  • Verificatieservice van antwoorden zeggen, "Hey, Ik weet dat je. Hoe zijn de kinderen? Hier is een token."
  • We roepen de SSRS-service en zeggen, "Tony stuurde me, Hier is het token."

</einde>

Abonneren op mijn blog.

Snelle en eenvoudige: Inrichten van een website die SharePoint-objectmodel gebruiken In C#

Ik probeerde op zoek naar een beetje stukje code dat zou laten zien hoe maak ik een nieuwe SPWeb in een siteverzameling. Ik heb niet het vinden als snel of gemakkelijk als ik had verwacht, dus ik dacht dat ik zou klap samen een beetje post op het onderwerp.

Deze code maakt u een nieuwe wikisite:

 SPSite siteCollection;

    siteCollection = Nieuw SPSite('http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.webs.add("xyzzy", "xyzzy titel",
        "xyzzy beschrijving", 1033, SPWebTemplate.WebTemplateWIKI, vals, vals);

Mijn eerste zoekopdrachten is mislukt omdat ik was op zoek naar uitdrukkingen zoals "het inrichten van een website met behulp van sharepoint-objectmodel" en dergelijke.

Als u zoeken voor "Webs.Add()", u vindt een aantal zeer nuttig blog inzendingen, MSDN-artikelen en SDK-documentatie die verder gaan in de diepte over dit onderwerp. Ik zeker aanraden deze site.

</einde>

Abonneren op mijn blog.

Technorati Tags: