问题标签 [soql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2463 浏览

c# - Linq to Salesforce“SQL”提供程序

所以,我有了这个新项目。我的公司使用 SalesForce.com 云来存储有关日常运营的信息。我的工作是编写一个新的应用程序,除其他外,它将这些数据的 CRUD 操作与现有的内部应用程序功能更无缝地集成在一起。

Salesforce WSDL API 的核心是一组将查询命令作为字符串的“query()”Web 方法。查询的语法是 SQL 风格,但不完全是(他们称之为 SOQL)。我不喜欢“魔术字符串”,所以我想在代码库中使用 Linq,并将 IQueryable 解析为我在服务包装器中需要的 SOQL 查询。这当然是可能的(L2E,L2Sql),但我想知道是否有捷径,因为如果我说自己推出需要一两天以上的时间,我会“鼓励”找到另一种方法(很可能是每个通用查询的方法,这是旧应用程序中使用的方法)。如果我成功地制作了一个通用的 SOQL 解析器,我们可以在其他几个即将推出的应用程序中使用它,我将成为英雄。

以下是我看到的选项:

  • 更加努力地寻找现有的 Linq2SOQL 提供程序(我的 Google-fu 在这里让我失望了,否则根本就没有;唯一的 .NET 包装器只提到 Linq 是一个不错的选择)。
  • 构建表达式树解析器。它至少需要支持 Select 和 Where 方法调用,并且需要解析 lambda 或操纵它们的方法体以获得所需的操作和投影。这似乎是一项相当艰巨的任务,但就像我说的,这当然是可能的。
  • 将服务包装在 Linq2Sql 或类似的现有 Linq 提供程序中,这将允许我提取足够接近的查询字符串,对其进行优化并将其传递给服务。那里肯定有几十个(尽管没有一个只是进来,AFAIK)。
  • 调用 Expression.ToString()(或 Expression.DebugView),并操作该字符串以创建 SOQL 查询。它会很脆弱,会很丑陋(在幕后),它只会支持我明确寻找的东西,但它会提供一个基本的翻译,让我继续前进。

你们有什么感想?对于一个人来说,构建一个 Linq 解析器不仅仅是两天的任务吗?一个涉及现有 Linq 提供商的复杂解决方案可能会做到吗?切碎表达式字符串并以这种方式构造我的查询会很糟糕吗?

编辑:感谢柯克的接地。我对即使是一个基本的 SOQL 解析器也需要做更多的研究,这超出了我按照任何可行的时间表编写工作应用程序代码的范围。例如,我必须从 Select() 方法 lambda 或从我的 WSDL 对象的所有已知列中构建一个默认列表,这是我什至没有想到的任务(我更关注 Where 解析) . 我敢肯定还有许多其他“未知的未知数”可以把这变成一件大事。我发现了几个链接,这些链接显示了编写 Linq 提供程序的基础知识,尽管它们都试图使其变得简单,但现在在时间上是不可行的。现在,我将构建我的存储库,使用封装命名查询的命名方法(可格式化查询字符串的常量类应减少维护中的麻烦)。不完美,但更可行。如果 Linq2SOQL 提供程序启动,无论是内部还是开源,我们都可以重构。

对于其他寻找 Linq 提供程序参考的人,这里是我发现的那些有用的链接:

0 投票
2 回答
3229 浏览

salesforce - SOQL 连接查询返回 sObject 但不返回字段。如何使用获得的ID?

我在下面有 SOQL,我得到的结果包含 sObject 的 ID。我的假设是查询也将返回 SObject 的字段。例如,我的查询尝试获取startDay__c类似于 ShigotoShousai 对象的字段的“”(日期)。但是查询的结果只是 sObject 实例的 ID。

父母ShigotoShousai 孩子:)ShigotoAssign_

system.debug(结果)输出

shigotoAssign_c :{Id=a06500000067aNjAAI, ShigotoShousai_c =a055000000DlHnOAAV}, shigotoAssign_c :{Id=a06500000067aNoAAI, ShigotoShousai_c =a055000000DlHnTAAV})

我得到了 ShigotoShousai__c sObject 的 ID 而不是它的属性“ startDay__c”。我认为输出会是这样的:

但是查询结果只是返回了我 ShigotoShousai__c sobject 的 ID :(

现在我知道 S 的 ID 值higotoShousai__c并想访问它的字段,所以我做了以下操作。

这给了我错误:

然后我发现ID不能用来指代SObject(即ShigotoShousai__c)。

但我有它的 id.. 我怎么能访问,比如说startDay__c?有没有办法使用这个ID?

0 投票
1 回答
11156 浏览

concatenation - 是否可以在 SOQL 中连接字符串?

我从 2005 年开始阅读线程,人们说 SOQL 不支持字符串连接。

虽然想知道它是否受支持并且有人这样做了。

我正在尝试连接但没有运气:(

下面是尝试使用指定电子邮件查找记录的 APEX 代码。

即使记录确实在数据库中,它也不会查询任何内容。调试显示“row(0)”,表示返回空。

我在做 concat 错误的方式吗?

更新

我刚刚找到了一种不必添加单引号的方法。即使对于具有查询的字符串,也只需要应用相同的冒号变量。

如果 WHERE 子句包含 DateTime,这也是必要的,因为 DateTime 不能用单引号引起来。

0 投票
1 回答
2631 浏览

salesforce - Salesforce SOQL 查询和标签

我刚刚开始使用 Salesforce Web 服务 API,我很惊讶没有一种明显的方法来查询所有包含特定标签的帐户对象。

你会说找到包含特定标签的所有对象的最佳方法是什么?

我想它涉及到 Account.id 和 AccountTag.id 的加入或类似的东西,但是尽管进行了一些真正的研究,但我不确定如何最好地解决这个问题。

提前致谢!

更新:我想我可以从 AccountTag 中进行选择,然后根据 ItemId 获取帐户对象,但理想的情况是对 Account 进行查询,标签只是条件的一部分。

0 投票
1 回答
554 浏览

salesforce - 我使用 SELECT 查询从 Salesforce.com 下载联系人。如下所示,我收到“MALFORMED_QUERY”异常

我使用了这个选择查询,但我没有明白这有什么问题。

选择 Id、Contact.FirstName、Contact.LastName、Contact.Title、Contact.Department、Contact.Birthdate、Contact.Phone、Contact.HomePhone、Contact.MobilePhone、Contact.OtherPhone、Contact.Fax、Contact.Email、Contact.MailingStreet , Contact.MailingCity,Contact.MailingState,Contact.MailingCountry,Contact.MailingPostalCode,Contact.OtherStreet,Contact.OtherCity,Contact.OtherState,Contact.OtherCountry,Contact.OtherPostalCode,Contact.Description,Contact.Account.Name 来自联系人哪里 strcmp ('%@',Id) = -1",lastcontactId

0 投票
3 回答
4336 浏览

salesforce - 如何从 SOQL 中的 force.com 数据库请求单个随机行?

总行数在 10k-100k 行范围内。我可以在 force.com 上使用 RAND() 吗?不幸的是,尽管所有行都有一个唯一的数字标识符,但还是有很多空白,而且我经常想从过滤的子集中选择一个随机行。

我怀疑没有特别有效的方法可以做到这一点,但有可能吗?

最终,我要做的就是随机从表(或基于特定过滤条件的子集)中提取一行。

如果 force.com 不允许我选择随机行,那么我可以查询要从中选择的行,并为所有行分配顺序 ID,例如 1-1,035,然后在本地选择该范围内的随机数,例如349,然后得到第 349 行?

0 投票
2 回答
9076 浏览

salesforce - Salesforce/SOQL - 给定孩子,如何返回“顶级”父帐户?

我有一个问题,我需要为孩子找到顶级家长帐户。我能做的最好的就是从孩子身上过滤掉

然后遍历,直到找到一个 null parent.id 指示顶级帐户。不是很优雅,也不能保证“顶级”帐户,我更喜欢类似的东西

但这不起作用,因为销售人员显然不允许您在帐户之间遍历父子关系。有人在这里有什么建议吗?

0 投票
5 回答
17799 浏览

.net - Salesforce SOQL 查询站点的“注释和附件”

基本上,我需要一个单一的 SOQL 查询,可以使用 Web 服务 API 执行,它将返回所有 NoteAndAttachment 项目,这些项目通常会显示在 Salesforce Web UI 中帐户页面的“备注和附件”部分中。这不仅包括附加到帐户本身的 N&A,还包括附加到与帐户相关的任何案例、机会或联系人的 N&A。Salesforce 本身获取这些信息似乎没有问题,但是在 SOQL 的限制和数据模型的限制之间,我还没有找到令人满意的解决方案。

这是我到目前为止所拥有的:

{0} 用于 .NET String.Format;这将是我要为其提取记录的帐户 ID。此特定查询失败,但出现以下异常:

这些都是基本的、系统定义的关系,它也不识别单数的“联系人”,所以我很茫然。

其他解决方案涉及半连接子选择(有两个限制,您不能将它们与“OR”组合,所以没有骰子),嵌套子查询(不能)等。我真的很机智以这种查询语言的限制结束;没有UNION,子查询有限,子查询深度有限,无法直接查询NoteAndAttachment实体。必须有一种方法来获取这些记录,就像它们在网站上显示的方式一样,但我每时每刻都感到沮丧。

编辑:我现在的答案是查询每个包含对象类型(帐户、联系人、机会)的 NotesAndAttachments 属性,并从案例中提取附件并将​​它们投影为 NotesAndAttachments 以获得我需要的信息。这个过程需要四次往返,5 条记录的摘要信息(没有注释正文或文件二进制文件)平均需要大约 15 秒。我能够将数据检索推送到异步线程,从而减少检索时间,但性能可能仍然不能令人满意。我将继续研究性能更高的东西,但现在我已经让它工作了。

0 投票
7 回答
54905 浏览

salesforce - SOQL 查询 WHERE 日期 = 30_days_ago?

如何进行这样的 SOQL 查询?

这会产生一个错误:

0 投票
1 回答
3306 浏览

sql - 在 SQL/SOQL 中使用“'”作为名称的一部分的名称查询

我需要编写一个 soql/sql 查询,该查询需要查找其中包含撇号的名称,例如 shaquel o'Neil。问题是 where 子句会添加 Neil 部分,因为这被认为是搜索条件的结尾。

任何建议如何处理这种情况?

谢谢!