J'essaye de sauvegarder mon IContent
appelé child
, mais sur cette ligne ( contentService.SaveAndPublish (child);
) j'obtiens l'erreur suivante: La référence d'objet n'est pas définie sur une instance d'un objet.
long totalChildren; IEnumerable<IContent> children = contentService.GetPagedChildren(filialsParent.Id, 0, 100, out totalChildren);
Voici comment je définis mon contentService
:
IContentService contentService = Umbraco.Core.Composing.Current.Services.ContentService;
Et je trouve les enfants comme ceci:
if (child.HasProperty("navn")) { child.SetValue("navn", worker.Name.ToString(), "da-dk"); } contentService.SaveAndPublish(child);
3 Réponses :
Je pense que vous obtenez votre ContentService dans le mauvais sens et qu'il est donc peut-être vide, provoquant une exception de référence nulle.
Si vous êtes dans un SurfaceController, vous pouvez obtenir ContentService comme ceci:
XXX
Si vous êtes dans une classe où les services ne sont pas exposés, vous pouvez l'obtenir comme ceci:
var cs = ApplicationContext.Current.Services.ContentService;
En savoir plus à ce sujet dans Documentation Umbracos ci-dessous :)
https: // notre .umbraco.com / documentation / Reference / Management / Services / ContentService /
En C # avec Umbraco 8, il n'y a aucun ApplicationContext à trouver.
Ah, mon mal. Qu'en est-il d'une approche d'injection de dépendances? Injecter ContentService dans le contrôleur et le transmettre à votre bibliothèque de classes?
Je n'utilise ce code dans aucun contrôleur. Ce code fonctionne avec Hangfire en tant que tâche planifiée toutes les heures.
Ah. Ceci est ma dernière hypothèse, peut-être que cela peut vous aider: our.umbraco .com / documentation / Premiers pas / Code /…
merci mais j'ai déjà le service de contenu, et cela fonctionne, ce n'est que SaveAndPublish () qui ne fonctionne pas ... .Save ()
fonctionne très bien.
Je vais vous attribuer la prime puisque vous avez été le premier à répondre et que vous avez également beaucoup essayé de m'aider.
Regardez ce lien , semble qu'Umbraco 'Save' fonctionne même si quelque chose est nul mais pas complètement:
L'enregistrement fonctionne mais pas complètement, il enregistre le contenu dans la base de données mais pas au backoffice d'Umbraco. Et même quand j'essaye d'emballer le setValues dans un
if (blogNode.HasProperty ("title")) {
Je reçois toujours une référence nulle erreur.
Dans le cas de l'OP, il prend le mauvais contentService dans la première étape, donc je pense que la réponse @Mikkel n'est pas complètement fausse:
Il s'avère que j'avais utilisé le mauvais parentId dans cette ligne:
var newBlog = contentService.CreateContent (post.Title, 1053, "umbNewsItem", 0);
la déclaration correcte était:
var newBlog = contentService.CreateContent (post.Title, 1061, "umbNewsItem", 0);
L-
Legion, je n'utilise pas CreateContent car il existe déjà. L ' enfant
vient des enfants
si vous regardez mon message
Ce que je veux dire, c'est que le contexte qui existe déjà est le bon contexte / n'est pas nul. Parce que c'est exactement votre problème. Umbraco.Core.Composing.Current.Services.ContentService; est probablement nul, c'est le problème.
Le service de contenu n'était pas nul, je peux vous le dire.
je vois ta réponse, j'ai compris :)
J'ai découvert que si je fais ça, ça marche.
var umbf = Umbraco.Web.Composing.Current.Factory.GetInstance<IUmbracoContextFactory>(); using (var contextf = umbf.EnsureUmbracoContext()) { var umbcontext = contextf.UmbracoContext; IContentService cs = Umbraco.Core.Composing.Current.Services.ContentService; cs.SaveAndPublish(child); }
J'ai essayé de suivre - cultiv.nl/blog/using-hangfire- pour les tâches planifiées dans le parapluie ?
Peut-être qu'un écouteur d'événements s'est abonné à Publishing avec du code qui brise vos données après leur enregistrement mais avant leur publication. https://our.umbraco.com/documentation/reference/ev ents / contentservice- events . Même si ce n'est pas le problème, vous pouvez créer un écouteur d'événement pour l'événement de publication et voir si vos données arrivent aussi loin ou non.
@Matt Oui c'est le guide que je suis, notez que l'erreur n'a rien à voir avec hangfire
Je pense que c'est peut-être dû à Umbraco.Core.Composing.Current été nul. Pas fait n'importe quel v8 mais dans 7 le applicationContext serait nul.
@Matt Merci pour votre commentaire, je ne l'ai pas encore testé, mais avez-vous une idée de comment y remédier.
@ CarstenLøvboAndersen Malheureusement, il y a un très bon fil de discussion sur ce processus sur les forums de la communauté - our.umbraco.com/forum/umbraco-8/95966-umbraco-8-and-hangfire