Kategori Arkiv: SharePoint utveckling

Bambu kalender interagerar med SharePoint orsakar "ett oväntat fel uppstod"

Idag, Jag har jobbat i en miljö som använder en bambu kalenderwebbdel för vissa förbättrat samarbete. Detta en standard medium/liten gård med två belastning balanserad WFEs, en "application server" för indexering och InfoPath och en klustrad SQL tillbaka slutet.

Klienten installerad vissa katastrofen återvinnande mjukvaran till en av WFEs och det resulterade i en bruten WFE för en specifik plats i webbplatssamlingen. När belastningsutjämning pekade på den drabbade WFE och att platsen, användare såg en i stort sett Tom vit skärm med meningen "ett oväntat fel uppstod". Ingen annan information visade, bara den meningen.

De bad mig att titta på det. Jag enkelt reproduceras problemet och sedan lagt till en ?innehållet = 1 till slutet av URL:. Detta är hur jag lärde mig de använder webbdelen bambu. Jag gick tillbaka till sidan och nu, plötsligt, Det visade mig ett trevligt ordnad felmeddelande:

image

Jag vet inte vad som hände eller vad jag gjorde för att få kontrollerat felmeddelandet att Visa annat än lägga den ?innehållet = 1 bit av frågesträngen.

Detta är förmodligen en mycket sällsynt kant fall men om du får det meddelandet, "Ett oväntat fel uppstod" gå vidare och lägga ?innehållet = 1 till frågesträngen och se vart det leder.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Technorati Tags: ,

Med reflektor på Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal har lagt upp en artikel om varningar och visningar ("Vilka vyer kan användas när du skapar en notifiering ?"), som är intressant på egna meriter. Men, Jag var mer intresserad av att se hur han går metodiskt igenom processen att använda Redgate's .NET reflektor. Steg för steg, han visar hur du använder detta verktyg spåra hur SharePoint avgör om en syn på en lista ska vara "subscribable" i brist på bättre ord (he explains this much better than I do 🙂 ).

Vid denna punkt i SharePoint-eran, Du måste nästan vara döv och blind för har inte hört eller läst om att använda det verktyget. Det har avancerade grejer och min egen känsla är att det är på många sätt ett verktyg i sista hand. Men, Om du tror att du behöver det, men vet inte riktigt hur, Michaels uppskrivning verkar som en bra tutorial på detta ämne.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Sortering kalenderobjekt i kalendervyn

Jag använder en kalender för att spåra paneldiskussioner på en viss dag. Jag har två sessioner: förmiddag och eftermiddag. Jag vill skapa en vy som visar morgonmöten bara alfabetisk ordning via ett sessions-ID. Detta är ett lite knepigt att utföra (om jag missat något verkligt uppenbara).

Jag kan enkelt skapa en filtrerad vy visar bara dagens händelser. Kalendern visas alla de händelserna och om de alla sker vid samma klockslag, den listar dem sida vid sida i timme kortplats. Det är utmärkt. Det knepiga är att, som standard, man vill lista dem i format-ID. Så, om jag lägger till "Session 02" och sedan "Session 01" till kalendern, Det visar dem i den ordningen (dvs, Session 02 och sedan Session 01). Att lista dem sessions-ID för, Tänkte jag prova dessa saker:

  1. Konfigurera vyn med web-användargränssnitt. Ingen lycka. Det finns inga alternativ att sortera objekt på så sätt.

    Eftersom det inte fungerade, Jag nu hoppas det är en CAML query någonstans i det som tillåter mig att åsidosätta typ. CQWP låter mig se att ändra typ av, kanske kommer kalendern också?

  2. Redigera webbdelen, Leta efter en "export" funktion och … BZZZT! Jag kan inte exportera dess XML. Det finns ingen exportalternativ.

    Jag fortfarande håller ut hoppas jag kan hitta och ändra vissa CAML query. Eftersom jag inte kan exportera webbdelen, som lämnar SharePoint Designer.

  3. Jag lägger till webbdelen Kalender till en sandlåda webbplats och öppna webbplatsen med SharePoint Designer. Jag ser på markeringen för webbdelen och jag hitta vad jag söker. Det har kodade galenskap, men det är det: "<ListViewXml …. >kodade galenskap</ListViewXml>". Särskilt, Det är denna pärla:

<Fråga>
<Där>
<DateRangesOverlap>
<FieldRef namn = "EventDate" />
<FieldRef namn = "Slutdatum" />
<FieldRef namn = "RecurrenceID" />
<Värde typ = "Datum/tid">
<Månad />
</Värde>
</DateRangesOverlap>
</Där>
<OrderBy><FieldRef namn = "Session_x0020_ID" /></OrderBy>
</Fråga>

(Jag har avkodas i &LT;'s och &gt: s och dela ut dem till flera rader för tydlighetens skull).

Lägg till den <OrderBy> lite och nu den sorterar av sessions-ID, inte den interna listan objekt-ID.

GIGANTISKA tips o’ hatten till Becky Isserman för hennes kommentar till Isha Sagi blogginlägg: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Jag skulle inte lagt den <OrderBy> på rätt plats utan hennes kommentar.

Jag hoppas att skriva detta tydligare med skärm skott snart, men om jag aldrig göra, åtminstone gjorde jag detta mycket.

</slutet>

SharePoint-funktioner & Lösningar Management — Glöm inte u i CRUD (eller d för övrigt)

Vi spenderar kollektivt mycket tid tänkande om SharePoint-lösningar — hur du skapar dem., vilket verktyg du bör använda, Vad händer när de misslyckas med att distribuera, timern jobb, Scope, m.m.. Vi tillbringar så mycket tid att tänka på den initiala stycke som det är lätt att glömma att vi måste ta tillbaka dem också. Upprullningskraften lösningar är förmodligen svårare, ur ett konstruktions, än distribueras. Distribution är i grunden en kokbok affär. Normalt, installera en funktion, kanske har en funktionsmottagaren läsa in data i en lista, sånt där. Men, upprullningskraften är potentiellt mer komplex.

En given lösning kan skapa artefakter som dessa:

  • Innehållstyp
  • Lista Definition
  • Webbplatsdefinitionen
  • Data i en lista
  • Även mottagare
  • InfoPath-formulär

Listan fortsätter.

Det är naturligtvis viktigt att utforma en lösning instansierar som dessa artefakter korrekt, Det är lika viktigt att överväga uppdateringen och ta bort ärenden. Om din lösning skapar en ny lista och fyller denna lista med data, Vad händer när lösningen är indraget? I vissa fall, listan ska tas bort. I andra fall, Det bör lämnas intakt för historiska ändamål. Ditt företags behov guidar dig till rätt beslut.

Att hjälpa till med detta, skapa en matris som visar varje artefakt din lösning distribueras till SharePoint. Lista tre kolumner per artefakt, en för skapa, Update- och delete. För varje fall, ta reda på korrekta resultatet för operationen.

Denna typ av analys görs naturligtvis bäst innan lösningen distribueras någonsin till en SharePoint-servergrupp. Men, som rökning, Det är aldrig för sent för att börja göra saker på rätt sätt. Skapa det matrisen och utveckla en plan för att ta itu med de saknade uppdatera/ta bort scenarierna. Det kan vara ett svårt problem att lösa, men åtminstone du har sätta en ruta runt problemet.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Technorati Tags:

Quick Fix: Att samverka med SharePoint-webbtjänster, InvalidOperationException

En miljon år sedan, Jag hjälpte utvecklat en webbtjänst som anropades via en anpassad åtgärd för ett SharePoint Designer arbetsflöde. Denna vecka, klienten ville flytta det till produktion (Slutligen!) så vi gjorde.

Den anpassade åtgärden fungerade bra, men webbtjänsten den åberopats inte, att ge oss detta fel:

System.InvalidOperationException: Denna operation kan utföras endast på en dator som är ansluten till en server gård av användare som har behörigheter i SQL Server att läsa från konfigurationsdatabasen. Att ansluta denna server i servergruppen, använda SharePoint-produkter och konfigurationsguiden, ligger på Start-menyn i Administrationsverktyg.
på Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Visar sig att jag glömde att lägga till tjänsten SharePoint programpool i IIS. En gång jag gjorde det, det fungerade bra.

Detta MSDN forum inlägg gav mig den ledtråd som jag behövde: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</slutet>

Prenumerera på min blogg.

Följ mig på twitter: http://twitter.com/pagalvin

Technorati Tags:

Snabb och enkel: Få SPFolder för SPItemList

Jag hålla igång på detta problem och Google verkar aldrig förstå vad jag vill göra, så jag tänkte skulle jag skriva ner.

Jag har gjort en hel del händelsemottagare felsökning i den senaste veckan eller två. ER definieras mot ett dokumentbibliotek. Enskilda objekt i dokumentbiblioteket är tätt relaterade till deras överordnade mappar. Så, Jag får alltid mappen för artikeln för olika manipulationer. Medan felsökning, Jag behövde uppdatera metadata för en mapp för en viss artikel vars ID jag vet.

Här är en liten console application (konstruerad för att köras på servern i servergruppen) som tar två argument: ID för ett objekt och ett värde tilldelas till ett fält, "Godkännandestatus". Det hårda koder en massa saker och har ingen felkontroll.

Koden ser en hårdkodad webbplats, blir en hårdkodad dokumentbibliotek och hittar sedan det angivna objektet. Därefter finner den överordnade mappen av objektet och tilldelar statusvärdet.

Den viktiga lärdomen här för mig är att SPItem inte får du tillgång till mappen. Du måste använda SPListItem.File.

Om någon bryr sig att erbjuda en kritik eller föreslå ett bättre sätt att få mappen för ett objekt, lämna gärna en kommentar.

<koden>
med hjälp av System;
med hjälp av System.Collections.Generic;
med hjälp av System.Text;
med hjälp av Microsoft.SharePoint;
med hjälp av System.Collections;

namnområdet Conchango
{
    /// <Sammanfattning>
 /// </Sammanfattning>
 klass ManualFolderUpdate
    {
        statisk void Main(sträng[] args)
        {
            sträng MSH = "ManualFolderUpdate (v1.0): "; // MSH = "meddelande huvudhoppen"

 Konsolen.WriteLine(MSH + "Starta.  Jag var senast ändrad den 08/04/08.");

            sträng URL = http://localhost/xyzzy;

            med hjälp av (SPSite oSPSite = nya SPSite(URL))
            {

                med hjälp av (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Dokument"];

                    Konsolen.WriteLine(MSH + "Fick dokumentbiblioteket.");

                    Konsolen.WriteLine(MSH + "Doc lib objektet räkna: [" + docLib.ItemCount + "].");

                    int FolderID = 0;
                    sträng NewStatus = "xyzzy";

                    FolderID = System.Konvertera.ToInt32(args[0].ToString());
                    Konsolen.WriteLine("Söker mapp för artikeln: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Konsolen.WriteLine(MSH + "Fick den överordnade mappen.");

                    NewStatus = args[1].ToString();
                    Konsolen.WriteLine("Anger status till [" + NewStatus + "].");

                    Konsolen.WriteLine("Tryck återgå att begå den uppdateringen eller CTRL-C för att avbryta.");

                    Konsolen.ReadLine();

                    thisItemFolder.Item["Godkännandestatus"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Konsolen.WriteLine(MSH + "Färdig uppdatera mappen.  Spännande.");

                } // använda SPWeb

            } // använda SPSite

 Konsolen.WriteLine(MSH + "Färdiga.");

        } // Main

    } // klass foldersync
} // namnområdet
</koden>

</slutet>

Prenumerera på min blogg.

Technorati Tags:

Dölja anpassade åtgärder i SharePoint

Flera månader sedan, medan du arbetar med ett projekt för en klient, Jag skapade en funktion. Bland annat, funktionen definieras en anpassad åtgärd (dessa visas under Webbplatsinställningar). Det enda syftet för den här anpassade åtgärden var att visa för mig som funktion aktiveringen fungerade som förväntat. I princip, Jag använde det som en rå form av felsökning.

Mycket till min förlägenhet, denna felsökning artefakt gjorde sin väg från dev UAT och produktion innan någon kom till be, "vad är denna xyzzy länk?"

Nu, Vi är i produktion och jag vill verkligen inte att avinstallera funktionen, fixa elements.xml och sedan installera om.

Todd dystrare pekade ut ett enkelt sätt att hantera det. I hans ord:

"Works kopieras inte till databasen, de läsa direkt från filen Elements.xml och kopieras till programtillstånd vid körning. Så, du behöver inte inaktivera, avinstallera, installera om, och återaktivera funktionen för att ta bort CustomAction. Bara ta bort det från filen Elements.xml och återvinna(s) ske. Nästa gång funktionen är i omfattning, ser du inte CustomAction längre."

Jag följde hans instruktioner och, Självklart, de arbetar.

I mitt fall, Detta är en avdelning nivå installation med bara en enda WFE. Om du befinner dig med detta problem i framtiden och med flera WFE, Jag tror du har att göra ändringen i varje.

</slutet>

Prenumerera på min blogg.

Quick Fix: Åtkomst till SharePoint-webbplatsen kastar [HttpException (0x 80004005): Begäran gjorde timeout.]

En kollega utvecklare arbetade på ett projekt i veckan och sprang in i en timeout problem medan du arbetar på att bygga några galna webbdelen. Hans webbdelen var bra, men "plötsligt" en icke-närstående webbplats blev mycket långsamt och ofta gått ut med detta fel:

[HttpException (0x 80004005): Begäran gjorde timeout.]

Jag loggade in och såg att flera andra platser var bra. Jag misstänkte att det fanns vissa dolda webbdelar på sidan och använda pålitliga ?innehållet = 1 debug teknik, Jag har faktiskt hitta 11 webbdelar på sidan, endast två av som var synliga. Ännu bättre (ur ett let's-hope-I-find-something-ugly-here-that-I-can-fix perspektiv), tre av dessa stängda webbdelar hade ett namn av "Fel".

Jag tog bort dessa webbdelar (som själv tog överraskande lång tid) och som löste problemet. For today 🙂

</slutet>

Prenumerera på min blogg.

Technorati Tags:

Åberopar SSRS webbtjänster från WSS / MOSSA i FBA miljö

Vi behövde för att åberopa "CreateSubscription" metoden på en SSRS webbtjänst som är värd för en FBA hanteras MOSS miljö från en anpassad webbdel. Vi höll få varianter av:

  • 401: Inte auktoriserad
  • Objektet flyttas

"Objektet flyttas" meddelandet var mest intressant eftersom det var sa att objektet"" (vår SSRS service) hade "flyttat" till login.aspx. Detta innebar klart hade vi någon form av autentisering problem.

Så småningom insåg jag att jag hade bokmärkt en bloggpost av Robert Garret hur man åberopa en generell WSS/MOSS webbtjänst lever inuti en FBA miljö. Observera att jag inte kan länka direkt till artikeln (som av 06/09/08) eftersom man vill autentisera. Jag ge länken tar dig till en "alla inlägg" Visa och du kan hitta specifika artikeln genom att söka efter "Åtkomst till MOSS webbtjänster med hjälp av Forms-baserad autentisering".

Här är koden som arbetat för oss:

ReportingService2006 rs = null; 
// Autentisera Autentisering auth = nya Autentisering(); 
auth.URL = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
nya CookieContainer();
LoginResult resultat = auth.Logga in("userid", "lösenord");
om (resultat.Felkod == LoginErrorCode.NoError) 
{
// Inget fel, så få cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(nya URI(auth.URL));
Cookie authCookie = kakor[resultat.CookieName];
rs =
nya ReportingService2006();
rs.URL =
"http://Server/_vti_bin/reportserver/ReportService2006.asmx";
rs.CookieContainer =
nya CookieContainer();
rs.CookieContainer.Add(authCookie);
}
försök
{
  rs.CreateSubscription(rapport, extSettings, desc, eventType, matchData, parameters1);
}
fånga (Undantaget ex)
{
  Console.WriteLine(ex.Message.ToString());
}

Jag tolkar saker att fungera så här:

  • Våra webbdelen måste ringa upp verifieringstjänsten och säga, "Hey, Tony, Det är jag!".
  • Autentiseringstjänsten svarar säger, "Hey, Jag vet att du. Hur är barnen? Här är en token."
  • Vi ringer upp tjänsten SSRS och säga, "Tony skickade mig, här är token."

</slutet>

Prenumerera på min blogg.

Snabb och enkel: Etablera en webbplats med SharePoint-objektmodellen i C#

Jag försökte en liten snutt koden som skulle visa hur jag kan skapa en ny SPWeb i en webbplatssamling. Jag hittade inte det som snabbt och enkelt som jag trodde så jag trodde jag skulle smälla ihop lite inlägg i ämnet.

Denna kod skapas en ny Wiki-webbplats:

 SPSite siteCollection;

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

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy titel",
        "xyzzy Beskrivning", 1033, SPWebTemplate.WebTemplateWIKI, falskt, falskt);

Min första sökningar misslyckades eftersom jag letade efter fraser som "etablera en webbplats med sharepoint-objektmodellen" och liknande.

Om du Sök för "Webs.Add()", hittar du ett antal mycket användbara blogginlägg, MSDN artiklar och SDK-dokumentationen som går in i djupet i detta ämne. Jag rekommenderar definitivt denna webbplats.

</slutet>

Prenumerera på min blogg.

Technorati Tags: