Ich habe versucht, Elemente über Code zu veröffentlichen, der im Sitecore-Editor geändert wurde. Wenn ich Feldwerte programmatisch aktualisiere und diese Änderungen veröffentliche, funktioniert es gut.So veröffentlichen Sie Sitecore-Elemente, die mit dem Editor aktualisiert wurden
Unsere Redakteure für das Content-Management nehmen regelmäßig Änderungen am Editor vor, ohne sie unbedingt zu veröffentlichen. Wir möchten ihnen eine Funktionalität zur Verfügung stellen, mit der sie auf eine Schaltfläche klicken können, die alle relevanten Änderungen veröffentlicht und den Sitecore-Cache löscht.
Ich möchte nicht die gesamte Website veröffentlichen, nur einige vordefinierte Elemente.
Wir verwenden derzeit Sitecore.NET 6.4.1 (rev. 110720). Ich bin nicht in der Lage, Sitecore zu aktualisieren.
habe ich versucht, diese Optionen:
Option 1:
Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Database web = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Publishing.PublishOptions publishOptions = new Sitecore.Publishing.PublishOptions(master,
web,
Sitecore.Publishing.PublishMode.SingleItem,
item.Language,
System.DateTime.Now);
Sitecore.Publishing.Publisher publisher = new Sitecore.Publishing.Publisher(publishOptions);
publisher.Options.RootItem = item;
publisher.Options.Deep = true;
publisher.Publish();
Option 2 einen neuen Verleger Objekt zu erhalten: mit der statischen publishmanager
Database db = Sitecore.Configuration.Factory.GetDatabase("web");
Database[] databases = new Database[1] { db };
Sitecore.Handle publishHandle = Sitecore.Publishing.PublishManager.PublishItem(item, databases, db.Languages, true, false);
Beide Methoden sind in einer using-Anweisung verpackt, um das gleiche a zu verwenden ccount, das von den Editoren für die Inhaltsverwaltung verwendet wird.
string domainUser = @"sitecore\admin";
if (Sitecore.Security.Accounts.User.Exists(domainUser))
{
Sitecore.Security.Accounts.User user =
Sitecore.Security.Accounts.User.FromName(domainUser, false);
using (new Sitecore.Security.Accounts.UserSwitcher(user))
{
// publish code ...
}
}
Die Protokolle zeigen nicht alles bemerkenswert, wie weit ich
ManagedPoolThread #7 13:41:46 INFO Job started: Publish to 'web'
ManagedPoolThread #7 13:41:46 INFO HtmlCacheClearer clearing HTML caches for all sites (5).
ManagedPoolThread #7 13:41:46 INFO HtmlCacheClearer done.
ManagedPoolThread #7 13:41:46 INFO Job ended: Publish to 'web' (units processed: 2)
ManagedPoolThread #5 13:41:46 INFO Job ended: Publish (units processed:)
sagen kann, es ist definitiv kein Caching Problem, denn wenn vor dem Löschen des Cache manuell im Editor veröffentlicht Programmatisch sind die Änderungen im Code sichtbar.
Also ich bin auf der Suche nach einer Möglichkeit, eine vordefinierte Liste von aktualisierten Elementen programmatisch zu veröffentlichen, unabhängig davon, wie die Bearbeitung vorgenommen wurde.
In Ihrer Option2 (Publizemanager) veröffentlichen Sie in der Master-Datenbank. Könntest du das mit der Web-Datenbank als Ziel versuchen? Stellen Sie außerdem sicher, dass Sie den richtigen Datenbankkontext verwenden (möglicherweise verwenden Sie auch einen db-Switcher, um db zu beherrschen). – Gatogordo
scheint auch nicht zu funktionieren. Ich habe einen DatabaseSwitcher hinzugefügt und die Datenbank in Web geändert, auch anders herum. – redrobot
Ich benutze Option 2, können Sie den Code in der Frage mit dem Web aktualisieren ?, andere Das Veröffentlichungsziel ist nicht immer "web", besser nicht diese hardcoded verwenden, 2) Wenn das Elternteil nicht in der Web-Datenbank existiert das Element nicht veröffentlicht –