Arkivat e Kategorisë: SharePoint Zhvillim

Kalendari Bamboo bashkëveprojmë me SharePoint Causes "Një gabim i papritur ka ndodhur"

Sot, I’ve been working in an environment that uses a Bamboo calendar web part for some improved collaboration. This a standard medium/small farm with two load balanced WFEs, një "server aplikacion" për indeksimin dhe InfoPath dhe një grumbulli fund SQL mbrapa.

The client installed some disaster recovery software onto one of the WFEs and that resulted in a broken WFE for a specific site in the site collection. Whenever load balancing pointed at the affected WFE and that site, users saw a largely blank white screen with the sentence “An unexpected error occurred”. No other info showed, vetëm se dënimi.

They asked me to look at it. I easily reproduced the problem and then added a ?contents=1 to the end of the URL. This is how I learned they were using the Bamboo web part. I went back to the page and now, papritmas, ajo tregoi mua një mesazh gabimi bukur rregullt:

image

Unë nuk e di se çfarë po ndodh ose se çfarë kam bërë për të marrë mesazh gabimi kontrolluar për tu afishuar përveç bashkagjitet ?contents=1 bit of the query string.

Kjo është ndoshta një rast shumë i rrallë buzë, por në qoftë se ju merrni këtë mesazh, "Një gabim i papritur ka ndodhur", të shkojnë përpara dhe të shtoni ?Përmbajtja = 1 deri në vargun pyetës dhe të shohim se ku të çon.

</fund>

Abonohen në blogun tim.

Atëherë ejani pas meje në Twitter në http://www.twitter.com/pagalvin

Technorati Tags: ,

Përdorimi reflektor në Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal ka vënë një artikull në lidhje me alarme dhe pikëpamjet ("Which views can be used when Creating an Alert ?"), which is interesting on its own merits. Megjithatë, I was even more interested to see how he methodically walks through the process of using Redgate’s .NET Reflector. Step by step, he shows how to use that tool track down how SharePoint determines whether a view on a list should be "subscribable" për mungesë të një fjale më të mirë (he explains this much better than I do 🙂 ).

Në këtë pikë në epokën e SharePoint, you’d almost have to be deaf and blind to have not heard or read about using that tool. It’s advanced stuff and my own sense is that it’s in many ways a tool of last resort. Megjithatë, nëse ju mendoni se keni nevojë për atë, por nuk të vërtetë e di se si, Michael shkruaj-up duket si një tutorial i madh në këtë temë.

</fund>

Abonohen në blogun tim.

Atëherë ejani pas meje në Twitter në http://www.twitter.com/pagalvin

Sorting Items kalendarik në Pamjen Calendar

Unë jam duke përdorur një kalendar për të ndjekur diskutime në një ditë të caktuar,,en,Unë kam dy seanca,,en,në mëngjes dhe pasdite,,en,Unë dua për të krijuar një pamje që tregon seanca e mëngjesit e shënuar vetëm alfabetikisht nëpërmjet një ID seancë,,en,Kjo është pak i ndërlikuar për të përmbushur,,en,I lehtë mund të krijojë një pamje të filtruar tregon vetëm ngjarjet e asaj dite,,en,Kalendari do të tregojë të gjitha ato ngjarje dhe në qoftë se ata të gjithë të zhvillohet në të njëjtën orë,,en,ajo liston ato krah për krah në slot orë,,en,Mrekulli,,en,Pjesë e ndërlikuar është se,,en,nga default,,en,ajo dëshiron të listën e tyre në format ID,,en,në qoftë se unë shtoj "Session 02,,en,dhe pastaj "Sesioni 01,,en,me kalendarin,,en,ajo tregon ato në atë mënyrë,,en,dhe pastaj Session,,en,Të lista e tyre në mënyrë Session ID,,en,Mendova për të provoni këto gjëra,,en,Konfiguroni pamjen duke përdorur ndërfaqen e përdoruesit web,,en,nuk ka fat,,en. I have two sessions: morning and afternoon. I want to create a view that shows morning sessions only listed alphabetically via a session ID. This is a little tricky to accomplish (nëse kam humbur diçka të vërtetë të dukshme).

I can easily create a filtered view showing just that day’s events. The calendar will show all those events and if they all take place on the same hour, it lists them side by side in the hour slot. That’s great. The tricky part is that, by default, it wants to list them in ID format. Kështu, if I add "Session 02" and then "Session 01" to the calendar, it shows them in that order (i.e, Seancë 02 and then Session 01). To list them in Session ID order, I thought to try these things:

  1. Configure the view using the web user interface. No luck. There are no options to sort items this way.

    Since that didn’t work, I am now hoping there’s a CAML query somewhere in there that will allow me to override the sort. CQWP lets me make that kind of change, maybe calendar will as well?

  2. Edit the web part, look for an "export" function and … BZZZT! I can’t export its XML. There is no export option.

    I’m still holding out hope that I can find and modify some CAML query. Since I can’t export the web part, that leaves SharePoint Designer.

  3. I add the calendar web part to a sandbox site and open that site using SharePoint Designer. I look at the markup for the web part and I find what I’m looking for. It’s encoded madness, but it’s there: "<ListViewXml …. >encoded madness</ListViewXml>". Në mënyrë të veçantë, there’s this gem:

<Pyetje>
<Ku>
<DateRangesOverlap>
<FieldRef Name="EventDate"/>
<FieldRef Name="EndDate"/>
<FieldRef Name="RecurrenceID"/>
<Value Type="DateTime">
<Month/>
</Vlerë>
</DateRangesOverlap>
</Ku>
<OrderBy><FieldRef Name="Session_x0020_ID" /></OrderBy>
</Pyetje>

(I’ve decoded the &lt;’s and &gt’s and split them out to multiple lines for clarity’s sake).

Add the <OrderBy> bit and now it sorts by Session ID, not the internal list item ID.

GIGANTIC tip o’ the hat to Becky Isserman for her comment to Isha Sagi’s blog post: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. I wouldn’t have put the <OrderBy> in the right place without her comment.

I hope to write this up more clearly with screen shots soon, but in case I never do, at least I did this much.

</fund>

SharePoint Features & Zgjidhje Menaxhim — Mos harroni u në Crud (ose D për atë lëndës)

Ne kolektivisht shpenzojnë një pjesë të madhe të kohës të menduarit rreth zgjidhjeve të SharePoint — si për të krijuar ato, e cila mjet për të përdorur, çfarë ndodh kur ata dështojnë për të vendosur, Punë timer, Fushat, etj. We spend so much time thinking about the up-front bits that it’s easy to forget that we need to retract them as well. Retracting solutions is probably more difficult, nga një perspektivë konceptuale të projektimit, than deploying them. Deployment is basically a cookbook affair. Typically, instaluar një tipar, ndoshta kanë një marrës tipar të ngarkesës disa të dhëna në një listë, that sort of thing. Megjithatë, retracting është potencialisht më komplekse.

Një zgjidhje e dhënë mund të krijojë objekte si këto:

  • Lloji Përmbajtja
  • Përkufizimi Lista
  • Përkufizimi Site
  • Të dhënat në një listë
  • Edhe Përfituesit
  • Forma InfoPath

Lista vazhdon.

Ndërsa kjo është padyshim e rëndësishme për të hartuar një zgjidhje që instantiates ato objekte saktë, it’s just as important to consider the update and delete cases. If your solution creates a new list and populates that list with data, çfarë ndodh kur zgjidhja është e tërhoqi? In some cases, the list should be deleted. In other cases, it should be left intact for historical purposes. Your business requirements will guide you to the right decision.

Për të ndihmuar me këtë, create a matrix that lists each artifact your solution deploys to SharePoint. List three columns per artifact, një për të krijuar, update and delete. For each case, të përcaktojnë rezultatin e saktë për këtë operacion.

This sort of analysis is obviously best done before the solution is ever deployed to a SharePoint farm. Megjithatë, si pirja e duhanit, it’s never too late to start doing things correctly. Create that matrix and develop a plan to address the missing update/delete scenarios. It may be a hard problem to solve, por të paktën ju do të keni vënë një kuti rreth problemit.

</fund>

Abonohen në blogun tim.

Atëherë ejani pas meje në Twitter në http://www.twitter.com/pagalvin

Technorati Tags:

Fix shpejtë: Sherbime Web që ndërveprojnë me SharePoint, InvalidOperationException

Një milion vjet më parë, I helped developed a web service that was invoked via a custom action for a SharePoint Designer workflow. Këtë javë, klienti donte për të lëvizur atë të prodhimit (më në fund!) kështu që ne e bëmë.

Veprim me porosi ka punuar mirë, por shërbim web ajo thirret nuk e bëri, duke na dhënë këtë gabim:

System.InvalidOperationException: This operation can be performed only on a computer that is joined to a server farm by users who have permissions in SQL Server to read from the configuration database. To connect this server to the server farm, use the SharePoint Products and Technologies Configuration Wizard, located on the Start menu in Administrative Tools.
at Microsoft.SharePoint.Administration.SPWebApplication.Lookup(Uri requestUri)

Turns out that I forgot to add the service to the SharePoint application pool in IIS. Once I did that, ai ka punuar mirë.

This MSDN forum posting gave me the clue I needed: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</fund>

Abonohen në blogun tim.

Follow me on twitter: http://twitter.com/pagalvin

Technorati Tags:

Quick dhe Easy: Get SPFolder e SPItemList

Unë mbaj në drejtimin e këtij problemi dhe Google nuk duket për të kuptuar atë që unë dua të bëj, kështu që unë i realizuar artistikisht unë do të shkruaj këtë poshtë.

Unë kam qenë duke bërë një shumë të pranuesit debugging ngjarje në javën e kaluar apo dy. The ER is defined against a document library. The individual items in the document library are tightly related to their parent folders. Kështu, I am always getting the folder of the item for various manipulations. While debugging, I needed to update the metadata of a folder for a specific item whose ID I know.

Here’s a little console application (designed to run on server in the farm) that takes two arguments: the ID of an item and a value to assign to a field, "Approval Status". It hard codes a lot of stuff and has no error checking.

The code looks up a hard coded site, gets a hard coded document library and then finds the indicated item. It then finds the parent folder of that item and assigns the status value.

The key lesson here for me is that SPItem doesn’t get you access to the folder. You need to use SPListItem.File.

If anyone cares to offer a critique or suggest a better way to get the folder of an item, ju lutemi të lënë një koment.

<code>
përdorim Sistem;
përdorim System.Collections.Generic;
përdorim System.Text;
përdorim Microsoft.SharePoint;
përdorim System.Collections;

namespace Conchango
{
    /// <përmbledhje>
 /// </përmbledhje>
 klasë ManualFolderUpdate
    {
        i pandryshueshëm pavlefshme Kryesor(varg[] args)
        {
            varg msh = "ManualFolderUpdate (v1.0): "; // msh = "Message Header"

 Konsol.WriteLine(msh + "Starting up.  I was last modified on 08/04/08.");

            varg url = http://localhost/xyzzy;

            përdorim (SPSite oSPSite = i ri SPSite(url))
            {

                përdorim (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documents"];

                    Konsol.WriteLine(msh + "Got the document library.");

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

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

                    FolderID = System.Convert.ToInt32(args[0].ToString());
                    Konsol.WriteLine("Seeking folder for item: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Konsol.WriteLine(msh + "Got the parent folder.");

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

                    Konsol.WriteLine("Press return to commit the update or CTRL-C to abort.");

                    Konsol.Linja leximi();

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

                    Konsol.WriteLine(msh + "Finished updating the folder.  Exiting.");

                } // using SPWeb

            } // using SPSite

 Konsol.WriteLine(msh + "Finished.");

        } // Kryesor

    } // class foldersync
} // namespace
</code>

</fund>

Abonohen në blogun tim.

Technorati Tags:

Fshehja Veprimet Custom në SharePoint

Disa muaj më parë, duke punuar në një projekt për një klient, I created a feature. Among other things, që funksion përcaktuar një veprim me porosi (këto të paraqitet në faqen settings). The only purpose for this custom action was to demonstrate to me that the feature activation was working as expected. Në parim, I përdorur atë si një formë të papërpunuar debugging.

Pjesa më e madhe për sikletin tim, kjo Objekti debugging bërë rrugën e saj nga dev për UAT dhe të prodhimit para se dikush mori rreth për të kërkuar, "what is this xyzzy link?"

Deri tani, ne jemi në prodhimin dhe unë vërtet nuk dua të uninstall funksion, fix elements.xml and then reinstall.

Todd zymtë pointed out an easy way to handle it. In his words:

"CustomActions are not copied into the database, ata janë lexuar direkt nga dosja Elements.xml dhe të kopjohet në shtetin e aplikimit në kohën e duhur. Kështu, ju nuk keni nevojë për të çaktivizuar, çinstaloni, reinstall, dhe riaktivizoj tipar për të hequr CustomAction. Vetëm të hequr atë nga dosja Elements.xml dhe riciklimi pishinë aplikimit(s) realizuara. Herën tjetër tipar është në fushëveprimin, ju nuk do të shihni CustomAction anymore."

I ndjekur udhëzimet e tij dhe, sigurisht, ata punojnë.

Në rastin tim, this is a department level installation with just a single WFE. If you find yourself with this problem in future and with multiple WFE’s, Unë besoj se ju do të keni për të bërë ndryshim në secilën.

</fund>

Abonohen në blogun tim.

Fix shpejtë: Përdorimi SharePoint site Hedh [HttpException (0x80004005): Kërkesa kohë jashtë.]

One of my developer colleagues was working on a project this week and ran into a timeout problem while working on building some crazy web part. His web part was fine, but "suddenly" një faqe palidhur u bë shumë i ngadaltë dhe shpesh në kohën e duhur me këtë gabim:

[HttpException (0x80004005): Kërkesa kohë jashtë.]

I logged in and saw that several other sites were just fine. I suspected that there were some hidden web parts on the page and using besueshëm ?Përmbajtja = 1 teknikë debug, Unë në fakt kam gjetur 11 pjesët web në faqen, only two of which were visible. Even better (nga një let's-shpresoj-i-gjej-diçka-të shëmtuar-Ja-se-I-mund-fix perspektivë), three of those closed web parts had a name of "Error".

Unë fshihet ato pjesë web (e cila në vetvete mori një kohë të gjatë çuditërisht) and that solved the problem. For today 🙂

</fund>

Abonohen në blogun tim.

Technorati Tags:

Duke u thirrur SSRS Shërbimet e Internetit Nga WSS / MOSS në mjedis FBA

We needed to invoke the "CreateSubscription" method on an SSRS web service that is hosted in an FBA managed MOSS environment from a custom web part. We kept getting variations of:

  • 401: Nuk është i autorizuar
  • Objekti Moved

The "object moved" message was most interesting because it was saying that the "object" (Shërbimi SSRS tonë) had "moved" to login.aspx. This clearly meant we had some kind of authentication problem.

I eventually realized that I had bookmarked a blog entry by Robert Garret that described how to invoke a general purpose WSS/MOSS web service living inside an FBA environment. Note that I can’t link directly to the article (si i 06/09/08) because it wants to authenticate. The link I provide brings you to an "all posts" view and you can locate the specific article by searching for "Accessing MOSS Web Services using Forms Based Authentication".

Këtu është kodi që ka punuar për ne:

ReportingService2006 rs = zero; 
// Authenticate Authentication auth = i ri Authentication(); 
auth.Url = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
i ri CookieContainer();
LoginResult result = auth.Login("userid", "password");
nëse (result.ErrorCode == LoginErrorCode.NoError) 
{
// No error, so get the cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(i ri Uri(auth.Url));
Cookie authCookie = cookies[result.CookieName];
rs =
i ri ReportingService2006();
rs.Url =
"http://server/_vti_bin/ReportServer/ReportService2006.asmx";
rs.CookieContainer =
i ri CookieContainer();
rs.CookieContainer.Add(authCookie);
}
mundohem
{
  rs.CreateSubscription(report, extSettings, desc, eventType, matchData, parameters1);
}
kap (Ex Përjashtim)
{
  Console.WriteLine(ex.Message.ToString());
}

I interpret things to work like this:

  • Our web part needs to dial up the authentication service and say, "Hey, Tony, it’s me!".
  • Authentication service replies saying, "Hey, I know you. How are the kids? Here’s a token."
  • We call up the SSRS service and say, "Tony sent me, here’s the token."

</fund>

Abonohen në blogun tim.

Shpejtë dhe i thjeshtë: Një dispozitë Web Site përdorur modelin SharePoint objekt në C #

I tried searching for a little snippet code that would show how I can create a new SPWeb in a site collection. I didn’t find it as quickly or easily as I expected so I thought I’d slap together a little entry on the subject.

Ky kod krijon një faqe të re Wiki:

 SPSite siteCollection;

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

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy Title",
        "xyzzy description", 1033, SPWebTemplate.WebTemplateWIKI, i rremë, i rremë);

My initial searches failed because I was looking for phrases like "provision a web site using sharepoint object model" and the like.

Nëse ju kërkoni for "Webs.Add()", you’ll find a number of very useful blog entries, MSDN articles and SDK documentation that go into depth on this subject. I definitely recommend this site.

</fund>

Abonohen në blogun tim.

Technorati Tags: