Archives Catégorie: Développement SharePoint

Une des raisons pour « un ou plusieurs champ types ne sont pas installés correctement”

Je faisais un petit tweak hier à un composant WebPart qui effectue une requête CAML contre une liste.  J'ai fait le changement, Il a déployé et a frappé avec une erreur:

Une erreur inattendue s'est produite en trois jour Outlook météo WebPart. Veuillez contacter l'administrateur du système. Un ou plusieurs types de champ ne sont pas installés correctement. Aller à la page de paramètres de liste pour supprimer ces champs.

J'étais face une autre question excentrique plus tôt donc n'a pas immédiatement connecter ma requête CAML avec l'erreur que SharePoint a été signalé pour moi.  J'ai fait une recherche rapide de bing et et trouvé utile ce billet de blog par Sandeep Nahta  (http://snahta.blogspot.com/2009/01/one-or-more-field-types-are-not.html).

Voici la requête mauvaise:

requête.Requête ="<Où><Et><QNE><FieldRef nom = « Abbr » /><Valeur de Type = « Text »>SFNY</Valeur><FieldRef nom = « Abbr » /><Valeur de Type = « Text »>SFIS</Valeur></QNE></Et></Où>";

Ici il est fixé:

requête.Requête ="<Où><Et><QNE><FieldRef nom = « Abbr » /><Valeur de Type = « Text »>SFNY</Valeur></QNE><QNE><FieldRef nom = « Abbr » /><Valeur de Type = « Text »>SFIS</Valeur></QNE></Et></Où>";

Si, la morale de l'histoire est: Assurez-vous que votre CAML est correct ou vous pouvez obtenir une erreur excentrique.

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

</fin>

SharePoint 2010 Solution coincée dans le déploiement de »” Statut

J'ai utilisé PowerShell pour déployer une solution d'une ferme SharePoint (h/t:  Corey Roth et son billet de blog). 

Je suis ensuite allé à l'administration central, consulté les paramètres système, puis sur « Gérer les solutions agricoles » de le déployer à la ferme et à mon (légère) consternation, Il s'est coincé dans le « déploiement ».

J'ai vu cette question arriver plusieurs fois sur les forums MSDN, Si j'étais assez nerveux à ce sujet.  J'ai cherché autour un peu et trouvé cet article utile (par une personne apparemment d'origine inconnue http://www.resolutionsnet.co.uk/).  J'ai annulé le travail de déploiement et quand j'ai cliqué dans la solution, Il m'a dit qu'il avait déployé avec succès la solution à trois des quatre serveurs de la batterie.

Je suis allé sur le serveur errant, arrêter le service du minuteur et il redémarre.  Windows server m'a effectivement dit que le service n'a pas répondu à la commande, ce qui m'a dit qu'il était malade.

Cette heure, Quand je suis retourné à la central admin, J'ai pu déployer sans problème.

J'espère que ce peu d'info aidera certains dans une liaison, l'un des jours.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Erreur de la journée: « Impossible d'ajouter l'Assembly spécifié pour le GAC”

J'ai été un peu combats avec visual studio 2010 sur une solution sp2010 et devenait cette erreur:

Erreur s'est produite à l'étape de déploiement « Ajouter une Solution »: Erreur: Impossible d'ajouter l'assembly spécifié du global assembly cache: YourAwesomeDLLThat IAmJustNotGoingToInstallRightNow.dll

Je suis allé le GAC lui-même (c:\windowsassembly) pour essayer de supprimer et a obtenu une erreur « fichier utilisé ».

J'ai fait un iisreset, J'ai téléchargé presque Sysinternals, J'ai arrêté le service du minuteur de services… enfin, J'ai juste fermé et rouvert visual studio lui-même et j'ai enfin réussi à fermer.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Facile et rapide: Débogage VS 2010 Déploiement de la solution

Visual Studio 2010 rapports d'erreurs difficiles à déboguer pendant le déploiement quelques fois.  Un moyen rapide et facile de faire quelques très rugueuse de débogage est de lancer vos propres exceptions nommées.  Visual Studio les affiche dans la console de sortie.

Tenir compte de ce morceau de code:

image

Si cette fonctionnalité est définie à une application web, site sera null.  Si vous essayez de référencez une propriété du site, vous obtiendrez l'erreur ambigu:

Erreur s'est produite à l'étape de déploiement « Ajouter une Solution »: Référence d'objet non définie à une instance d'un objet.

Cependant, Si une nouvelle exception et passer une chaîne au constructeur, vous recevez un message un peu plus utile:

image

C'est une technique brute, mais assez rapide et facile.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Timer Job FeatureActivated et l'étendue de la fonctionnalité

J'ai travaillé avec un code que quelqu'un me remis pour un travail du minuteur.  Il n'avait pas fourni le code d'activation de la fonctionnalité réelle, donc j'ai dû écrire, Bien sûr.  J'ai pris avantage de Billet de blog célèbre de Andrew Connell sur le sujet.

Je suis à l'aide de Visual Studio 2010 et déploiement gardé échouent avec une erreur « Erreur s'est produite à l'étape de déploiement « Ajouter une Solution »: Objet référence non définie à une instance d'un objet. »

Je prenais son code trop littéralement.  J'ai été portée la fonctionnalité au niveau de l'application web, comme le montre:

image

Comme un résultat, les propriétés qui sont envoyées au récepteur sont de l'application web, pas une collection de sites.  En fin de compte, le code ressemble à ceci:

public override void FeatureActivated(Propriétés SPFeatureReceiverProperties)
{

    // Ne pas faire ce qui suit avec des fonctionnalités web app portée, elle conduit au désespoir Sourire
    // Site SPSite = propriétés.Feature.parent comme SPSite;

    SPWebApplication wa = propriétés.Feature.parent comme SPWebApplication;

    Si (wa == null) throw new Exception(« webapp2 est nulle. »);

    foreach (Emploi de SPJobDefinition wa.JobDefinitions)
    {

        Essayez
        {
            Si (emploi.Nom == List_JOB_NAME)

                emploi.Supprimer();
        }
        captures (Exception e)
        {
            throw new Exception(« marqueur 2 »);
        } // catch exception e
    }

    // installer le poste

    WeatherForecastTimerJob weatherForecastTimerJob =
        Nouvelle WeatherForecastTimerJob(List_JOB_NAME, wa);

    Annexe SPMinuteSchedule = nouveau SPMinuteSchedule();
    calendrier.BeginSecond = 0;
    calendrier.EndSecond = 59;
    calendrier.Intervalle = 5;
    weatherForecastTimerJob.Schedule = calendrier;
    weatherForecastTimerJob.Update();

}

La clé à emporter est que lorsque la fonction est définie sur une application web, le SPFeatureReceiverProperties que SharePoint transmet à votre récepteur de fonctionnalité a paramètres niveau de l'application web.  Ancienne entrée de blog de Andrew suppose c'est dont la portée est la collection de sites.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Où est Microsoft.SharePoint.ApplicationPages.Administration.dll?

J'ai remis un projet visual studio qui fait référence à Microsoft.SharePoint.ApplicationPages.Administration.dll.  Il m'a fallu un peu alors que pour trouver la pensée elle et moi je partage.  Dans mon environnement, Il est situé à:

c:\program filescommon filesmicrosoft sharedweb server extensions14configadminbin

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Projet CodePlex – Explorateur de SP2010

Dans le cadre d'un effort continu d'apprendre les détails techniques de niveau faibles de SharePoint 2010, J'ai créé un "SharePoint Explorer« genre d'outil.  L'idée n'est pas nouveau.  J'ai utilisé ce projet plus d'une fois: http://sharepointexplorer.codeplex.com/.  Mon idée est de créer une version de SharePoint qu'utilisations connectés WebPart pour afficher tous les détails de bas niveau que le modèle d'objet peut fournir. 

Ce billet de blog sert une annonce le projet ainsi qu'un appel aux bénévoles.  Si vous êtes intéressé à travailler sur ce projet, faites le moi savoir par courriel (Galvin.Paul@gmail.com) et nous travaillerons.

Voici le projet: http://sp2010explorer.codeplex.com/

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

En collaboration avec TreeNodeBinding dans l'ASP.NET Treeview contrôle

J'ai travaillé sur ce que j'espère sera un peu libérés CodePlex projet qui fournit un peu intégré nice de WebPart parler les uns aux autres via des connexions fournisseur et consommateur dans le but de l'exploration d'un site SharePoint sous les couvertures.  (Cela a certainement été fait avant, mais il s'agit d'un projet d'apprentissage autant qu'autre chose).  Le but est d'être un remplacement pour la vue Explorateur de windows de SharePoint 2010 bibliothèques de documents.

Le code a l'habituel récursive appel vers le bas de la SPWeb et SPLists d'une donnée à partir de point.  L'objet qui effectue cette traversée crée une chaîne XML qui ressemble à ceci:

<sitecollection url =’http://demo2010a:9090′>
 
<Web
     titre = 'Hello World Sandbox' 
     Modèle =' un site pour les équipes d'organiser rapidement, auteur, et partager de l'information, BLAH BLAH BLAH »>

     <Liste
        titre ='BCC_Health_Services_FAQs’
        Modèle ='CustomList’
       
ListID =’http://demo2010a:9090/helloworldsandbox[delim]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</Liste>

     <Liste
        titre = « BCC_Notifications » 
        Modèle = « CustomList » 
        ListID =’
http://demo2010a:9090/helloworldsandbox[delim]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </Liste>

  </Web>

</sitecollection>

Je m'attends à nettoyer que XML avant tout est dit et fait.

Je veux rentrer en fin de compte que l'information up et dans un contrôle Treeview.  Pas exactement la terre stuff bouleversante.

Le défi que j'ai pris ici est de connecter l'arborescence d'un contrôle de Source de données XML plutôt que de construire manuellement mon TreeView comme je traverse l'arbre.  Je l'ai fait en partie parce que je me fais délibérément choses plus fort sur moi-même (Ce n'est après tout un projet d'apprentissage) et en partie parce que j'ai cette notion vague qui construire des nœuds d'arbre que je traverse l'arbre n'est pas une bonne idée à long terme.

Le problème avec cette approche est que le contrôle Treeview ne sait pas les bons attributs sur les nœuds intéressants comme « liste » ou « web » donc elle montre cette sortie par défaut:

 

image

Ce n'est pas utile.  C'est où la classe TreeNodeBinding aide.  Je peux utiliser cela pour raconter le contrôle Treeview comment il doit interpréter le code XML.  Voici un exemple:

TNB = nouveau TreeNodeBinding();
TNB.DataMember = « liste »; // Il s'agit de l'étiquette dans le code xml d'un site.
TNB.TargetField = « listid »;
TNB.ValueField = « title »;
TNB.ToolTipField = « Template »;

Cette liaison raconte le treeview que lorsqu'il trouve une <Liste> nœud XML, appliquer les liaisons pour TargetField, ValueField et ToolTipField.  En mai app, Ces cartes comme suit:

  • TargetField: Lorsque quelqu'un clique sur une valeur de nœud, C'est ce que vous obtiendrez pour SelectedNode.Value.  Cela ne veut ne pas être confus avec…
  • ValueField: C'est ce que vous voulez le contrôle Treeview pour afficher à l'utilisateur.
  • ToolTipField: La valeur par le XML que vous souhaitez comme une info-bulle.

Ajouter que TreeNodebinding pour les liaisons de données de l'arborescence et vous obtenez sortie comme ceci:

 

image

J'aurai plus sur tout ce que je continue sur le projet et finalement mettons cela sur Codeplex.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Reliant les filtres de champ de texte à votre composant WebPart personnalisé

Je voulais recevoir des informations de filtre champ de texte dans SharePoint 2010 dans ma part du web personnalisé.  J'ai essayé en utilisant Cet article MSDN comme une base, mais l'article est soit rompu ou je suis il suit tout simplement pas correctement.

La recherche un peu plus relevée Mike Smith Contribution de MSDN ici (http://social.msdn.microsoft.com/forums/en-us/sharepointdevelopment/thread/72F1732A-7F93-441E-8644-2E82BBB153D9).

Il y a beaucoup de choses là-bas sur les composants WebPart connectables mais l'article de Mike est aussi simple qu'elle obtient.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Facile et rapide: Envoyer un courriel en utilisant le serveur SMTP de Gmail dans.NET C#

Ce n'est pas exactement un nouveau sujet, mais quand j'avais besoin de le faire, J'ai trouvé beaucoup de « pourquoi ne ce travail pour moi » et pas trop de réponses directes. J'espère que quelqu'un trouve cela utile.

Le bit suivant de code enverra un courriel à l'aide de mon compte gmail pour le faire, y compris les pièces jointes:

à l'aide de System.net.mail;
à l'aide de System.NET;

NetworkCredential loginInfo = Nouveau NetworkCredential("[Mon ID Gmail]", "[Mon mot de passe Gmail]");
MailMessage MSG = Nouveau MailMessage();
MSG.From = Nouveau MailAddress("[M Id de Gmail]@gmail.com");
MSG.To.Add(Nouveau MailAddress(« paul.galvin@arcovis.com"));
MSG.Sujet = « Test infopath dev objet";
MSG.Corps = "<html><corps><forte>Un message fort.</forte></corps></html>";
MSG.IsBodyHtml = True;

foreach (chaîne aFile dans NIPFD.GetAttachmentNamesAndLocations())
{
    MSG.Attachments.Add(Nouveau Pièce jointe(aFile));
} // Ajout de pièces jointes.

SmtpClient client = Nouveau SmtpClient(« smtp.gmail.com");
client.EnableSsl = True;
client.UseDefaultCredentials = faux;
client.Informations d'identification = loginInfo;
client.Port = 587;
client.EnableSsl = True;
client.Envoyer(MSG);

Quelques bits clés qui me ralentissent et autres observations / Notes:

  • La première ligne qui crée l'objet loginInfo doit utiliser la gmail de QU'ID dépouillé « @gmail.com”. Si, Si mon adresse de courriel gmail « sharepoint@gmail.com« et mon mot de passe est « xyzzy » puis la ligne ressemblerait:

NetworkCredential loginInfo = Nouveau NetworkCredential(« sharepoint", "xyzzy");

  • Mon compte gmail est configuré pour utiliser SSL, et ce n'était pas un problème.
  • Il y a des informations contradictoires là-bas sur quel port utiliser. J'ai utilisé le port 587 et cela a fonctionné parfaitement pour moi.
  • Dans mon cas, J'ai également besoin d'envoyer des pièces jointes. Cet objet NIPFD a une méthode qui sait où se trouvent mes pièces jointes. Il retourne un chemin d'accès complet (e.g. « c:\tempattachment1.jpg". Dans mon test, J'ai eu deux pièces jointes et ils ont tous deux travaillent amende.

J'ai utilisé visual studio 2008 pour écrire ce code.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Tags Technorati: ,,,