2015-10-15 75 views
1

我已經通過並調試了我的代碼,並且正在傳遞給GetItem()方法的ID是我期望獲得的培訓計劃的ID和自定義表類名稱正確的是(這是獲得正確的自定義表。 但是返回的項目是在自定義表中的第一項(我看了在數據庫中)不能與已輸入的ID的項目。CustomTableItemProvider.GetItem()返回錯誤的項目

int id = parameter.ID; 

CustomTableItemProvider provider = new CustomTableItemProvider(CMSContext.CurrentUser); 

entity = provider.GetItem(id, TrainingPlanConstants.TrainingPlanTableName); 

無論輸入什麼整數值,都會返回這個不相關的自定義表項。我使用GetItems()方法完成了一項工作 - 但這並不理想,因爲我知道我需要哪個CustomTableItem,並且此工作區這是一個不必要的循環。

(第7版)

+0

你可以檢查當你調用'GetItem()'時查詢的樣子嗎? http://devnet.kentico.com/docs/7_0/devguide/index.html?sql_queries_debugging.htm當你用Guid調用重載時會發生什麼? – rocky

+0

@ Mutton92老實說,節省一些時間和麻煩,只需在Kentico中爲您的CRUD操作設置LINQ to SQL或EF類,尤其是定製表格。它比Kentico的API更加靈活,它們非常易於安裝,並且您可以自己製作查詢,而不是試圖找出黑盒子裏正在發生的事情。 – Jerreck

+0

@Jerreck我有一個用於從自定義表中獲取項目的所有操作的DLL(這是我正在更新的)。它是由我的線路經理多年前完成的,並更新了Kentico的新版本。顯然他已經知道GetItem()函數的問題一段時間,並且剛剛在DLL中使用了GetItems()方法,我只是認爲我會修復我們的DLL,因此它實際上起作用,因爲另一個開發人員已經在整個站點中使用它不知道它不能正常工作!我已經在DLL中使用LINQ修復了它,但是Kentico應該知道該方法沒有按預期工作! – Mutton92

回答

1

奇怪,因爲你做了什麼似乎是正確的,也許ID不是項目ID在自定義表中。您可以通過查看數據庫並使用此ID運行查詢來調試它,或者使用方法GetItems()檢查ItemID是什麼。

這裏是Kentico 7一些示例: http://devnet.kentico.com/docs/7_0/devguide/index.html?custom_tables_api_examples_managing_custom_table_data.htm

解決方法可以是GetItems方法也如在一個在單證實施例來完成。如果你使用這個參數是不是表現如此沉重:

string where = "YourIDColumn = " + id; 
int topN = 1; 
string columns = "ItemID"; 

DataSet dataSet = customTableProvider.GetItems(customTableClassName, where, null, topN, columns); 

但我同意,這似乎有些奇怪,如果你有GetItem方法和你的ID。

祝您好運,調試並找到您的解決方案。

+0

您發送的鏈接上的所有示例都使用GetItem()方法,或者不要獲取我試圖替換的方法返回的CustomTableItem類型。爲了避免在所有地方進行更改,我試圖獲取CustomTableItem,但似乎無法設法將DataTable/DataRow轉換爲CustomTableItem。有人有主意嗎? – Mutton92

+1

就叫'CustomTableItem.New()'來我一直在調試模式下檢查和在該方法所使用的ID是我想自定義表項的項ID從'DataRow'加載數據... – rocky

1

您的代碼是正確的。

兩件事情來驗證(假設你的ID是一個有效的項目ID在你正在尋找在自定義表):

  1. 確保CMSContext.CurrentUser有權限讀取被查詢的自定義表格。
  2. 確保您傳入正確的自定義表代碼名稱。似乎微不足道,但再次驗證。
+0

收到 – Mutton92

+0

我建議驗證的另外兩件物品呢?什麼是您傳遞給'CustomTableItemProvider'的代碼名稱,用戶是否可以訪問該自定義表格? –

+0

正在引用的自定義表格是正確的。它給我的物品是同一張桌子上的另一個成員,但不是正確的。它沒有返回null,所以表類名必須是正確的,它也是一個正在很多其他正常運行的地方使用的常量。 – Mutton92

0

試試這個:

int id = parameter.ID; 
string where = "YourIdColumn=" + id; 
string columns = "TheColumnYouWant" 

CustomTableItem provider CustomTableItemProvider.GetItems(customTableClassName,where,null,columns); 

var theTrainingPlan = provider["TheColumnNameOfTheValueWant"]; 

當你創建它基本上成爲屬性地圖,您可以直接按鍵(或列)名稱訪問值CustomTableItem。

相關問題