Mga Archive ng kategorya: SharePoint Development

Bamboo Calendar Pakikipag-ugnay sa SharePoint nagiging sanhi ng "May hindi inaasahang error na naganap"

Ngayon, 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, isang "server application" para sa pag-index at InfoPath at isang tinipong SQL likod ng pagtatapos.

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, lamang na pangungusap.

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, bigla, ito ay nagpakita sa akin sa isang masarap na tagaganap mensahe ng error:

image

Hindi ko alam kung ano ang nangyayari o kung ano ang ginawa ko upang makuha ang kinokontrol na mensahe ng error na ipapakita maliban sa appending ang ?contents=1 bit of the query string.

Marahil ito ay isang napakabihirang kaso gilid ngunit kung kumuha na mensahe, "May hindi inaasahang error na naganap" sige at idagdag ?mga nilalaman = 1 sa query string at makita kung saan na humantong.

</dulo>

Mag-subscribe sa aking blog.

Sundin ako sa Twitter sa http://www.twitter.com/pagalvin

Technorati Tags: ,

Paggamit ng Reflector sa Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal ay ilagay up ng isang artikulo tungkol sa mga alerto at mga view ("Which views can be used when Creating an Alert ?"), which is interesting on its own merits. Gayunman, 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" para sa kakulangan ng isang mas mahusay na salita (mas mahusay niyang ipinaliwanag ito kaysa sa akin 🙂 ).

Sa puntong ito sa panahon 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. Gayunman, kung sa tingin mo kailangan mo ito ngunit hindi ko talaga alam kung paano, Michael ng write-up tila isang mahusay na pagtuturo sa paksang ito.

</dulo>

Mag-subscribe sa aking blog.

Sundin ako sa Twitter sa http://www.twitter.com/pagalvin

Pag-aayos Item Calendar sa View Calendar

I’m using a calendar to track panel discussions on a given day. 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 (maliban kung Naiwan ako ng isang bagay na tunay na halata).

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, sa pamamagitan ng default, it wants to list them in ID format. Kaya, if I add "Session 02" and then "Session 01" sa kalendaryo, ipinapakita nito ang mga ito sa pagkakasunud-sunod na (i.e, Sesyon 02 at pagkatapos Session 01). To list them in Session ID order, Akala ko upang subukan ang mga bagay:

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

    Dahil iyon ay hindi gumagana, 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, siguro kalendaryo kalooban pati na rin?

  2. I-edit ang mga web bahagi, look for an "export" function at … Bzzz! 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, na nag-iiwan sa 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, subalit ito ay mayroong: "<ListViewXml …. >naka-encode kabaliwan</ListViewXml>". Tiyakan, may hiyas na ito:

<Tanong>
<Saan>
<DateRangesOverlap>
<FieldRef Name="EventDate"/>
<FieldRef Name="EndDate"/>
<FieldRef Name="RecurrenceID"/>
<Value Type="DateTime">
<Buwan />
</Halaga>
</DateRangesOverlap>
</Saan>
<Orderby><FieldRef Name="Session_x0020_ID" /></Orderby>
</Tanong>

(Ko na ang decoded &lt;Ni at &gt at hatiin ang mga ito out sa maramihang mga linya para sa kapakanan ng kaliwanagan).

Idagdag ang <Orderby> kaunti at ngayon kusa itong isinasaayos sa pamamagitan ng Session ID, hindi ang panloob na mga item sa listahan ID.

Katakut-takot ang laki tip o’ ang sumbrero sa Becky Isserman para sa kanyang mga komento sa blog post Isha Sagi ni: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. I wouldn’t have put the <Orderby> sa tamang lugar nang hindi kanyang komento.

Umaasa ako na magsulat ito up ng higit na malinaw na may mga screen shot sa lalong madaling panahon, pero kung sakali hindi ko magawa, hindi bababa sa ko ginawa ito magkano.

</dulo>

SharePoint Tampok & Mga Solusyon sa Pangangasiwa ng — Huwag Kalimutan ang U sa CRUD (o ang D para sa na mahalaga)

Kapag pinagsama-sama namin ang gastos ng isang napakahusay na oras na pag-iisip tungkol sa mga solusyon sa SharePoint — kung paano lumikha ng mga ito, na tool upang gamitin, kung ano ang mangyayari kapag mabigo silang i-deploy, Timer ng mga trabaho, mga saklaw, at iba pa. 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, mula sa isang pananaw ng haka-haka na disenyo, than deploying them. Deployment is basically a cookbook affair. Typically, i-install ang isang tampok, siguro ang isang tampok na receiver-load ng ilang mga data sa isang listahan, that sort of thing. Gayunman, retracting ay potensyal na mas kumplikado.

Ang isang naibigay na solusyon ay maaaring lumikha artifacts tulad ng mga ito:

  • Uri ng Nilalaman
  • Kahulugan ng Listahan
  • Kahulugan ng Site
  • Data sa isang listahan
  • Kahit na receiver
  • InfoPath form

Ang listahan napupunta sa.

Habang ito ay malinaw naman mahalaga sa disenyo ng isang solusyon na instantiates mga artifacts nang tama, 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, kung ano ang mangyayari kapag ang solusyon ay Binawi? 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.

Upang makatulong na ito, create a matrix that lists each artifact your solution deploys to SharePoint. List three columns per artifact, isa para lumikha, update and delete. For each case, matukoy ang tamang kahihinatnan para sa operasyon na.

This sort of analysis is obviously best done before the solution is ever deployed to a SharePoint farm. Gayunman, tulad ng paninigarilyo, 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, ngunit hindi bababa sa magkakaroon ka na ilagay ang isang kahon sa paligid ng problema.

</dulo>

Mag-subscribe sa aking blog.

Sundin ako sa Twitter sa http://www.twitter.com/pagalvin

Technorati Tags:

Mabilisang pag-aayos: Mga Serbisyo sa Web na Makipag-ugnay sa SharePoint, InvalidOperationException

Ang isang milyong taon na ang nakalipas, I helped developed a web service that was invoked via a custom action for a SharePoint Designer workflow. Sa linggong ito, client ang Nais upang ilipat ito sa produksyon (sa wakas!) kaya ginawa namin.

Ang custom action na nagtrabaho fine, ngunit ang mga serbisyo sa web mahihingi ito ay hindi, pagbigay sa amin ang error na ito:

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, ito ay nagtrabaho fine.

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

</dulo>

Mag-subscribe sa aking blog.

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

Technorati Tags:

Mabilis at madali: Kumuha ng SPFolder SPItemList

Ako patuloy na tumatakbo papunta sa problemang ito at ang Google ay hindi mukhang upang maunawaan kung ano ang gusto kong gawin, kaya naisip ko na gusto kong isulat ito pababa.

Ko ang paggawa ng maraming kaganapan receiver pag-debug sa huling linggo o dalawang. The ER is defined against a document library. The individual items in the document library are tightly related to their parent folders. Kaya, I am always getting the folder of the item for various manipulations. While debugging, Kailangan ko upang i-update ang metadata ng isang folder para sa isang partikular na item na ang ID alam ko.

Narito ang isang maliit na application console (dinisenyo upang tumakbo sa mga server sa sakahan) na tumatagal ng dalawang argumento: ang ID ng item at isang halaga upang italaga sa isang field, "Approval Status". It hard codes a lot of stuff and has no error checking.

Ang code ay kamukha up ng isang hard-code na 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.

Kung sinuman ang nagmamalasakit upang mag-alok ng isang pumupuna o magmungkahi ng isang mas mahusay na paraan upang makuha ang folder ng isang item, mangyaring mag-iwan ng komento.

<kodigo>
paggamit Sistema;
paggamit System.Collections.Generic;
paggamit System.Text;
paggamit Microsoft.SharePoint;
paggamit System.Collections;

namespace Conchango
{
    /// <buod>
 /// </buod>
 klase ManualFolderUpdate
    {
        statik walang bisa Pangunahin(pisi[] args)
        {
            pisi msh = "ManualFolderUpdate (v1.0): "; // msh = "Message Header"

 Mag-aliw.WriteLine(msh + "Starting up.  Huling ako ay binago sa 08/04/08.");

            pisi url = http://localhost/xyzzy;

            paggamit (SPSite oSPSite = bago SPSite(url))
            {

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

                    Mag-aliw.WriteLine(msh + "Got the document library.");

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

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

                    FolderID = System.Magpasampalatya.ToInt32(args[0].ToString());
                    Mag-aliw.WriteLine("Seeking folder for item: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Mag-aliw.WriteLine(msh + "Got the parent folder.");

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

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

                    Mag-aliw.ReadLine();

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

                    Mag-aliw.WriteLine(msh + "Finished updating the folder.  Lumalabas.");

                } // gamit SPWeb

            } // gamit SPSite

 Mag-aliw.WriteLine(msh + "Finished.");

        } // Pangunahin

    } // class na foldersync
} // namespace
</kodigo>

</dulo>

Mag-subscribe sa aking blog.

Technorati Tags:

Pagtatago ng Mga Custom na Mga Pagkilos sa SharePoint

Ilang mga buwan na nakalipas, habang nagtatrabaho sa isang proyekto para sa isang client, I created a feature. Among other things, na ang tampok na tinukoy ng isang pasadyang aksyon (mga lumitaw sa ilalim ng mga setting ng site). The only purpose for this custom action was to demonstrate to me that the feature activation was working as expected. Talaga, Ginamit ko ito bilang isang magaspang na paraan ng pag-debug.

Karamihan sa aking kahihiyan, ang pag-debug artepakto ginawa ng paraan mula sa dev sa UAT at sa produksyon bago isang tao nakuha sa paligid sa pagtatanong, "what is this xyzzy link?"

Sa ngayon, Ikinalulungkot namin sa production at ko talagang ayaw mong i-uninstall ang tampok, fix elements.xml and then reinstall.

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

"CustomActions are not copied into the database, ang mga ito ay basahin nang direkta mula sa Elements.xml file at makopya ang application ng estado sa runtime. Kaya, hindi mo kailangang i-deactivate, i-uninstall, muling i-install, at muling isaaktibo ang Tampok na alisin ang CustomAction. Lang alisin ito mula sa Elements.xml file at recycle ang application pool(s) maapektuhan sa. Ang susunod na oras na Tampok ay nasa saklaw, hindi mo makikita ang CustomAction na ngayon."

Sinundan ko ang kanyang mga tagubilin at, mangyari pa, gumagana ang mga iyon.

Sa aking kaso, 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, Naniniwala akong kailangan mong gawin ang pagbabago sa bawat.

</dulo>

Mag-subscribe sa aking blog.

Mabilisang pag-aayos: Access SharePoint Site Throws [HttpException (0x80004005): Request time out.]

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" isang walang-kaugnayang site ay naging masyadong mabagal at madalas na nag-time out sa error na ito:

[HttpException (0x80004005): Request time out.]

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 ang mapagkakatiwalaan ?nilalaman = 1 debug ng diskarteng, Ako ay sa katunayan mahanap 11 web bahagi sa pahina, only two of which were visible. Even better (mula sa isang let's-pag-asa-ko-find-bagay-pangit-dito-na-ko-maaari-ayusin pananaw), three of those closed web parts had a name of "Error".

Tinanggal ko ang mga bahagi web (kung saan mismo ang kumuha ng isang nakakagulat na matagal na panahon) and that solved the problem. For today 🙂

</dulo>

Mag-subscribe sa aking blog.

Technorati Tags:

Invoking SSRS Mga Serbisyo sa Web Mula sa WSS / Moss sa FBA Kapaligiran

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: Hindi awtorisado
  • Bagay Inilipat

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

Ako kalaunan natanto na ako ay nagkaroon -bookmark ng isang 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 (bilang ng 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".

Narito ang code na nagtrabaho para sa amin:

ReportingService2006 rs = sero; 
// Patunayan Authentication auth = bago Pagpapatunay(); 
auth.Url = "http://URL / _vti_bin / Authentication.asmx";
auth.CookieContainer =
bago CookieContainer();
LoginResult resulta = auth.Login("userid", "password");
kung (result.ErrorCode == LoginErrorCode.NoError) 
{
// Walang mga error, kaya makuha ang cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(bago Uri(auth.Url));
Cookie authCookie = cookies[result.CookieName];
rs =
bago ReportingService2006();
rs.Url =
"http://server/_vti_bin/ReportServer/ReportService2006.asmx";
rs.CookieContainer =
bago CookieContainer();
rs.CookieContainer.Add(authCookie);
}
sumubok
{
  rs.CreateSubscription(mag-ulat, extSettings, DESC, eventType, matchData, parameters1);
}
abutin (Exception hal)
{
  Console.WriteLine(ex.Message.ToString());
}

Ko mabibigyang kahulugan ang mga bagay upang gumana tulad nito:

  • Ang aming web bahagi ay kailangang i-dial up ang authentication serbisyo at sabihin, "Hey, Tony, ito ay sa akin!".
  • Authentication service tugon sinasabi, "Hey, I know you. How are the kids? Here’s a token."
  • Tinatawag namin up ang SSRS serbisyo at sabihin, "Tony sent me, narito ang token."

</dulo>

Mag-subscribe sa aking blog.

Mabilis at simpleng: Maglaan ng isang Web Site Paggamit ng SharePoint Bagay Model Sa 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.

Ang code na ito ay lumilikha ng isang bagong site Wiki:

 SPSite siteCollection;

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

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy Title",
        "xyzzy description", 1033, SPWebTemplate.WebTemplateWIKI, hindi totoo, hindi totoo);

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

Kung ikaw hanapin for "Webs.Add()", makakahanap ka ng isang bilang ng mga napaka-kapaki-pakinabang na mga entry sa blog, MSDN articles and SDK documentation that go into depth on this subject. I definitely recommend sa site na ito.

</dulo>

Mag-subscribe sa aking blog.

Technorati Tags: