archivi categoria: Sviluppo di SharePoint

Bambù calendario interagendo con SharePoint le cause "durante un errore imprevisto"

Oggi, Ho lavorato in un ambiente che utilizza una web part di bambù calendario per qualche collaborazione migliorata. Questo una standard medio/piccola fattoria con due WFEs di bilanciamento del carico, un "application server" per l'indicizzazione e InfoPath e un cluster SQL back end.

Il client installato qualche software di recupero di disastro su uno del WFEs e che ha provocato un WFE rotto per un sito specifico nella raccolta siti. Ogni volta che il bilanciamento del carico puntato verso i colpiti WFE e che il sito, Gli utenti hanno visto una schermata bianca in gran parte vuota con la frase "si è verificato un errore imprevisto". No altre informazioni hanno mostrato, solo quella frase.

Mi hanno chiesto di guardarlo. Ho riprodotto facilmente il problema e quindi aggiunto un ?contenuto = 1 alla fine dell'URL. Questo è come ho imparato che stavano usando la parte web di bambù. Sono tornato alla pagina e ora, improvvisamente, mi ha mostrato un messaggio di errore ordinata bella:

image

Non so che cosa stava accadendo o cosa ho fatto per ottenere il messaggio di errore controllata per visualizzare altro che aggiungendo il ?contenuto = 1 bit della stringa di query.

Questo è probabilmente un caso molto raro di bordo ma se ottenete il messaggio, "Si è verificato un errore imprevisto" andare avanti e aggiungere ?contenuto = 1 per la stringa di query e vedere dove che conduce.

</fine>

Iscriviti al mio blog.

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

Technorati Tags: ,

Con riflettore su Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal ha messo su un articolo su avvisi e visualizzazioni ("Quale visualizzazioni possono essere utilizzati quando si crea un avviso ?"), che è interessante per i suoi meriti. Tuttavia, Ero ancora più interessato a vedere come egli cammina metodicamente attraverso il processo di utilizzo .NET Reflector di Redgate. Passo dopo passo, Egli mostra come utilizzare tale strumento rintracciare come SharePoint determina se una vista su una lista dovrebbe essere "subscribable" per la mancanza di una parola migliore (he explains this much better than I do 🙂 ).

A questo punto, in epoca di SharePoint, quasi si avrebbe dovuto essere sordi e ciechi non hanno sentito parlare o leggere sull'utilizzo di tale strumento. Ha avanzato roba e il mio senso è che è in molti modi uno strumento di ultima istanza. Tuttavia, Se pensate che bisogno, ma non so davvero come, Write-up di Michael sembra una grande lezione su questo argomento.

</fine>

Iscriviti al mio blog.

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

Ordinamento gli elementi del calendario nella visualizzazione calendario

Sto usando un calendario per tenere traccia di tavole rotonde in un dato giorno. Ho due sessioni: mattina e pomeriggio. Voglio creare una visualizzazione che mostra le sessioni del mattino solo elencati in ordine alfabetico tramite un ID di sessione. Questo è un po' difficile da realizzare (a meno che non mi mancava qualcosa di vero e proprio ovvio).

Posso facilmente creare una visualizzazione filtrata mostrando solo gli eventi di quel giorno. Il calendario mostrerà tutti quegli eventi e se tutti prendono posto sulla stessa ora, elenca loro fianco a fianco nello slot ora. Fantastico. La parte difficile è che, per impostazione predefinita, vuole li elenco in formato ID. Così, Se posso aggiungere "Session 02" e poi "Session 01" il calendario, li mostra in quell'ordine (vale a dire, Sessione 02 e poi la sessione 01). Per elencarli in ordine di ID di sessione, Ho pensato di provare queste cose:

  1. Configurare la visualizzazione utilizzando l'interfaccia utente web. Senza fortuna. Non esistono opzioni per ordinare gli elementi in questo modo.

    Dal momento che non ha funzionato, Ora sto sperando che non ci è una query CAML da qualche parte in là che mi permetterà di eseguire l'override l'ordinamento. CQWP mi permette di fare che tipo di cambiare, forse il calendario sarà pure?

  2. Modificare la web part, cercare un'esportazione"" funzione e … BZZZT! Non riesco a esportare i suoi XML. Non esiste alcuna opzione di esportazione.

    Io sono ancora una speranza che riesco a trovare e modificare alcune query CAML. Dal momento che non posso esportare la web part, SharePoint Designer, che lascia.

  3. Aggiungere la web part Calendario a un sito di sandbox e aprire quel sito tramite SharePoint Designer. Guardo il markup per la parte web e trovare quello che sto cercando. Esso ha codificato la follia, ma non c'è: "<ListViewXml …. >follia codificato</ListViewXml>". In particolare, c'è questo gioiello:

<Query>
<Dove>
<DateRangesOverlap>
<FieldRef Name = "Count" />
<FieldRef Name = "EndDate" />
<FieldRef Name = "RecurrenceID" />
<Tipo di valore = "DateTime">
<Mese />
</Valore>
</DateRangesOverlap>
</Dove>
<OrderBy><FieldRef Name = "Session_x0020_ID" /></OrderBy>
</Query>

(Io ho decodificato il &lt;di e &gt s e dividerli a più righe per chiarezza).

Aggiungere il <OrderBy> il bit e ora ordina per Session ID, non l'ID elemento elenco interno.

GIGANTESCO punta o’ cappello di Becky Isserman per il suo commento al post del blog di Isha Sagi: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Non la metterei la <OrderBy> nel posto giusto senza il suo commento.

Spero di scrivere questo più chiaramente con screen shots presto, ma nel caso in cui non mai, almeno fatto questo molto.

</fine>

Funzionalità di SharePoint & Gestione di soluzioni — Non dimenticate la u in CRUD (o d per quella materia)

Spendiamo collettivamente una grande quantità di tempo a pensare soluzioni SharePoint — come creare loro, quale strumento da utilizzare, cosa succede quando non riescono a distribuire, processi timer, ambiti, ecc. Passiamo così tanto tempo a pensare i bit iniziali che è facile dimenticare che abbiamo bisogno di ritirare loro pure. Soluzioni di retrazione è probabilmente più difficile, dal punto di vista progettazione concettuale, rispetto alla distribuzione di loro. Distribuzione è fondamentalmente un affare cookbook. In genere, installare una caratteristica, forse hanno un ricevitore di funzionalità caricare alcuni dati in un elenco, Questo genere di cose. Tuttavia, ritraendosi è potenzialmente più complessa.

Una determinata soluzione può creare artefatti come questi:

  • Tipo di contenuto
  • Definizione di elenco
  • Definizione del sito
  • Dati in un elenco
  • Anche ricevitori
  • Moduli di InfoPath

La lista continua.

Mentre è ovviamente importante per la progettazione di una soluzione che crea questi artefatti correttamente, è altrettanto importante considerare l'aggiornamento ed eliminare casi. Se la soluzione crea un nuovo elenco e popola l'elenco con dati, cosa succede quando la soluzione è arretrata? In alcuni casi, l'elenco dovrebbe essere eliminato. In altri casi, dovrebbe essere lasciato intatto per scopi storici. I requisiti aziendali vi guiderà verso la decisione giusta.

Per aiutare con questo, creare una matrice che elenca ogni artefatto che consente di distribuire la soluzione SharePoint. Elenco tre colonne per ogni artefatto, uno per creare, Update e delete. Per ogni caso, determinare il risultato corretto per quell'operazione.

Questo tipo di analisi è ovviamente meglio farlo prima che la soluzione è mai distribuita in una farm di SharePoint. Tuttavia, come fumo, non è mai troppo tardi per iniziare a fare le cose correttamente. Tale matrice di creare e sviluppare un piano per affrontare gli scenari di aggiornamento/eliminazione mancante. Potrebbe essere un problema difficile da risolvere, ma almeno verrà messo un box attorno al problema.

</fine>

Iscriviti al mio blog.

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

Technorati Tags:

Quick Fix: Servizi che Interact con SharePoint Web, InvalidOperationException

Un milione di anni fa, Mi ha aiutato ha sviluppato un servizio web che è stato richiamato tramite un'azione personalizzata per un flusso di lavoro SharePoint Designer. Questa settimana, il cliente ha voluto passare alla produzione (Infine!) così abbiamo fatto.

L'azione personalizzata che ha funzionato bene, ma non ha fatto il servizio web che è richiamato, dandoci questo errore:

System. InvalidOperationException: Questa operazione può essere eseguita solo su un computer che fa parte di una server farm da utenti che dispongono delle autorizzazioni in SQL Server per leggere dal database di configurazione. Per connettersi a questo server alla server farm, utilizzare i prodotti SharePoint e tecnologie configurazione guidata, si trova nel menu Start in strumenti di amministrazione.
presso Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Scopre che ho dimenticato di aggiungere il servizio per il pool di applicazioni di SharePoint in IIS. Una volta che ho fatto, ha funzionato benissimo.

Questo distacco forum MSDN mi ha dato l'indizio che avevo bisogno: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</fine>

Iscriviti al mio blog.

Seguimi su twitter: http://twitter.com/pagalvin

Technorati Tags:

Facile e veloce: Ottenere SPFolder di SPItemList

Continuo a incontrando questo problema e Google non sembra mai capire che cosa voglio fare, così ho pensato che questo scriverebbe.

Ho fatto un sacco di ricezione di eventi di debug nell'ultima settimana o due. L'ER è definito contro una raccolta documenti. I singoli elementi nella raccolta documenti sono strettamente legati alla loro cartelle padre. Così, Ricevo sempre la cartella dell'elemento per varie manipolazioni. Durante il debug, Avevo bisogno di aggiornare i metadati di una cartella per un elemento specifico cui ID so.

Qui è una piccola applicazione console (progettato per essere eseguito sul server della farm) che accetta due argomenti: l'ID di un elemento e un valore da assegnare a un campo, "Stato di approvazione". E ' difficile codici un sacco di roba e nessun controllo di errore.

Il codice sembra un luogo duro codificato, Ottiene una raccolta di documenti hardcoded e poi trova l'elemento indicato. Poi trova la cartella padre di tale elemento e assegna il valore di stato.

La lezione fondamentale qui per me è che SPItem non consente di accedere alla cartella. È necessario utilizzare SPListItem.File.

Se qualcuno si preoccupa di offrire una critica o suggerire un modo migliore per ottenere la cartella di un elemento, si prega di lasciare un commento.

<codice>
utilizzando Sistema;
utilizzando System.Collections.Generic;
utilizzando System. Text;
utilizzando Microsoft. SharePoint;
utilizzando System. Collections;

spazio dei nomi Conchango
{
    /// <Riassunto>
 /// </Riassunto>
 classe ManualFolderUpdate
    {
        statico void Main(stringa[] args)
        {
            stringa MSH = "ManualFolderUpdate (v 1.0): "; // MSH = "intestazione del messaggio"

 Console.WriteLine(MSH + "Avviamento.  Stavo ultima modifica 04/08/08.");

            stringa URL = http://localhost/xyzzy;

            utilizzando (SPSite oSPSite = Nuovo SPSite(URL))
            {

                utilizzando (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documenti"];

                    Console.WriteLine(MSH + "Ha ottenuto la raccolta documenti.");

                    Console.WriteLine(MSH + "Doc lib conteggio: [" + docLib.ItemCount + "].");

                    int FolderID = 0;
                    stringa NewStatus = "xyzzy";

                    FolderID = sistema.Convertire.ToInt32(args[0].ToString());
                    Console.WriteLine("Cerca cartella per elemento: [" + FolderID + "].");

                    SPListItem li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Console.WriteLine(MSH + "Ha ottenuto la cartella padre.");

                    NewStatus = args[1].ToString();
                    Console.WriteLine("Stato di impostazione per [" + NewStatus + "].");

                    Console.WriteLine("Premere ritorno a commettere l'aggiornamento o CTRL-C per interrompere l'operazione.");

                    Console.ReadLine();

                    thisItemFolder.Item["Lo stato di approvazione"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Console.WriteLine(MSH + "Finito l'aggiornamento della cartella.  Uscendo.");

                } // utilizzando SPWeb

            } // utilizzando SPSite

 Console.WriteLine(MSH + "Finito.");

        } // Main

    } // classe foldersync
} // spazio dei nomi
</codice>

</fine>

Iscriviti al mio blog.

Technorati Tags:

Nascondere le azioni personalizzate in SharePoint

Diversi mesi fa, mentre si lavora su un progetto per un cliente, Ho creato una funzionalità. Tra le altre cose, tale caratteristica definita un'azione personalizzata (questi appaiono sotto Impostazioni sito). L'unico scopo per questa azione personalizzata era per dimostrare a me che l'attivazione di funzionalità stava lavorando come previsto. Fondamentalmente, Ho usato come una forma rudimentale di debug.

Molto al mio imbarazzo, questo artefatto debug fatto la sua strada da dev UAT e produzione prima che qualcuno ha ottenuto a chiedere, "che cosa è questo link xyzzy?"

Da ora, Siamo in produzione e davvero non voglio disinstallare la caratteristica, Difficoltà Elements. XML e quindi reinstallare.

Todd più desolante un modo semplice per gestire la cosa ha sottolineato. Nelle sue parole:

"CustomActions non vengono copiati nel database, sono letti direttamente dal file Elements XML e copiati nello stato dell'applicazione in fase di esecuzione. Così, non è necessario disattivare, disinstallare, reinstallare, e riattivare la funzione per rimuovere il CustomAction. Basta togliere il file Elements XML e riciclare il pool di applicazioni(s) effettuate. La prossima volta che la funzione è in ambito, non vedrai più la CustomAction."

Ho seguito le sue istruzioni e, Naturalmente, Essi lavorano.

Nel mio caso, si tratta di un'installazione del livello di dipartimento con appena un singolo WFE. Se vi trovate con questo problema in futuro e con multipli di WFE, Credo che si dovrà fare il cambiamento in ogni.

</fine>

Iscriviti al mio blog.

Quick Fix: Accedere al sito SharePoint genera [HttpException (0x 80004005): Richiesta scaduta.]

Uno dei miei colleghi di sviluppatore stava lavorando su un progetto di questa settimana e sono imbattuto in un problema di timeout mentre si lavora sulla costruzione di qualche parte pazzo web. Da parte sua web andava, ma "improvvisamente" un sito correlato è diventato molto lento e spesso timed out con questo errore:

[HttpException (0x 80004005): Richiesta scaduta.]

Sono loggato e ho visto che molti altri siti erano proprio bene. Ho sospettato che c'erano alcuni nascosti web part nella pagina e l'utilizzo di il fidato ?contenuto = 1 tecnica di debug, Ho infatti trovato 11 Web part nella pagina, solo due delle quali erano visibili. Ancora meglio (dal punto di vista let's-hope-I-find-something-ugly-here-that-I-can-fix), tre di quelle parti web chiuso hanno un nome di "Errore".

Ho cancellato quelle parti del web (che a sua volta ha preso un tempo sorprendentemente lungo) e che ha risolto il problema. Per oggi

</fine>

Iscriviti al mio blog.

Technorati Tags:

Richiamando SSRS Web Services da WSS / MUSCHIO in ambiente FBA

Abbiamo bisogno di richiamare il "CreateSubscription" Metodo su un servizio web SSRS è ospitata in un FBA MOSS ambiente gestito da una web part personalizzata. Abbiamo continuava a variazioni di:

  • 401: Non autorizzato
  • Oggetto spostato

"L'oggetto spostato" messaggio era più interessante perché si diceva che l'oggetto"" (il nostro servizio SSRS) aveva "spostato" a login. aspx. Questo chiaramente significava che abbiamo avuto qualche problema di autenticazione.

Alla fine mi sono accorto che avevo segnalibro a blog entry di Robert Garret che descritto come richiamare un servizio web di uso generale WSS/MOSS vivono all'interno di un ambiente di FBA. Nota che io non riesco a collegare direttamente a questo articolo (come di 06/09/08) perché si vuole autenticare. Il link che fornisco, si raggiunge un "tutti i messaggi" vista e si può individuare l'articolo specifico cercando "Accessing MOSS Web Services utilizzando l'autenticazione di base".

Ecco il codice che ha lavorato per noi:

ReportingService2006 rs = null; 
// Autenticare Autenticazione auth = Nuovo Autenticazione(); 
auth.URL = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
Nuovo CookieContainer();
LoginResult risultato = auth.Login("userid", "password");
Se (risultato.ErrorCode = = LoginErrorCode.NoError) 
{
// Nessun errore, in modo da ottenere i cookie.
CookieCollection cookies = auth.GetCookies(Nuovo URI(auth.URL));
Cookie authCookie = cookies[risultato.CookieName];
RS =
Nuovo ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
Nuovo CookieContainer();
RS.CookieContainer(authCookie);
}
provare
{
  RS.CreateSubscription(relazione, extSettings, desc, eventType, matchData, parameters1);
}
catture (Exception ex)
{
  Console. WriteLine(ex.ToString());
}

Interpretare le cose a lavorare come questo:

  • Da parte nostra web ha bisogno di dial-up il servizio di autenticazione e dire, "Hey, Tony, si tratta di me!".
  • Servizio di autenticazione risponde dicendo:, "Hey, Io ti conosco. Come stanno i bambini? Qui è un token."
  • Chiamiamo il servizio SSRS e dire, "Tony mi ha inviato, qui è il token."

</fine>

Iscriviti al mio blog.

Semplice e veloce: Eseguire il provisioning di un sito Web utilizzando il modello a oggetti di SharePoint In c#

Ho provato a cercare per un piccolo frammento di codice che Mostra come posso creare un nuovo SPWeb in una raccolta siti. Non ho trovato più velocemente o facilmente come mi aspettavo così ho pensato che sarebbe schiaffo insieme di voce un sull'argomento.

Questo codice crea un nuovo sito Wiki:

 SPSite siteCollection;

    siteCollection = Nuovo SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy titolo",
        "xyzzy Descrizione", 1033, SPWebTemplate.WebTemplateWIKI, falso, falso);

Mie ricerche iniziali non riuscita perché stavo cercando frasi come "eseguire il provisioning di un sito web utilizzando il modello a oggetti di sharepoint" e simili.

Se si ricerca per "Webs.Add()", troverete una serie di voci di blog molto utile, Articoli di MSDN e documentazione di SDK che vanno in profondità su questo argomento. Vi consiglio caldamente Questo sito.

</fine>

Iscriviti al mio blog.

Technorati Tags: