Kategori Arkiv: SharePoint utveckling

En anledning till "ett eller flera fält typer inte är korrekt installerat”

Jag gjorde i går en liten tweak till en webbdel som inte en CAML fråga mot en lista.  Ändringen görs, distribuerat det och kommit hit med ett fel:

Ett oväntat fel har inträffat i tre dag Outlook väderprognos webbdel. Kontakta systemadministratören. En eller flera fälttyper är inte korrekt installerat. Gå till sidan lista du vill ta bort dessa fält.

Jag stod inför en annan oddball fråga tidigare så jag inte omedelbart ansluta min CAML frågan med felet som SharePoint rapportering till mig.  Jag gjorde en snabbsökning bing och och hittade denna användbara blogginlägg genom Sandeep Nahta  (http://snahta.blogspot.com/2009/01/one-or-more-field-types-are-not.html).

Här är dålig-frågan:

fråga.Fråga ="<Där><Och><NEQ><FieldRef namn = "Abbr" /><Värde Type = "Text">SFNY</Värde><FieldRef namn = "Abbr" /><Värde Type = "Text">SFIS</Värde></NEQ></Och></Där>";

Här är det fast:

fråga.Fråga ="<Där><Och><NEQ><FieldRef namn = "Abbr" /><Värde Type = "Text">SFNY</Värde></NEQ><NEQ><FieldRef namn = "Abbr" /><Värde Type = "Text">SFIS</Värde></NEQ></Och></Där>";

Så, Sensmoralen i historien är: Kontrollera din CAML är korrekt eller att du får ett oddball fel.

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

</slutet>

SharePoint 2010 Lösning som fastnat i "distribuera” Status

Jag använde PowerShell för att distribuera en lösning till en SharePoint-servergrupp (h/t:  Corey Roth och hans blogginlägg). 

Jag gick då i central admin, åt Systeminställningar och sedan "Hantera gård lösningar" distribuera den till gården och min (liten) bestörtning, Den fastnade i "distribution".

Jag har sett denna fråga kommer många gånger på MSDN forum, så jag var ganska nervös om det..  Jag sökte runt lite och hittade den här bra artikel (av en till synes unattributed person från http://www.resolutionsnet.co.uk/).  Jag annullerat distributionsjobbet och när jag klickade i lösning, det berättade att det hade distribuera lösningen till tre av fyra servrar i servergruppen.

Jag gick till den vandrande servern, stannade tidstjänsten och startat den.  Windows server faktiskt berättade att det gick inte att svara på kommandot, så som säger mig att det var sjuk.

Den här gången, När jag gick tillbaka till central admin, Jag fick möjlighet att distribuera det utan problem.

Förhoppningsvis kommer att denna bit av information hjälpa några i en binda en av dagarna.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Fel av dagen: "Kan inte lägga till den angivna sammansättningen i GAC”

Jag har kämpat lite med visual studio 2010 på en en sp2010 lösning och var att få felet:

Fel uppstod i distributionen steg "Lägga till lösning": Fel: Kan inte lägga till angiven sammansättning i den globala paketcachen: YourAwesomeDLLThat IAmJustNotGoingToInstallRightNow.dll

Jag åkte till GAC själv (c:\windowsassembly) att försöka ta bort och fick en "fil används" fel.

Jag gjorde en iisreset, Jag hämtat nästan Sysinternals, Jag slutade tidstjänsten i services… slutligen, Jag bara stängt och öppnat visual studio själv och jag kunde äntligen att stänga det.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Felsökning VS 2010 Lösning distribution

Visual Studio 2010 rapporterar svårt att felsöka fel under distributionen några gånger.  Ett snabbt och enkelt sätt att göra vissa mycket grov felsökning är att kasta din egen namngiven undantag.  Visual Studio kommer att visa dem i konsolen utdata.

Anse denna bit kod:

image

Om den här funktionen är begränsad till ett webbprogram, webbplatsen kommer att vara null.  Om du försöker och refererar till en egenskap för webbplats, Du får den tvetydiga fel:

Fel uppstod i distributionen steg "Lägga till lösning": Object reference not set till en instans av ett objekt.

Men, om kastar ett nytt undantag och föra en sträng till konstruktorn, Du får ett meddelande om lite mer användbar:

image

Det är en rå teknik, men ganska snabbt och enkelt.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Timern jobbet FeatureActivated och funktionen räckvidd

Jag har arbetat med vissa kod som någon överlämnas till mig för en timer jobbet.  Han hade inte tillhandahöll aktiveringskoden faktiska funktion så jag var tvungen att skriva det, Självklart.  Jag utnyttjade Andrew Connell berömda blogginlägg angående.

Jag använder Visual Studio 2010 och distribution höll inte med felmeddelandet "Fel uppstod i distributionen steg"Lägg till lösning": Object reference not set till en instans av ett objekt."

Jag alltför bokstavligt talat med sin kod.  Jag omfångsdefinition funktionen att programnivå web, som visas:

image

Som en följd, de egenskaper som skickas till mottagaren är från webbprogrammet, inte en webbplatssamling.  I slutet, koden ser ut så här:

offentliga åsidosätta void FeatureActivated(SPFeatureReceiverProperties egenskaper)
{

    // Gör inte följande med app scope webbfunktioner, Det leder till förtvivlan Leende
    // SPSite webbplats = egenskaper.Feature.Parent som SPSite;

    SPWebApplication wa = egenskaper.Feature.Parent som SPWebApplication;

    om (wa == null) kasta nytt undantag(-webapp2 är null.);

    foreach (SPJobDefinition jobb i wa.JobDefinitions)
    {

        försök
        {
            om (jobbet.Namn == List_JOB_NAME)

                jobbet.Ta bort();
        }
        fånga (Undantag e)
        {
            kasta nytt undantag("markör 2");
        } // fånga undantag e
    }

    // Installera jobbet

    WeatherForecastTimerJob weatherForecastTimerJob =
        nya WeatherForecastTimerJob(List_JOB_NAME, WA);

    Schema för SPMinuteSchedule = ny SPMinuteSchedule();
    schema.BeginSecond = 0;
    schema.EndSecond = 59;
    schema.Intervallet = 5;
    weatherForecastTimerJob.Schedule = schema;
    weatherForecastTimerJob.Update();

}

Nyckeln take-away är att när funktionen är begränsad till en web app, den SPFeatureReceiverProperties som SharePoint skickar till din funktionen mottagaren har web app nivå parametrar.  Andrews gamla blogginlägg förutsätter det är begränsad i webbplatssamlingen.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Där är Microsoft.SharePoint.ApplicationPages.Administration.dll?

Jag lämnades en visual studio-projekt som refererar till Microsoft.SharePoint.ApplicationPages.Administration.dll.  Det tog mig lite medan för att hitta det och jag trodde jag delar.  I min miljö, den är belägen vid:

c:\programmet c:ProgramDelade filerMicrosoft sharedweb server extensions14configadminbin

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

CodePlex projekt – SP2010 Explorer

Som en del av ett pågående försök att lära sig de tekniska låg nivå detaljerna för SharePoint 2010, Jag har skapat en "SharePoint Explorer"typ av verktyg.  Idén är inte ny.  Jag använde detta projekt mer än en gång: http://sharepointexplorer.codeplex.com/.  Min idé är att skapa en SharePoint-version att använder anslutna webbdelar för att visa alla lågaktivt detaljer att objektmodellen kan ge. 

Detta blogginlägg fungerar som både ett tillkännagivande av projektet samt ett samtal för volontärer.  Om du är intresserad av att arbeta på detta projekt, Låt mig veta via e-post (Galvin.Paul@gmail.com) och vi ska träna det.

Här är projektet: http://sp2010explorer.codeplex.com/

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Arbeta med TreeNodeBinding i ASP.NET Treeview-kontrollen

Jag har arbetat på vad jag hoppas kommer att vara en snart släppt CodePlex projekt som ger lite trevlig integrerade webbdelar tala med varandra via leverantör/konsumenten anslutningar för att utforska en SharePoint-webbplats under omslag.  (Detta har verkligen gjorts före, men detta är ett lärande projekt så mycket som något annat).  Detta är menat att vara en ersättning för windows explorer-vy av SharePoint 2010 dokumentbibliotek.

Koden har det vanliga rekursivt kalla ned SPWeb och SPLists från en viss börjar peka.  Objektet som inte alla att närheten bygger upp en XML-sträng som ser ut så här:

<sitecollection url =’http://demo2010a:9090′>
 
<Web
     Title = "Hello World sandlåda" 
     Mallen = "en webbplats att snabbt ordna, författare, och dela information, BLA BLA BLA ">

     <lista
        Titel ='BCC_Health_Services_FAQs’
        Mallen ='CustomList’
       
ListId =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</lista>

     <lista
        Title = "BCC_Notifications" 
        Mallen = "CustomList" 
        ListId =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </lista>

  </Web>

</sitecollection>

Jag förväntar mig att rensa upp som XML innan allt är sagt och gjort.

Jag vill slutligen få informationen upp och in i en Treeview-kontrollen.  Inte exakt jorden krossas grejer.

Jag tog den här utmaningen var att ansluta trädvyn till en XML-datakälla kontroll i stället för manuellt bygga upp mina treenodes som jag bläddra i trädet.  Jag gjorde detta delvis på grund av att jag avsiktligt gör saker svårare på mig själv (Det är ju ett lärande projekt) dels för att jag har denna vaga idén att bygga upp trädnoder som jag bläddra i trädet är inte bra på lång sikt.

Problemet med detta tillvägagångssätt är att Treeview-kontrollen inte vet om de goda attribut på intressanta noderna som "lista" eller "web" så att det visar denna produktion som standard:

 

image

Det är inte användbart.  Det är där klassen TreeNodeBinding hjälper.  Jag kan använda detta tala Treeview-kontrollen hur det bör tolka XML.  Här är ett exempel:

tnb = nya TreeNodeBinding();
tnb.DataMember = "lista"; // Är detta etiketten i xml för en webbplats.
tnb.TargetField = "listid";
tnb.ValueField = "titel";
tnb.ToolTipField = "Mall";

Denna bindning berättar TreeView-kontrollen att när den hittar en <lista> noden i XML, tillämpa bindningarna för TargetField, ValueField och ToolTipField.  I maj app, dessa karta som följer:

  • TargetField: När någon klickar på en nodvärde, Detta är vad du får för SelectedNode.Value.  Detta skall inte förväxlas mot…
  • ValueField: Detta är vad du vill TreeView-kontrollen ska visas för användaren.
  • ToolTipField: Värdet från XML-filen som du vill använda som en knappbeskrivning.

Lägga till att TreeNodebinding i trädvyn DataBindings och du får utdata såhär:

 

image

I have mer om allt detta som jag fortsätta på projektet och så småningom sätta detta på Codeplex.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Anslutande Text Fältfilter till din anpassade webbdel

Jag ville ta emot information från ett textfält filter i SharePoint 2010 i min egen webbdel.  Jag försökte med hjälp här MSDN-artikeln som grund men artikeln är antingen trasig eller jag bara inte följer det korrekt.

Lite mer forskande uppskruvad Mike Smith MSDN bidrag Här (http://social.msdn.microsoft.com/forums/en-us/sharepointdevelopment/thread/72F1732A-7F93-441E-8644-2E82BBB153D9).

Det finns en massa saker ute på anslutningsbara webbdelar men Mikes artikel är lika enkelt som det blir.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Snabb och enkel: Skicka e-post använder Gmail SMTP-Server i .net C#

Det är inte precis ett nytt ämne, men när jag behövde göra det., Jag hittade en hel del "varför inte detta arbete för mig" och inte alltför många direkta svar. Jag hoppas att någon hittar detta användbara.

Den följande biten av koden kommer att skicka ett e-postmeddelande med mitt gmail-konto för att göra det, inklusive bifogade filer:

med hjälp av System.Net.Mail;
med hjälp av System.Net;

NetworkCredential loginInfo = nya NetworkCredential("[Min Gmail ID]", "[Min Gmail-lösenord]");
Postmeddelande MSG = nya Postmeddelande();
MSG.Från = nya Postadress("[M Gmail Id]@gmail.com");
MSG.To.Add(nya Postadress("paul.galvin@arcovis.com"));
MSG. Angående = "Infopath dev testpersonen";
MSG. Body = "<HTML><organ><stark>Ett starkt budskap.</stark></organ></HTML>";
MSG. IsBodyHtml = sant;

foreach (sträng aFile i NIPFD. GetAttachmentNamesAndLocations())
{
    MSG.Attachments.Add(nya Bifogad fil(aFile));
} // Lägga till bilagor.

SmtpClient kund = nya SmtpClient("smtp.gmail.com");
klient.EnableSsl = sant;
klient.UseDefaultCredentials = falskt;
klient.Referenser = loginInfo;
klient.Port = 587;
klient.EnableSsl = sant;
klient.Skicka(MSG);

Några viktiga bitar som bromsat mig och andra observationer / anteckningar:

  • Den första raden som skapar loginInfo-objektet måste använda gmail ID fråntagen "@gmail.com”. Så, om min gmail e-postadress är "sharepoint@gmail.com"och mitt lösenord är"xyzzy"raden skulle se ut:

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

  • Mitt gmail-konto har konfigurerats till att använda SSL och det var inte ett problem.
  • Det finns några motstridiga information ute på vilken port som ska användas. Jag använde port 587 och det fungerade bra för mig.
  • I mitt fall, Jag behövde också skicka bilagor. Att NIPFD objekt har en metod som vet var mina bilagor är. Det återvänder en fullt väg (t.ex. "c:\tempattachment1.jpg". I mitt test, Jag hade två bilagor och de båda fungerade bra.

Jag använde visual studio 2008 att skriva denna kod.

</slutet>

Prenumerera på min blogg.

Följ mig på Twitter vid http://www.twitter.com/pagalvin

Technorati Tags: ,,,