Невозможно использовать SaveAndPublish из ContentService - PullRequest
4 голосов
/ 03 июня 2019

Я пытаюсь сохранить мой IContent с именем child, но в этой строке (contentService.SaveAndPublish(child);) я получаю следующую ошибку: Object reference not set to an instance of an object.

if (child.HasProperty("navn"))
{
    child.SetValue("navn", worker.Name.ToString(), "da-dk");
}
contentService.SaveAndPublish(child);

Вот как я определяю contentService:
IContentService contentService = Umbraco.Core.Composing.Current.Services.ContentService;

И я нахожу таких детей:

long totalChildren;

IEnumerable<IContent> children = contentService.GetPagedChildren(filialsParent.Id, 0, 100, out totalChildren);

Может кто-нибудь указать, что здесь не так?

Ответы [ 3 ]

4 голосов
/ 03 июня 2019

Я полагаю, что вы получаете ваш ContentService неправильным образом, и поэтому он может быть пустым, вызывая исключение нулевой ссылки.

Если вы используете SurfaceController, вы можете получить ContentService следующим образом:

var cs = Services.ContentService;

Если вы находитесь в классе, где службы не предоставляются, вы можете получить его следующим образом:

var cs = ApplicationContext.Current.Services.ContentService;

Подробнее об этом читайте в документации Umbracos ниже:)

https://our.umbraco.com/documentation/Reference/Management/Services/ContentService/

3 голосов
/ 11 июня 2019

Я узнал, что если я делаю это, то это работает.

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);

}
0 голосов
/ 11 июня 2019

Посмотрите по этой ссылке , кажется, что Umbraco «Сохранить» работает, даже если что-то имеет значение null, но не полностью:

Сохранение работает, но не полностью, это сохранение содержимогов БД, но не в офис Умбрако.И даже когда я пытаюсь обернуть setValues ​​в

if (blogNode.HasProperty("title")) {

, я все равно получаю нулевую справочную ошибку.

В случае OP он принимает неправильное значениеНа первом этапе contentService, так что я думаю, что ответ @Mikkel не совсем неправильный:

Оказывается, я использовал неверный parentId в этой строке:

var newBlog = contentService.CreateContent(post.Title, 1053, "umbNewsItem", 0);

правильное утверждение было:

var newBlog = contentService.CreateContent(post.Title, 1061, "umbNewsItem", 0);

L-

...