2010-10-06 61 views
1

我正在寫一個小應用程序鏈接到Umbraco(一個小的獨立控制檯應用程序,最終將作爲計劃任務在服務器上運行)和我使用Umbraco API(4.5.2)來更改數據庫/文檔。Umbraco Document.getProperty(...)。值拋出空引用異常

下面是我在做什麼片段:

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個屬性。

一位同事建議我使用節點而不是文檔,但是我甚至無法創建一個,因爲我從Node類構造函數中獲取NullReferenceException。

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

有沒有人有任何想法?

回答

2

文檔類從umbraco數據庫獲取/設置信息。由於您在帶外控制檯應用程序中運行代碼,因此無法找到umbraco上下文。因此拋出一個空引用異常。

您需要運行umbraco進程內的代碼。有一個爲第三方集成而存在的asmx webservice。 /umbraco/webservices/api/documentservice.asmx

+0

說話的數人上週在愛爾蘭DDD會後,似乎通過Web服務訪問一把umbraco是當下最佳的前進道路。我確實看過了源代碼,它確實需要重構。 「業務對象」中存在對HttpContext的依賴(HttpContext應該只能在表示層中進行),這就是爲什麼它在控制檯應用程序中失敗的原因。我相信V5會更好。 (我不太清楚「umbraco context」是什麼意思)。 – 2010-10-11 08:32:29

+2

umbraco context是一個單例,它存在於運行時的應用程序中。它類似於httpcontext。它存儲xml /存儲路徑/其他應用程序變量 – 2010-10-12 03:22:05

0

我最近檢出了4.5.2源文件,發現填充文檔和節點對象只需要使用umbracoDbDsn進行連接。所以如果你有一個名爲umbracoDbDsn的AppSetting指向一個有效的Umbraco數據庫實例,那麼你會很好。

HTH,

本傑明