archivi categoria: Sviluppo di SharePoint

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:

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!

Soluzione: SPQuery non cerca le cartelle

La scorsa settimana stavo implementando applicazione una "evoluzione" soluzione per un client che utilizza BDC e SPQuery e ha incontrato qualche difficoltà utilizzando SPQuery contro una raccolta di documenti contenenti le cartelle. Linea di fondo: assegnare "ricorsivo" all'attributo vista della query.

Mio scenario:

  • Lunedi ', Sono di caricare un documento e fornire alcuni dati di meta.
  • La settimana seguente, Caricare un nuovo documento. Gran parte dei meta dati di questo nuovo documento è basato sul documento che ho caricato il lunedì (che noi chiamiamo il "documento master").
  • Abbiamo creato una facciata di servizio web che fornisce un'interfaccia di BDC-friendly alla lista in modo che gli utenti possono facilmente individuare tale documento lunedì tramite una ricerca del titolo.
  • Una colonna di dati BDC fornisce un'interfaccia utente amichevole. (Questo è parte del mio tentativo utilizzando BDC per una colonna di ricerca più amichevole).

Il servizio di facciata BDC finale utilizza una query come questa a fare la ricerca:

 // Usato U2U strumento per aiutare a generare questa query CAML.
      oQuery.Query =
        "<Dove>";

      Se (titleFilter.Length > 0)
          = oQuery.Query
          "  <E>";

        = oQuery.Query
        "    <E>" +
        "      <Geq>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Tipo di valore =  "Text">" + minId + "</Valore>" +
        "      </Geq>" +
        "      <LEQ>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Tipo di valore =  "Text">" + maxId + "</Valore>" +
        "      </LEQ>" +
        "    </E>";

      Se (titleFilter.Length > 0)
          = oQuery.Query
          "    <Contiene>" +
          "      <FieldRef Name =  "Title" />" +
          "      <Tipo di valore =  "Text">" + titleFilter + "</Valore>" +
          "    </Contiene>" +
          "  </E>";
        = oQuery.Query
        "</Dove>";

Durante la fase iniziale di sviluppo, Questo ha funzionato grande. Tuttavia, abbiamo introdotto le cartelle nella directory per risolvere alcuni problemi e improvvisamente, la mia selezione BDC non restituisce alcun risultato. Ho rintracciato questo dovuto al fatto che il SPQuery non ritornerei mai alcun risultato. Abbiamo usato le cartelle principalmente per consentire più file con lo stesso nome per essere caricato, ma con diversi metadati. Quando il file viene caricato, si crea una cartella basata sull'ID della voce di elenco e quindi sposta il file ci (Che scrisse qui; abbiamo avuto risultati misti con questo approccio, ma su tutta la, si sta lavorando bene). L'utente non importa sulle cartelle e infatti, davvero non capisco che ci sono tutte le cartelle. Abbiamo configurato tutte le viste sulla libreria per mostrare gli elementi senza riguardo per le cartelle.

Mi ha colpito questo problema due volte come l'implementazione tecnica evoluta e risolto esso diversamente ogni volta. La prima volta, Non stavo usando l'operatore contiene nella query. Senza un operatore contiene, Sono stato in grado di risolvere il problema specificando la vista su contructor di SPQuery. Invece di utilizzare il costruttore predefinito:

SPList oList = web.Liste["Documenti"];

SPQuery oQuery = Nuovo SPQuery();

Invece utilizzato un costruttore che ha specificato una vista:

SPList oList = web.Liste["Documenti"];

SPQuery oQuery = Nuovo SPQuery(oList.Views["Tutti i documenti"]);

Che ha risolto il problema e ho cominciato ad avere i miei risultati.

Ho poi aggiunto l'operatore contiene nel mix e si è rotto nuovamente. Si scopre che l'operatore contiene, per quanto posso dire, non funziona con vista allo stesso modo l'una più semplice GEQ / Operatori LEQ. Ho fatto qualche ricerca e ho imparato che ViewAttributes della query deve essere impostata su "Ricorsiva", come in:

oQuery.ViewAttributes = "Scope = "Recursive"";

Che risolto il problema per CONTAINS. Infatti, questo anche risolto il mio problema di ricerca originale e se avevo specificato il ricorsiva attributo la prima volta, Non vorrei avere correre la questione ancora.

Il fatto che un SPQuery basati su Vista funziona per alcuni operatori (GEQ/LEQ) e non gli altri (CONTIENE), accoppiato con il fatto che gli indicatori KPI non sembrano funzionare a tutti con cartella contenente documento librerie porta me a credere che SPQuery ha alcuni problemi di ortogonalità.

Ringraziamento speciale:

  • La buona gente di U2U e il loro strumento di query.
  • Grande di Michael Hoffer "Learning by doing" post del blog, Commenti e risposte.

</fine>

Iscriviti al mio blog!

Insetto MOSS KPI? Lista indicatore legato alla raccolta di documenti con le cartelle

AGGIORNAMENTO 02/29/08: Ho risolto questo problema creando una cartella e quindi si assegna un tipo di contenuto nella cartella che ha i meta dati che ho bisogno per gli indicatori KPI. Che ho descritto un po' più in dettaglio qui.

Abbiamo implementato una soluzione tecnica in cui gli utenti caricare documenti in una raccolta documenti. Un ricevitore di eventi crea una directory e sposta il file in quella directory (usando una tecnica simile a quello che scritto circa qui). Abbiamo con successo abbiamo navigato intorno i potenziali problemi causati da ricevitori di eventi che rinominare i file caricati (soprattutto perché gli utenti non iniziano mai loro documento facendo clic su "New" ma invece di creare i documenti localmente e poi caricarle).

I meta-dati per questi documenti includono un Sì/No colonna del sito chiamato "urgente" e un'altra colonna del sito denominata "Status". Abbiamo bisogno di soddisfare un requisito di business che indica la percentuale di "urgente" documenti il cui status è "In sospeso".

Questo è di solito semplice da fare e ho descritto qualcosa di molto simile a SharePoint Beagle con un sacco di colpi di schermo, se siete interessati.

In poche parole, Ho fatto il seguente:

  • Creare una visualizzazione sulla libreria doc chiamata "In sospeso".
  • Configurare la visualizzazione per ignorare la struttura delle cartelle.
  • Creare un elenco KPI.
  • Creare un indicatore nella lista che punta al lib doc e che "in sospeso" vista.

Questo semplicemente non funziona. L'indicatore KPI mostra mio target (e. g. cinque documenti urgenti) ma Mostra sempre il numero effettivo di documenti urgenti come zero. Paradossalmente, Se praticare nei dettagli, Essa mostra i cinque documenti urgenti nell'elenco. Ho creato uno scenario molto semplice con due documenti, uno in una cartella e uno non. Ecco la schermata:

immagine

Il colpo di schermo sopra mostra chiaramente ci sono due documenti in vista, ma il valore"" è uno. Il CamlSchema"" con documento vuoto Id è nella cartella principale e l'altro è in una cartella denominata "84".

Mi pare che anche se si specifica una vista, i KPI non onorare la "mostra tutti gli articoli senza le cartelle" impostazione e invece, si limita alla cartella principale.

Se sbaglio, prego cadalo una linea o lasciare un commento.

</fine>

Iscriviti al mio blog!

Technorati Tags:

Soluzione al problema: “FileNotFoundException” Con il mio ricevitore di funzionalità.

Stavo lavorando su una caratteristica la scorsa settimana che vorrei aggiungere alcuni ricevitori di eventi a un'istanza di elenco specifico. (Ho bloggato un po' su quel ricevitore elenco qui).

Utilizzando la riga di comando, Potuto installare la funzionalità con nessun errore (ma vedi sotto per l'errore nascosto). Quando ho provato a distribuire la funzionalità sul sito, MOSS si è lamentato di "FileNotFoundException" errore. Questo blog descrive come ho risolto.

Questo è l'errore che MOSS mi ha mostrato nel browser web:

Funzione ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ potrebbe non essere installato perché il caricamento di assembly del ricevitore di eventi "xyzzyFeatureReceiver_0" non riuscita: System.io.FileNotFoundException: Impossibile caricare il file o l'assembly ' xyzzyFeatureReceiver_0’ o una delle relative dipendenze. Il sistema non riesce a trovare il file specificato.
Nome del file: ' xyzzyFeatureReceiver_0’
presso System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Prove assemblySecurity, Assemblea locationHint, StackCrawlMark& stackMark, ThrowOnFileNotFound booleano, ForIntrospection Boolean)
presso System.Reflection.Assembly.InternalLoad(AssemblyRef AssemblyName, Prove assemblySecurity, StackCrawlMark& stackMark, ForIntrospection Boolean)
presso System.Reflection.Assembly.InternalLoad(AssemblyString stringa, Prove assemblySecurity, StackCrawlMark& stackMark, ForIntrospection Boolean)
a Reflection(AssemblyString stringa)
presso Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Assemblea associazione registrazione è attivata OFF.
Abilitare la registrazione di assembly legano fallimento, impostare il valore del registro di sistema [HKLMSoftwareMicrosoftFusion.!EnableLog] (DWORD) A 1.
Nota: C'è qualche penalizzazione delle prestazioni associati alla registrazione di guasto legano assieme.
Per disattivare questa funzionalità, rimuovere il valore del registro di sistema [HKLMSoftwareMicrosoftFusion.!EnableLog].

Risolvere i problemi con Windows SharePoint Services.

Saper provocare deliberatamente quell'errore: non installare l'assembly nella global assembly cache. Ma, era nella GAC. Normalmente installare assembly nella GAC trascinandoli nella c:\WINDOWSassembly cartella utilizzando Esplora risorse di windows. Non ho mai sentito 100% comodo che fare perché ho sempre pensato che gacutil esistito per un motivo … così ho provato che. Non faceva alcuna differenza.

Ho cercato il Internets e trovato questo post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

Il poster è capitato di usare lo stesso pezzo di radice di codice (dal libro all'interno di WSS da questo elenco) così che era un segno di speranza. Tuttavia, il suggerimento di decorare l'assembly con un [Assemblea: ] direttiva non ha senso per me. Ho provato comunque e non mi sbagliavo. Non faceva alcuna differenza.

Poi ho notato che la mia definizione di classe non era pubblico. Reso pubblico e che non faceva alcuna differenza.

Successivo, Sono andato alla difficoltà di abilitazione "Assemblea associazione fallimento log" (seguendo le istruzioni utili e precise fornite) e questo è dove le cose hanno cominciato a farsi interessanti. Tale log mi mostra che il runtime sta cercando ovunque su tale server per la mia Assemblea. Sembra anche essere alla ricerca di essa nel mio armadietto dei medicinali. Ma … esso non cercarlo nella GAC.

Ho messo sulla mia giacca invernale e andare alla ricerca di Internets nuovamente e scoprire che qualcuno ha avuto questo problema troppo. La lunga discussione in tale registrazione peters fuori nel nulla e non riesco a trovare una soluzione.

Mi muovo la mia Assemblea in uno dei posti che nel registro reclami sta cercando e fare un po' più progressi. Io sono ricompensato con un nuovo errore nel browser quando tento di attivare la funzionalità:

Impossibile creare l'oggetto ricevitore caratteristica dal gruppo "xyzzyFeatureReceiver_0", tipo "Conchango.xyzzyFeatureReceiver" per la funzione b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: ArgumentNullException: Valore non può essere null.
Nome del parametro: tipo
corrispondenza System.Activator.CreateInstance(Tipo tipo, NonPublic booleano)
corrispondenza System.Activator.CreateInstance(Tipo tipo)
presso Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Risolvere i problemi con Windows SharePoint Services.

Tempo per un ultimo viaggio a Internets!

Questa volta scopro, abbastanza prevedibile, quel muschio genera questo errore perché l'assembly non è nella global assembly cache.

Voglio ottenere qualcosa di positivo da questo e provare a sentire un po' orgogliosa che ho creato il Fuggitivo di assembly MSIL, ma non funziona. Io sono semplicemente infastidito. Mi trovo a borbottando "uovo o la gallina" sotto il mio respiro.

Ho finalmente deciso a punt. Creare un progetto completamente nuovo e copia/incolla il codice dal progetto non funzionante incredible-cloaked-from-the-GAC-assembly sopra a questo nuovo progetto. (Cercare un flag di compilazione chiamato qualcosa come "Nascondi da associazione se installato nella Global Assembly Cache assembly" ma non riesce a trovare uno).

Installare la funzionalità e attivarlo e … funziona! Così, Dopo tutto ciò che, Ho dovuto fondamentalmente ' riavviare’ il mio progetto. Questo è un altro motivo perche ' odio il computer.

Ho imparato qualcosa di utile da questo. Ero stato l'installazione di funzionalità utilizzando la riga di comando stsadm tutto il giorno e state usando il "-forza" opzione per abitudine. Per qualche motivo, Non ho usato il - opzione force quando ho installato il nuovo progetto. Stavolta, In realtà ho fatto, veramente dimenticare copiare assembly di questo nuovo progetto nella GAC. Di conseguenza, Ho ricevuto quel FielNotFoundException"" errore. Stavolta, Ho preso da stsadm, non quando ho cercato di attivare la funzione tramite il browser web. Così, -forza in realtà svolge due ruoli. Esso consente di re-installare una funzionalità esistente. Inoltre consente di installare una funzionalità buggy che non può funzionare in fase di esecuzione di eliminazione dell'errore. Probabilmente dice tanto nella guida da qualche parte ma non ho mai notato.

</fine>

Rapido & Facile: Rinominare il File caricato utilizzando il modello a oggetti di SharePoint tramite un ricevente di eventi

AGGIORNAMENTO: Questo funziona, ma non ci sono limitazioni significative che sono descritti nei commenti. Questo può ancora essere utile in alcuni cirumstances.

AGGIORNAMENTO 2: Nel mio progetto attuale, Gli utenti sempre caricare documenti. Di conseguenza, Io non incorrere in un problema dove MS Word è in esecuzione e pensa che il file è stato rinominato su di esso. Ho incontrato un problema, "il file è stato modificato da qualcun altro" e risolto il problema tramite un flag di tipo semplice semaforo. Gli utenti devono modificare un campo dati meta dal valore predefinito a qualcos'altro. Il itemupdated() ricevitore in cerca di un valore valido lì prima di eseguire effettivamente la rinomina e da allora, Non ho avuto alcun problema. Il chilometraggio può variare.

Ho un requisito di cliente di cambiare il nome del file caricato in una raccolta di documenti specifici per la conformità con una convenzione di denominazione particolare. L'API fornisce una "Rinomina()" Metodo.. Invece, usiamo "MoveTo(…)". Qui è un po' minimal di codice per eseguire questa operazione:

 pubblica eseguire l'override void ItemAdded(SPItemEventProperties Proprietà)
        {
            SPFile f = proprietα.ListItem.File;

            f.MoveTo(Proprietà.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Solo la parte difficile è la "proprietà. ListItem.ParentList.RootFolder.Url". Il MoveTo() Metodo richiede un URL. Che purè punti stringa me nella cartella principale della mia libreria del documento corrente. Questo mi permette di evitare qualsiasi hard coded in mio ricevitore di eventi.

Questa è una versione più utile che fa la stessa cosa, ma assegna il nome del file per il "Titolo":

 pubblica eseguire l'override void ItemAdded(SPItemEventProperties Proprietà)
        {
            DisableEventFiring();

            // Assegnare il titolo di quest'elemento sul nome del file stesso.
 // NOTA: Questa assegnazione deve avvenire prima che vogliamo modificare il file stesso.
 // La chiamata di aggiornamento() la SPFile sembra invalidare le proprietà in
 // certo senso.  Aggiornamenti "Title" non è riuscito fino a che cambia (e l'aggiornamento() chiamare)
 // sono state spostate di fronte la modifica il nome del file.
            Proprietà.ListItem["Title"] = proprietα.ListItem.File.Name;

            Proprietà.ListItem.Update();

            SPFile f = proprietα.ListItem.File;

            // Ottenere l'estensione del file.  Abbiamo bisogno che più tardi.
 stringa spfileExt = Nuovo FileInfo(f. Name).Estensione;

            // Rinominare il file ID dell'elemento di elenco e utilizzare l'estensione del file per mantenere
 // quella parte di esso intatto.
            f.MoveTo(Proprietà.ListItem.ParentList.RootFolder.Url +
                "/" + Proprietà.ListItem["ID"] + spfileExt);

            // La mossa di commettere.
            f.Update();

            EnableEventFiring();
        }

Suggerimento rapido: Web Part Query contenuto, XSL e il valore della colonna di ricerca

Ho un nome di colonna in un tipo di contenuto denominato "Real Estate Location".

Che la colonna è di tipo "ricerca".

Ho modificato <CommonViewFields> e ItemStyle.xsl per mostrare la colonna.

Un semplice <xsl:valore di selezionare =…> Torna restituisce un valore interno che include dati di posizione ordinale, come ad esempio:

1;#Miami

Per ottenere il valore di human-friendly, utilizzare xsl substring-after, come illustrato:

<xsl:selezionare valuxslf = "substring-after(@ Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></xsl:valore di>

Utilizzare questa tecnica ogni volta che si lavora con valori di ricerca nelle trasformazioni XSL e necessario per ottenere il valore di human-friendly.

<fine />

Technorati Tags: , ,

Facile e veloce: Determinare il nome di colonna interna di una colonna del sito

AGGIORNAMENTO: Jeremy Thake ha bloggato su questo e mettere un po ' codice per un'applicazione console che Mostra nomi interni.

Stavo cercando di ottenere una web part contenuti query per visualizzare una data di scadenza da un'attività e perché l'etichetta dello schermo è "Data di scadenza", Davo per scontato che il nome della colonna da utilizzare in <CommonViewFields> è "Due_x0020_Date".

Sbagliato!

Il nome della colonna reale in questo caso era "DueDate".

Come ha fatto a trovare? Ho riletto Heather Post di Blog di Salomone sulla modifica CQWP per visualizzare ulteriori colonne di dati. Lei descrive questo processo a passaggio #13. La fiducia. È corretto. Almeno, era giusto per me. Non mi fidavo in un primo momento per un'altra colonna con un nome molto più a lungo.

Dico "la fiducia" perché non si è fidato e probabilmente sprecato due ore sbattere la testa contro un muro vicino a. Dopo che risolto il "DueDate" nome, Volevo aggiungere un altro campo a <CommonViewFields>. Utilizzando la tecnica di Solomon, Mi è stato sempre un nome di colonna come "XYZ_x0020_Project_x0020_Due_x00".

Ho pensato a me, che è chiaramente un nome troncato. Sono andato avanti e ONU-troncato con nessun successo. Ho finalmente usato il nome apparentemente troncato e ha funzionato.

Bonus Suggerimento: Quando stavo lavorando con il CQWP, Se ho aggiunto un cattivo nome interno per <CommonViewFields>, il CQWP mi avrebbe detto che la query non aveva restituito alcun risultato. Ma, Se ho aggiunto un tipo di dati per il nome del campo, che verrebbe restituito un risultato. Aggiungendo i dati tipo mascherato in realtà un problema dal momento che io stavo fa riferimento a un campo inesistente. Potrei aggiungerlo, ma quando ho provato a visualizzare il valore, Vorrei avere sempre uno spazio vuoto.

Questo non mascherare l'errore:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Questo mascherare l'errore:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</fine>