Question

J'ai vu d'autres questions similaires (comme celui-ci ), vérifié la documentation de Microsoft (comme tous ceux issus de et liés à la page la localisation des solutions dans SharePoint mode bac à sable 2010 ), ainsi que d'autres articles ( JohnWPowell et SPbits ).

Quoi qu'il en soit, je ne suis pas en mesure de résoudre le problème suivant:

ayant une solution sandbox SP2010 dans VS2010 avec un webpart de code seulement, Comment puis-je localise le titre du webpart, Description (dans le fichier .webpart), Groupe, QuickAddGroup (elements.xml) ?

Merci à tous

Notes complémentaires:

Je suis en mesure de localiser fonction titre et la description, ainsi que le contenu de webpart par code (par exemple. Texte de certaines étiquettes). Je suis aussi au courant sur les attributs personnalisés afin de localiser webpart Propriétés lorsque l'utilisateur les modifications dans le navigateur.

j'ai pu le faire dans SP2007, par magie au hasard Visual Studio (BuildAction + CopyToOutput + CustomTool + emplacement de déploiement + type de déploiement + édition ne manifeste ... me demandez pas comment :)), mais la plupart de ceux les options ne sont pas disponibles dans une solution Sandbox.

Modifier

Après la lecture de ré-docs, je l'ai repéré cette note qui met le dernier mot au moins sur le fichier .webpart:

Cordes dans le fichier .webpart d'une solution sandbox peut être localisé que si les fichiers de ressources localisées ont été installées séparément au système de fichiers dans le cadre d'une solution agricole. Dans la plupart des situations où vous créez une solution sandbox, il est parce que vous n'êtes pas autorisé à installer des solutions agricoles dans les fermes cibles. Dans ce cas, il n'y a aucun moyen pratique de localiser le fichier .webpart dans une solution sandbox. Cela signifie que le nom de la partie Web dans la galerie WebPart est le même dans les sites de toutes les langues.

Toute indication sur la façon de faire au moins un programme, par exemple en ajoutant le webpart à la galerie dans un récepteur d'événements de fonction?

Était-ce utile?

La solution

Je suppose que vous ne pouvez pas installer une solution Farm, comprenant des fichiers de ressources dans le cadre d'une approche hybride? Si vous pouvez alors cela ne contourner le problème.

Dans le cas contraire: (désolé si vous le savez déjà) comme vous le savez probablement, les ressources référencées dans un fichier .webpart (de or.dwp) ressemble à quelque chose comme ceci: « $ Ressources: noyau, WebPartTitle; » où « noyau » fait référence au nom de fichier de ressources et « WebPartTitle » fait référence au nom de chaîne de ressource. Ces ressources sont résolus lorsque le fichier .webpart est déployé dans le cadre d'une fonction et ils sont résolus en regardant la langue du site racine car c'est là la galerie de partie Web existe. Il est une seule fois frappé au point de provisionnement dans le site.

Dans un Sandbox, vous ne pouvez les fichiers de ressources installé le serveur de référence, pas de ressources déployées dans le cadre de la solution Sandbox. Ainsi, la seule façon de contourner cela semble être d'utiliser le code comme une fonction du récepteur. En fonction activée, je vous conseille de prendre une poignée sur le fichier webpart dans la Galerie Web Part (à l'aide SPWeb.GetCatalog) puis effectuez une recherche simple et remplacer, la résolution de la référence des ressources programme en recherchant la chaîne de ressource qui est stockée dans la fonction du récepteur assemblage.

Autres conseils

Je construis celui basé sur la réponse Steve et d'autres liens avec les principales étapes nécessaires. Il pourrait être utile pour les prochains à venir. S'il vous plaît faire corriger en cas d'erreur.

  1. Obtenir la galerie de partie Web comme SPList avec GetCatalog(SPListTemplateType.WebPartCatalog)
  2. Recherchez l'élément dans la liste correspondant à votre partie Web, par exemple par correspondance sur SPListItem.Name
  3. Créer un XmlTextReader basé sur fichier partie Web avec XmlReader xmlReader = new XmlTextReader(listItem.File.OpenBinaryStream());
  4. Créer un XmlDocument basé sur le lecteur avec XmlDocument xmlDoc = new XmlDocument(xmlReader)
  5. Créer un XPathNavigator basé sur le document avec XPathNavigator navigator = xmlDoc.CreateNavigator()
  6. Obtenir un seul nœud XPathNavigator pour le titre de la pièce web avec XPathNavigator titleNode = navigator.SelectSingleNode(titleXPath), où titleXPath est "/ webParts / Webpart / data / propriétés / propriété [@ name = Titre]"
  7. Définissez sa valeur prise à partir de ressources localisées + classe avec autogénérés titleNode.SetValue(MyResources.SomeClass.MyWebPartTitle)
  8. Répéter 6 et 7 pour la description de la pièce Web (XPath est "/ webParts / Webpart / data / propriétés / propriété [@ name = Description]")
  9. Enregistrez le XmlDocument avec xmlDoc.Save()
  10. Mettez tout cela dans la méthode de FeatureReceiver.FeatureActivated de la fonction contenant votre partie Web.

Autres crédits à Cliff , Anders et James .

Dans ce cas, la façon simple de localiser un titre de partie web est de modifier le champ titre d'élément de liste:

SPList catalog = web.GetCatalog(SPListTemplateType.WebPartCatalog);

SPQuery query = new SPQuery();
query.Query = string.Format( @"<Where><Eq><FieldRef Name='LinkFilename'/><Value Type='Computed'>{0}</Value></Eq></Where>", webPartName);

SPListItem webPartItem = catalog.GetItems(query).Cast<SPListItem>().FirstOrDefault();
webPartItem[SPBuiltInFieldId.Title] = WebPartsResources.Title;
webPartItem.Update();
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top