archivi mensili: Febbraio 2008

Annuncio pubblico minore: Impostazioni di protezione dal vivo di Windows e contattare i proprietari dello spazio

Ricevo una manciata di messaggi da individui tramite il built-in "Invia un messaggio" funzione Microsoft fornisce con spazi dal vivo (che ospita anche il mio blog) ogni mese.

Circa un terzo del tempo, Gli utenti hanno assicurato il loro account di live spaces tale che non posso rispondere. Si tratta di una sorta di funzione di anti-spam, che suppongo.

</fine>

Spiegazione semplice: “Valore non rientra nell'intervallo previsto.”

AGGIORNAMENTO: Un manifesto anonimo ha lasciato un commento grande circa i nomi interni. Assicuratevi di leggerlo.

Quando si lavora con ricevitori di eventi e altro codice che fa riferimento a elementi di elenco di SharePoint tramite il modello a oggetti, Spesso commettono errori che genera questo errore in fase di esecuzione:

Errore caricamento ed esecuzione di ricezione di eventi di Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Cultura = neutral, PublicKeyToken = 0dc50a750396c3ac. Ulteriori informazioni sono sotto. : Valore non compreso nell'intervallo previsto.

Penso che questo è un errore abbastanza generico che è potenzialmente causato molti modi diversi. Tuttavia, una semplice spiegazione è che faccio riferimento un campo in modo non corretto. Se il nome del campo è "Data scadenza", Devo riferimento come questo in un ricevente di eventi:

Proprietà.ListItem["Data di scadenza"]

Quando ho errato o utilizzare il caso sbagliato quando si fa riferimento al campo, SharePoint genera il sopra menzionato errore di runtime. Per esempio, Questo è sbagliato:

Proprietà.ListItem["data di scadenza"]

</fine>

Iscriviti al mio blog.

Technorati Tags:

Suggerimento rapido utente finale: Visualizzazioni di sorta in una raccolta documenti, Elenco, ecc.

Siamo in grado di, dovrebbe e creare molti punti di vista in elenchi di SharePoint (raccolte documenti, elenchi personalizzati, ecc). Elenchi di SharePoint sempre viste disponibili in ordine alfabetico. Non possiamo cambiare questo utilizzando fuori la funzionalità di. Se questo può essere fatto tramite personalizzazione (e non sono sicuro che può), è lontano a tecnico per il tipico utente finale.

Se si desidera controllare l'ordine in cui SharePoint elenca le viste disponibili, semplicemente anteporre un numero o una lettera a nome della vista, come in:

1 – Dal tipo di materiale
2 – Tutti i documenti
3 – Data di scadenza

-o-

A – Dal tipo di materiale
B – Tutti i documenti
C – Data di scadenza

Ho anche creato viste in cui scopo è rigorosamente per alimentare un indicatore KPI. Ho seguito questa convenzione di denominazione:

Z_KPI_[descrizione]

Che provoca il mio "KPI" viste a comparire nella parte inferiore dell'elenco.

</fine>

Iscriviti al mio blog.

Funny domenica: “Quando ero un ragazzino”

Come un genitore, da qualche parte lungo la linea ho scoperto la "quando ero un ragazzino" trucco.

Mio figlio, probabilmente quattro o cinque al momento, stava giocando un pallone e come i più piccoli ragazzi che giocano con palloni, ha spuntato. Era molto arrabbiato. Il mondo era giunto alla fine. Ho detto a lui, "quando ero ragazzino, Ho avuto un pallone e ha rilanciato e alla fine, Ho un nuovo palloncino." Sembrava per aiutarlo a far fronte con la sua sconfitta e ha condotto ad un divertente parlare di com'era quando ero un ragazzino.

Che ha funzionato bene come una tecnica di consolazione e ho usato un diverse volte nel successivo periodo di tempo. Ho avuto una volta nei guai quando suo Monster Rancher 3 creatura è morta. Parlato di come il mio cane, Principe, era morto in un incidente d'auto. Stavolta, la sua risposta è stata, "Ora mi sento male circa due cose!" Evitato utilizzando la "quando ero un ragazzino" tecnica per consolazione dopo che.

Prima dell'incidente del cane morto, Tuttavia, Avevo anche iniziato ad utilizzare la tecnica per convincerlo a fare le faccende. "Quando ero un ragazzino, Ho dovuto andare a prendere il giornale", "pulire la mia stanza", "ottenere la mamma sua tazza di caffè", ecc.

Questo era troppo abbastanza successo per un po', ma ha iniziato a sempre più ribellarsi contro la tirannia della mia infanzia. Un evento, in particolare, segnò la fine. Gli ho detto di riportare i bidoni della spazzatura da marciapiede in garage. Egli ha sostenuto e ha risposto, "Quando ero un ragazzino, Ho dovuto prendere la spazzatura torna al garage." Ha risposto, "Oh sì! Beh, quando eri un ragazzino, che era stupido!".

</fine>

Iscriviti al mio blog.

Technorati Tags:

Viste e colonne di elenchi e raccolte di documenti non possono essere protette

AGGIORNAMENTO (02/29/08): Questo nuovo progetto codeplex sembra fornire un metodo per la protezione delle singole colonne: http://www.codeplex.com/SPListDisplaySetting. Se avete qualche esperienza di lavoro con esso, si prega di lasciare un commento.

Manifesti Forum spesso porre una domanda come questa: "Ho una visione responsabile ed e una visualizzazione personale di un elenco. Come a proteggere la vista manager in modo che personale non può usarlo?"

Essi spesso porre una domanda correlata: "Voglio garantire una colonna di metadati specifici che solo i gestori possono modificare tale colonna mentre gli altri possono non ancora vederlo."

Queste risposte si applicano a entrambi WSS 3.0 e MOSS:

  • SharePoint non fornisce il supporto out-of-the-box per la protezione delle visualizzazioni.
  • SharePoint non fornisce il supporto out-of-the-box per le colonne di sicurezza.

Ci sono diverse tecniche si possono seguire per soddisfare questi tipi di requisiti di sicurezza. Ecco cosa mi viene in mente:

  • Utilizzare la protezione a livello di elemento di out-of-the-box. Viste rispettano sempre la configurazione di sicurezza a livello di elemento. Ricevitori di eventi e/o flusso di lavoro può automatizzare la protezione assegnazione.
  • Utilizzare le visualizzazioni personali per "privilegiati" Visualizzazioni. Queste sono abbastanza facile da configurare. Tuttavia, Grazie alla loro "personale" natura, questi devono essere configurate per ogni utente. Utilizzare la configurazione standard di sicurezza per impedire chiunque altro di creare una visualizzazione personale.
  • Utilizzare una web part visualizzazione dati e implementare una sorta di soluzione di limitazione per motivi di sicurezza AJAXy.
  • Rotolare la propria funzionalità di visualizzazione elenco e incorporare la rimozione della protezione a livello di colonna.
  • Modificare le forme di entrata di dati e utilizzare JavaScript in congiunzione con il modello di sicurezza per implementare la rimozione della protezione a livello di colonna.
  • Utilizzare un modulo di InfoPath per inserimento dati. Implementare la rimozione della protezione di livello di colonna tramite chiamate al servizio web di SharePoint e condizionalmente nascondere i campi come necessario.
  • Rotolare una propria funzione di immissione dati ASP.NET che implementa la rimozione di protezione a livello di colonna.

Nessuna di queste opzioni sono davvero quel grande, ma c'è almeno un percorso da seguire se avete bisogno di, anche se è difficile.

NOTA: Se andate giù uno qualsiasi di questi percorsi, non dimenticare di "azioni-> Apri con Esplora risorse di Windows". Volete essere sicuri che prova con quella caratteristica per assicurarsi che non funziona come una "back door" e sconfiggere il vostro regime di sicurezza.

Se avete altre idee o esperienze con fissaggio colonne o visualizzazioni, per favore email me o lasciare un commento e aggiornerò questo distacco come appropriato.

</fine>

Iscriviti al mio blog.

Technorati Tags:

Suggerimento rapido: Numeri di versione del file ADF BDC sono il tuo amico

Se stai mano-codificazione ADF file e facendo un sacco di cicli di prova/codice/importazione, utilizzare il numero di versione per rendere la vita più facile.

Odio ammetterlo, ma fino a questa settimana, Ero sempre l'eliminazione di file ADF e quindi reimportandoli. Questo sarebbe rompere mio colonne di dati business e farmi ri-li filo. Tutte le inutili.

Questo file sotto "è evidente una volta che si vede".

Esempio:

<LobSystem
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog BDCMetadata.xsd" Tipo="WebService" Versione="1.2.0.0" Nome="xyzzyDocumentReview" xmlns="http://schemas.Microsoft.com/Office/2006/03/BusinessDataCatalog">

Cambiare quella versione e reimportazione e la colonna di dati aziendali esistenti utilizza la versione aggiornata automaticamente con alcuna configurazione aggiuntiva richiesta.

</fine>

Iscriviti al mio blog.

Technorati Tags:

Soluzione: BDC Picker Mostra solo una colonna di risultati

Nei miei tentativi in corso a fornire un colonna di ricerca più utile utilizzare BDC, Mi ha colpito un muro con il selettore BDC. Se non avete ancora vederlo, il selettore BDC è simile a una selezione di utenti che funziona con colonne di tipo "dati aziendali".

Si accede al selettore facendo clic sull'icona del libro aperto di una colonna di dati di business come mostrato:

immagine

L'immagine sopra mostra una colonna di dati di business denominata "Master documento Id". Tale colonna è collegata, Via BDC, a un servizio web. Il servizio web restituisce due colonne di informazioni: Titolo e ID di documento. Lo scopo di affari qui è quello di fornire un "questo documento è basato su" funzione. Gli utenti selezionano un maestro"" documento e quando si salva, un ricevitore di evento copia campi di meta dati dal master cui si fa riferimento.

Per impostazione predefinita, il selettore BDC assomiglia a questo quando la ricerca per un documento cui ID = "38":

clip_image002

Che è utile, ma non abbastanza buono. La gente non pensa in termini di IDs, pensano in termini di titoli e/o altri dati di meta. Il selettore consente di cercare su altre colonne (e. g. Titolo) ma non mostrerà l'elenco effettivo dei titoli che ha trovato, solo loro DocId s come indicato qui:

clip_image002[1]

(La schermata non è così grande, perché non scegliere una ricerca che restituisce risultati validi, ma si può vedere che se fosse trovato alcuni risultati, e solo dimostrato di DocId, titoli non).

Ho cercato di alta e bassa per la risposta a questa e non riuscita. Il mio collega, il Venerabile Jonathan Bradshaw, aveva affrontato e risolto questo problema. Quando ho raggiunto a lui per aiuto, Egli mi ha segnalato nella giusta direzione.

Configurare la selezione per visualizzare le colonne multiple tramite il ShowInPicker"" Proprietà nell'ADF:

<Proprietà Nome="ShowInPicker" Tipo="System. Boolean">true</Proprietà>

Più in dettaglio:

  <!-- Titolo -->
  <TypeDescriptor TypeName="System. String" Nome="Titolo" >
    <LocalizedDisplayNames>
      <LocalizedDisplayName LCID="1033">Titolo</LocalizedDisplayName>
    </LocalizedDisplayNames>
    <Proprietà>
      <Proprietà Nome="DisplayByDefault" Tipo="System. Boolean">true</Proprietà>
      <Proprietà Nome="ShowInPicker" Tipo="System. Boolean">true</Proprietà>
    </Proprietà>
  </TypeDescriptor>

L'impostazione di questa proprietà introdurre un problema minore. Non appena si imposta una volta, è necessario impostarlo per ogni colonna che si desidera visualizzare. Nel mio caso, Selezione BDC ha mostrato DocId per impostazione predefinita. Tuttavia, una volta ho aggiunto "ShowInPicker" a titolo, DocId non più visualizzati. Ho risolto impostando in modo esplicito la proprietà ShowInPicker per ID Doc.

Ecco il risultato:

immagine

(Ti spiego la strana "168 – CamlSchema.xsd" costruzione in un futuro post del blog. In breve, è una stringa concatenata che permette un'esperienza utente leggermente migliore).

Naturalmente, Dopo aver scritto questo post di Blog, Ho appena fatto una ricerca per "ShowInPicker" e ha trovato numerosi successi, compreso questo: http://msdn2.microsoft.com/en-us/library/ms583986.aspx. Spiega il significato di tale proprietà insieme ad alcune altre cose buone di BDC.

</fine>

Iscriviti al mio blog!

Technorati Tags:

Rapido & Facile: Creare una cartella e assegnare un tipo di contenuto (O, Avere il tuo KPI e li mangiano troppo)

Al fine di risolvere un problema KPI Ho scritto qui, Ho fatto alcuni test e scoperto il lavoro di tale KPI contro cartelle con meta dati nello stesso modo che lavorano contro i documenti o voci di elenco. Ho provato creando un nuovo tipo di contenuto basato sul tipo di contenuto di cartella e quindi aggiunti alcuni campi. Ho creato alcuni indicatori e dimostrato a me stesso che gli indicatori KPI funzionano come previsto. Questo è stato il benvenuto notizie. Non è perfetto, perché il drill-down si ottiene da KPI contro le cartelle non è esattamente quello che vuoi. Questo non è troppo un inconveniente nel mio caso, perché 1) gli utenti finali non so meglio e 2) il drill-down va a una cartella. Fanno clic il nome della cartella e sono l'elemento. È due clic invece di uno, che non è la fine del mondo.

Ciò ha fluito piacevolmente con il lavoro che stavo facendo. Sto creando una cartella per ogni documento che viene caricato. Questo viene fatto tramite un ricevitore di eventi. Di conseguenza, è un pezzo di torta per mantenere il della cartella padre meta dati in sincronia con i dati KPI-driven meta del file stesso poiché l'impianto idraulico è già in atto. Questo mi permette di avere i miei KPI e di mangiarli anche io 🙂

Ho modificato il ricevente di eventi per aggiungere la cartella e quindi impostare il tipo di contenuto di questa cartella nuovo al mio tipo di contenuto personalizzato di KPI-friendly. Questo pezzo di codice ha fatto il trucco:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Documenti").Sottocartelle;
  SPFolder addedFolder = srcFolders.Add(Proprietà.ListItem.ID.ToString());
  SPContentTypeId kpiCT = Nuovo SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Content Type ID"] = kpiCT;
  addedFolder.Item.Update();

Per individuare l'ID effettivo del tipo di contenuto, I accedere a tale tipo di contenuto tramite Impostazioni sito e copia/incollato dall'URL come mostrato:

immagine

</fine>

Iscriviti al mio blog!

Technorati Tags: ,

Facile e veloce: Ottenere il SPFolder di un SPListItem in un ricevente di eventi

Odio ammetterlo, ma ho lottato con questo tutti i giorni. Il mio ricevitore di evento deve aggiornare un campo della relativa cartella padre. Questo po ' Mostra come farlo:

privato void UpdateParentFolder(SPItemEventProperties Proprietà)
{

SPFolder thisItemFolder = proprietà.ListItem.File.ParentFolder;
thisItemFolder.Item["Stato di approvazione ZZ"] = "Buone notizie, tutti!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

In questo caso, Sto lavorando con una raccolta di documenti e la proprietà sono provenienti da un evento ItemAdded.

Il trucco è che si può ottenere il SPFolder dell'elemento direttamente dall'elemento stesso (vale a dire. Proprietà.ListItem.Folder è null). Invece, Vai a File associato dell'elemento dell'elenco e ottenere la cartella del File.

</fine>

Iscriviti al mio blog!

Technorati Tags:

Ancora un altro evento ricevitore Debug trucco

Sono sicuro che io non sono la prima persona a venire con questo. Tuttavia, Non ho notato nessuno pubblicare un trucco come questo da quando ho iniziato prestando particolare attenzione alla comunità lo scorso luglio. Così, Ho pensato che avrei posto questa punta di debug rapido e facile.

Sto lavorando su un ricevente di eventi che ha iniziato a generare questo errore nella 12 alveare:

Errore caricamento ed esecuzione di ricezione di eventi di Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Cultura = neutral, PublicKeyToken = blahbalhbalh. Ulteriori informazioni sono sotto. : Riferimento all'oggetto non impostato su un'istanza di un oggetto.

Non sapevo dove mi avevo introdotto questo bug perché avevo fatto troppe cose in uno dei miei cicli di codice/distribuzione/test.

Ho provato Questa soluzione per ottenere il mio pdb in là con la speranza che SharePoint 12 alveare mostrerebbe la traccia dello stack, ma senza fortuna. Non so se è possibile e se qualcuno fa, per favore fatemi sapere 🙂

Lo so che è possibile Scrivi i tuo messaggi di log per il 12 alveare. Francamente, Volevo qualcosa di un po ' meno pauroso e più veloce da implementare.

Mi venne in mente che potevo ottenere almeno alcune informazioni di base traccia da catturare e ri-generare eccezioni generiche come questo:

  provare {
    UpdateEditionDate(Proprietà);
  }
  catture (Eccezione e)
  {
    Throw Nuovo Eccezione("Dispatcher, UpdateEditionDate(): Eccezione: [" + &() + "].");
  }

Questo ha mostrato nella 12 hive thusly:

Errore caricamento ed esecuzione di ricezione di eventi di Conchango.xyzzyEventReceiver in xyzzy, Version = 1.0.0.0, Cultura = neutral, PublicKeyToken = blahblahblah. Ulteriori informazioni sono sotto. : Oggetto Dispatcher, UpdateEditionDate(): Eccezione: [System. NullReferenceException: Riferimento all'oggetto non impostato su un'istanza di un oggetto. presso Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(Proprietà SPItemEventProperties) presso Conchango.xyzzyManagementEventReceiver.Dispatcher(Proprietà SPItemEventProperties, String eventDescription)].

Che mi ha dato tutti i dettagli di cui che avevo bisogno per rintracciare quel particolare problema e prevedo di usarlo molto andando avanti.

</fine>

Iscriviti al mio blog!