2013-03-01 37 views
1

我試圖在javascript中運行查詢並將結果傳遞給其他查詢以獲取更多數據。我也希望能夠將這些數據全部顯示在一張表中,因此我試圖將結果安排在JavaScript地圖中,但我似乎遇到了問題。試圖在javascript中構建一個地圖/哈希映射

這是正在修建的salesforce.com內與他們的AJAX工具包

我的代碼是...

var cn = Query("select id, LastName, FirstName, Middle_Name__c, Gender__c, HomePhone, Birthdate, Birth_City__c," + 
    "Birth_Country__c, SSN_Encrypted__c, Provider_NPI_ID__c, Primary_Specialty__c," + 
    "Practicing_Specialty__c, Title, GlobalProviderID__c from contact where Name like " + 
    "'%" + sBox + "%'"); 
var PFA; 

for (var i = 0; i < cn.length; i++) { 
    var x = new Array(); 
    var PFA = Query("select id, First_Scheduled_Date__c, Region__c " + 
     "from Provider_Facility_Associations__c where Provider__c='" + cn[i].Id + "'"); 
    m['cn'] = cn[i]; 
    m['PFA'] = PFA; 
    m[i] = x; 
} 

console.log(m['cn']); 

任何幫助將不勝感激。

+10

聖SQL注入蝙蝠俠! – 2013-03-01 19:29:50

+0

今天我的網絡足夠了。 – david 2013-03-01 20:49:44

+0

它使用salesforce.com AJAX工具包,它不應該成爲一個問題。 – bpl3792 2013-03-01 21:06:59

回答

0

從JS運行SQL通常是一個壞主意,除非您使用某種sql-lite本地存儲引擎。無論如何,我相信你的問題可能是你的m和x混在一起。另外,在for循環中運行查詢,在第二個查詢中使用IN或在JOIN中執行查詢可能會更好。

2

您可以使用基本的JavaScript對象作爲地圖。

所以

var map = {}; 
map["key1"] ="value1" 
map["key2"] = "value2" 

會創建這樣一個對象:

map = { 
    key1:"value1", 
    key2:"value2" 
} 

當你傳遞給你米物體的整數i它會嘗試把它當作一個陣列,雖然不是一個對象。

你有比這更深的問題,因爲你不應該從JavaScript運行SQL查詢。這將允許任何人訪問您的網站時在您的數據庫上運行任意查詢。

+0

它使用的是salesforce.com ajax工具包,因此據我所知,注射不應該成爲問題。我認爲我的代碼非常接近你的例子,但這不起作用。 – bpl3792 2013-03-01 21:04:40

1

請詳細瞭解relationships在Salesforce中的工作方式及其特定的「連接」,這些連接在開始時看起來很奇怪,但在像這樣的常見開發情況下實際上多次保存培根。

SELECT Id, FirstName, LastName, 
    (SELECT Id, First_Scheduled_Date__c, Region__c 
    FROM Provider_Facility_Associations__r) 
FROM contact 
WHERE Name LIKE '%Smith%' 

(注意「__r」中的「子查詢」)

這會給你的聯繫人和他們每個人都會有一個「場」之稱Provider_Facility_Associations__r這將是項目的數組(或只是如果沒有找到空數組)。

Salesforce的安全模式不是銀彈,你應該擔心表現和SQL injections。人們不能使用它們來刪除他們不應該的東西,但他們可以學習你不打算公開的信息。

最後但並非最不重要 - 如果您有查詢服務器端並只傳遞變量(聯繫人名稱的一部分),那麼這會更好,更安全。這可以是web服務或者如果你在Visualforce中的頂點 - 動作函數,JavaScript遠程處理...有很多選項!

我不是說AJAX工具箱是可憎的......但它應該很少使用,如果有的話。這是所謂SControl時代的產物,並且隨着Visualforce的推出(嗯......現在4年?),它的許多用例可以以更安全的方式更快地完成&。

+0

你是對的,試圖利用queryMore;) 關係的問題是有些是孩子,有些是參考對象。有些物體甚至不知道關係,因爲孩子正在注視着它。 – bpl3792 2013-03-01 21:41:01

+0

我仍然會一口氣排出相關名單。將批量大小設置爲2000,如果這還不夠 - 在子節點上調用'queryMores'? http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_relationships.htm#understanding_results(向下滾動一下)。如果沒有辦法進行子查詢,因爲rel。名稱爲空 - 作弊;)沒有人阻止你在返回的聯繫人中創建一個新的「字段」,並在那裏插入單獨查詢的結果... – eyescream 2013-03-01 22:04:03

相關問題