archivi categoria: InfoPath 2007 // Forms Server

Rapido successo: Lettura di InfoPath XML direttamente da un SPListItem in SharePoint

Sto lavorando su un progetto dove ho bisogno di estrarre gli allegati da un modulo di InfoPath. Ci sono alcune buone risorse per l'analisi di moduli di InfoPath (che sono solo i file XML, così è in realtà abbastanza facile).

Mentre stavo costruendo il progetto, Ho iniziato a scaricare un modulo di InfoPath e salvandolo sul mio disco rigido locale. Il mio codice c# stava leggendo direttamente da tale istanza. Tuttavia, i moduli di InfoPath sono davvero vivere all'interno di una raccolta moduli di SharePoint. Ho fatto un piccolo mezzo cuore ricerca per trovare il modo di leggerlo direttamente dalla libreria e quasi rinunciato, nel qual caso avrei salvato il modulo in una directory temporanea locale e leggerlo da lì. Tuttavia, non c'è nessun bisogno di andare attraverso quei cerchi come si può leggere direttamente dalla libreria. Questo piccolo frammento di codice viene illustrato come:

/// Roba di definizione classe qui, compresi:
privato SPFile mySharePointFile; /* Parte di un SPList */
// Più il codice va qui e all'interno di un metodo della classe abbiamo:
XmlTextReader textReader;
textReader = Nuovo XmlTextReader(mySharePointFile.OpenBinaryStream());

textReader.WhitespaceHandling = WhitespaceHandling.Nessuno;

textReader.Read();

// Se il nodo ha valore

mentre (textReader.Read())
{

... e così via e così via...

Essi chiave bit sopra è che possiamo leggere InfoPath direttamente tramite il OpenBinaryStream() chiamata di metodo sul SPFile come parametro al Costruttore XmlTextReader. Funziona benissimo.

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags:

Estrazione a livello di codice gli allegati da moduli di InfoPath (Compresi i loro nomi!)

Ho una soluzione di voce di spesa per un client che utilizza InfoPath e flusso di lavoro. A un certo punto durante il processo di approvazione, Ho bisogno di generare una mail che ha tutti quei dati di InfoPath buoni come pure gli allegati stessi affinché (sospiro) qualcuno può prendere quei dati e manualmente re-chiave in un'applicazione di database Oracle.

Non è molto difficile da ottenere a o analizzare il modulo di InfoPath. Non sapevo come gestire gli allegati, Tuttavia. Dopo un'ora o due di rovistando Internets (un'eternità!) Ho trovato questo articolo: http://support.microsoft.com/kb/892730

Fornire alcuni codice utile per estrarre l'allegato da un nodo in forma. (Devi ancora trovare il nodo e tutto ciò che, ma che è solo analisi XML).

So che l'allegato è codificato base64 e sono andato originariamente lungo il sentiero di estrarre solo i dati base64, decodifica e salvarlo. Tuttavia, Ho subito capito che non sapevo come ottenere il nome del file stesso, fino a quando ho trovato l'articolo di cui sopra.

In realtà avevo trovato che abbastanza presto, ma sono stato messo dalla sua doppia personalità. Da un lato, l'articolo * dice * è buono per InfoPath 2007. Ancora, il codice e le istruzioni sono tutti di Visual Studio 2003 e riferimenti per InfoPath 2003.

Linea di fondo, il codice di tale articolo la condizione sta lavorando bene per me (finora). Posso ottenere il mio modulo di InfoPath, Io posso analizzarlo, Riesco a trovare e decodificare l'allegato e conosco il suo nome. Cos'altro si può chiedere di vita?

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags: ,,

Se siete preoccupati che l'ambiente SharePoint può essere un tantino malsano, Permettetemi di aiuto voi che Difficoltà con un controllo di integrità.

Gestione dei gruppi di approvazione con InfoPath in un ambiente di FBA

Ho un processo di approvazione di spese che ho bisogno di implementare l'utilizzo di InfoPath in un'autenticazione basata su form (FBA) ambiente utilizzando servizi di forme (Web basato su InfoPath).

Ci sono due gruppi di approvazione e il processo funziona come questo:

  • Utente compila una nota spese e lo invia per l'approvazione.
  • Che innesca un'e-mail al gruppo di primo livello approvatore.
  • Primo livello approvatore recensioni e approva o nega la relazione.
  • Se il primo livello persona approva, sistema di notifica al secondo livello approvatore.

Sul lato di InfoPath di cose, Ho diverse sezioni che Nascondi/appaiono basate su se l'utente è un membro di uno di quei gruppi di approvazione.

In un ambiente FBA la username() funzione restituisce sempre vuoto, Purtroppo. Quello che ho fatto è impostato a un elenco personalizzato chiamato "Gruppi di approvazione".

Non aggiungere eventuali colonne aggiuntive all'elenco.

Quando si apre il modulo, esso ha una regola come questa:

image

Il valore di un campo "set" è qui:

image

Questo è fondamentalmente dicendo: Query l'elenco personalizzato del gruppo di approvazione e filtro query cercando qualsiasi fila dove il valore del titolo = "Nordica".

Se che restituisce alcun valore, quindi l'utente corrente è un membro di tale gruppo. So che contiene tale valore perché la lunghezza della stringa è maggiore di zero.

Chiudere l'anello di fissaggio i singoli elementi nell'elenco gruppo di approvazione. In fase di esecuzione, Se l'utente corrente non dispone di accesso di sicurezza adeguate a tale elemento quindi la query non restituirlo, lunghezza della stringa sarà pari a zero e ora si conosce l'utente corrente non è parte di quel gruppo. È possibile utilizzare tale fatto come necessario nel modulo.

Si tratta di un super breve write-up. Mi preme per volta o vorrei fornire maggiori dettagli.

Non so quanto sia rilevante è che io sono in un ambiente di FBA. Questo sarebbe probabilmente funzionerà bene in un ambiente non-FBA, ma posso immaginare casi dove questo sarebbe utile.

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags: ,

InfoPath // Una spiegazione "eccezione non gestita durante il rendering di forma System.Xml.XmlException: Si è verificato imprevisto fine del file durante l'analisi il nome. “

Stavo lavorando su una tale forma oggi e corse contro un vecchio amico, "Eccezione non gestita durante il rendering di forma System.Xml.XmlException: Fine file durante l'analisi il nome si è verificato."

Questo è accaduto a me molto tempo fa e non so esattamente quello che feci per risolverlo. Onestamente, Penso che ho avuto la transizione ad un nuovo progetto e mai visto questo uno risolto (mio sostituzioni avevano a che fare con quel mal di testa). Mi ricordo che era un diavolo di un problema. Ho trascorso diversi giorni a infruttuosi a che fare con esso. Da allora, Ho visto questo venire sul forum MSDN almeno una volta nel corso dell'anno scorso e mai davvero visto una risposta per esso.

Ha colpito oggi e per fortuna questa volta , Avevo appena fatto una modifica al modulo. Mi sono tirata indietro che il cambiamento e il problema è andato via. Si scopre che è possibile creare dal modello utilizzando la finestra di progettazione di InfoPath in modo che genera un errore di analisi sul lato server di forme del recinto.

Nel mio caso, il problema è stato causato da questi passaggi:

  1. Aggiungere un nuovo elemento a un'origine dati come un campo di testo.
  2. Rilasciarla in forma.
  3. Cambiare la visualizzazione di esso in un elenco a discesa.
  4. Raccontare il menù a tendina a tirare i suoi valori da un elenco di SharePoint personalizzato.

Non so se quei passi causano un problema o forse, in qualche modo i dati nell'elenco stesso sono un problema. Ho intenzione di sperimentare un po ' e vedere se io posso unghie vi parametri egli di questo con qualsiasi altro dettaglio.

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags:

Incorporare la Developer note all'interno di moduli di InfoPath

Ancora vivo nel mondo di moduli di InfoPath e avevo bisogno di fare uno di quei "piccoli" cambiamenti a una forma che, Purtroppo, si rompe una convenzione di denominazione che ho adottato con esso due settimane fa. Ho pensato a me, "qualcuno sta a guardare questa cosa un anno da ora e dire, ' Che cosa stava pensando Paul? Per Giove, la convenzione di denominazione non ha senso!”

Ho capito che potevo creare una visualizzazione del form per questo e poi, Ancora una volta, resi conto che potevo avere fatto qualcosa di simile lungo tutto. Ho aggiunto una visualizzazione di "Developer Notes" per il modulo di InfoPath come tale:

image

Ho configurato il modulo di modo che gli utenti non possono arrivare a quella vista e pertanto, solo è visibile con il client di InfoPath in visualizzazione struttura. Ora mi sento un po' inoculato contro qualche sviluppatore sconosciuto futuro guardando la mia forma e cattivi pensieri su di me. Uff!

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags:

Gestione delle viste di InfoPath

Mi sembra di passare attraverso fasi di InfoPath dove, fuori dal blu, Sto creazione di un gruppo di forme. Le mie dita imparare a usare lo strumento bene e poi ho passare attraverso nove mesi di siccità e devo imparare tutto daccapo.

Io sono nel mezzo di una fase di InfoPath e sto creando forme di InfoPath con un sacco di visualizzazioni. Una cosa che probabilmente noterai è che il InfoPath 2007 client viene illustrato viste in ordine alfabetico. Questo è un vero e proprio fastidio alcune volte. Mia tecnica meglio in questi giorni è quello di anteporre un numero al nome della vista in modo che mostrino sempre nell'ordine desiderato, come illustrato qui:

image

Vorrei che avessi fatto questo tutto il tempo.

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags:

Sevizi di modulo di InfoPath, L'autenticazione basata su form (FBA) e nomi di File univoci

Sto lavorando su alcune forme di InfoPath questa settimana in MOSS in un'ambiente FBA e dotti, Quando sono andato a distribuire le forme in un ambiente di produzione con un FBA zona che il nome utente() funzione funzione non funziona. Lo stavo usando per generare nomi di file univoci.

Pozzo, tale funzione non funziona in un ambiente di FBA (almeno, non fuori dalla scatola). E, Riflettendoci, utilizzando il nome utente nel modo che avevo programmato non hanno garantito un nome file univoco in ogni caso.

La mia soluzione era di usare l'ora() funzione e una regola che viene generato durante il caricamento del modulo. Assegnare il nome del file all'elemento dati quando è vuoto:

image

image

Il vantaggio di questo approccio è che il nome del file è impostato una sola volta. (Non lo mostrano nella schermata, ma mettere una condizione regola al fuoco solo quando "myFilename" è vuota). Ho usato per impostare il nome del file a livello di origine dati. In genere, Vorrei fare qualcosa (male) In questo modo:

image

Il problema è che se l'utente A apre il modulo lunedì e l'utente B si cambia il martedì, vi ritroverete con due forme diverse da quando due utenti diversi e salvati con nomi utente diversi.

Così, come fastidioso come FBA può essere in generale e con InfoPath in particolare, mi ha fatto ripensare un piccolo ma davvero importante dettaglio tecnico e l'approccio che non avrei fatto diversamente!

</fine>

Iscriviti al mio blog.

Seguimi su Twitter a http://www.twitter.com/pagalvin

Technorati Tags:

Semplice e veloce: Fare una modulo di InfoPath sola lettura (InfoPath Forms Services in MOSS)

C'è uno scenario comune affari come questo:

  • Utente compila un modulo di InfoPath.
  • Invia modulo.
  • Partirà il processo di workflow di lunga durata.
  • Mentre è in esecuzione il flusso di lavoro, non vogliamo che chiunque di modificare il contenuto del modulo.

In questo esempio office.microsoft.com viene descritto come creare una vista separata"" e contrassegnare l'intera vista come di sola lettura. Questo è un approccio funzionale, ma ha lo svantaggio che effettivamente hai creato intere due versioni dello stesso modulo e deve ora mantenerli sincronizzati manualmente. Se si aggiunge un campo alla vista modificabile, è necessario quindi aggiungere alla visualizzazione non modificabile anche. Nel corso del tempo, con diversi sviluppatori, non ci può essere qualche divergenza.

Questa alternativa potrebbe funzionare meglio in alcuni casi:

  • Aggiungere un nuovo campo al modulo chiamato "IsEditable".
  • Impostare il relativo valore predefinito su true.
  • Promuoverlo quando la pubblicazione a MOSS.
  • Del flusso di lavoro, impostare il valore di IsEditble su false.
  • Tornare al form.
  • Aggiungere una regola che "su Apri nella forma", Disattiva il tuo Salva pulsante quando IsEditable è false.

Lo svantaggio di questo approccio è che tutti i campi saranno ancora modificabili sullo schermo. L'utente può ottenere una falsa impressione che effettivamente possono cambiare contenuto. È possibile attenuare che mettendo in qualche testo che il modulo è disattivato, possibilmente in grandi lettere rosse nella parte superiore della pagina.

In un progetto, Creato uno stato di flusso di lavoro"" vista. Come il flusso di lavoro progredito, esso Aggiorna campi status specifico che erano stato promosso dal modulo. Quando l'utente apre il modulo, la forma aperta"" regola automaticamente commutato a vista e l'utente ha avuto uno status di riepilogo poco piacevole.

</fine>

Iscriviti al mio blog.

Interruttore vista basato sull'ID utente In un modulo di InfoPath

Abbiamo avuto un sviluppato un modulo di InfoPath con viste multiple per sostenere un nuovo noleggio / processo di on-boarding. Quando l'azienda assume una nuova persona, il reparto IT e altri gruppi è necessario agire (set up payroll, consentono di accedere alle applicazioni appropriate, individuare una scrivania, ecc). Utilizziamo il modulo, ma una visione diversa del modulo per ognuna di queste funzioni.

In questa società, la maggior parte delle persone coinvolte nel processo di business sono IT-savvy, così, quando si accedere al modulo, loro visualizzazione predefinita è un menu"" Mostra con pulsanti che indirizzarli alla loro specifica funzione. Tuttavia, Abbiamo bisogno di semplificare le cose per responsabile diretto di nuova assunzione. Questa persona non dovrebbe vedere che qualsiasi di esso correlato roba. Infatti, Lei dovrebbe vedere solo una visualizzazione del modulo e nemmeno avere la possibilità di vedere le altre visualizzazioni.

Nel nostro caso, che diretta account manager è direttamente legato alla forma di cortesia di un contatti Selettore (che ho sempre voglia di chiamare una selezione di utenti"" per qualche motivo).

I passaggi sono come segue:

1. In modalità progettazione, Vai a strumenti-> Opzioni di forma-> Aprire e salvare.

2. Selezionare "regole".

3. Creare una nuova regola cui azione è "switch per visualizzare" e la cui condizione sfrutta il userName() funzione.

userName() Restituisce il semplice"" nome utente senza il dominio. Se accedo al SharePoint con credenziali "domainpagalvin", userName() Restituisce "pagalvin".

Il selettore di contatto fornisce tre bit di informazioni per un contatto. Il "AccountID" porzione è più utile per questo scenario. L'unica cosa che lo rende anche un po' di sfida è che il selettore di contatto (nel mio ambiente comunque) Restituisce l'ID utente e dominio, come in "domainpagalvin". Questo ci impedisce di fare una condizione di uguaglianza semplice dal AccountID ("domainpagalvin") non sarà mai uguale userName() ("pagalvin").

Possiamo ottenere tutto questo utilizzando il "contiene" Operatore: AccountID contiene userName().

Possiamo prendere ulteriormente e pre-pend un dominio hard-coded davanti al nome utente() funzione per ottenere il nostro controllo di uguaglianza ed eliminare il rischio di un falso positivo sulla contiene operatore.

Ci sarebbe davvero piaciuto passare automaticamente vista per altri utenti in base alla loro appartenenza al gruppo di sicurezza AD. Per esempio, Quando un membro del "esso Analytics" gruppo accede a forma, passare automaticamente alla visualizzazione Analitica IT. Non abbiamo avuto tempo per la sua attuazione, ma il mio primo pensiero è quello di creare un servizio web che avrebbe un metodo come "IsMemberOfActiveDirectorySecurityGroup", passare il nome utente() e tornare indietro true o false. Qualcuno ha qualsiasi altro, idea più intelligente? C'è qualche funzione di SharePoint che possiamo sfruttare da InfoPath per rendere tale determinazione?

</fine>

Technorati Tags: