Archives Catégorie: Développement SharePoint

Bambou calendrier interagir avec SharePoint provoque « une erreur inattendue s'est »

Aujourd'hui, J'ai travaillé dans un environnement qui utilise un composant WebPart de bambou calendrier pour une amélioration de la collaboration. Ceci un standard moyen/petit gîte avec deux WFEs d'équilibrage de charge, un « serveur d'application » pour l'indexation et InfoPath et un cluster SQL dos fin.

Le client installé un logiciel de récupération de catastrophe sur l'un des WFEs et qui ont abouti à un WFE cassé pour un site spécifique dans la collection de sites. Chaque fois que l'équilibrage de charge pointé sur le touché WFE et que ce site, les utilisateurs ont vu un écran blanc vide en grande partie avec la phrase « une erreur inattendue s'est produite ». Aucune autre info a montré, juste cette phrase.

Ils m'ont demandé de le regarder. J'ai reproduit facilement le problème et ensuite ajouté un ?contenu = 1 à la fin de l'URL. Voilà comment j'ai appris qu'ils utilisaient le composant WebPart de bambou. Je suis retourné à la page et maintenant, tout à coup, Il m'a montré un message d'erreur ordonnée nice:

image

Je ne sais pas ce qui se passait ou ce que j'ai fait pour obtenir le message d'erreur contrôlée pour afficher d'autres que l'ajout de la ?contenu = 1 bit de la chaîne de requête.

C'est probablement un bord très rares cas mais si vous obtenez ce message, « Une erreur inattendue s'est produite » aller de l'avant et ajouter ?contenu = 1 à la chaîne de requête et de voir où cela nous amène.

</fin>

S'abonner à mon blog.

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

Tags Technorati: ,

À l'aide de Reflector sur Microsoft.SharePoint.dll

Redgate .NET réflecteur Michael Blumenthal a mis en place un article à propos des alertes et des vues (« Les points de vue peuvent être utilisés lors de la création d'une alerte ?"), ce qui est intéressant sur ses propres mérites. Cependant, J'ai été encore plus intéressé de voir comment il marche méthodiquement à travers le processus d'utilisation .NET Reflector de Redgate. Étape par étape, Il montre comment utiliser cette piste de l'outil vers le bas comment SharePoint détermine si une vue sur une liste doit être « optimisables" faute d'un meilleur mot (il explique cela beaucoup mieux que moi 🙂 ).

À ce stade dans l'ère de SharePoint, vous auriez presque d’être sourd et aveugle pour n’avoir ne pas entendu ou lu sur l’utilisation de cet outil. Il a avancé les choses et mon sentiment est que c’est, à bien des égards, un outil de dernier recours. Cependant, Si vous pensez que vous en avez besoin, mais ne sais pas vraiment comment, Compte-rendu de Michael semble être un bon tutoriel sur ce sujet.

</fin>

S'abonner à mon blog.

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

Tri des éléments de calendrier dans l'affichage Calendrier

J'utilise un calendrier pour suivre les discussions en groupe sur un jour donné. J'ai deux sessions: matin et après-midi. Je veux créer une vue qui affiche les séances du matin uniquement via un ID de session par ordre alphabétique. C'est un peu délicat à réaliser (à moins que j'ai raté quelque chose d'évident réel).

Je peux facilement créer une vue filtrée montrant uniquement les événements de la journée. Le calendrier affiche tous les événements et si ils sont tous prennent place sur la même heure, Il énumère côte à côte dans la fente de l'heure. C'est super. La partie la plus délicate est celle, par défaut, il veut les répertorier dans le format d'ID. Si, Si j'ajoute « Session 02" et puis « Session 01" pour le calendrier, Il leur montre dans cet ordre (i.e, Session 02 et puis la Session 01). De les énumérer dans l'ordre de l'ID de Session, J'ai pensé à essayer ces choses:

  1. Configurez l'affichage à l'aide de l'interface utilisateur web. Pas de chance. Il n'y a pas d'options de tri des éléments de cette façon.

    Car qui n'a pas fonctionné, Je suis maintenant en espérant y est une requête CAML quelque part là-dedans qui va me permettre de substituer le tri. CQWP me permet de faire qui sorte de changer, peut-être que le calendrier sera ainsi?

  2. Modifier la partie web, Recherchez une exportation"" fonction et … BZZZT! Je ne peux pas exporter ses XML. Il n'y a aucune option d'exportation.

    Je m'accroche encore espoir que je peux trouver et modifier une requête CAML. Étant donné que je ne peux pas exporter le composant WebPart, qui laisse SharePoint Designer.

  3. J'ai ajouter le composant WebPart calendrier sur un site de bac à sable et ouvrir ce site à l'aide de SharePoint Designer. J'ai regarder le balisage pour le composant WebPart et j'ai trouver ce que je cherche. Il a codé la folie, mais c'est là: "<ListViewXml …. >folie codé</ListViewXml>". Spécifiquement, Il y a ce bijou:

<Requête>
<Où>
<DateRangesOverlap>
<FieldRef nom = « ÉvénémentDate » et>
<FieldRef nom = date de « fin » />
<FieldRef nom = « RecurrenceID » et>
<Valeur de Type = « DateTime »>
<Mois />
</Valeur>
</DateRangesOverlap>
</Où>
<OrderBy><FieldRef nom = « Session_x0020_ID" /></OrderBy>
</Requête>

(J'ai décodé les &lt;d'et &les fractionner pour plusieurs lignes pour un souci de clarté et du gt).

Ajouter le <OrderBy> bit et maintenant il trie par ID de Session, pas l'ID d'élément de la liste interne.

GIGANTESQUE pointe o’ le chapeau à Becky Isserman pour son commentaire au billet de blog de Isha Sagi: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Je n'aurais pas mis la <OrderBy> au bon endroit sans son commentaire.

J'espère pouvoir rédiger cela plus clairement avec des captures d'écran bientôt, mais dans le cas où je ne fais jamais, au moins, je l'ai fait autant.

</fin>

Fonctionnalités de SharePoint & Solutions de gestion — N'oubliez pas le u dans CRUD (ou le d d'ailleurs)

Nous avons collectivement passent beaucoup de temps à penser à des solutions SharePoint — Comment créer les, Quel outil utiliser, que se passe-t-il quand ils échouent à déployer, emplois de minuterie, Scopes, etc.. Nous passons tellement de temps à réfléchir sur les bits dès le départ qu'il est facile d'oublier que nous devions rentrer eux aussi bien. Rétraction des solutions est sans doute plus difficile, dans une perspective de conception, que leur déploiement. Le déploiement est essentiellement une affaire de livre de cuisine. En général, installer une fonctionnalité, peut-être avoir un récepteur de fonctionnalité pour charger des données dans une liste, ce genre de chose. Cependant, retrait est potentiellement plus complexe.

Une solution donnée peut créer des artefacts comme celles-ci:

  • Type de contenu
  • Définition de liste
  • Définition du site
  • Données dans une liste
  • Récepteurs de la même
  • Formulaires InfoPath

La liste se poursuit.

Même s'il est évidemment important de concevoir une solution qui instancie les objets correctement, Il est tout aussi important d’envisager la mise à jour et supprimer des cas. Si votre solution crée une nouvelle liste et remplit cette liste avec les données, que se passe-t-il lorsque la solution est rétractée? Dans certains cas, la liste devrait être supprimée. Dans les autres cas, Il devrait être laissé intact à des fins historiques. Besoins de votre entreprise vous guidera vers la bonne décision.

Pour aider à cette, créer une matrice qui répertorie chaque artefact que votre solution déploie sur SharePoint. La liste de trois colonnes par artefact, un pour créer, Update et delete. Pour chaque cas, déterminer le résultat correct pour cette opération.

Ce type d’analyse est évidemment préférable de faire avant que la solution est déjà déployée sur une batterie de serveurs SharePoint. Cependant, comme le tabagisme, Il n’est jamais trop tard pour commencer à faire les choses correctement. Créer cette matrice et élaborer un plan pour résoudre les scénarios de mise à jour/suppression manquant. Il peut être un problème difficile à résoudre, mais au moins vous vous avez mis une boîte autour du problème.

</fin>

S'abonner à mon blog.

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

Tags Technorati:

Quick Fix: Web Services que Interact avec SharePoint, InvalidOperationException

Il y a 1 million d'années, J'ai aidé à développé un service web qui a été appelé par une action personnalisée pour un flux de travail SharePoint Designer. Cette semaine, le client a voulu déplacer vers la production (Enfin!) alors nous avons fait.

L'action personnalisée a bien fonctionnée, mais le service web qu'a invoqué n'a pas, ce qui nous donne cette erreur:

System.InvalidOperationException: Cette opération peut être effectuée uniquement sur un ordinateur qui fait partie d'une batterie de serveurs par les utilisateurs qui disposent d'autorisations dans SQL Server pour lire à partir de la base de données de configuration. Pour vous connecter à ce serveur à la batterie de serveurs, Utilisez l'Assistant de Configuration de Technologies et produits SharePoint, situé dans le menu Démarrer dans outils d'administration.
à Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

S'avère que j'ai oublié d'ajouter le service au pool d'applications SharePoint dans IIS. Une fois que je l'ai fait, il fonctionnait bien.

Cette annonce du forum MSDN m'a donné l'idée, que j'avais besoin: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</fin>

S'abonner à mon blog.

Suivez-moi sur twitter: http://twitter.com/pagalvin

Tags Technorati:

Facile et rapide: Obtenir SPFolder de SPItemList

Je continue en cours d'exécution sur ce problème et Google semble jamais comprendre ce que je veux faire, donc je me suis dit que j'écrirais ce.

J'ai fait beaucoup de récepteur d'événements de débogage dans la dernière semaine ou deux. L'ER est défini par rapport à une bibliothèque de documents. Les éléments individuels dans la bibliothèque de documents sont étroitement liés à leurs dossiers parents. Si, Je reçois toujours le dossier de l'élément pour diverses manipulations. Lors du débogage, J'avais besoin de mettre à jour les métadonnées d'un dossier pour un élément spécifique dont je connais l'ID.

Voici une petite application console (conçu pour s'exécuter sur le serveur de la batterie) qui prend deux arguments: l'ID d'un élément et la valeur à assigner à un champ, « Statut d'approbation ». Il est difficile codes beaucoup de choses et n'a aucune vérification des erreurs.

Le code ressemble un site dur codé, Obtient une bibliothèque de documents codés en dur et recherche ensuite l'élément indiqué. Puis, il trouve le dossier parent de l'élément et assigne la valeur d'État.

La principale leçon ici pour moi, c'est que SPItem ne reçoit pas accès au dossier. Vous devez utiliser SPListItem.File.

Si quelqu'un se soucie d'offrir une critique ou de suggérer une meilleure façon d'obtenir le dossier d'un élément, Veuillez laisser un commentaire.

<Code>
à l'aide de Système;
à l'aide de System.Collections.Generic;
à l'aide de System.Text;
à l'aide de Microsoft.SharePoint;
à l'aide de System.Collections;

espace de noms Conchango
{
    /// <Résumé>
 /// </Résumé>
 classe ManualFolderUpdate
    {
        statique VOID Principal(chaîne[] args)
        {
            chaîne MSH = « ManualFolderUpdate (v1.0): "; // MSH = "en-tête de Message"

 Console.WriteLine(MSH + « Démarrage.  J'ai modifié le 04/08/08.");

            chaîne URL = http://localhost/xyzzy;

            à l'aide de (SPSite oSPSite = Nouveau SPSite(URL))
            {

                à l'aide de (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists[« Documents"];

                    Console.WriteLine(MSH + « A la bibliothèque de documents.");

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

                    int FolderID = 0;
                    chaîne NewStatus = "xyzzy";

                    FolderID = système.Convert.ToInt32(args[0].ToString());
                    Console.WriteLine(« Recherche de dossier pour élément: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Console.WriteLine(MSH + "Got le dossier parent.");

                    NewStatus = args[1].ToString();
                    Console.WriteLine(« Définir l'état de [" + NewStatus + "].");

                    Console.WriteLine(« Appuyez sur retour pour valider la mise à jour ou CTRL-C pour abandonner.");

                    Console.ReadLine();

                    thisItemFolder.Item[« Statut d'approbation"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Console.WriteLine(MSH + « Fini la mise à jour le dossier.  Sortie.");

                } // à l'aide de SPWeb

            } // en utilisant SPSite

 Console.WriteLine(MSH + « Fini.");

        } // Principal

    } // classe foldersync
} // espace de noms
</Code>

</fin>

S'abonner à mon blog.

Masquage des Actions personnalisées dans SharePoint

Il y a plusieurs mois, alors qu'il travaillait sur un projet pour un client, J'ai créé une fonction. Entre autres choses, Cette caractéristique définie une action personnalisée (ceux-ci apparaissent sous paramètres du site). Le seul but de cette action personnalisée était de démontrer que l'activation de la fonctionnalité fonctionnait comme prévu. Essentiellement, Je l'ai utilisé comme une forme grossière de débogage.

Une grande partie de mon embarras, cet artefact de débogage a fait son chemin de dev à UAT et la production avant que quelqu'un eu le temps de demander, « Quel est ce lien xyzzy?"

Maintenant, Nous sommes en production et je ne veux vraiment pas désinstaller la fonctionnalité, Difficulté elements.xml et puis réinstallez.

Todd plus sombre un moyen facile de le manipuler a souligné. Selon ses propres mots:

« CustomActions ne sont pas copiées dans la base de données, ils sont lus directement depuis le fichier Elements.xml et copiés dans l'état de l'application lors de l'exécution. Si, vous n'avez pas besoin de désactiver, désinstaller, réinstaller, et réactiver la fonction pour supprimer la CustomAction. Juste enlever le fichier Elements.xml et recycler le pool d'applications(s) effectuée. La prochaine fois que la fonctionnalité est dans la portée, vous ne verrez plus la CustomAction."

J'ai suivi ses instructions et, Bien sûr, ils travaillent.

Dans mon cas, Il s'agit d'une installation de niveau département avec juste un seul WFE. Si vous vous retrouvez avec ce problème à l'avenir et avec de multiples WFE, Je crois que vous aurez à faire le changement dans chacun.

</fin>

S'abonner à mon blog.

Quick Fix: Accès au Site SharePoint lève [HttpException (0x 80004005): Demande est dépassé.]

Un de mes collègues développeur travaille sur un projet de cette semaine et s'est heurtée à un problème de délai d'attente pendant qu'il travaillait sur la construction d'une partie web fou. Son composant WebPart a été très bien, mais "soudain" un site indépendant est devenu très lent et souvent dépassé avec cette erreur:

[HttpException (0x 80004005): Demande est dépassé.]

J'ai connecté et j'ai vu que plusieurs autres sites ont été très bien. Je me doutais bien qu'il y avait certains composants WebPart masqué sur la page et l'utilisation le fidèle ?contenu = 1 technique de débogage, J'ai trouvé en fait 11 composants WebPart sur la page, dont deux seulement étaient visibles. Encore mieux (d'un point de vue let's-hope-I-find-something-ugly-here-that-I-can-fix), trois de ces composants WebPart fermé avaient un nom de « Erreur ».

J'ai supprimé ces composants WebPart (qui elle-même s'est étonnamment longtemps) et qui a résolu le problème. Pour aujourd'hui 🙂

</fin>

S'abonner à mon blog.

Tags Technorati:

Services Web SSRS invoquant de WSS / MOUSSE en environnement EEA

Nous avions besoin d'invoquer la "CreateSubscription" méthode sur un service web Reporting Services qui est hébergé dans un FBA gérés environnement MOSS d'un composant WebPart personnalisé. Nous continuions obtenir des variations de:

  • 401: Non autorisé
  • Objet déplacé

Le « objet déplacé" message était plus intéressant car il disait que l'objet"" (notre service de Reporting Services) avait "bougé" vers login.aspx. Cela signifiait clairement que nous avons eu une sorte de problème d'authentification.

Finalement, j'ai réalisé que j'avais signet une entrée de blog par Robert Garret qui décrit comment appeler un service web WSS/MOSS usage général vivant à l'intérieur d'un environnement EEA. Notez que je ne peux pas accéder directement à l'article (comme des 06/09/08) parce qu'il veut authentifier. Le lien que je fournis vous amène à un "tous les messages" vue et vous pouvez localiser l'article spécifique en recherchant « Accessing MOSS Web Services utilisant l'authentification Forms Based ».

Voici le code qui a fonctionné pour nous:

ReportingService2006 rs = null; 
// Authentifier Authentification auth = Nouveau Authentification(); 
auth.URL = "http://URL/_vti_bin/Authentication.asmx";
auth.CookieContainer =
Nouveau CookieContainer();
Résultat LoginResult = auth.Login(« userid », « password »);
Si (résultat.ErrorCode == LoginErrorCode.NoError) 
{
// Aucune erreur, Procurez-vous les cookies.
CookieCollection cookies = auth.CookieContainer.GetCookies(Nouveau URI(auth.URL));
Cookie authCookie = cookies[résultat.CookieName];
RS =
Nouveau ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
Nouveau CookieContainer();
RS.CookieContainer.Add(authCookie);
}
Essayez
{
  RS.CreateSubscription(rapport, extSettings, DESC, eventType, matchData, paramètres CLIENT1);
}
captures (System.Exception ex)
{
  Console.WriteLine(ex.Message.ToString());
}

J'interprète des choses à travailler comme ça:

  • Notre WebPart doit composer le service d'authentification et de dire, "Hey, Tony, C'est moi!".
  • Service d'authentification répond disant, "Hey, Je sais que vous. Comment sont les enfants? Voici un jeton."
  • Nous appelons le service Reporting Services et dire, "Tony m'a envoyé, Voici le jeton."

</fin>

S'abonner à mon blog.

Simple et rapide: Un site Web à l'aide du modèle d'objet SharePoint en c#

J'ai essayé de chercher pour un petit extrait de code qui montre comment je peux créer un nouveau SPWeb dans une collection de sites. Je n'a pas trouver aussi rapidement ou aisément que je m'attendais alors j'ai pensé que je serait frapper ensemble entrée un peu sur le sujet.

Ce code crée un site Wiki:

 SPSite siteCollection;

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

    SPWeb w = siteCollection.OpenWeb();

    w.webs.Add("xyzzy", "xyzzy titre",
        "xyzzy description", 1033, SPWebTemplate.WebTemplateWIKI, faux, faux);

Mes recherches initiales a échoué parce que je cherchais des expressions telles que « disposition un site web à l'aide du modèle d'objet sharepoint" et autres.

Si vous recherche pour Webs.Add »()", Vous trouverez un certain nombre d'entrées de blog très utile, Articles MSDN et la documentation du SDK qui vont en profondeur sur ce sujet. Je recommande vivement ce site.

</fin>

S'abonner à mon blog.

Tags Technorati: