Jeg skrev en artikkel for SharePointBriefing.com og de sette det opp live i dag.
Her er en teaser:
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg skrev en artikkel for SharePointBriefing.com og de sette det opp live i dag.
Her er en teaser:
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg vært arbeider på et prosjekt der jeg trenger å ekstrakt vedlegg fra et InfoPath-skjema. Det er noen gode ressurser for analyse av InfoPath-skjemaer (hvilke er bare XML-filer, så det er faktisk ganske lett).
Mens jeg var å bygge opp prosjektet, Jeg startet med å laste ned et InfoPath-skjema og lagre den på harddisken min lokale. Leste meg c# koden direkte fra forekomsten. Men, skjemaene InfoPath virkelig lever i et SharePoint-skjemabibliotek. Jeg gjorde en liten halv hearted søke å finne ut hvordan å lese den direkte fra biblioteket og ga nesten opp, da jeg ville ha lagret skjemaet til en lokal temp-mappe og lese den der. Men, Det er ikke nødvendig å gå gjennom de ringer som du kan lese den direkte fra biblioteket. Denne lille kodebiten viser hvordan:
/// Klassen definisjon ting her, inkludert:
privat SPFile mySharePointFile; /* En del av en SPList */ // Mer kode her og inne en metode i klassen har vi: textReader = nye XmlTextReader(mySharePointFile.OpenBinaryStream()); textReader.WhitespaceHandling = WhitespaceHandling.Ingen; textReader.Read(); // Hvis noden har verdi mens (textReader.Read()) { |
De viktig bit ovenfor er at vi kan lese i InfoPath direkte via OpenBinaryStream() metoden ringe på SPFile som en parameter til konstruktøren av XmlTextReader. Den arbeider stor.
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg har en regning oppføring løsning for en klient som bruker InfoPath og arbeidsflyt. På et tidspunkt under godkjenningsprosessen, Jeg trenger å generere en e-post som har alle god InfoPath dataene samt vedleggene seg slik at (sukk) noen kan ta disse dataene og manuelt re nøkkel den inn et Oracle databaseprogram.
Det er ikke veldig vanskelig å få på eller analysere InfoPath-skjemaet. Jeg visste hvordan å håndtere vedlegg, men. Etter en time eller to av poking rundt Internets (en evighet!) Jeg fant denne artikkelen: http://support.microsoft.com/kb/892730
Det gir noen praktisk koden pakke ut vedlegget fra en node i skjemaet. (Du fortsatt trenger å finne noden og alle som, men det er bare XML parsing).
Jeg vet at vedlegget er base64-kodet og jeg opprinnelig gikk nedover stien av bare trekke ut av base64-data, dekoding av det og lagre det. Men, Jeg skjønte raskt jeg visste hvordan å få navnet selv før jeg fant nevnte artikkelen.
Jeg hadde faktisk funnet som ganske tidlig, men jeg ble skremt av dens splittet personlighet. På den ene siden, artikkelen * sier * det er bra for InfoPath 2007. Ennå, koden og instruksjoner er om Visual Studio 2003 og referanser til InfoPath 2003.
Bunnlinjen, koden artikkel forutsatt fungerer bra for meg (så langt). Jeg kan få min InfoPath-skjema, Jeg kan analysere den, Jeg kan finne og dekode vedlegget og vet navnet. Hva mer kan man be for livet?
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Hvis du er bekymret for at SharePoint-miljøet kan være en tad usunn, La meg hjelpe deg fikse det med en helsesjekk.
Jeg har en regning godkjenningsprosess som jeg trenger å implementere bruke InfoPath i et skjemabasert godkjenning (FBA) miljø med skjematjenester (Web basert InfoPath).
Det er to godkjenningsgrupper og prosessen fungerer som dette:
På siden InfoPath ting, Jeg har ulike deler som Skjul/vises basert på enten brukeren er medlem av en av disse godkjenningsgrupper.
I et FBA miljø brukernavnet() funksjonen returnerer alltid tomt, Dessverre. Hva jeg har gjort er satt opp en en liste kalt "Godkjenningsgrupper".
Jeg ikke legge til flere kolonner i listen.
Når skjemaet åpnes, den har en regel som dette:
"Angi en feltverdi" er her:
Dette er i utgangspunktet si: Spørringen listen godkjenning egendefinerte og filter som spør etter noen p hvor tittelen verdi = "Nordisk".
Hvis som returnerer en verdi, gjeldende bruker er medlem av gruppen. Jeg vet den inneholder verdien fordi streng er større enn null.
Fullfør sirkelen ved å sikre enkeltelementene i listen godkjenning. Under kjøring, Hvis gjeldende bruker ikke har returnerer riktig tilgang til elementet deretter spørringen ikke det, Strenglengde være null og nå vet du gjeldende bruker er ikke en del av gruppen. Du kan bruke dette faktum som nødvendig i skjemaet.
Dette er en super kort skrive opp. Jeg er presset for tid eller jeg ville gi flere detaljer.
Jeg vet ikke hvor relevant det er at jeg er i et FBA-miljø. Dette vil sannsynligvis fungere i et ikke-FBA-miljø, men jeg kan forestille tilfeller der dette ville være nyttig.
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg jobbet på et InfPath-skjema i dag og løp opp mot en gammel venn, "Ubehandlet unntak ved gjengivelse av skjemaet System.Xml.XmlException: Uventet slutt på filen under analyse av navnet har oppstått."
Denne skjedd å meg for lenge siden og jeg vet ikke hva jeg gjorde for å løse det.. Ærlig, Jeg tror at jeg hadde vært overgangen til et nytt prosjekt, og aldri så denne en løst (min erstatninger fikk å beskjeftige seg med hodepine). Jeg husker det var en djevel problem. Jeg tilbrakte flere mislykkede dager håndtere det.. Siden da, Jeg har sett dette kommer opp på MSDN-foraene minst én gang i løpet av det siste året og aldri virkelig så et svar for det..
Jeg traff det i dag, og heldigvis nå , Jeg hadde bare gjort en endring i skjemaet. Jeg rygget ut endringen og problemet gikk fjerne. Det viser seg at det er mulig å opprette en mal ved hjelp av InfoPath Designer slik at den genererer en analysefeil på serversiden former av gjerdet.
I mitt tilfelle, problemet var forårsaket av disse trinnene:
Jeg vet ikke om disse trinnene forårsake et problem eller kanskje, noe er dataene i selve listen et problem. Jeg skal eksperimentere litt og se om jeg kan spikeren ned han parametere dette med flere detaljer.
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg fortsatt bor i InfoPath-skjemaer verden og jeg trengte å gjøre en av disse "små" endringene i et skjema som, Dessverre, bryter en navnekonvensjon jeg adoptert med den to uker siden. Tenkte jeg, "noen kommer til å se på denne ting et år fra nå og si, ' Hva tenkte Paul? Av Jove, hans navnekonvensjon gir ingen mening!”
Jeg innså at jeg kunne lage en visning i skjemaet for dette og deretter, nok en gang, innså at jeg kunne ha gjort noe slikt langs. Jeg har lagt en "utvikler"-notatvisning til InfoPath-skjemaet slik:
Jeg har konfigurert skjemaet slik at brukere ikke kan komme til denne visningen og derfor, Det er bare synlig med InfoPath klienten i utformingsvisning. Nå føler jeg litt inokulerte mot noen fremtidige ukjente utvikleren ser på min form og tenkning dårlige tanker om meg. Phew!
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg synes å gå gjennom InfoPath faser der, Out of the blue, Jeg er å lage en samling av skjemaer. Fingrene Lær hvordan du bruker verktøyet godt og da jeg gå gjennom ni måneders tørke og må lære det over igjen.
Jeg er i midten av fase en InfoPath og jeg oppretter InfoPath-skjemaer med en rekke visninger. En ting du sannsynligvis legge merke til er at InfoPath 2007 klient viser visningene i alfabetisk rekkefølge. Dette er en reell plage noen ganger. Min beste teknikken er disse dager å sette et tall til visningen slik at de alltid vises i rekkefølgen jeg vil, som vist her:
Jeg skulle ønske jeg hadde gjort dette hele tiden.
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Jeg har vært arbeids på noen InfoPath-skjemaer denne uken i MOSS i et FBA-miljø- og lært, Når jeg gikk til å distribuere skjemaer til et produksjonsmiljø med en FBA sone som brukernavnet() funksjonen funksjon fungerer ikke. Jeg brukte det til å generere unike filnavn.
Brønnen, Denne funksjonen virker ikke i et FBA-miljø (minst, ikke ut av esken). Og, etter, ved hjelp av brukernavn i måten jeg hadde planlagt ville ikke har garantert et unikt filnavn under enhver omstendighet.
Løsningen min var å bruke nå() funksjonen og en regel som branner på innlastingen av skjemaet. Jeg tilordne navnet på dataelementet når det er tomt:
Fordelen med denne tilnærmingen er at filnavnet er angitt bare én gang. (Jeg vise ikke det på skjermen skudd, men sette en betingelse på regelen skal bare brann når "myFilename" er tomt). Jeg pleide å sette navnet på kildenivå dataene. Vanligvis, Jeg ville gjøre noe (dårlig) som dette:
Problemet med det er at hvis bruker a åpner skjemaet på mandag og bruker b endrer den tirsdag, du vil ende opp med to ulike utgåver siden to forskjellige brukere lagret den med forskjellige brukernavn.
Så, som irriterende som FBA kan være generelt og med InfoPath spesielt, det gjorde meg tenke en liten, men veldig viktig tekniske detaljer og tilnærming som jeg ikke ville ha gjort ellers!
</slutten>
Følg meg på Twitter på http://www.twitter.com/pagalvin
Det er et vanlig virksomhet scenario som dette:
Denne office.microsoft.com eksempel beskriver hvordan du oppretter en egen "visning" og merke hele visningen som skrivebeskyttet. Dette er en praktisk tilnærming, men har ulempen at du effektivt har opprettet to hele versjoner av samme form og må nå synkronisere dem manuelt. Hvis du legger til et felt i visningen redigerbare, du må deretter legge den til skrivebeskyttet visningen. Over tid, med forskjellige utviklere, Det kan være noen forskjeller.
Dette alternativet kan fungere bedre i noen tilfeller:
Ulempen til denne tilnærmingen er at alle feltene kan fremdeles redigeres på skjermen. Brukeren får et falskt inntrykk at de faktisk kan endre innhold. Du kan begrense som ved å sette inn litt tekst at skjemaet er deaktivert, muligens i store røde bokstaver øverst på siden.
I ett prosjekt, Jeg laget en "arbeidsflytstatus" Vis. Som arbeidsflyten forløp, den ville oppdatere bestemte felt som hadde blitt forfremmet fra skjemaet. Når brukeren åpnet skjemaet, det "open form" regel byttet automatisk til at visningen og brukeren hadde en fin liten Sammendrag status.
</slutten>
Vi hadde en utviklet et InfoPath-skjema med flere visninger til å støtte nye leie / på-boarding prosess. Når firmaet ansetter en ny person, IT-avdelingen og andre grupper må handle (Definer lønn, Aktiver tilgang til aktuelle programmer, Finn et skrivebord, osv.). Vi bruker på skjemaet, men en annen visning av skjemaet for hver av disse funksjonene.
På dette selskapet, de fleste av involverte i forretningsprosessen er IT-kyndige, så når de åpner skjemaet, deres standardvisningen er en "meny" Vis med knapper som henvise dem til deres spesifikke funksjon. Men, vi trengte å forenkle ting for den nye leie direkte manager. Denne personen bør ikke se noen av IT-relaterte ting. faktisk, hun bør ser bare én visning av skjemaet og ikke har et alternativ for å se de andre visningene.
I vårt tilfelle, som direkte administratorens konto er direkte knyttet til skjemaet høflighet av en Kontakt velgeren (som jeg alltid ønsker å kalle en "people picker" for noen grunn).
Trinnene er som følger:
1. I utformingsmodus, gå til verktøy-> Alternativer for skjema-> Åpne og lagre.
2. Velg "regler".
3. Opprette en ny regel som er «bytte for å se" og hvis tilstanden benytter brukernavn() funksjonen.
Brukernavn() Returnerer enkle"" brukernavn uten domene. Hvis jeg logger inn på SharePoint med legitimasjon "domainpagalvin", Brukernavn() Returnerer "pagalvin".
Kontakt velgeren gir tre biter av kontaktinformasjon. "AccountID" delen er mest nyttig for dette scenariet. Det eneste som gjør dette enda litt av utfordringen er at kontakt velgeren (i mine omgivelser allikevel) Returnerer IDen domene og brukernavn, som "domainpagalvin". Dette hindrer oss fra å gjøre en rett fram likestilling tilstand siden AccountID ("domainpagalvin") vil aldri lik brukernavn() ("pagalvin").
Vi kan få rundt dette ved hjelp av "inneholder" operatør: AccountID inneholder brukernavn().
Vi kan ta det videre og pre-pend en hardkodet domenenavn foran brukernavnet() funksjonen for å få våre likestilling sjekk og eliminere risikoen for feil på den inneholder.
Vi måtte virkelig som automatisk bytter visning for andre brukere basert på deres annonse sikkerhetsgruppemedlemskapet. For eksempel, Når et medlem av "det Analytics" gruppen får tilgang til skjemaet, automatisk Bytt til visningen IT Analytics. Vi hadde ikke tid å implementere det, men min første tanke er å lage en webtjeneste som ville ha en metode som "IsMemberOfActiveDirectorySecurityGroup", gi det brukernavnet() og returnere tilbake sann eller USANN. Har noen andre, flere Smart idé? Er det noen SharePoint-funksjonen kan vi utnytte fra InfoPath til gjør at besluttsomhet?
</slutten>