【问题标题】:Dynamic query to perform SOQL action not working执行 SOQL 操作的动态查询不起作用
【发布时间】:2021-09-07 15:24:27
【问题描述】:

我正在尝试使用少量参数进行动态 soql 查询,但无法正确执行

string knowledgeQuery = '';
string publishStatusOnline = 'Online';
// At the moment 'Knowledge__kav' only supports two languages 'is-is' and 'en-us'
if(language == 'is-is'){
    language = 'is';
    knowledgeQuery = 'SELECT Id, Customer_Facing_Instruction__c FROM Knowledge__kav WHERE UrlName = :name AND PublishStatus = :publishStatusOnline AND language = :language ORDER BY VersionNumber DESC LIMIT 1';
} else {
    knowledgeQuery = 'SELECT Id, Customer_Facing_Instruction__c FROM Knowledge__kav WHERE UrlName = :name AND PublishStatus = :publishStatusOnline ORDER BY VersionNumber DESC LIMIT 1';
}

System.debug(knowledgeQuery);
Knowledge__kav article = Database.query(knowledgeQuery);
        
return article;

Tke KnowledgeQuery 字符串看起来像这样SELECT Id, Customer_Facing_Instruction__c FROM Knowledge__kav WHERE UrlName = :name AND PublishStatus = :publishStatusOnline ORDER BY VersionNumber DESC LIMIT 1

【问题讨论】:

  • 结果如何? 0 行?抛出异常?不用投吗? Knowledge__kav article = ((List<Knowledge__kav>) Database.query(knowledgeQuery))[0];

标签: salesforce apex soql


【解决方案1】:

检查代码后,因为真的没有什么动态的,我想知道是否需要动态查询。我想您可以通过以下方式实现基本相同的目标:

Knowledge__kav article;
String publishStatusOnline = 'Online';
// At the moment 'Knowledge__kav' only supports two languages 'is-is' and 'en-us'
if(language == 'is-is'){
    language = 'is';
    article = [SELECT Id, Customer_Facing_Instruction__c FROM Knowledge__kav WHERE UrlName = :name AND PublishStatus = :publishStatusOnline AND language = :language ORDER BY VersionNumber DESC LIMIT 1];
} else {
    article = [SELECT Id, Customer_Facing_Instruction__c FROM Knowledge__kav WHERE UrlName = :name AND PublishStatus = :publishStatusOnline ORDER BY VersionNumber DESC LIMIT 1];
}
        
return article;

【讨论】:

  • 知识库中有一些愚蠢的东西(这是 SF 多年前购买的不同产品,它仍然显示,就像只有在那里你可以使用数据类别,“更新 viewstat”等奇怪。它是一般 SOQL 的一部分规范但仅适用于 KB,转到不同的数据库)。您不能在已编译的查询中绑定变量。 developer.salesforce.com/docs/atlas.en-us.knowledge_dev.meta/…
  • 哦,我明白了,很高兴知道!谢谢你。尽管如此,这里使用绑定变量可以很容易地绕过,所以我认为仍然可以使用该方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2013-09-19
  • 2017-05-11
  • 1970-01-01
相关资源
最近更新 更多