Kategori Arkiv: SharePoint udvikling

Bambus kalender interagere med SharePoint forårsager "en uventet fejl opstod"

I dag, Jeg har arbejdet i et miljø, der bruger en bambus kalenderwebdel for nogle bedre samarbejde. Dette en standard medium/lille gård med to belastning afbalanceret WFEs, en "application server" til indeksering og InfoPath og en grupperet SQL tilbage ende.

Klienten installeret nogle katastrofe opsving software på en af WFEs og det resulterede i en brudt hele Fiskeækvivalenter for et bestemt websted i webstedsgruppen. Når belastningsjustering pegede på de berørte hele Fiskeækvivalenter, og dette websted, brugere har set et stort set blank hvid skærm med sætningen "der opstod en uventet fejl". Ingen andre info viste, netop denne sætning.

De bad mig om at se på det. Jeg let gengivet problemet og derefter tilføjet en ?indhold = 1 i slutningen af URL-adressen. Dette er, hvordan jeg lærte de ved hjælp af webdelen bambus. Jeg gik tilbage til siden og nu, pludselig, det viste mig en dejlig velordnet fejlmeddelelse:

image

Jeg ved ikke, hvad der foregik eller hvad jeg gjorde for at få kontrolleret fejlmeddelelsen for at få vist andre end tilføjende den ?indhold = 1 bit af forespørgselsstrengen.

Dette er sandsynligvis en meget sjælden kant sagen, men hvis du får denne besked, "Der opstod en uventet fejl" gå videre og tilføje ?indhold = 1 i forespørgselsstrengen og se hvor det fører.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Technorati Tags: ,

Ved hjælp af reflektor på Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal har sat en artikel om indberetninger og visninger ("Hvilke visninger kan bruges ved oprettelse af en advarsel ?"), der er interessante ud fra egne forudsætninger. Dog, Jeg var endnu mere interesseret i at se hvordan han metodisk går gennem processen med at bruge Redgate's .NET reflektor. Trin for trin, Han viser, hvordan du bruger dette værktøj spor ned hvordan SharePoint afgør, om en se på en liste skal være "subscribable" i mangel af et bedre ord (he explains this much better than I do 🙂 ).

På dette tidspunkt i SharePoint-æra, du skulle næsten være døve og blinde har ikke hørt eller læst om brug af værktøjet. Det har avanceret ting og min egen fornemmelse er, at det er på mange måder et værktøj af sidste udvej. Dog, Hvis du tror, du har brug for det. men ved ikke rigtig, hvordan, Michaels skrive-up virker som en stor tutorial om dette emne.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Sortering kalenderelementer i kalendervisningen

Jeg bruger en kalender til at spore paneldiskussioner på en given dag. Jeg har to sessioner: morgen og eftermiddag. Jeg vil gerne oprette en visning, der viser morgen sessioner kun opført alfabetisk via et sessions-ID. Det er lidt tricky at udrette (medmindre jeg overset noget virkelig indlysende).

Jeg kan nemt oprette en filtreret visning viser bare dagens begivenheder. Kalenderen vil vise alle disse begivenheder, og hvis de alle tager sted på den samme time, Det viser dem side om side i den time slot. Dette er storartet. Den vanskelige del er, at, som standard, det ønsker at liste dem i id-format. Så, Hvis jeg tilføje "Session 02" og derefter "Session 01" til kalenderen, Det viser dem i nævnte rækkefølge (dvs, Session 02 og derefter Session 01). At nævne dem i rækkefølge, sessions-ID, Jeg tænkte at prøve disse ting:

  1. Konfigurere visningen ved hjælp af web-brugergrænsefladen. Uden held. Der er ingen muligheder for at sortere elementer på denne måde.

    Da det virkede, Jeg er nu håber der er en CAML forespørgsel et sted i det, der vil tillade mig at tilsidesætte slags. CQWP lader mig gøre, at slags ændre, måske vil kalender samt?

  2. Redigere webdelen, kigge efter en "eksport" funktion og … BZZZT! Jeg kan ikke eksportere sine XML. Der er ingen eksport mulighed.

    Jeg er stadig holder ud håb om at jeg kan finde og ændre nogle CAML forespørgsel. Da jeg ikke kan eksportere webdelen, Det efterlader SharePoint Designer.

  3. Jeg tilføje webdelen kalender til et websted, sandkasse og åbne webstedet ved hjælp af SharePoint Designer. Jeg ser på opmærkningen for webdelen og jeg finde hvad jeg søger. Det har kodet vanvid, men det er der: "<ListViewXml …. >kodede vanvid</ListViewXml>". Specifikt, der er denne perle:

<Forespørgsel>
<Hvor>
<DateRangesOverlap>
<FieldRef Name = "EventDate" />
<FieldRef navn = "Slutdato" />
<FieldRef Name = "RecurrenceID" />
<Værdi Type = "Datoklokkeslæt">
<Måned />
</Værdi>
</DateRangesOverlap>
</Hvor>
<SorterEfter><FieldRef Name = "Session_x0020_ID" /></SorterEfter>
</Forespørgsel>

(Jeg har afkodet de &lt;'s og &gt's og opdele dem ud på flere linjer for klarhedens skyld).

Tilføje den <SorterEfter> bit og nu det sorterer efter Session-ID, ikke den interne liste element-ID.

GIGANTISK tip o’ Hatten til Becky Isserman for hendes kommentar til Isha Sagi blogindlæg: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Jeg ville ikke have sat den <SorterEfter> i det rigtige sted uden hendes kommentar.

Jeg håber at skrive dette mere klart med skærmbilleder snart, men i tilfælde af at jeg aldrig gøre, mindst gjorde jeg dette meget.

</slutningen>

SharePoint-funktioner & Solutions Management — Glem ikke U i CRUD (eller D for sags skyld)

Vi bruger tilsammen megen tid på at tænke om SharePoint-løsninger — hvordan du opretter dem, som værktøj til at bruge, Hvad sker der, når de undlader at installere, timerjob, Scopes, osv. Vi bruger så meget tid på at tænke om up-front bits, at det er nemt at glemme, at vi skal trække dem samt. Tilbagetrækningskraften løsninger er sandsynligvis mere besværligt, fra et konceptuelt design perspektiv, end installation af dem. Installation er dybest set en kogebog affære. Typisk, installere en funktion, måske har en funktion modtager indlæse nogle data i en liste, slags ting. Dog, tilbagetrækningskraften er potentielt mere komplekse.

En given løsning kan skabe artefakter som disse:

  • Indholdstype
  • Listen Definition
  • Webstedsdefinitionen
  • Data i en liste
  • Selv modtagere
  • InfoPath-formularer

Listen fortsætter.

Det er naturligvis vigtigt at designe en løsning instantierer der disse artefakter korrekt, Det er lige så vigtigt at overveje opdateringen og slette tilfælde. Hvis din løsning opretter en ny liste og udfylder listen med data, Hvad sker der, når løsningen er trukket tilbage? I nogle tilfælde, listen bør udgå. I andre tilfælde, Det bør være overladt intakt for historiske formål. Virksomhedens behov vil guide dig til den rigtige beslutning.

At hjælpe med dette, oprette en matrix, der viser hver artefakt din løsning udruller til SharePoint. Tre listekolonner pr. genstand, en for at skabe, Update og delete. For hvert enkelt tilfælde, bestemme det korrekte resultat for den pågældende operation.

Denne form for analyse er naturligvis bedst gøres før løsningen implementeres nogensinde til en SharePoint-farm. Dog, som rygning, Det er aldrig for sent for at begynde at gøre tingene rigtigt. Oprette denne matrix og udvikle en plan for at løse de manglende opdatering/sletning scenarier. Det kan være et svært problem at løse, men i det mindste du har sætte en kasse rundt om problemet.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Technorati Tags:

Quick Fix: Web tjenester at interagere med SharePoint, InvalidOperationException

En million år siden, Jeg hjalp udviklet en web-tjeneste, der blev aktiveret via en brugerdefineret handling for en SharePoint Designer arbejdsprocessen. Denne uge, kunden ønskede at flytte den til produktion (Endelig!) så vi gjorde.

Den brugerdefinerede handling arbejdede nobel, men den web service det gældende ikke, at give os denne fejl:

System.InvalidOperationException: Denne handling kan kun udføres på en computer, der er sluttet til en serverfarm af brugere, der har tilladelser i SQL Server til at læse fra konfigurationsdatabasen. Tilsluttes denne server til serverfarmen, Brug af SharePoint Products and Technologies konfigurationsguiden, beliggende i menuen Start i administrationsværktøjer.
på Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Viser sig at jeg har glemt at føje tjenesten til SharePoint-programgruppen i IIS. Når jeg gjorde det, Det fungerede fint.

Denne MSDN forum udstationering gav mig den nøgle, jeg havde brug for: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</slutningen>

Abonner på min blog.

Følg mig på twitter: http://twitter.com/pagalvin

Technorati Tags:

Hurtig og nem: Få SPFolder af SPItemList

Jeg holder løbe ind i dette problem og Google synes aldrig at forstå, hvad jeg ønsker at gøre, så jeg regnede ville jeg skrive det.

Jeg har gjort en masse event modtager fejlfinding i den sidste uge eller to. Skadestuen er defineret mod et dokumentbibliotek. De enkelte elementer i dokumentbiblioteket er tæt relateret til deres overordnede mapper. Så, Jeg får altid mappen af varen for forskellige manipulationer. Mens fejlfinding, Jeg havde brug at opdatere metadataene i en mappe for en bestemt vare hvis ID jeg kender.

Her er en lille konsolprogram (designet til at køre på server i farmen) det tager to argumenter: ID'ET for et emne og en værdi til at tildele et felt, "Godkendelsesstatus". Det hårdt koder en masse ting og har ingen fejlkontrol.

Koden ser op en hårdt kodet hjemmeside, får en hårdt kodet dokumentbibliotek og derefter finder de angivne. Derefter finder den overordnede mappe af elementet og tildeler statusværdien.

Den vigtigste lektie her for mig er, at SPItem ikke får du adgang til mappen. Du skal bruge SPListItem.File.

Hvis nogen bryder sig om at tilbyde en kritik eller foreslå en bedre måde at få mappen af en vare, venligst efterlade en kommentar.

<kode>
ved hjælp af System;
ved hjælp af System.Collections.Generic;
ved hjælp af System.Text;
ved hjælp af Microsoft.SharePoint;
ved hjælp af System.Collections;

navneområde Conchango
{
    /// <Resumé>
 /// </Resumé>
 klasse ManualFolderUpdate
    {
        statisk void Main(streng[] args)
        {
            streng MSH = "ManualFolderUpdate (v1.0): "; // MSH = "besked overskrift"

 Konsol.WriteLine(MSH + "Opstart.  Jeg blev senest ændret den 08/04/08.");

            streng URL = http://localhost/xyzzy;

            ved hjælp af (SPSite oSPSite = nye SPSite(URL-adresse))
            {

                ved hjælp af (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList.Update() docLib = oSPWeb.Lists["Dokumenter"];

                    Konsol.WriteLine(MSH + "Fik dokumentbiblioteket.");

                    Konsol.WriteLine(MSH + "Doc lib emnet tæller: [" + docLib.ItemCount + "].");

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

                    FolderID = System.Konvertere.ToInt32(args[0].ToString());
                    Konsol.WriteLine("Søger mappe for varen: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Konsol.WriteLine(MSH + "Fik den overordnede mappe.");

                    NewStatus = args[1].ToString();
                    Konsol.WriteLine("Indstilling af status [" + NewStatus + "].");

                    Konsol.WriteLine("Trykke retur til at begå opdatering eller CTRL-C for at afbryde.");

                    Konsol.ReadLine();

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

                    Konsol.WriteLine(MSH + "Færdig med at opdatere mappen.  Spændende.");

                } // ved hjælp af SPWeb

            } // ved hjælp af SPSite

 Konsol.WriteLine(MSH + "Færdig.");

        } // Main

    } // klasse foldersync
} // navneområde
</kode>

</slutningen>

Abonner på min blog.

Technorati Tags:

Skjule brugerdefinerede handlinger i SharePoint

Flere måneder siden, mens du arbejder på et projekt for en klient, Jeg skabt en funktion. Blandt andet, Denne funktion defineret en brugerdefineret handling (disse vises under indstillinger for websted). Det eneste formål for denne brugerdefineret handling var at vise mig, at funktionen aktivering arbejdede som forventet. Dybest set, Jeg brugte det som en rå form for fejlfinding.

Meget til min forlegenhed, denne debugging artefakt gjort sin vej fra dev at UAT og produktion, før nogen fik rundt for at spørge, "Hvad er dette xyzzy link?"

Nu, Vi er i produktion og jeg virkelig ønsker ikke at afinstallere funktionen, løse elements.xml og derefter geninstallere.

Todd mere dystert påpegede en nem måde at håndtere det. I hans ord:

"CustomActions er ikke kopieret til databasen, De læse direkte fra Elements.xml filen og kopieret ind i stævningen angives på kørselstidspunktet. Så, du behøver ikke at deaktivere, afinstallere, geninstallere, og genaktivere funktionen for at fjerne CustomAction. Bare fjerne det fra filen Elements.xml og genbruge programgruppen(s) foretages. Næste gang funktionen er i anvendelsesområdet, du vil ikke se CustomAction længere."

Jeg har fulgt hans instruktioner og, Selvfølgelig, de arbejder.

I mit tilfælde, Dette er en afdeling niveau installation med bare en enkelt hele Fiskeækvivalenter. Hvis du finder dig selv med dette problem i fremtiden og med flere hele Fiskeækvivalenter, Jeg tror, du bliver nødt til at foretage ændringen i hver.

</slutningen>

Abonner på min blog.

Quick Fix: Adgang til SharePoint-webstedet kaster [HttpException (0x 80004005): Anmodning fik timeout.]

En af mine kolleger, udvikler arbejdede på et projekt i denne uge og løb ind i en timeout problem mens du arbejder på at opbygge nogle skøre webdel. Hans webdelen var fint, men "pludselig" en ikke-relaterede websted blev meget langsomt og ofte timeout med denne fejl:

[HttpException (0x 80004005): Anmodning fik timeout.]

Jeg er logget ind og så, at flere andre steder var bare fint. Jeg har mistanke om at der var nogle skjulte webdele på siden og ved hjælp af trofaste ?indhold = 1 debug teknik, Jeg fandt faktisk 11 webdele på siden, hvoraf kun to var synlige. Endnu bedre (fra et let's-hope-I-find-something-ugly-here-that-I-can-fix perspektiv), tre af disse lukkede webdele havde et navn af "Fejl".

Jeg har slettet disse webdele (som selv tog en overraskende lang tid) og at løst problemet. For today 🙂

</slutningen>

Abonner på min blog.

Technorati Tags:

Påberåbe sig SSRS webtjenester fra WSS / MOS i FBA miljø

Vi havde brug at påberåbe sig "CreateSubscription" metode på en SSRS-webtjeneste, der er hostet i en FBA lykkedes MOSS miljø fra en brugerdefineret webdel. Vi holdt fik variationer af:

  • 401: Ikke godkendt
  • Objektet flyttes

Objektet"flyttede" meddelelsen var mest interessant, fordi det var at sige, at objektet"" (vores SSRS service) havde "flyttet" til login.aspx. Dette klart mente vi havde nogle slags godkendelse problem.

Til sidst indså jeg, at jeg havde bookmarked en blog-indtastning af Robert Garret der beskrevet hvordan man kan påberåbe sig en allround WSS/MOSS webtjeneste bor inde en FBA miljø. Bemærk, at jeg ikke kan linke direkte til artiklen (som af 06/09/08) fordi det ønsker at godkende. Linket jeg giver bringer dig til en "alle indlæg" Se og du kan finde specifikke artiklen ved at søge på "Adgang til MOSS-webtjenester ved hjælp af formularer-baseret godkendelse".

Her er den kode, der arbejdede for os:

ReportingService2006 rs = Null; 
// Godkende Godkendelse auth = nye Godkendelse(); 
auth.URL = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
nye CookieContainer();
LoginResult resultat = auth.Login("userid", "password");
Hvis (resultat.ErrorCode == LoginErrorCode.NoError) 
{
// Ingen fejl, så få cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(nye URI(auth.URL-adresse));
Cookie authCookie = cookies[resultat.CookieName];
RS =
nye ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
nye CookieContainer();
RS.CookieContainer.Add(authCookie);
}
Prøv
{
  RS.CreateSubscription(rapport, extSettings, / / Beskr, eventType, matchData, parameters1);
}
fangst (Undtagelse ex)
{
  Console.WriteLine(ex.Message.ToString());
}

Jeg tolker tingene til at fungere som denne:

  • Vores webdelen skal ringe op godkendelsestjenesten og sige, "Hey, Tony, Det er mig!".
  • Authentication service svar at sige, "Hey, Jeg kender dig. Hvor er børnene? Her er et token."
  • Vi kalder op SSRS service og sige, "Tony sendte mig, Her er token."

</slutningen>

Abonner på min blog.

Hurtig og enkel: Klargøre et websted ved hjælp af SharePoint objektmodel I C#

Jeg prøvede at søge efter en lille stump kode, der ville vise, hvordan jeg kan oprette en ny SPWeb i en gruppe af websteder. Jeg fandt det som hurtigt eller nemt, som jeg havde forventet, så jeg tænkte jeg ville smække sammen en lille post om emnet.

Denne kode opretter et nye Wiki-websted:

 SPSite siteCollection;

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

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy titel",
        "xyzzy beskrivelse", 1033, SPWebTemplate.WebTemplateWIKI, falsk, falsk);

Mine indledende søgninger mislykkedes, fordi jeg var på udkig sætninger som "bestemmelse et websted ved hjælp af sharepoint-objektmodellen" og lignende.

Hvis du Søg til "Webs.Add()", Du kan finde en række meget nyttige blog-indtastninger, MSDN artikler og SDK-dokumentationen, at gå i dybden med dette emne. Jeg absolut anbefale dette websted.

</slutningen>

Abonner på min blog.

Technorati Tags: