بایگانی دسته بندی: شیرپوینت توسعه

تقویم بامبو در تعامل با شیرپوینت باعث "یک خطای غیر منتظره رخ داده است"

امروز, 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, a “application server” for indexing and InfoPath and a clustered SQL back end.

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, just that sentence.

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, suddenly, it showed me a nice orderly error message:

image

I don’t know what was happening or what I did to get the controlled error message to display other than appending the ?contents=1 bit of the query string.

This is probably a very rare edge case but if you get that message, “An unexpected error occurred” go ahead and add ?contents=1 to the query string and see where that leads.

</پایان>

مشترک شدن در وبلاگ من.

من در توییتر در http://www.twitter.com/pagalvin

برچسب ها: ,

با استفاده از رفلکتور در Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal has put up an article about alerts and views ("Which views can be used when Creating an Alert ?"), which is interesting on its own merits. اما, 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" for lack of a better word (he explains this much better than I do 🙂 ).

At this point in the SharePoint era, 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. اما, if you think you need it but don’t really know how, Michael’s write-up seems like a great tutorial on this subject.

</پایان>

مشترک شدن در وبلاگ من.

من در توییتر در http://www.twitter.com/pagalvin

Sorting Calendar Items in the Calendar View

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 (unless I missed something real obvious).

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. پس, if I add "Session 02" and then "Session 01" to the calendar, it shows them in that order (i.e, Session 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>". به طور خاص, there’s this gem:

<پرس و جو>
<جایی که>
<DateRangesOverlap>
<FieldRef Name="EventDate"/>
<FieldRef Name="EndDate"/>
<FieldRef Name="RecurrenceID"/>
<Value Type="DateTime">
<Month/>
</ارزش>
</DateRangesOverlap>
</جایی که>
<OrderBy><FieldRef Name="Session_x0020_ID" /></OrderBy>
</پرس و جو>

(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 بکی 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.

</پایان>

ویژگی های شیرپوینت & راه حل مدیریت — آیا U در CRUD را فراموش کرده ام (یا D که برای ماده)

ما جمعی صرف یک معامله بزرگ از زمان تفکر در مورد راه حل های شیرپوینت — چگونگی بوجود آوردن آنها, که ابزاری برای استفاده, چه اتفاقی می افتد زمانی که آنها موفق به استقرار, مشاغل تایمر, حوزه, غیره. 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, از یک دیدگاه طراحی مفهومی, than deploying them. Deployment is basically a cookbook affair. Typically, نصب یکی از ویژگی های, شاید یک گیرنده از ویژگی های بارگذاری برخی از داده ها را در یک لیست, that sort of thing. اما, طبیعتی است که به طور بالقوه پیچیده تر است.

یک راه حل داده شده ممکن است آثار مکشوفه از این قبیل ایجاد کنید:

  • نوع محتوا
  • لیست تعریف
  • تعریف سایت
  • داده ها در یک لیست
  • حتی گیرنده
  • فرم های InfoPath

لیست در می رود.

در حالی که آن را به وضوح مهم برای طراحی یک راه حل است که تمثل آن شی ء به درستی, 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, وقتی که راه حل به عقب چه اتفاقی می افتد? 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.

برای کمک به این, create a matrix that lists each artifact your solution deploys to SharePoint. List three columns per artifact, یکی برای ایجاد, به روز رسانی و حذف. For each case, تعیین نتیجه صحیح برای انجام این عملیات.

This sort of analysis is obviously best done before the solution is ever deployed to a SharePoint farm. اما, مانند سیگار کشیدن, 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, اما حداقل شما یک جعبه در اطراف مشکل قرار داده.

</پایان>

مشترک شدن در وبلاگ من.

من در توییتر در http://www.twitter.com/pagalvin

تعمیر سریع: خدمات وب است که تعامل با شیرپوینت, InvalidOperationException

یک میلیون سال پیش, I helped developed a web service that was invoked via a custom action for a SharePoint Designer workflow. این هفته, مشتری می خواست به این حرکت به تولید (سرانجام!) بنابراین ما.

عمل سفارشی خوب کار می کرد, اما وب سرویس آن استناد نمی, دادن به ما این خطا:

System.InvalidOperationException: این عمل را می توان تنها بر روی یک کامپیوتر است که توسط کاربرانی که مجوز در SQL Server از پایگاه داده پیکربندی به عنوان خوانده شده به سرور یک مزرعه ملحق. برای اتصال این سرور به سرور مزرعه, استفاده از محصولات شیرپوینت و فن آوری پیکربندی جادوگر, واقع در منوی Start ابزار اداری.
at Microsoft.SharePoint.Administration.SPWebApplication.Lookup(یوری requestUri)

Turns out that I forgot to add the service to the SharePoint application pool in IIS. Once I did that, مشغول به کار خوب.

این فروم MSDN ارسال به من نشانه من نیاز: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</پایان>

مشترک شدن در وبلاگ من.

من را در توییتر دنبال کنید: http://twitter.com/pagalvin

برچسب ها:

دسترسی سریع و آسان: SPFolder از SPItemList

من دائم در حال اجرا را به این مشکل و گوگل به نظر می رسد هرگز به درک آنچه من می خواهم, بنابراین من من این پایین بنویسید.

من انجام شده است بسیاری از اشکال زدایی رویداد گیرنده در دو هفته گذشته یا. The ER is defined against a document library. The individual items in the document library are tightly related to their parent folders. پس, I am always getting the folder of the item for various manipulations. While debugging, من نیاز به به روز رسانی متا دیتا ها را از یک پوشه برای یک آیتم خاص که ID من می دانم.

در اینجا یک برنامه کنسول کمی (طراحی شده برای اجرا بر روی سرور در مزرعه) که دو آرگومان طول می کشد: شناسه یک آیتم و یک مقدار را به او واگذار به یک فیلد, "Approval Status". It hard codes a lot of stuff and has no error checking.

کد نظر می رسد تا یک سایت سخت رمزی, 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.

اگر کسی مراقبت به ارائه انتقاد یا پیشنهاد راه بهتری برای بدست آوردن پوشه مورد, لطفا ترک یک نظر.

<قانون>
با استفاده از سیستم;
با استفاده از System.Collections.Generic;
با استفاده از System.Text;
با استفاده از Microsoft.Sharepoint در;
با استفاده از System.Collections;

فضای نام Conchango
{
    /// <خلاصه>
 /// </خلاصه>
 کلاس ManualFolderUpdate
    {
        ایستا از درجه اعتبار ساقط اصلی(رشته[] استدلال)
        {
            رشته MSH = "ManualFolderUpdate (V1.0): "; // msh = "Message Header"

 کنسول.WriteLine(MSH + "Starting up.  من آخرین 08/04/08 تغییر یافتهاست.");

            رشته URL = http://localhost/xyzzy;

            با استفاده از (SPSite oSPSite = جدید SPSite(آدرس))
            {

                با استفاده از (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documents"];

                    کنسول.WriteLine(MSH + "Got the document library.");

                    کنسول.WriteLine(MSH + "Doc lib item count: [" + docLib.ItemCount + "].");

                    اعضای هیات FolderID = 0;
                    رشته NewStatus = "xyzzy";

                    FolderID = سیستم.تبدیل.ToInt32(استدلال[0].ToString());
                    کنسول.WriteLine("Seeking folder for item: [" + FolderID + "].");

                    SPListItem لی = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    کنسول.WriteLine(MSH + "Got the parent folder.");

                    NewStatus استدلال =[1].ToString();
                    کنسول.WriteLine("Setting status to [" + NewStatus + "].");

                    کنسول.WriteLine("Press return to commit the update or CTRL-C to abort.");

                    کنسول.ReadLine();

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

                    کنسول.WriteLine(MSH + "Finished updating the folder.  خروج است.");

                } // با استفاده از SPWeb

            } // با استفاده از SPSite

 کنسول.WriteLine(MSH + "Finished.");

        } // اصلی

    } // کلاس foldersync
} // فضای نام
</قانون>

</پایان>

مشترک شدن در وبلاگ من.

پنهان کردن عملیات های سفارشی در SharePoint

چند ماه قبل, در حالی که کار بر روی یک پروژه برای مشتری, I created a feature. Among other things, که قابلیت تعریف یک عمل سفارشی (این به نظر می رسد تحت تنظیمات سایت). The only purpose for this custom action was to demonstrate to me that the feature activation was working as expected. بطور اساسی, من آن را به عنوان یک فرم خام اشکال زدایی استفاده می شود.

خیلی خجالت من, این مصنوع اشکال زدایی راه خود را از توسعه تمدن به UAT و به تولید ساخته شده قبل از اینکه کسی را در اطراف به درخواست کردم, "این لینک xyzzy است?"

By now, ما در تولید هستید و من واقعا نمی خواهید به حذف از ویژگی های, رفع elements.xml و سپس نصب مجدد.

تاد بدتری از با اشاره به یک راه آسان که مسئولیت رسیدگی به آن. In his words:

"CustomActions are not copied into the database, they are read directly from the Elements.xml file and copied into application state at runtime. پس, you don’t need to deactivate, uninstall, reinstall, and reactivate the Feature to remove the CustomAction. Just remove it from the Elements.xml file and recycle the application pool(ها) effected. The next time the Feature is in scope, you won’t see the CustomAction anymore."

I followed his instructions and, البته, they work.

در مورد من, 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, I believe you’ll have to make the change in each.

</پایان>

مشترک شدن در وبلاگ من.

تعمیر سریع: دسترسی به سایت شیرپوینت می اندازد [HttpException (0x80004005): درخواست به پایان رسیده است.]

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, اما "ناگهان" سایت نامربوط شد بسیار آهسته است و اغلب با این خطا به پایان رسیده:

[HttpException (0x80004005): درخواست به پایان رسیده است.]

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 the trusty ?contents=1 debug technique, I did in fact find 11 web parts on the page, only two of which were visible. Even better (from a let’s-hope-I-find-something-ugly-here-that-I-can-fix perspective), three of those closed web parts had a name of "Error".

I deleted those web parts (which itself took a surprisingly long time) and that solved the problem. For today 🙂

</پایان>

مشترک شدن در وبلاگ من.

برچسب ها:

احضارکمکدرمورد SSRS خدمات وب از WSS / خزه در محیط زیست FBA

ما نیاز به فراخوانی 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: مجاز
  • شی منتقل شده

شی "منتقل شد" پیام جالب ترین به دلیل آن بود که شی "" (خدمات ما SSRS) بود "منتقل شد" to login.aspx. This clearly meant we had some kind of authentication problem.

در نهایت متوجه شدم که من تا به حال در bookmarked وبلاگ 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 (به عنوان 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".

در اینجا کدی که برای ما کار می کرد:

ReportingService2006 تومان = صفر; 
// اعتبار دادن تأیید هویت احرازهویت = جدید تصدیق(); 
auth.Url = "HTTP://URL / _vti_bin / Authentication.asmx";
auth.CookieContainer =
جدید CookieContainer();
LoginResult نتیجه = auth.Login("userid", "password");
اگر (result.ErrorCode == LoginErrorCode.NoError) 
{
// بدون خطا, بنابراین دریافت کوکی ها.
کوکی ها CookieCollection = auth.CookieContainer.GetCookies(جدید یوری(auth.Url));
کوکی authCookie = کوکی ها[result.CookieName];
RS =
جدید ReportingService2006();
rs.Url =
"HTTP://server/_vti_bin/ReportServer/ReportService2006.asmx";
rs.CookieContainer =
جدید CookieContainer();
rs.CookieContainer.Add(authCookie);
}
امتحان
{
  rs.CreateSubscription(گزارش, extSettings, نزولی, eventType, matchData, parameters1);
}
گرفتن (سابق استثنا)
{
  مثلا عدم(ex.Message.ToString());
}

من تفسیر چیزهایی شبیه به این کار می کنند:

  • بخشی از وب ما نیاز به شماره گیری نمایید تا سرویس احراز هویت و می گویند, "Hey, تونی, آن را به من!".
  • پاسخ احراز هویت سرویس گفت:, "Hey, I know you. How are the kids? Here’s a token."
  • ما تماس بگیرید تا خدمات SSRS و می گویند, "Tony sent me, در اینجا کلمه رمز است."

</پایان>

مشترک شدن در وبلاگ من.

سریع و ساده: تهیه وب سایت با استفاده از مدل شیء شیرپوینت در 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.

این کد را ایجاد ویکی جدید سایت:

 SPSite siteCollection;

    siteCollection = جدید SPSite("http://conchang o9l8qi");

    SPWeb W = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy Title",
        "xyzzy description", 1033, SPWebTemplate.WebTemplateWIKI, غلط, غلط);

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

اگر شما جستجو for "Webs.Add()", شما یک تعداد نوشته های بلاگ بسیار مفید پیدا کنید, MSDN articles and SDK documentation that go into depth on this subject. I definitely recommend این سایت.

</پایان>

مشترک شدن در وبلاگ من.

برچسب ها: