2010-10-06 2 views
1

Я пишу небольшое приложение, которое ссылается на Umbraco (небольшое автономное консольное приложение, которое в конечном итоге будет запускаться как запланированное задание на сервере), и я используя API Umbraco (4.5.2), чтобы внести изменения в базу данных/документ.Umbraco Document.getProperty (...). Значение выбрасывает исключение ссылки null

Вот фрагмент из того, что я делаю:

IEnumerable<Document> documents = Document.GetChildrenForTree(parentDocumentId); 
foreach (Document doc in documents.Where(d => d.Published)) 
{ 
    doc.getProperty("myData").Value = "some data"; // Exception here 
    // ...other stuff here... 
} 

Однако я всегда получаю NullReferenceException, потому что нет никаких свойств. Это меня смущает, потому что я вижу, что в интерфейсе umbraco есть 5 свойств.

Коллега предположил, что я использую узел вместо документа, однако я даже не могу его создать, поскольку получаю исключение NullReferenceException из конструктора класса Node.

Node myNode = new Node(-1); // NullReferenceException here 

У кого-нибудь есть идеи?

ответ

2

Класс документа получает/устанавливает информацию из базы данных umbraco. Поскольку ваш исполняемый код во внешнем консольном приложении не может найти контекст umbraco. Поэтому выбрасывание исключения с нулевой ссылкой.

Вам необходимо запустить код внутри процесса umbraco. Существует веб-сервис asmx, который существует для сторонней интеграции. /umbraco/webservices/api/documentservice.asmx

+0

После разговора с несколькими людьми на конференции DDD Ирландии на прошлой неделе, кажется, что доступ к Umbraco через веб-сервиса является наилучшим способом продвижения вперед на данный момент. Я действительно посмотрел исходный код, и он действительно нуждается в рефакторинге. Существуют зависимости от HttpContext в «бизнес-объектах» (HttpContext должен появляться только на уровне презентации), поэтому он не удался в консольном приложении. Я считаю, что в V5 это будет лучше. (Я не совсем понимаю, что вы подразумеваете под «контекстом umbraco».) –

+2

umbraco context - это одноэлементный, который существует внутри приложения во время выполнения. Это похоже на httpcontext. Он хранит пути xml/storage/другие переменные приложения –

0

Недавно я проверил источник 4.5.2, чтобы найти, что для заполнения объектов Document и Node требуется подключение с помощью umbracoDbDsn. Поэтому, если у вас есть AppSetting под названием umbracoDbDsn, который указывает на действительный экземпляр базы данных Umbraco, вы будете хороши.

НТН,

Benjamin

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