1

我正在尝试在 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']);

任何帮助将不胜感激。

4

3 回答 3

2

您可以使用基本的 javascript 对象作为地图。

所以

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

将创建一个像这样的对象:

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

当您将整数传递i给您的 m 对象时,它会尝试将其视为数组而不是对象。

你有比这更深层次的问题,因为你不应该从 javascript 运行 SQL 查询。这将允许任何人在访问您的网站时对您的数据库运行任意查询。

于 2013-03-01T19:36:05.410 回答
1

请阅读有关如何在 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 注入。人们不能使用它们删除他们不应该删除的内容,但他们可以了解您不打算公开的信息。

最后但并非最不重要的一点 - 如果您有查询服务器端并在那里传递变量(联系人姓名的一部分),这将表现得更好并且更安全。这可以作为 Web 服务公开,或者如果您在 Visualforce 中 - 操作函数、JavaScript 远程处理......有很多选择!

我并不是说 AJAX 工具包是可憎的......但如果有的话,它应该很少使用。它是所谓的 SControl 时代的产物,随着 Visualforce 的引入(嗯……4 年了?),它的许多用例可以更快、更安全地完成。

于 2013-03-01T21:12:20.850 回答
0

从 JS 运行 SQL 通常是一个坏主意,除非您使用某种 sql-lite 本地存储引擎。无论如何,我相信您的问题可能是您的 m 和 x 混淆了。此外,在 for 循环中运行查询,IN在第二个查询中使用 an 或JOIN仅执行一个查询可能会更好。

于 2013-03-01T19:33:53.977 回答