2014-01-09 61 views
0

我想取一個集合中的OData服務的細節,如下面的網址 http://my.company.com/odata/Employee(「1234」)/細節擷取細節

我試着用以下的代碼這樣做。不確定fromEntityKey是否是正確的做法或其他。

manager = new breeze.EntityManager(collectionData.serviceName); 
var empType = manager.metadataStore.getEntityType("Employees"); 
var entityKey = new EntityKey(empType, '1234'); 
var query = EntityQuery.fromEntityKey(entityKey); 

但它給了我一個錯誤「請務必執行查詢或先調用fetchMetadata。」

我也試過從this link。但我仍然一樣。

任何人都可以幫助我嗎?

+0

你在哪裏定義你的元數據? –

回答

1

您不能使用manager.metadataSote.getEntityType(「Employees」),直到從服務器檢索到元數據爲止。默認情況下,這發生在第一次查詢操作期間,但是您的代碼在獲取元數據之前嘗試使用元數據。

此外,我認爲您將資源「Employees」的名稱與資源返回的實例的類型(可能是「Employee」)混淆。我還會檢查你的密鑰的數據類型是數字還是字符串。下面的例子假定它的數字(不像你的例子,其中鍵的數據類型可能是一個字符串,因爲你引用了它)。

所以,你有兩種方法,要麼強制元以獲取您撰寫之前,你的查詢,例如:

manager = new breeze.EntityManager(serviceName); 
manager.fetchMetadata().then(function() { 
    var empType = manager.metadataStore.getEntityType("Employee"); 
    var entityKey = new EntityKey(empType, 1); 
    var query = EntityQuery.fromEntityKey(entityKey); 
    // if you want to also see the queries details 
    query = query.expand("Details"); 
    return manager.executeQuery(query); 
}).then(function (data) { 
    var results = data.results; 
    ok(results.length === 1, "should have returned a single record"); 
    var emp = results[0]; 
)); 

或者,如果你知道「關鍵」的字符串名稱(「ID」中下面的例子)字段,直接使用它

manager = new breeze.EntityManager(serviceName); 
var query = EntityQuery.from("Employees") 
    .where("Id", "==", 1) 
    .expand("Details"); 
manager.executeQuery(query).then(function(data) { 
    var results = data.results; 
    var emp = results[0]; 
}); 
+0

我得到另一個錯誤,當我取它 錯誤是[鏈接](http://pastebin.com/BvYPBaY9) 順便說一句我的webservices響應是XML格式,它被提取罰款。 – gibsosmart