Ako ay sumulat ng isang artikulo para sa SharePointBriefing.com and they put it up live today.
Narito ang isang teaser:
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Ako ay sumulat ng isang artikulo para sa SharePointBriefing.com and they put it up live today.
Narito ang isang teaser:
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
I’m been working on a project where I need to extract attachments from an InfoPath form. There are some good resources for parsing InfoPath forms (na lamang ang XML file, kaya talagang medyo madali).
Habang ako ay pagbuo up ang proyekto, I started by downloading an InfoPath form and saving it to my local hard drive. My c# code was reading directly from that instance. Gayunman, the InfoPath forms are really living inside a SharePoint forms library. I did a little half hearted searching to find out how to read it directly from the library and almost gave up, in which case I would have saved the form to a local temp directory and read it from there. Gayunman, there’s no need to go through those hoops as you can read it directly from the library. This little snippet shows how:
/// Class kahulugan bagay-bagay dito, kasama:
pribado SPFile mySharePointFile; /* Bahagi ng isang SPList */ // Higit pang code dito napupunta at sa loob ng isang pamamaraan ng klase mayroon kami: textReader = bago XmlTextReader(mySharePointFile.OpenBinaryStream()); textReader.WhitespaceHandling = WhitespaceHandling.Wala; textReader.Read(); // Kung ang node ay may halaga habang (textReader.Read()) { |
Sila key bit sa itaas ay na maaari naming basahin ang InfoPath nang direkta sa pamamagitan ng OpenBinaryStream() method call on the SPFile as a parameter to the constructor on XmlTextReader. It works great.
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
I have an expense entry solution for a client that leverages InfoPath and workflow. At one point during the approval process, Kailangan ko upang bumuo ng isang email na may lahat ng mga mahusay na data InfoPath pati na rin ang kalakip ang kanilang mga sarili upang (buntong-hininga) isang tao ay maaaring tumagal ng data na iyon at manu-manong muling key ito sa isang application Oracle database.
It’s not very difficult to get at or parse the InfoPath form. I didn’t know how to handle the attachments, gayunman. After an hour or two of poking around the Internets (isang kawalang-hanggan!) Nakita ko ang artikulong ito: http://support.microsoft.com/kb/892730
It provide some handy code to extract the attachment from a node in the form. (Kailangan mo pa rin mahanap ang node at ang lahat na, ngunit ito lamang ay parse ng XML).
Alam ko na ang attachment ay base64-encode at ako nagpunta ang orihinal pababa sa landas ng extracting lamang ang mga base64 data, decoding it and saving it. Gayunman, Ako mabilis na natanto Hindi ko alam kung paano makuha ang pangalan ng file mismo hanggang sa nakita ko ang nabanggit na artikulo.
Talagang ako ay natagpuan na masyadong maaga, ngunit ako ay ilagay off sa pamamagitan ng split pagkatao. Sa isang banda, the article *says* it’s good for InfoPath 2007. Pa, ang code at mga tagubilin ay ang lahat ng tungkol sa Visual Studio 2003 at mga sanggunian sa InfoPath 2003.
Ika-line, ang code na ibinigay artikulo ay mahusay na gumagana para sa akin (hanggang ngayon). I can get my InfoPath form, Maaari ko bang i-parse ito, I can find and decode the attachment and I know its name. What more can one ask of one’s life?
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Kung ikaw ay nag-aalala na ang iyong SharePoint kapaligiran ay maaaring maging isang tad masama sa katawan, hayaan mo akong makatulong sa iyo na ayusin may isang kalusugan tseke.
Mayroon akong isang gastos proseso ng pag-apruba na kailangan ko upang ipatupad ang paggamit InfoPath sa isang paraan batay pagpapatunay (FBA) kapaligiran gamit ang mga serbisyo ng mga form (web based InfoPath).
Mayroong dalawang mga grupo ng pag-apruba at ang proseso ay gumagana tulad nito:
Sa InfoPath bahagi ng mga bagay, Mayroon akong iba't ibang mga seksyon na itago / Lilitaw na batay sa kung ang gumagamit ay isang miyembro ng isa sa mga pangkat na iyon pag-apruba.
Sa isang kapaligiran FBA ang username() function na laging nagbabalik blangko, sadly. What I’ve done is set up a a custom list called “Approval Groups”.
Hindi ko magdagdag ng anumang karagdagang mga haligi sa listahan.
Kapag ang form na bubukas up, ito ay isang panuntunan na tulad nito:
Ang "magtakda ng isang halaga na field ng" ay dito:
Ito ay isa lamang sinasabi: Query ang pag-apruba ng pangkat pasadyang listahan at i-filter sa query na iyon sa pamamagitan ng pagtingin para sa anumang hilera kung saan Pamagat ng halaga = "Nordic".
Kung na nagbabalik ng anumang halaga, then the current user is a member of that group. I know it contains that value because the string length is greater than zero.
Close the loop by securing the individual items in the Approval Group list. At run-time, kung ang kasalukuyang user ay walang naaangkop na seguridad ng access sa item na iyon at pagkatapos ay ang query ay hindi ibalik ito, string-length will be zero and now you know the current user is not part of that group. You can use that fact as needed in the form.
This is a super brief write-up. I’m pressed for time or I’d provide more detail.
I don’t know how relevant it is that I’m in an FBA environment. This would probably work well in a non-FBA environment but I can imagine cases where this would be useful.
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Ako ay nagtatrabaho sa isang InfPath form na ngayon at nagpatakbo up laban sa isang lumang kaibigan, "Unhandled exception kapag nagre-render na form System.Xml.XmlException: Hindi inaasahang pagtatapos ng file habang pina-parse Pangalan na naganap. "
This happened to me a long time ago and I don’t know what exactly I did to resolve it. Honestly, Sa tingin ko na ako ay inililipat sa isang bagong proyekto at hindi kailanman nakita ang isang ito nalutas (ang aking mga pamalit nagkaroon haharapin ang mga na sakit ng ulo). I do remember it was a devil of a problem. I spent several unsuccessful days dealing with it. Since then, Nakita ko na ito lumapit sa MSDN forums ng hindi bababa sa isang beses sa nakaraang taon at hindi kailanman talagang nakita ng sagot para dito.
Ako pindutin ito ngayon at sa kabutihang-palad oras na ito , I had just made a change to the form. I backed out that change and the problem went away. It turns out that it’s possible to create a from template using InfoPath Designer in such a way that it generates a parse error on the forms server side of the fence.
Sa aking kaso, ang problema ay ang sanhi sa pamamagitan ng mga hakbang na ito:
Hindi ko alam kung ang mga hakbang na ito sanhi ng isang problema o siguro, sa paano pa man ang data sa listahan mismo ay isang problema. I’m going to experiment a bit and see if I can nail downt he parameters of this with any more detail.
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Pa rin ako nakatira sa InfoPath Form mundo at ako na kailangan upang gumawa ng isa sa mga "maliliit" na pagbabago sa isang form na, sa kasamaang-palad, breaks a naming convention I adopted with it two weeks ago. Akala ko sa sarili ko, "Isang tao ay pagpunta upang tumingin sa bagay na ito sa isang taon mula ngayon at sabihin, 'Ano ang iniisip Paul? By Jove, kanyang pagpapangalan convention ginagawang walang kahulugan!"
Napagtanto ko na maaaring ako lilikha ng isang pagtingin sa form na ito para sa at pagkatapos ay, minsan pa, realized that I could have been doing something like this all along. I added a “Developer Notes” view to the InfoPath form as such:
I-configure ang form sa gayon na ang mga gumagamit ay hindi maaaring makakuha ng sa view na iyon at samakatuwid, it’s only visible with the InfoPath client in design view. Now I feel a little inoculated against some future unknown developer looking at my form and thinking bad thoughts about me. Phew!
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Mukhang ako na dumaan sa phase kung saan InfoPath, sa labas ng asul, I’m crafting a bunch of forms. My fingers learn how to use the tool well and then I go through nine month drought and have to learn it all over again.
Ako ay sa gitna ng isang phase InfoPath at Lumilikha ako ng mga form InfoPath na may maraming mga tanawin. Ang isang bagay na ikaw marahil ay mapapansin na ang InfoPath 2007 client shows views in alphabetical order. This is a real nuisance some times. My best technique these days is to prepend a number to the view name so that they always show in the order I want, bilang isinalarawan dito:
I wish I had been doing this all along.
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Ako pinagsusumikapan ilang InfoPath bumubuo linggo na ito sa Moss sa isang kapaligiran FBA at natutunan, kapag nagpunta ako upang i-deploy ang mga form sa isang kapaligiran sa produksyon na may isang zone FBA na ang username() function function does not work. I was using it to generate unique file names.
Mahusay, na function na ay hindi gumagana sa isang kapaligiran FBA (kahit, Hindi sa labas ng kahon). At, sa pagmuni-muni, gamit ang username sa paraan ako ay binalak hindi sana katiyakan ang isang natatanging pangalan ng file sa anumang kaganapan.
Aking solusyon ay upang gamitin ang mga ngayon() function and a rule that fires on loading of the form. I assign the file name to data element when it’s blank:
The advantage of this approach is that the file name is set only once. (Hindi ko ipakita ito sa mga screen shot, ngunit maglagay ng isang kondisyon sa panuntunan na lamang ang apoy kapag "myFilename" ay blangko). I used to set the file name at the data source level. Typically, Gusto ko gawin ang isang bagay (masama) ganito:
Ang problema sa na ay na kung ang isang user ay bubukas ang form sa Lunes at sa gumagamit B ay nagbabago dito sa Martes, makakapunta ka sa dalawang magkaibang mga form dahil dalawang iba't ibang mga gumagamit-save ito sa ibang mga user name.
Kaya, bilang nakakainis bilang FBA ay maaaring maging sa pangkalahatang at may InfoPath sa partikular na, Gawa ito sa akin muli sa tingin ang isang maliit ngunit talagang mahalaga teknikal na detalye at diskarte na hindi ko nagawa na kung hindi man ay!
</dulo>
Sundin ako sa Twitter sa http://www.twitter.com/pagalvin
Mayroong isang karaniwang sitwasyon ng negosyo tulad nito:
Ang office.microsoft.com Halimbawa na ito naglalarawan kung paano lumikha ng isang hiwalay na "view" and mark the whole view as read-only. This is a workable approach but has the drawback that you’ve effectively created two entire versions of the same form and must now keep them in sync manually. If you add a field to the editable view, you must then add it to the non-editable view as well. Over time, sa ibang mga developer, there can be some divergence.
Ang alternatibong ito ay maaaring gumana ng mas mahusay sa ilang mga kaso:
The drawback to this approach is that all the fields will still be editable on the screen. The user can get a false impression that they can actually change content. You can mitigate that by putting in some text that the form is disabled, marahil sa malaking pulang titik sa buong tuktok ng pahina.
Sa isang proyekto, Nilikha ko ang isang "workflow katayuan" tingnan. As the workflow progressed, it would update specific status fields that had been promoted from the form. When the user opened the form, ang "bukas na form" Rule awtomatikong lumipat sa na pagtingin at ang gumagamit ay may isang magandang maliit na buod ng katayuan.
</dulo>
Kami ay binuo ng isang InfoPath form na may maraming mga tanawin upang suportahan ang isang bagong hire / on-boarding process. When the company hires a new person, ang IT department at iba pang mga pangkat kailangang gumawa ng pagkilos (set up ng Payroll, paganahin ang access sa naaangkop na mga application, hanapin lamesa, at iba pa). We use on form but a different view of the form for each of those functions.
Sa kumpanyang ito, karamihan sa mga tao na kasangkot sa proseso ng negosyo ay mga IT-savvy, kaya kapag sila ay ma-access ang form, their default view is a "menu" view with buttons that direct them to their specific function. Gayunman, we needed to simplify things for the new hire’s direct manager. This person should not see any of the IT related stuff. Sa katunayan, dapat siya makita isa lang na view ng ang form at hindi kahit na magkaroon ng isang pagpipilian upang makita ang iba pang mga tanawin.
Sa aming kaso, na direct account manager ay direktang nakatali sa anyo ng kagandahang-loob ng isang makipag-ugnay sa selector (which I am always wanting to call a "people picker" para sa ilang kadahilanan).
Ang hakbang na ito ay ang mga sumusunod:
1. Sa mode na disenyo, pumunta sa Tools -> Form Options -> Buksan at I-save.
2. Select "rules".
3. Create a new rule whose action is "switch to view" at na ang kondisyon Pinakikinabangan ang username() tungkulin.
Username() returns the "simple" user name without the domain. If I log into SharePoint with credentials "domain\pagalvin", Username() returns "pagalvin".
The contact selector provides three bits of information for a contact. The "AccountID" portion is most useful for this scenario. The only thing that makes this even a little bit of challenge is that the contact selector (sa aking kapaligiran pa rin) ay magbabalik ng mga domain at user ID, as in "domain\pagalvin". This prevents us from doing a straight-forward equality condition since AccountID ("domain\pagalvin") hindi kailanman ay magiging katumbas username() ("pagalvin").
We can get around this using the "contains" opereytor: AccountID ay naglalaman ng Username().
Maaari naming dalhin ito sa karagdagang at pre-pend isang hard-code na domain sa harap ng Username() gumana upang makakuha ng aming mga check-pantay at puksain ang panganib ng isang false positive sa ay naglalaman ng operator.
We would have REALLY like to automatically switch view for other users based on their AD security group membership. Halimbawa, when a member of the "IT Analytics" grupo-access ang form, automatically switch to the IT Analytics view. We didn’t have time to implement it, but my first thought is to create a web service that would have a method like "IsMemberOfActiveDirectorySecurityGroup", pumasa ito ang username() and return back true or false. Does anyone have any other, mas matalino ideya? Is there any SharePoint function we can leverage from InfoPath to make that determination?
</dulo>