So lokalisieren Sie den Webpart -Titel, die Beschreibung, die Gruppe, die QuickAdd -Gruppe in Sandbox -Lösung
-
22-10-2019 - |
Frage
Ich habe andere ähnliche Fragen gesehen (wie Dieses hier), überprüfte Microsoft -Dokumentation (wie alle, die aus und beziehen sich auf die Seite Lokalisierung von Sandbox -Lösungen in SharePoint 2010) plus andere Artikel (Johnwpowell und SPbit).
Wie auch immer, ich kann das folgende Problem nicht lösen:
Mit einer SP2010-Sandbox-Lösung in VS2010 mit einem CODE-Webpart haben Wie lokalisiere ich den Titel des Webparts, Beschreibung (in .Webpart -Datei), Gruppe, QuickAddgroup (Elements.xml)?
Vielen Dank an alle
Zusätzliche Bemerkungen:
Ich kann den Titel und die Beschreibung des Feature sowie des WebPart -Inhalts nach Code (z. B. dem Text eines Etiketts) lokalisieren. Mir ist auch über benutzerdefinierte Attribute bekannt, um WebPart -Eigenschaften zu lokalisieren, wenn der Benutzer sie im Browser bearbeitet.
Ich konnte dies in SP2007 über einige Visual Studio Random Magic (BuildAction + CopyTooutput + CustomTool + Bereitstellungsort + Bereitstellungsart + Bearbeitung Manifest ... fragen Sie mich nicht wie :)), aber die meisten dieser Optionen sind nicht Erhältlich in einer Sandbox -Lösung.
Bearbeiten
Nach dem erneuten Lesen von Dokumenten habe ich entdeckt diese Notiz Dies setzt das endgültige Wort zumindest auf die .webpart -Datei:
Zeichenfolgen in der .webpart -Datei einer Sandbox -Lösung können nur lokalisiert werden, wenn lokalisierte Ressourcendateien als Teil einer landwirtschaftlichen Lösung separat in das Dateisystem installiert wurden. In den meisten Situationen, in denen Sie eine Sandbox -Lösung erstellen, haben Sie keine Erlaubnis, landwirtschaftliche Lösungen auf den Zielfarmen zu installieren. In solchen Fällen gibt es keine praktische Möglichkeit, die .webpart -Datei in einer Sandbox -Lösung zu lokalisieren. Dies bedeutet, dass der Name des Web -Teils in der Web -Teil -Galerie in Websites aller Sprachen gleich ist.
Irgendwelche Hinweise darauf, wie das zumindest programmgesteuert werden kann, z. B. das Webpart in einem Feature Event -Empfänger hinzufügen?
Lösung
Ich gehe davon aus, dass Sie keine landwirtschaftliche Lösung installieren können, die Ressourcendateien als Teil eines Hybridansatzes enthält? Wenn Sie können, geht dies um das Problem.
Wenn nicht: (Entschuldigung, wenn Sie dies bereits wissen), wie Sie wahrscheinlich bekannt sind, sehen Ressourcen, auf die in einer .webPart (OR.DWP) -Datei verwiesen wird, ungefähr wie folgt aus: "$ ressourcen: core, webpartTitle;" Wo sich "Core" auf den Namen der Ressourcendatei bezieht und "WebPartTitle" bezieht sich auf den Ressourcenzeichennamen. Diese Ressourcen werden gelöst, wenn die Datei .webPart als Teil einer Funktion bereitgestellt wird, und sie werden durch Betrachtung der Sprache der Root -Site aufgelöst, da hier die Web -Teil -Galerie existiert. Es ist ein einmaliger Treffer, der nur am Standpunkt der Bereitstellung in die Website ist.
In einer Sandbox können Sie nur den Server installierten Ressourcendateien referenzieren und nicht als Teil der Sandbox -Lösung bereitgestellt. Der einzige Weg um diese Weise scheint es also zu sein, Code wie einen Feature -Empfänger zu verwenden. Wenn Sie aktiviert sind, empfehle ich Ihnen vor, in der Webpart -Datei in der Webpart -Galerie (mit SPWeb.getCatalog) einen Handle zu erhalten und dann eine einfache Suche und Ersetzung durchzuführen, indem Sie die Ressourcenreferenz programmatisch beheben Die Feature -Empfängerbaugruppe.
Andere Tipps
Ich baue diesen basierend auf Steve Antwort und anderen Links mit den wichtigsten Schritten. Es könnte hilfreich sein, wenn die nächsten kommen. Bitte korrigieren Sie, wenn Sie falsch sind.
- Holen Sie sich die Web -Part -Galerie als Spraist mit
GetCatalog(SPListTemplateType.WebPartCatalog)
- Suchen Sie das Element in der Liste, die Ihrem Webpart entspricht, z. B. indem Sie angepasst werden
SPListItem.Name
- Erstellen Sie eine XMLTEXTREADER basierend auf der Webpart -Datei mit
XmlReader xmlReader = new XmlTextReader(listItem.File.OpenBinaryStream());
- Erstellen Sie ein xmldocument basierend auf dem Leser mit
XmlDocument xmlDoc = new XmlDocument(xmlReader)
- Erstellen Sie einen Xpathnavigator basierend auf dem Dokument mit
XPathNavigator navigator = xmlDoc.CreateNavigator()
- Holen Sie sich einen einzelnen Xpathnavigator -Knoten für Web -Teil -Titel mit
XPathNavigator titleNode = navigator.SelectSingleNode(titleXPath)
, wobei TitlexPath "/webparts/webpart/data/properties/Eigenschaft [@name = title] lautet. - Stellen Sie seinen Wert aus lokalisierten Ressourcen + autogenerierte Klasse mit
titleNode.SetValue(MyResources.SomeClass.MyWebPartTitle)
- Wiederholen Sie 6. und 7. Für die Beschreibung des Web -Teils (xPath lautet "/webparts/webpart/data/Eigenschaften/Eigenschaft [@name = Beschreibung]))
- Speichern Sie das xmldocument mit
xmlDoc.Save()
- All das einlegen
FeatureReceiver.FeatureActivated
Methode der Funktion mit Ihrem Webpart.
In diesem Fall ist die einfache Möglichkeit, einen Web -Teil -Titel zu lokalisieren, das Titelfeld des Listenelements geändert:
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();