archivi categoria: Sviluppo di SharePoint

Uno dei motivi per "uno o più campo tipi non sono installati correttamente”

Stavo facendo un piccolo ritocco ieri a una web part che esegue una query CAML su un elenco.  Ho fatto il cambiamento, dislocata esso ed è stato colpito con un errore:

Errore imprevisto si è verificato in tre giorni Outlook previsioni WebPart. Si prega di contattare l'amministratore di sistema. Uno o più tipi di campo non sono installati correttamente. Vai alla pagina elenco di impostazioni per eliminare questi campi.

Stavo affrontando un'altra questione stravaganti all'inizio io non ha immediatamente il collegamento del mio query CAML con l'errore di SharePoint è stato segnalato a me.  Fatto una veloce ricerca bing ed e trovato questo post sul blog utile da Sandeep Nahta  (http://snahta.blogspot.com/2009/01/one-or-more-field-types-are-not.html).

Ecco la query male:

query.Query ="<Dove><E><NEQ><FieldRef Name = 'Abbr' /><Tipo di valore = 'Text'>SFNY</Valore><FieldRef Name = 'Abbr' /><Tipo di valore = 'Text'>SFIS</Valore></NEQ></E></Dove>";

Qui è fisso:

query.Query ="<Dove><E><NEQ><FieldRef Name = 'Abbr' /><Tipo di valore = 'Text'>SFNY</Valore></NEQ><NEQ><FieldRef Name = 'Abbr' /><Tipo di valore = 'Text'>SFIS</Valore></NEQ></E></Dove>";

Così, la morale della storia è: Assicurarsi tuo CAML è corretta o si può ottenere un errore stravaganti.

Iscriviti al mio blog.

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

</fine>

SharePoint 2010 Soluzione bloccato in "distribuzione” Status

Ho usato PowerShell per distribuire una soluzione a una farm SharePoint (h/t:  Corey Roth e la sua post del blog). 

Poi è andato per l'amministratore centrale, accedere a impostazioni di sistema e poi "Gestisci soluzioni farm" di schierare la fattoria e al mio (lieve) sgomento, esso è rimasto bloccato in "distribuzione".

Ho visto questo problema venire molte volte sul forum MSDN, così mi è stato piuttosto nervoso su di esso.  Ho cercato un po ' intorno e trovato questo articolo utile (da una persona apparentemente non attribuita da http://www.resolutionsnet.co.uk/).  Ho annullato il processo di distribuzione e quando ho cliccato nella soluzione, mi ha detto che esso aveva distribuito correttamente la soluzione a tre dei quattro server della farm.

Sono andato al server errante, fermato il servizio timer e riavviato.  Windows server in realtà mi ha detto che il servizio non è riuscito a rispondere al comando, così che mi dice che era malato.

Stavolta, quando sono tornato a central admin, Sono stato in grado di schierare con nessun problema.

Speriamo che questo po ' di informazioni vi aiuterà alcuni in un vicolo dei giorni.

</fine>

Iscriviti al mio blog.

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

Errore del giorno: "Non è possibile aggiungere l'Assembly specificato alla Global Assembly Cache”

Io ho combattuto un po ' con visual studio 2010 su una soluzione sp2010 e fu sempre questo errore:

Si è verificato un errore in fase di distribuzione 'Aggiungi soluzione': Errore: Non è possibile aggiungere l'assembly specificato nella global assembly cache: YourAwesomeDLLThat IAmJustNotGoingToInstallRightNow.dll

Sono andato alla Global Assembly Cache stessa (c:\windowsassembly) per cercare di rimuovere e ricevuto un messaggio di errore "file in uso".

Ho fatto un iisreset, Ho scaricato quasi Sysinternals, Mi sono fermato il servizio timer a decidersi infine, Ho appena chiuso e riaperto visual studio stesso e ho potuto finalmente di chiuderlo.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Debug VS 2010 Distribuzione della soluzione

Visual Studio 2010 Segnala errori duro--debug durante la distribuzione alcune volte.  Un modo facile e veloce per fare alcuni molto approssimativa di debug è quello di generare il proprio nome eccezioni.  Visual Studio li mostrerà nella console uscita.

Si consideri questo frammento di codice:

image

Se questa funzionalità è nell'ambito di un'applicazione web, sito sarà null.  Se si tenta di fare riferimento a una proprietà del sito, si otterrà l'errore ambiguo:

Si è verificato un errore in fase di distribuzione 'Aggiungi soluzione': Riferimento all'oggetto non impostato su un'istanza di un oggetto.

Tuttavia, se generare una nuova eccezione e passare una stringa al costruttore, si ottiene un messaggio leggermente più utile:

image

È una tecnica di greggia, ma abbastanza veloce e facile.

</fine>

Iscriviti al mio blog.

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

FeatureActivated Job timer e la caratteristica portata

Ho lavorato con alcuni codici che qualcuno consegnato a me per un processo timer.  Egli non aveva fornito il codice di attivazione effettiva funzionalità ho avuto modo di scrivere, Naturalmente.  Ho approfittato di Post del famoso blog di Andrew Connell sul tema.

Sto utilizzando Visual Studio 2010 e distribuzione tenute fallito con errore "errore in fase di distribuzione 'Aggiungi soluzione': Riferimento all'oggetto non impostato su un'istanza di un oggetto."

Mi stava prendendo il suo codice troppo alla lettera.  Stavo definizione dell'ambito la funzionalità a livello di applicazione web, come illustrato:

image

Di conseguenza, le proprietà che vengono inviate al ricevitore sono dall'applicazione web, non una raccolta di siti.  Alla fine, il codice è simile al seguente:

public override void FeatureActivated(Proprietà SPFeatureReceiverProperties)
{

    // Non fare le seguenti operazioni con funzionalità web app nell'ambito, Essa conduce alla disperazione sorriso, sorridere
    // Sito SPSite = proprietα.Feature.Parent come SPSite;

    SPWebApplication wa = proprietα.Feature.Parent come SPWebApplication;

    Se (wa = = null) generare nuova eccezione("webapp2 is null.");

    foreach (SPJobDefinition lavoro in wa.JobDefinitions)
    {

        provare
        {
            Se (lavoro.Nome = = List_JOB_NAME)

                lavoro.Eliminare();
        }
        catture (Eccezione e)
        {
            generare nuova eccezione("marker 2");
        } // catch exception e
    }

    // installare il lavoro

    WeatherForecastTimerJob weatherForecastTimerJob =
        nuova WeatherForecastTimerJob(List_JOB_NAME, wa);

    SPMinuteSchedule schedule = SPMinuteSchedule nuovo();
    pianificare.BeginSecond = 0;
    pianificare.EndSecond = 59;
    pianificare.Interval = 5;
    weatherForecastTimerJob.Schedule = pianificazione;
    weatherForecastTimerJob.Update();

}

La chiave da asporto è che quando la funzionalità è nell'ambito di un'applicazione web, il SPFeatureReceiverProperties che SharePoint passa al vostro ricevitore caratteristica ha parametri livello web app.  Vecchio post di blog di Andrew presuppone che esso è definito nell'ambito della raccolta siti.

</fine>

Iscriviti al mio blog.

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

Dove è Microsoft.SharePoint.ApplicationPages.Administration.dll?

Io stavo consegnato un progetto di visual studio che fa riferimento a Microsoft.SharePoint.ApplicationPages.Administration.dll.  Mi ci è voluto un po' mentre per trovare e ho pensato che condividere.  Nel mio ambiente, si trova a:

c:\programma c:ProgrammiFile comuniMicrosoft sharedweb server extensions14configadminbin

</fine>

Iscriviti al mio blog.

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

Progetto CodePlex – SP2010 Explorer

Come parte di uno sforzo in corso per imparare i dettagli tecnici di livelli bassi di SharePoint 2010, Ho creato un "SharePoint Explorer"tipo di strumento.  L'idea non è nuova.  Ho usato questo progetto più di una volta: http://sharepointexplorer.codeplex.com/.  La mia idea è di creare una versione di SharePoint che usi connessi web part per visualizzare tutti i dettagli di basso livello che può fornire il modello a oggetti. 

Questo post serve come sia un annuncio del progetto, così come una chiamata per i volontari.  Se siete interessati a lavorare su questo progetto, Fammi sapere via e-mail (Galvin.Paul@gmail.com) e lavoreremo.

Ecco il progetto: http://sp2010explorer.codeplex.com/

</fine>

Iscriviti al mio blog.

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

Lavorando con TreeNodeBinding in ASP.Controllo Treeview NET

Ho lavorato su ciò che spero sarà un presto-released CodePlex progetto che prevede un po' bello integrato di web part a parlare tra di loro tramite connessioni/consumer del provider al fine di esplorare un sito di SharePoint sotto le coperte.  (Certamente questo è stato fatto prima, ma questo è un progetto di apprendimento come qualsiasi altra cosa).  Questo è lo scopo di essere un sostituto per la visualizzazione di Esplora risorse di windows di SharePoint 2010 raccolte documenti.

Il codice ha la solita ricorsiva chiamare verso il basso della SPWeb e SPList da una determinata a partire dal punto.  L'oggetto che fa questo attraversamento si accumula una stringa XML che sembra qualcosa di simile:

<SiteCollection url =’http://demo2010a:9090′>
 
<Web
     titolo = 'Ciao mondo Sandbox' 
     Modello =' un sito per squadre per organizzare rapidamente, autore, e condividere informazioni, BLA BLA BLA '>

     <elenco
        titolo ='BCC_Health_Services_FAQs’
        Modello ='CustomList’
       
listid =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</elenco>

     <elenco
        titolo = 'BCC_Notifications' 
        Modello = 'CustomList' 
        listid =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </elenco>

  </Web>

</SiteCollection>

Mi aspetto di pulire up che XML prima di tutto è detto e fatto.

I want to get in definitiva che le informazioni su e in un controllo Treeview.  Non è esattamente la terra sconvolgente roba.

La sfida che ho preso qui era quello di collegare la visualizzazione struttura a un controllo origine dati XML anziché costruire manualmente il mio treenodes come attraversano la struttura ad albero.  Fatto questo, in parte perché deliberatamente sto facendo le cose più difficili su me stesso (Questo è un progetto di apprendimento, dopo tutto) e in parte perché ho questa vaga nozione che costruendo i nodi della struttura come attraversare l'albero non è una buona idea per il lungo termine.

Il problema di questo approccio è che il controllo Treeview non sa sugli attributi buoni sui nodi interessanti come "lista" o "web" così mostra questa uscita per impostazione predefinita:

 

image

Questo non è utile.  Questo è dove la classe TreeNodeBinding aiuta.  Posso usare questo per raccontare il controllo Treeview come deve interpretare il codice XML.  Ecco un esempio:

TNB = nuovo TreeNodeBinding();
tnb.DataMember = "lista"; // Questo è l'etichetta nel codice xml per un sito.
tnb.TargetField = "listid";
tnb.ValueField = "title";
tnb.ToolTipField = "Template";

Questa associazione dice treeview che quando rileva un <elenco> nodo XML, applicare le associazioni per TargetField, ValueField e ToolTipField.  Nel maggio app, Queste mappa come segue:

  • TargetField: Quando qualcuno clicca sul valore del nodo, Questo è ciò che si otterrà per SelectedNode.Value.  Questo non deve essere confuso con...
  • ValueField: Questo è ciò che volete Treeview per visualizzare all'utente.
  • ToolTipField: Il valore dal XML che si desidera come descrizione comandi.

Aggiungere che TreeNodebinding DataBindings della visualizzazione struttura ad albero e voi ottenere output simile a questo:

 

image

Avrò più su tutto questo come continuare sul progetto e alla fine mettere questa su Codeplex.

</fine>

Iscriviti al mio blog.

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

Filtri di campo di testo di collegamento per la Web Part personalizzate

Volevo ricevere informazioni da un filtro di campo di testo in SharePoint 2010 in parte mia web personalizzato.  Ho provato ad utilizzare Questo articolo MSDN come base ma l'articolo è sia rotto o che semplicemente non sto seguendo correttamente.

Una ricerca un po' più alzato Mike Smith Contributo di MSDN qui (http://social.msdn.microsoft.com/forums/en-us/sharepointdevelopment/thread/72F1732A-7F93-441E-8644-2E82BBB153D9).

C'è un sacco di roba là fuori su collegabile web part, ma l'articolo di Mike è così semplice come ottiene.

</fine>

Iscriviti al mio blog.

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

Facile e veloce: Inviare E-mail utilizzando il Server SMTP di Gmail in.NET C#

Questo non è esattamente un nuovo argomento, ma quando avevo bisogno di farlo, Ho trovato un sacco di "perché non questo lavoro per me" e non troppe risposte dirette. Spero che qualcuno trova questo utile.

Il seguente frammento di codice invierà un'e-mail utilizzando il mio account gmail per farlo, inclusi gli allegati:

utilizzando System.net.mail;
utilizzando System.net;

NetworkCredential loginInfo = Nuovo NetworkCredential("[Il mio ID di Gmail]", "[Mia Password Gmail]");
MailMessage msg = Nuovo MailMessage();
msg.From = Nuovo Classe MailAddress("[M Id Gmail]@ gmail.com");
msg.To.Add(Nuovo Classe MailAddress("paul.galvin@arcovis.com"));
msg.Soggetto = "Test infopath dev soggetto";
msg.Corpo = "<html><corpo><forte>Un messaggio forte.</forte></corpo></html>";
msg.IsBodyHtml = true;

foreach (stringa aFile in NIPFD.GetAttachmentNamesAndLocations())
{
    msg.Attachments(Nuovo Allegato(aFile));
} // Aggiunta di allegati.

SmtpClient client = Nuovo SmtpClient("smtp.gmail.com");
client.Proprietà EnableSsl = true;
client.UseDefaultCredentials = falso;
client.Credentials = loginInfo;
client.Port = 587;
client.Proprietà EnableSsl = true;
client.Invia(msg);

Pochi bit della chiave che mi ha rallentato e altre osservazioni / Note:

  • La prima linea che crea l'oggetto loginInfo deve utilizzare gmail di che ID spogliato "@ gmail.com”. Così, Se è il mio indirizzo di posta elettronica di gmail "sharepoint@gmail.com"e la mia password è"xyzzy"quindi la linea sarebbe simile:

NetworkCredential loginInfo = Nuovo NetworkCredential("sharepoint", "xyzzy");

  • Il mio account gmail è impostata per l'utilizzo di SSL e che non era un problema.
  • C'è alcune informazioni contrastanti là fuori su quello che porta da utilizzare. Ho usato la porta 587 e ha funzionato bene per me.
  • Nel mio caso, Ho anche bisogno di inviare allegati. Tale oggetto NIPFD è un metodo che sa dove sono mio allegati. Restituisce un percorso completamente (e. g. "c:\tempattachment1.jpg". Nella mia prova, Ho avuto due allegati ed entrambi hanno funzionato bene.

Utilizzato visual studio 2008 per scrivere questo codice.

</fine>

Iscriviti al mio blog.

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

Technorati Tags: ,,,