Цатегори Арцхивес: Развој система СхареПоинт

Бамбус Календар Интеракција са СхареПоинт Узроци "неочекиване грешке"

Данас, 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, "апликативни сервер" за индексирање и ИнфоПатх и кластер СКЛ леђа крај.

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, Управо та реченица.

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, изненада, то ми је показао леп уредан грешци:

image

Ја не знам шта се дешава или шта сам урадио да се контролисано да прикаже поруку о грешци осим додавањем ?contents=1 bit of the query string.

Ово је вероватно врло редак случај ивице, али ако добијете ту поруку, "Дошло је до неочекиване грешке", само напред и додајте ?Садржај = 1 у стрингу упита да видимо где то води.

</крај>

Претплатите се на мој блог.

Следите ме на Туиттер на http://www.twitter.com/pagalvin

Тецхнорати Тагс: ,

Коришћење рефлектор на Мицрософт.СхареПоинт.длл

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" у недостатку боље речи (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

Сортирање ставки календара у приказу календара

Ја користим календар за праћење панел дискусије на одређени дан,,en,Имам две седнице,,en,подне и после подне,,en,Желим да направим приказ који показује јутарње сесије само наведени абецедним редом преко ИД сесије,,en,Ово је мало незгодно да постигне,,en,Ја могу лако створити филтрирани поглед показује само догађаје тог дана,,en,Календар ће показати све те догађаје и ако су сви се одржати у истом сату,,en,то им наводе раме уз раме у отвору за сат,,en,То је сјајно,,en,Незгодна је то што,,en,жели да их наведете у формат ИД,,en,ако додам "Сесија 02,,en,и онда "Сесија 01,,en,Да их наведете у сесија ИД би,,en,Конфигуришите приказ помоћу веб корисничког интерфејса,,en,Нема среће,,en,Не постоје опције за методу предмете на овај начин,,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 (осим ако сам нешто пропустио прави очигледно).

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, подразумевано, it wants to list them in ID format. Тако, if I add "Session 02" and then "Session 01" у календар, их показује у том циљу (и.е, Седница 02 а затим Сесија 01). To list them in Session ID order, Мислио сам да пробам ове ствари:

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

    Пошто се то не ради, 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, Можда ће, као и календар?

  2. Измените део веб, look for an "export" функција и … БЗЗЗТ! 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, који оставља СхареПоинт Десигнер.

  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, али је ту: "<ЛистВиевКсмл …. >кодирани лудило</ЛистВиевКсмл>". Посебно, ту је овај драгуљ:

<Питање>
<Где>
<ДатеРангесОверлап>
<FieldRef Name="EventDate"/>
<FieldRef Name="EndDate"/>
<FieldRef Name="RecurrenceID"/>
<Value Type="DateTime">
<Месец />
</Вредност>
</ДатеРангесОверлап>
</Где>
<ОрдерБи><FieldRef Name="Session_x0020_ID" /></ОрдерБи>
</Питање>

(Ја сам декодира &То;Је и &ГТ-а и да их деле се на више линија ради јасноће у).

Додајте <ОрдерБи> битни и сада га сортира по ИД сесије, Не унутрашња тацка ИД.

Гигантски савет о’ шешир на Беки Иссерман за њен коментар на блогу Иша Саги-а: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. I wouldn’t have put the <ОрдерБи> на правом месту, без њеног коментара.

Надам се да пишем ово јасније са сцреен схот ускоро, али у случају да ја не радим, барем сам ово урадио много.

</крај>

СхареПоинт Карактеристике & Решења за управљање — Не заборавите да у у Цруд (или Д за то питање)

Ми смо заједно проводе много времена размишљајући о СхареПоинт решења — како их створити, инструмент који се користи, шта се дешава када не успеју да се распореди, тимер послови, СЦОПЕС, итд. 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. Међутим, повлачите је потенцијално комплекснији.

Дато решење може да створи артефакте попут ових:

  • Тип садржаја
  • Листа Дефиниција
  • Сите Дефинитион
  • Подаци у листи
  • Чак пријемници
  • ИнфоПатх обрасци

Списак се наставља.

Иако је очигледно важно да прилагођавање решења инстанцира исправно те артефакте, 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

Куицк Фик: Сервиси који комуницирају са СхареПоинт, ИнвалидОператионЕкцептион

Пре милион година, I helped developed a web service that was invoked via a custom action for a SharePoint Designer workflow. Ове недеље, Клијент је желео да се пресели у производњу (коначно!) То смо и урадили.

Прилагођена радња радила добро, али веб сервис је позвао није, дајући нам ову грешку:

Систем.ИнвалидОператионЕкцептион: 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(Ури рекуестУри)

Turns out that I forgot to add the service to the SharePoint application pool in IIS. Once I did that, је радила добро.

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

</крај>

Претплатите се на мој блог.

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

Тецхнорати Тагс:

Брзо и лако: Набавите СПФолдер од СПИтемЛист

Стално ради на овом проблему и Гоогле никада не изгледа да разумеју оно што желим да радим, па сам мислио да пишем доле.

Радила сам много дебаговање догађаја пријемника у последњој недељи или две. 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, 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, оставите коментар.

<code>
коришћење Систем;
коришћење Систем.Цоллецтионс.Генериц;
коришћење Систем.Тект;
коришћење Microsoft.SharePoint;
коришћење Систем.Цоллецтионс;

намеспаце Цонцханго
{
    /// <резиме>
 /// </резиме>
 класа ManualFolderUpdate
    {
        статички воид Главни(ниска[] аргс)
        {
            ниска msh = "ManualFolderUpdate (v1.0): "; // msh = "Message Header"

 Конзола.ВритеЛине(msh + "Starting up.  I was last modified on 08/04/08.");

            ниска url = http://localhost/xyzzy;

            коришћење (СПСите oSPSite = нови СПСите(УРЛ))
            {

                коришћење (СПВеб oSPWeb = oSPSite.OpenWeb())
                {
                    СПЛист docLib = oSPWeb.Lists["Documents"];

                    Конзола.ВритеЛине(msh + "Got the document library.");

                    Конзола.ВритеЛине(msh + "Doc lib item count: [" + docLib.ItemCount + "].");

                    инт FolderID = 0;
                    ниска NewStatus = "xyzzy";

                    FolderID = System.Претворити.ТоИнт32(аргс[0].ТоСтринг());
                    Конзола.ВритеЛине("Seeking folder for item: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    СПФолдер thisItemFolder = li.File.ParentFolder;

                    Конзола.ВритеЛине(msh + "Got the parent folder.");

                    NewStatus = args[1].ТоСтринг();
                    Конзола.ВритеЛине("Setting status to [" + NewStatus + "].");

                    Конзола.ВритеЛине("Press return to commit the update or CTRL-C to abort.");

                    Конзола.Реадлине();

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

                    Конзола.ВритеЛине(msh + "Finished updating the folder.  Exiting.");

                } // using SPWeb

            } // using SPSite

 Конзола.ВритеЛине(msh + "Finished.");

        } // Главни

    } // class foldersync
} // намеспаце
</code>

</крај>

Претплатите се на мој блог.

Тецхнорати Тагс:

Скривали прилагођене радње у СхареПоинт

Пре неколико месеци, док је радио на пројекту за клијента, 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. У основи, Користио сам га као сирове облик отклањање грешака.

Много на моје срамоте, ово отклањање грешака артефакт нашла свој пут од дев до УАТ и на производњу пре него што неко стигао да питам, "what is this xyzzy link?"

До сада, ми смо у производњи и ја заиста не желим да деинсталирате функцију, fix elements.xml and then reinstall.

Тод блеакер pointed out an easy way to handle it. In his words:

"CustomActions are not copied into the database, се директно читају из Елементс.кмл датотеке и апликације копирају у стање у рунтиме. Тако, не морате да деактивирате, деинсталирате, поново, и реактивирали функцију да уклони ЦустомАцтион. Само извадите га из Елементс.кмл датотеке и рециклирате базен апликације(с) извршити. Следећи пут је функција у оквиру, нећете више видети ЦустомАцтион."

Следио сам његова упутства и, наравно, раде.

У мом случају, 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, Верујем да ћете морати да се промене у сваком.

</крај>

Претплатите се на мој блог.

Куицк Фик: Приступ СхареПоинт локацији Баца [ХттпЕкцептион (0к80004005): Захтев је истекло.]

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" неповезане сајт постао веома споро и често истекло са овом грешком:

[ХттпЕкцептион (0к80004005): Захтев је истекло.]

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 поуздан ?Садржај = 1 дебуг техника, Ја нисам у ствари пронашли 11 Веб сегмената на страници, only two of which were visible. Even better (из хајде-хопе-И-финд-нешто-ружног-овде-да-се-И-поправити перспективе), three of those closed web parts had a name of "Error".

Брише оне Веб делове сам (која је и сама је изненађујуће дуго времена) and that solved the problem. For today 🙂

</крај>

Претплатите се на мој блог.

Тецхнорати Тагс:

Позивајући ССРС Веб Сервицес Од ВСС / Маховине у ФБА животне средине

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: Није овлашћен
  • Објекат Мовед

The "object moved" message was most interesting because it was saying that the "object" (ССРС наш сервис) 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 (као и од 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 rs = null; 
// Authenticate Authentication auth = нови Authentication(); 
auth.Url = "хттп://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
нови CookieContainer();
LoginResult result = auth.Login("userid", "password");
ако (result.ErrorCode == LoginErrorCode.NoError) 
{
// No error, so get the cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(нови Uri(auth.Url));
Cookie authCookie = cookies[result.CookieName];
rs =
нови ReportingService2006();
rs.Url =
"хттп://server/_vti_bin/ReportServer/ReportService2006.asmx";
rs.CookieContainer =
нови CookieContainer();
rs.CookieContainer.Add(authCookie);
}
покушати
{
  rs.CreateSubscription(report, extSettings, desc, eventType, matchData, parameters1);
}
улов (Изузетак ек)
{
  Цонсоле.ВритеЛине(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."

</крај>

Претплатите се на мој блог.

Брза и једноставна: Одредба Сајт Коришћење СхареПоинт Објецт Модел у Ц #

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.

Овај код креира нови Вики страница:

 СПСите ситеЦоллецтион;

    ситеЦоллецтион = нови СПСите("http://цонцханг-о9л8ки");

    СПВеб в = ситеЦоллецтион.ОпенВеб();

    в.Вебс.Адд("xyzzy", "xyzzy Title",
        "xyzzy description", 1033, СПВебТемплате.ВебТемплатеВИКИ, лажан, лажан);

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 овај сајт.

</крај>

Претплатите се на мој блог.

Тецхнорати Тагс: