У меня есть массив этого класса

  global with sharing class JiraTimeLog {
    public Long worklogId;
    public String jiraIssue;
    public String milestone;
    public String resource;
    public Date dateWorked;
    public Decimal hours;
    public String notes;
  }

Что я заселил. Теперь я хотел бы найти записи в sObject, которые находятся в списке объектов, используя определенные поля.

Похоже, мне нужно сделать это так...

@HttpPost
  global static void load(JiraTimeLog[] jiraTimeLogs) {
  List<String> workLogIds = new List<String>();
  List<String> resourceNames = new List<String>();

  for(JiraTimeLog jiraTimeLog: jiraTimeLogs) {
    workLogIds.add(jiraTimeLog.worklogId);
    resourceNames.add(jiraTimeLog.resource);
  }

  List<Timecard__c> timecards = [SELECT Id,<many other fields> FROM Timecard__c WHERE Time_Log__c IN :workLogIds];
  List<Contact> resources = [SELECT Id FROM Contact WHERE Name IN :resourceNames];

// Then loop through jiraTimeLogs a second time to use the data in timecards and resources

Выглядит правильно?

1
nstuyvesant 29 Сен 2020 в 01:12

1 ответ

Лучший ответ

Нет, этот тип синтаксиса поддерживается только для sObjects:

Account[] accounts = [SELECT Id FROM Account];
Contact[] contacts = [SELECT Id FROM Contact WHERE Id = :accounts];

Да и то, как вы уже догадались, поддерживает только поле Id. Для пользовательских классов (тех, которые мы создаем сами) вам нужно извлечь значения в новый список с помощью кода, а затем вместо этого привязаться к нему.

1
sfdcfox 29 Сен 2020 в 00:41
Спасибо за ответ. Есть ли простой способ создать список из другого списка, например: List foo = jiraTimeLogs.foo, или мне просто нужно выполнить цикл, чтобы сделать это?
 – 
nstuyvesant
29 Сен 2020 в 00:45
1
Вам нужно будет пройти через это @nstuyvesant
 – 
nbrown
29 Сен 2020 в 01:03
Спасибо @sfdcfox.
 – 
nstuyvesant
29 Сен 2020 в 01:23