</dulo>
Hunyo 2008 SUGDC Conference — Yan ang I-wrap
Dinaluhan ko ang aking unang kailanman SharePoint conference this past weekend and it was a blast.
Huwebes hapon, Ako ay nagdulot pababa sa Virginia, ginagabayan ng aking mga bagong binili $50 GPS appliance plug-in thing to my phone. The device was flawless. After the five hour drive, Ako ang nasa enerhiya na gawin ang isang magaling na run sa pagtapak kiskisan at pagkatapos ay, mas nakakagulat, had the energy to head to the lobby for an advertised speaker’s cocktail hour. Conference n00b that I am, it turned out that the cocktail hour was really a ruse to get speakers to show up and help stuff papers and swag into shoulder bags for conference attendees 🙂
Had a hard time sleeping because I was speaking first thing Friday AM. Nervousness, a nagging feeling that I needed to add a slide to my presentation and a very disturbing cat show on Animal Planet kept me up late. Since I went to sleep late, I naturally got up early. I did add a fairly detailed technical architecture slide. It was well worth the effort because the 25 minuto ng Q&A would have been very awkward without it. I was lucky to get the first slot in the technical track. Sahil Malik was originally going to speak Friday AM and I was going to speak Saturday but he needed to swap times. This allowed me to do my presentation and then sit back and enjoy everything going forward Friday and Saturday.
The presentation went OK. I definitely have room to improve it. I spoke about how we can access and use web services from a SharePoint Designer workflow using a custom action. Over time, Ako ay itali ang impormasyong ito sa aking serye sa ibabaw sa EUSP.com for End Users trying to get the most use out of that tool. I blew through my slides and demo in 35 minuto, to my dismay at the time. Sa kabutihang-palad, Q&Ang isang buhay na buhay na noon ay, no doubt helped by the fact that it was early morning before lunch. Q&A is my favorite part of any presentation.
Mayroong maraming mga kagiliw-giliw na paksa at Umaasa ako sa blog tungkol sa mga ito nang mas detalyado sa linggong ito (Na nagpapahintulot sa Koponan, gaya ng lagi). A fellow from CMS Watch provided a highly critical yet very hopeful review of SharePoint’s position in the market. A different discussion focused on the paucity of SharePoint resources and the difficulty that recruiters have finding good talent that is also "affordable" in this very tight market. The CMS Watch guy referred to the SharePoint human resources pool as being like a "guild." I’m mainly familiar with that term in MMORPG terms and it gave me a little thrill, to be honest 🙂
The highlight of the conference was just meeting and catching up with people I’ve "known" online for a while. The best was sitting at the bar with Becky Isserman (MossLover) para 3 o 4 oras (at na, pagkatapos ko ay tapos na pag-inom para sa gabi). I don’t often get to talk about Farscape o Babylon 5 may Kansas City residente.
Bob Fox ay naroon at gaya ng dati, ay isang ipuipo ng intros, chats and just plain frenetic energy. He invited me to Saturday breakfast with Sahil Malik and that was great.
Sabado (araw 2), Mike Lotter drag ang kanyang sarili sa mga conference na magsalita tungkol sa InfoPath at pagkatapos siya ay sumali Becky sa pagtatapos ng araw na gawin ang isang uri ng pangkalahatang Q&Isang session para sa tungkol sa 30 upang 45 minuto pangunahing nakatuon sa InfoPath (Mayk) at AJAX (Becky). I wish Becky had been able to go through her full/formal presentation but I’m sure I’ll get a chance to see that one of these days. I have a feeling she’ll be "hitting the circuit" pasulong.
I could go on and on. Two last points — the financial purpose of the conference was to raise money for the Children’s Miracle Network and it raised $5,000. That was awesome. Sa wakas, Gusto kong pasalamatan publiko Gary Blatt, Gary Vaughn and Bob Fox for alerting me to and allowing me to speak at the conference. Talaga, the two Gary’s had a team of people supporting and organizing and all of you were awesome. I had high expectations before I went and it was better than I had hoped for.
Keep on the alert for the next conference scheduled for November 7th and 8th. Aside from some great content, ito ay kakila-kilabot para sa meeting up sa lahat ng mga online na personalidad na iyong kilala pamamagitan ng mga blog, nerbiyos, mga forum, at iba pa.
</dulo>
FBA at SQL Server: Ang Pag-ibig Story
My colleague has been working on a web part in an FBA environment. Among other things, the web part pulls some data from SQL server. The grand plan for this project dictates that a DBA configures data level security in SQL (as opposed to embedding a user ID in a SQL query or some other approach).
The problem is that SQL server doesn’t know anything about our FBA environment so it can’t trust us. We solved this problem by, para sa kakulangan ng isang mas mahusay na salita, manually impersonating an AD user so that we could connect to SQL such that SQL data level security works.
Even though FBA is an ASP.NET feature, we SharePoint Nation people have taught the various search engines that if you’re querying for FBA, you must mean you want know how to configure FBA in SharePoint. I failed to find find any information on how to enable an FBA oriented ASP.NET application to communicate with SQL in the way we needed.
In the course of researching this, we re-read this article: ASP.NET Impersonation
More research led us to this codproject article: http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
That helped us write our code, which I’ve included below. It’s not the most elegant stuff, ngunit ito ay nagtrabaho. I hope you find it helpful.
Narito ang code na nagtrabaho para sa amin:
protektado void btnSearchCarrier_Click(object sender, EventArgs e) { sumubok { ImpersonateUser iU = bago ImpersonateUser(); // TODO: Replace credentials iU.Impersonate("DomainName", "UserName", "Password"); // CODE // iU.Undo(); } abutin (Exception hal) { } } // Using Impersonation class as mentioned below. publiko klase ImpersonateUser { [DllImport("advapi32.dll", SetLastError = totoo)] publiko statik extern bool LogonUser( String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); [DllImport("kernel32.dll", Charset = CharSet.Auto)] pribado extern statik bool CloseHandle(IntPtr handle); pribado statik IntPtr tokenHandle = bago IntPtr(0); pribado statik WindowsImpersonationContext impersonatedUser; // Kung isama mo ang code na ito sa isang DLL, siguraduhin na hinihiling na ito // Nagpapatakbo ng may FullTrust. [PermissionSetAttribute(SecurityAction.Demand, Pangalanan = "FullTrust")] publiko walang bisa gayahin(string DOMAINNAME, string username, string password) { sumubok { // Gamitin ang function na unmanaged LogonUser upang makuha ang token ng user para sa // ang tinukoy na user, domain, at password. const int LOGON32_PROVIDER_DEFAULT = 0; // Pasadong ang parameter na ito ay nagsasanhi sa LogonUser upang lumikha ng isang pangunahing token. const int LOGON32_LOGON_INTERACTIVE = 2; tokenHandle = IntPtr.Zero; // Hakbang -1 Tawagan LogonUser upang makakuha ng handle sa isang token sa pag-access. bool returnValue = LogonUser( Username, pangalan ng domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Property tokenHandle); // tokenHandle - bagong security token kung (maling == returnValue) { int magpabasa = Marshal.GetLastWin32Error(); Console.WriteLine("LogonUser call failed with error code : " + karapatan); magtapon bagong System.ComponentModel.Win32Exception(karapatan); } // Hakbang - 2 WindowsIdentity newId = bago WindowsIdentity(tokenHandle); // Hakbang -3 impersonatedUser = newId.Impersonate(); } abutin (Exception hal) { Console.WriteLine("Exception occurred. " + ex.Message); } } /// <buod> /// Paghinto ng pagpapanggap /// </buod> publiko walang silbi ang I-undo() { impersonatedUser.Undo(); // Magbakante ang mga token. kung (tokenHandle != IntPtr.Zero) CloseHandle(tokenHandle); } }
</dulo>
Idinadagdag sa ang tradisyonal na kaalaman: SSRS nagsasabi sa Akin “rsAccessDenied”, Pero … MERON ko Talagang May Access
Ilang linggo pabalik, I was working with my developer colleague on a project involving SQL Server Reporting Services plug-in for MOSS. He was developing a web part that provides a fancy front-end to the report proper (ang pangunahing tampok sa pagiging isang matalino lookup sa isang parameter na may ilang libong mga halaga mahahanap sa likod nito).
Ito ay mahusay na gumagana sa kapaligiran ng pagbuo ngunit sa pagsubok user pagtanggap (UAT) kapaligiran, it wouldn’t work. Firing up the debugger, Gusto naming makita ang mga detalye tulad ng pagbubukod na ito:
Ang mga pahintulot na ibinigay sa gumagamit 'UAT_domain mosssvc' ay hindi sapat para gawin ang kilos.(rsAccessDenied).
Kung gagawin mo ang isang live na paghahanap sa itaas error, you find it’s quite common. Scarily common. The worst kind of common because it has many different potential root causes and everyone’s suggested solution "feels" karapatan. We probably tried them all.
Sa aming kaso, the problem was that we had done a backup/restore of DEV to UAT. Somewhere in the data, something was still referring to "DEV_domain" (instead of the updated "UAT_Domain"). We created a new site, Idinagdag ang web bahagi at na malutas ang aming mga problema.
Sana ito ay i-save ang isang tao ng isang oras o dalawang down ang linya.
</dulo>
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>
In-uri FAST Pagsasanay ay Magaling
Ako nagsisimula araw 4 ng kasosyo sa pagsasanay FAST ni ulunan up sa pamamagitan ng Larry Kaye dito sa Needham, MA.
Matatagpuan ang 5-araw na session ay nasira down sa mga klase (3 at 2 araw ayon sa pagkakabanggit) entitled "FAST ESP: Pagbuo ng Custom Search Aplikasyon para sa Alliance Kasosyo ako" and "FAST ESP: Developing Custom Search Applications for Alliance Partners II".
Ito ay isang tunay na boot kampo klase uri. Ang materyal ay malalim (napaka, mahimbing). Ang tagapagturo (Larry) malinaw na alam ng kanyang mga bagay-bagay. I highly recommend this training if you considering it.
</dulo>
SharePoint at FAST — peanut butter ang Reese ni tasa ng Enterprise Apps?
I’ve finished up day 2 of FAST training in sunny Needham, MA, and I’m bursting with ideas (which all the good training classes do to me). One particular aspect of FAST has me thinking and I wanted to write it down while it was still fresh and normal day-to-day "stuff" pushed it out of my head.
We SharePoint WSS 3.0 / MOSS implementers frequently face a tough problem with any reasonably-sized SharePoint project: How do we get all the untagged data loaded into SharePoint such that it all fits within our perfectly designed information architecture?
Often enough, this isn’t such a hard problem because we scope ourselves out of trouble: "We don’t care about anything more than 3 months old." "We’ll handle all that old stuff with keyword search and going-forward we’ll do it the RIGHT way…" Etc.
Pero, what happens if we can’t scope ourselves out of trouble and we’re looking at 10’s of thousands or 100’s of thousands (or even millions) of docs — the loading at tagging of which is our devout wish?
FAST might be the answer.
FAST’s search process includes a lot of moving parts but one simplified view is this:
- A crawler process looks for content.
- It finds content and hands it off to a broker process that manages a pool of document processors.
- Broker process hands it off to one of the document processors.
- The document processor analyzes the document and via a pipeline process, analyzes the bejeezus out of the document and hands it off to an index builder type process.
On the starship FAST, we have a lot of control over the document processing pipeline. We can mix and match about 100 pipeline components and, most interestingly, we can write our own components. Like I say, FAST is analyzing documents every which way but Sunday and it compiles a lot of useful information about those documents. Those crazy FAST people are clearly insane and obsessive about document analysis because they have tools and/or strategies to REALLY categorize documents.
Kaya … using FAST in combination with our own custom pipeline component, we can grab all that context information from FAST and feed it back to MOSS. It might go something like this:
- Document is fed into FAST from MOSS.
- Normal crazy-obsessive FAST document parsing and categorization happens.
- Our own custom pipeline component drops some of that context information off to a database.
- A process of our own design reads the context information, makes some decisions on how to fit that MOSS document within our IA and marks it up using a web service and the object model.
Talaga, no such automated process can be perfect but thanks to the obsessive (and possibly insane-but-in-a-good-way FAST people), we may have a real fighting shot at a truly effective mass load process that does more than just fill up a SQL database with a bunch of barely-searchable documents.
</dulo>
Learning Tungkol sa Mga End User Sa www.EndUserSharePoint.com
Mark Miller sa ibabaw http://www.endusersharepoint.com has built, sa aking karanasan, the best end-user focused SharePoint site in the ‘sphere. Sa nakaraang buwan, he has enlisted some of the premier end-user focused bloggers around to contribute to the "front page" sa isang regular na batayan, including but not limited to Paul Culmsee, Chris Quick, at Dessie Lunsford. He has others lined up and ready to contribute as their schedules allow.
I jumped on the chance to participate and my inaugural post is here. I’m writing a series on how to use SharePoint Designer to create first-class business workflow solutions. In keeping with the EUSP.com’s focus, those articles will always keep the End User front and center.
I personally tend to divide the SharePoint world into three broad groups: SharePoint consultants, full-time SharePoint staff developers and end users. When I write, I often ask myself, which of these groups might be interested in the subject? Most often, I end up writing for the first two (technical) groups, mainly because I’m a consultant myself; it’s always easier and more authentic to write about those things with which you’re most familiar on a personal level.
As I’ve noted before, the end user community is far, far larger than the technical community. EUSP.com is top-notch and I heartily recommend it to all three groups. The site’s laser focus is obviously valuable to end users. Gayunman, we developers and consultants can only be better at our profession if we can understand and effectively respond to the needs of the end users we serve. I know I need all the help I can get 🙂 Tingnan ito.
</dulo>
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(); kung (result.ErrorCode == LoginErrorCode.NoError) 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>
Naisip mo Isinagawa Ang iyong Buwanang Paghahanap ng Pagsusuri?
Ito ay isang mahusay na kasanayan, marahil kahit na isang Best Practice, upang suriin ang iyong mga paghahanap uulat minsan sa isang buwan at hanapin para sa mga pagkakataon upang magdagdag ng mga pinakamahusay na taya, tune your thesaurus and maybe even uncover some business intelligence that is otherwise hidden to management.
It’s already the 3rd of the month. Time’s awastin’ 🙂
</dulo>