archivi mensili: Giugno 2009

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:

Protezione di SharePoint List/Document Library viste sembra (sorta di) Possibile con jQuery

Questo è un altro post nel mio serie in corso su come utilizzare jQuery con SharePoint.
Se volete saperne di più su jQuery, Mi raccomando: jQuery in azione Orso Bibeault e Yehuda Katz.

Una delle prime cose che ho pensato, una volta iniziato a giocare con jQuery, era se abbiamo potuto usarlo per garantire una visualizzazione di SharePoint. La risposta è "no" (o almeno, Non sto sostenendo che è possibile). Tuttavia, è certamente possibile rendere difficile per le persone a vedere una vista particolare.

Ho iniziato con il mio ambiente sandbox quando si lavora su questo. Ho scritto su quell'ambiente: Facile e veloce: Create Your Own jQuery Sandbox per SharePoint.

Per "garantire" la vista, seguire questi passi:

  1. Creare una visualizzazione che si desidera proteggere. L'ho fatto e la chiamarono "Visualizzazione protetta".

    Questo è ciò che sembra quando non si è "protetto":

    image

  2. Aggiungere una web part editor contenuto alla pagina di visualizzazione utilizzando il trucco descritto nell'articolo della sabbiera (vale a dire. Aggiungi "PageView = Shared&ToolPaneView = 2" all'URL).
  3. Capire il vostro _spUserId di SharePoint attenendosi alla seguente procedura pazzo, credere o non:
    1. Accedi al tuo ambiente SharePoint.
    2. Nel campo indirizzo del browser web, tipo: "javascript:avviso(_spUserId").
    3. Registrare il risultato (è "13" nel mio caso).

      image

  4. Aggiungere il seguente codice javascript per il tuo CEWP in visualizzazione codice:

    <tipo dello script ="text/javascript"
        src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
    </script di>
    
    <tipo di script ="text/javascript">
      $(funzione() {
    
        avviso(_spUserId);
    
        var theSecuredView = $(' iframe[FilterLink * = protetto % 20View]');
    
        Se ((theSecuredView.length > 0) && (_spUserId = = 13))
          $(' iframe[FilterLink * = protetto % 20View]').padre().padre().padre().html("<TR bgcolor = colore rosso><TD>Senza vista per voi!</TD></TR>");
      });
    
    </script di>
    

Ho incluso tale avviso(_spUserId) linea in là per dimostrare come questo non è davvero una "protezione" di una vista, ma semplicemente rendendo più difficile vedere. Più che in un momento.

Fondamentalmente, jQuery è alla ricerca di un iFrame nella pagina che ha un attributo che contiene "Secured % 20View" nel suo valore. Una volta che trova, controlliamo per vedere se l'utente corrente è "13". Se è, camminiamo fino il DOM per un <TR> Tag (che ho capito di visualizzazione origine e rintracciando) e quindi sostituendo quel tag TR con il mio messaggio. Davvero non so come robusto questo è (Io sono molto diffidente, Infatti), ma ha funzionato nella mia sandbox. Se trovo un modo migliore, I'll blog su di esso. Questo è il risultato:

image

Clicco il tasto OK e i dati viene sostituiti con un grande messaggio rosso:

image

Come si può dire, il devo implementare questa soluzione di "sicurezza" è di consentire la web part eseguire il rendering di se stesso. Dopo aver finito, Io sovrascrivere il contenuto mio "senza vista per voi!"messaggio.

Nonostante il fatto che non è davvero un "protetto '" vista, è potenzialmente utile e con qualche lavoro intelligente, che può eventualmente essere entità a protezione diretta in un senso più formale. Il problema fondamentale è che il client è sempre tutti i dati e poi, solo dopo che ottiene i dati, spazza. Se il cliente sta ottenendo i dati, un utente intelligente può impedire l'esecuzione a tutti di jQuery e vedere quello che lui/lei vuole vedere.

Ci sono altri inconvenienti. Questo approccio di "sicurezza" è basato fuori un _spUserId. Vorremmo che per davvero sicuro basato sul modello di protezione di SharePoint completo, o almeno di nome utente. Che diventa progressivamente più difficile, ma vedere alcune buone cose scritte su questo argomento, così mi auguro che c'è una buona risposta a tale problema.

L'elenco delle viste stessi dovrebbe essere assettato, Se possibile. Non ho provato a capirlo. Presumo che è possibile, ma davvero non risolve il problema di sicurezza fondamentale, perché qualcuno potrebbe ancora basta digitare l'URL di visualizzazione che vogliono (Se lo sapevano). Tuttavia, taglio ha un senso. È una caratteristica di buona usabilità e aiuta a offuscare le cose. Se un utente finale non sa che l'evento di vista esiste, probabilmente non proveranno ad usarlo. A volte, Questo è abbastanza buono.

Con la fortuna, Avrò più a scrivere su questo argomento nel tempo.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Un modo migliore di utilizzare jQuery per nascondere un campo di testo in un Form di SharePoint

Questo è un altro post nel mio serie in corso su come utilizzare jQuery con SharePoint.
Se volete saperne di più su jQuery, Mi raccomando: jQuery in azione Orso Bibeault e Yehuda Katz.

In precedenza, Ho scritto su come utilizzare jQuery per individuare e nascondere un campo di testo in un form. Non mi importava per l'approccio specifico (Io stavo concatenamento genitori – questo è semplicemente non è fatto in questi giorni, almeno nelle famiglie di qualità).

Quando ho iniziato a pensarci, Sapevo che avevo bisogno di trovare un <TR> a cui potrei invoco il Nascondi() Metodo.. Il mio sforzo iniziale per trovare il corretto <TR> era qualcosa di simile:

$(' tr:ha(ingresso[titolo = nascondere Me!])');

Il problema è che vuoi trovare ogni <TR> Tag che mi aveva qualsiasi relazione del padre con la pelle! Campo, anche se mi nascondo! è annidato molti livelli di profondità in <TR>s. Si scopre che il mio modulo sandbox, rileva che l'espressione 9 Mi nascondo diverse TR che hanno! come un bambino da qualche parte nel suo albero DOM. Mi sono reso conto che potevo camminare indietro fino all'albero dal campo di immissione, è così che come ho finito per abusare i genitori, ma esso non sta bene con me.

Ha dato qualche pensiero a questo e una delle cose che ho letto finalmente aveva un senso: Potrei usare il non() Metodo per tagliare fuori <TR>s che non voglio nel mio set di wrapping. Che mi ha portato a questo:

$(' tr:ha(ingresso[titolo = nascondere Me!])').non(' tr:ha(TR)').Nascondi();

Il primo bit trova tutte le <TR> Tag che hanno la pelle mi! campo in un punto qualsiasi nella loro gerarchia. Esso poi strisce qualsiasi <TR> che hanno anche un bambino <TR>. Questo ci lascia con un singolo <TR> che:

1) Non ha alcun <TR> record figlio

2) Hanno il campo di input come bambino.

Quindi possiamo applicare il nascondino() Metodo per la conseguente imposta e abbiamo finito.

Io sono ancora un po ' nervoso per questo, ma non nervoso come concatenamento genitori.

Non so se questo è una best practice o non. Ci può essere un modo più appropriato di identificare solo il <TR> che ci interessa in una forma di SharePoint. Se sai, si prega di inviare un commento.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Utilizzare jQuery per nascondere un campo di testo in un Form di SharePoint

Questo è un altro post nel mio serie in corso su come utilizzare jQuery con SharePoint.
Se volete saperne di più su jQuery, Mi raccomando: jQuery in azione Orso Bibeault e Yehuda Katz.

AGGIORNAMENTO (già!): Ha fatto pensare a un modo migliore per individuare il <TR> etichetta voglio nascondere e ha scritto su di esso qui. Si può ancora trovare questo articolo interessante comunque quindi sono leavnig su.

Voglio nascondere un campo di testo, "Mi nascondo!"come mostrato:

image

Il seguente jQuery fa il trucco per me:

<tipo di script ="text/javascript">

  $(funzione() {


    $(' ingresso[titolo = nascondere Me!]').padre().padre().padre().Nascondi();

  });

</script di>

Il codice sta dicendo, "find me tutti ingresso campi il cui titolo = nascondere Me!. Poi, suo padre e poi avanti padre e il * avanti * padre (Uff!) e richiamare il nascondino() Metodo su che cosa, quello che succede ad essere.

Ho capito che la struttura padre visualizzando il codice HTML per la forma che SharePoint creato come mostrato:

<TR>
    <TD NoWrap= "true" VAlign= "top" Larghezza= 190px"" classe= "ms-formlabel">
        <H3 classe= "ms-standardheader">
            <nobr>Mi nascondo!</nobr>
        </H3>
    </TD>

    <TD VAlign= "top" classe= "ms-formbody" Larghezza= "400px">
        <!-- FieldName = "Nascondi!"
                 FieldInternalName = "Hide_x0020_Me_x0021_"
                 FieldType = "SPFieldText"
        -->
        <arco dir= "none">
            <ingresso
                nome= "m$ ctl00$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
                tipo= "testo"
                MaxLength= "255"
                Identificazione= ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField""
                titolo= "Mi nascondo!"
                classe= "ms-lungo" />
                <br>
        </arco>


    </TD>
</TR>

Questa foto Mostra lo stesso, ma contrassegnato con i genitori:

image

Il primo padre (1) è un tag span. Padre di span (2) è un tag TD e poi finalmente arriviamo al reale padre voglio nascondere (3) quale è il tag TR stesso.

Si tratta di un approccio abbastanza terribile che penso perché è estremamente dipenda sulla struttura molto specifica di questa forma. Quando SharePoint 2010 esce, Questa intera struttura potrebbe cambiare e rompere questo approccio. Quello che voglio fare è mestiere un selettore di jQuery che è sulla falsariga di "find me di TR (solo tag TR e) che hanno da qualche parte nei loro elementi figlio un campo di input cui titolo = nascondere Me!”. Io partendo dal basso e risalendo. Assumendo questo capire, Vi posterò una versione aggiornata "facile e veloce ' post.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Create Your Own jQuery Sandbox per SharePoint

Questo è un altro post nel mio serie in corso su come utilizzare jQuery con SharePoint.
Se volete saperne di più su jQuery, Mi raccomando: jQuery in azione Orso Bibeault e Yehuda Katz.

Introduzione a jQuery in SharePoint è sorprendentemente facile (A me). (Ho gravi domande su un approccio di "migliori pratiche" per la distribuzione di queste cose in produzione, ma che è per un altro giorno). Ho appena iniziato a giocare con questa tecnologia e a tal fine, Ho creato un ambiente sandbox di utilizzare. Se stai cercando di iniziare con jQuery, Potete trovare questo approccio utile.

1. Creare un sito vuoto

Creare un sito vuoto da qualche parte nel tuo sito e chiamare qualcosa di intelligente come "jQuery Sandbox".

2. Scaricare jQuery

È possibile scaricare la libreria javascript jQuery da qui: http://docs.jquery.com/Downloading_jQuery

Che per salvare sul desktop.

Ho usato la versione "minified".

3. Creare una raccolta documenti di SharePoint

Nel tuo sito sandbox, creare una raccolta documenti.

4. Caricare la libreria jQuery di SharePoint

Accedere alla libreria di doc che appena creato e caricare la libreria jQuery.

5. Creare un elenco di SharePoint personalizzata

Ho iniziato con un elenco personalizzato, perché voglio arrangiarci con moduli standard di SharePoint. È inoltre possibile creare una pagina in una raccolta di pagine o pagine web part e, probabilmente, un sacco di altri posti.

Aggiungere alcune colonne all'elenco personalizzato, in modo che tu abbia qualcosa da eseguire jQuery contro. I miei obiettivi iniziali erano a:

  1. Nascondere un campo.
  2. Assegnare un valore a un campo.

Con questo obiettivo in mente, Ho aggiunto due campi di testo. Nel corso del tempo, Sarò giocare con collegamenti, immagini, ricerche, ecc.

6. Modificare la pagina NewForm. aspx Web Part e aggiungere una Web Part Editor contenuto

Questo è un piccolo nero magic-ish , in quanto è un concetto nuovo per me. Imparato questo da Paul Grenier, SharePoint jQuery Superstar, presso il sito del progetto CodePlex: http://spff.codeplex.com/.

Attenersi alla seguente procedura per aggiungere un CEWP alla stessa pagina che Mostra NewForm per qualsiasi elenco personalizzato:

  1. Accedere all'elenco personalizzato e fare clic su nuovo.
  2. Aggiungere il seguente URL: PageView = condiviso&ToolPaneView = 2

Che trasformerà il vostro modulo di immissione di dati vaniglia noioso da qualcosa di simile:

image

A questo:

image

Aggiungere la web part editor contenuto nella pagina.

7. Scrivi il tuo primo jQuery codice

Aprire quel CEWP nella vista codice e aggiungere il seguente:

image

Ecco il codice effettivo se volete copia/incolla:

<tipo dello script ="text/javascript"
    src =".. /.. /jQuery Library/jQuery-1.3.2.min.js">
</script di>

<tipo di script ="text/javascript">
  $(funzione() {

    $('#resultsID').html('Ci sono' + $('a').dimensione() + 'un tag tag su questa pagina'.);

  });
</script di>

Risultato:
<div id ='resultsID'></div>
/risultato

Si noti che il primo <script di> Tag fa riferimento la libreria jQuery effettivo. Presumibilmente, queste cose cambiano nel tempo, quindi ti consigliamo per assicurarsi che un) utilizzare il nome giusto e b) puntarlo nella corretta raccolta documenti di SharePoint.

Crogiolarsi nella gloria

Se avete fatto correttamente, vedrai un risultato simile al seguente:

image

Il confezionamento

Questo non è l'unico modo per iniziare, ma è veloce, facile e isolato dall'ambiente SharePoint esistente.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Utilizzare jQuery per valore di impostare un campo di testo su una forma di SharePoint

Ho iniziato a giocare con jQuery ieri. Ho voglia di fare questo per un lungo periodo, fin da quando Paul Grenier ha iniziato a scrivere la sua serie su jQuery per gli utenti finali presso il Venerabile www.endusersharepoint.com sito Web. Come lo uso, Spero di aggiungere che una serie di "Quick and Easy" post come questo. Questo post viene descritto come impostare il valore di un campo di testo nota di tutto quello che vuoi.

In questo scenario, Ho creato un elenco personalizzato in cui la "nuova" forma sembra come mostrato:

image

Questa è la nuova forma per un elenco personalizzato con colonna titolo predefinito e due colonne di elenco (non colonne del sito; Non credo che dovrebbe fare alcuna differenza).

L'obiettivo è quello di assegnare un valore arbitrario al campo, "DefaultMeFieldNoSpaces" (si può dire che io sono un po ' di un vigliacco con la cosa "senza spazi" in corso, ma ravviva alla fine di questo articolo).

Per me ha funzionato questo bit di jQuery:

<tipo di script ="text/javascript">

  $(funzione() {

    $(' ingresso[titolo = DefaultMeFieldNoSpaces]').attr(
        {valore: ' Sei in un tortuoso labirinto di passaggi, tutti uguali.'});

  });

</script di>

Se ho capito bene questo bit di jQuery è dicendo, "trovare me qualsiasi input tag cui titolo = DefaultMeFieldNoSpaces. Poi, impostare tutti i valori una famosa frase da un vecchio gioco di calcolatore."

Dato che ci sarà solo un campo del form con un titolo uguale a "DefaultMeFieldNoSpaces" siamo assicurati di assegnare un valore a quel campo e nessun altro.

Che dire un campo il cui nome contiene spazi? È quasi lo stesso:

<tipo di script ="text/javascript">

  $(funzione() {
     $(' ingresso[titolo = campo di assegnare con spazio]').attr(
        {valore: ' Sei in un tortuoso labirinto di passaggi, tutti uguali.'});

  });

</script di>

Credo che questo sia un approccio abbastanza sicuro, che significa che dovremmo essere in grado di trovare il campo che si desidera e solo il campo che vogliamo. Se guardate la HTML SharePoint ci sta dando, è sorta di disordinato:

<ingresso
nome= "m$ ctl00$ g_bdb23c2c_fde7_495f_8676_69714a308d8e$ ctl00$ ctl04$ ctl02$ ctl00$ ctl00$ ctl04$ ctl00$ ctl00$ TextField"
tipo= "testo"
MaxLength= "255"
Identificazione= ctl00_m_g_bdb23c2c_fde7_495f_8676_69714a308d8e_ctl00_ctl04_ctl02_ctl00_ctl00_ctl04_ctl00_ctl00_TextField""
titolo= DefaultMeFieldNoSpaces""
classe= "ms-lungo"
/>

"titolo" si distingue come un attributo riconoscibile e si spera unico per aiutarci a identificare la colonna specifica alla quale vogliamo assegnare il nostro valore arbitrario.

Questo è un concetto fondamentale. Impostazione di un campo in modo arbitrario come questo non è andando a vincere alcun premio. Tuttavia, Se vogliamo fare cose di livello forma più interessanti (che tutti ci vuole sempre fare, Naturalmente, subito dopo che abbiamo finito di lavare i piatti), come modificare il valore di "campo b" automaticamente in base al valore del "campo un", Abbiamo (IO) bisogno di imparare queste cose.

Penso che la nostra migliore occasione per ottenere un valore reale utile qui è tramite il titolo, almeno per i campi di testo. Potrebbe trattarsi di una migliore, approccio più affidabile. Se lo trovo, Aggiornerò questo post. Se conoscete un modo migliore, si prega di lasciare un commento.</fine>

</fine>

Iscriviti al mio blog.

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