2014-02-10 2 views
1

Я создаю около 500 страниц на новом веб-сайте Umbraco v6.1.6 с использованием сценария импорта, который я закодировал. Я использую ContentService api для создания новых страниц. Они созданы и, кажется, сэкономят штраф. Однако, если я запрашиваю значение списка checbox с одной из новых страниц, я получаю пустую строку.Umbraco ContentService не обновляет чекбокс в кеше документа

Я проверил, что свойство пусто в файле umbraco.config, но если я вручную сохраню страницу из бэк-офиса Umbraco. кеш обновится с правильным значением, и я вдруг вернусь к правильному значению.

Есть ли способ принудительно обновить кеш или какую-либо другую форму исправления для этой проблемы?

Это метод CreateContent Я использую:

public static IContent CreateContent(string name, string documentTypeAlias, int parentId, Dictionary properties, bool publish = false, int author = 0) 
{ 
    IContent document = null; 

    ContentService contentService = new ContentService(); 
    document = contentService.CreateContent(
        name, // the name of the document 
        parentId, // the parent id should be the id of the group node 
        documentTypeAlias, // the alias of the Document Type 
        author); 

    foreach (string property in properties.Keys) 
    { 
     document.SetValue(property, properties[property]); 
    } 

    // If publish is true, then save and publish the document 
    if (publish) 
    { 
     contentService.SaveAndPublish(document); 
    } 
    // Else, just save it 
    else 
    { 
     contentService.Save(document); 
    } 

    return document; 
} 

Edit:

После поиска в базе данных, я могу видеть, что cmsContentXml обладает свойством, но данные в нем так же, как umbraco.config. Я посмотрел в cmsPropertyData и данные присутствуют. Поэтому, я думаю, вопрос в том, как получить данные cmsPropertyData в cmsContentXml?

Мой вопрос сопоставим с этим: https://stackoverflow.com/questions/17722347/umbraco-6-1-1-when-i-publish-content-via-the-content-service-tags-type-property однако он не имеет ответов.

+0

Как это значение (fo r ваш список флажков), отформатированный в ваших словарях свойств? Если вы импортируете значение, которое не отображается в кеше XML, но если вы сохраняете его из backoffice, похоже, что ваше свойство checkbox не сохраняется должным образом во время импорта. – sitereactor

ответ

2

Данные от cmsContentXml сбрасываются непосредственно в файл umbraco.config, поэтому, к счастью, это те же самые.

Чтобы сделать код немного более DRY (вы всегда сохранять документ как в случае и еще, попробуйте это и обновить метод SaveAndPublish к Publish (и в v7 вы можете использовать PublishWithResult, чтобы получить подробный результат Публикуйте действия):

contentService.Save(document); 

// If publish is true, then save and publish the document 
if (publish) 
{ 
    contentService.Publish(document); 
} 

в v7 вы могли бы взглянуть на publishResult Если что-то не так, то это будет вам сказать, что это, скорее всего это будет просто прекрасно работать так, хотя (.. что может означать, что SaveAndPublish не работает, но давайте выясним, есть ли у publicResult ошибки).

+0

«contentService» не содержит определения для PublishWithResult. Есть идеи? –

+0

Я заменил строку 'var publishresult = ...' в вашем ответе с помощью contentService.Publish (document); ' и вдруг это сработало. Что является загадкой, потому что и Publish, и SaveAndPublish используют тот же метод «SaveAndPublishDo», однако я не могу сказать, что много сделал с исходным кодом Umbraco. –

+0

Ах, извините, PublishWithResult является новым в v7, но не в v6. – sebastiaan

Смежные вопросы