Estoy ejecutando una publicación programada de mi base de datos principal de Sitecore utilizando la API de publicación de Sitecore. Que llamo un servicio web a intervalos regulares durante el día, que se ejecuta el siguiente código (ligeramente condensada para facilitar la lectura):¿Por qué Sitecore publica los artículos del borrador de la API de C# y cómo lo detengo al hacerlo?
// grab the root content node from sitecore
Item contentNode = dbSource.Items[ID.Parse("{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}")];
PublishOptions options = new PublishOptions(sourceDatabase, targetDatabase, PublishMode.Smart, lang, DateTime.Now);
options.RootItem = contentNode;
options.Deep = true;
Publisher p = new Publisher(options);
p.PublishAsync();
Cuando corremos el código anterior se publica todo en el nodo de contenido, incluyendo todos los descendientes, independientemente de estado del flujo de trabajo. Es como si estuviera ignorando el flujo de trabajo por completo. Esto no es lo que buscamos, y está causando muchos problemas en nuestro sitio web en vivo.
Si ejecutamos la misma acción desde Sitecore Desktop, publica todo en el nodo de contenido, incluidos todos los descendientes, que son publicables (es decir, en la etapa final del flujo de trabajo). No publica ningún elemento en el árbol que todavía esté en modo borrador. Este es el comportamiento requerido.
que han intentado implementar el código como un usuario que no es administrador rodeando el código anterior con la siguiente instrucción using:
string userName = @"sitecore\******";
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(userName, true);
user.RuntimeSettings.IsAdministrator = false;
using (new Sitecore.Security.Accounts.UserSwitcher(user))
{
...
}
Desafortunadamente, esto ha tenido ningún efecto.
¿Hay algo obvio que he echado de menos, o lo estoy haciendo bien y Sitecore lo está haciendo mal? ¿Alguien puede ayudar, por favor?
Lo extraño que noté, también, es que los artículos del borrador que se publicaron, cuando se vieron en la base de datos en vivo, no mostraban absolutamente nada en el escritorio de Sitecore en términos de campos o metadatos. También estaban mostrando una advertencia de que "El elemento actual no tiene una versión en 'Inglés:. Inglés'
No necesita servicio para esto. Sitecore tiene su propio programador. –
Gracias @horseman, pero creo que el programador integrado de Sitecore funciona en un intervalo, que puede restablecerse fácilmente cuando se recicla el ASP.NET AppPool. Esto puede estropear los horarios adecuados que pueda tener para publicar. Como resultado, utilizamos un servicio web que se llama según un programa del Programador de tareas de Windows. – theyetiman