Sto eseguendo una pubblicazione programmata del mio DB master Sitecore utilizzando l'API di pubblicazione Sitecore. Io lo chiamo un servizio web a intervalli pianificati durante il giorno che corre il seguente codice (leggermente condensato per migliorare la leggibilità):Perché Sitecore pubblica articoli bozza dall'API C# e come posso smettere di farlo?
// 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();
Quando si esegue il codice sopra pubblica tutto nel nodo di contenuti, tra cui tutti i discendenti, a prescindere dalla stato del flusso di lavoro. È come se ignorasse completamente il flusso di lavoro. Questo non è ciò che cerchiamo e sta causando molti problemi sul nostro sito web dal vivo.
Se eseguiamo la stessa azione da Sitecore Desktop, pubblica tutto nel nodo del contenuto, inclusi tutti i discendenti, che sono pubblicabile (nella fase finale del flusso di lavoro). Non pubblica alcun elemento nell'albero che è ancora in modalità bozza. Questo è il bahaviour richiesto.
ho cercato l'attuazione del codice di come un utente non amministratore circondando il codice precedente con la seguente istruzione 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))
{
...
}
Purtroppo questo non ha avuto alcun effetto.
C'è qualcosa di ovvio che ho perso, o lo sto facendo bene e Sitecore lo sta facendo male? Qualcuno può aiutare, per favore?
La cosa strana che ho notato, inoltre, è che gli articoli bozza che sono stati pubblicati, se visualizzati sul database live, non mostravano assolutamente nulla nel Sitecore Desktop in termini di campi o metadati. Sono stati anche mostrando un avvertimento che "La voce corrente non dispone di una versione in 'inglese:. Inglese'
Non hai bisogno di assistenza per questo. Sitecore ha il proprio scheduler. –
Grazie a @horseman, ma penso che l'utilità di pianificazione di Sitecore funzioni su un intervallo, che può essere facilmente resettato quando l'appPool ASP.NET si ricicla. Ciò può compromettere e correggere qualsiasi programma appropriato per la pubblicazione. Di conseguenza, utilizziamo un servizio Web richiamato su una pianificazione dall'Utilità di pianificazione di Windows. – theyetiman