Salesforce SOQL Как настроить таргетинг на идентификатор из другой таблицы? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь выяснить , как выполнить конкретный запрос , но я ограничен моими знаниями.Так что любая помощь будет высоко ценится.

У меня есть несколько объектов: Сотрудник, назначение роли сотрудника, группа студентов и т. Д.

Я пытаюсь сделать следующее:

Внутри каждогоПерсональная страница сотрудника, создайте таблицу, содержащую информацию о студентах, которые выбрали группу студентов, назначенную конкретному сотруднику.Отношения между объектами: назначение сотрудника роли сотрудника (один ко многим), назначение роли сотрудника группе учеников (многие к одному).Каждому сотруднику назначается много ролей, а каждой роли назначается группа студентов.

То, что я пытаюсь сделать, выглядит примерно так:

SELECT Opportunity__r.Name, Opportunity__r.Email__c, Opportunity__r.Phone__c, Opportunity__r.Parent_Guardian_Email__c, Student_group__r.Name, Opportunity__r.Personal_Statement__c FROM Content__c WHERE Student_group_r.Employee_role_assignment__r.Employee__r.Id = :id

Последняя часть, после ГДЕ, это то, что я застрял.Есть ли способ передать идентификатор?

1 Ответ

0 голосов
/ 28 мая 2019

В терминологии Salesforce назначение роли сотрудника - это объект соединения .

. Здесь вы добавляете несколько дополнительных объектов, которые усложняют задачу.Похоже, у вас есть отношение поиска от Content__c до Opportunity, а также от Content__c до Student_Group__c, и большая часть данных, которые вы хотите, фактически находится в Opportunity.Content__c здесь напоминает второй соединительный объект.

Вы хотите отфильтровать свои Возможности на основе того, связаны ли они с Контентом, связанным с Группой учащихся, связанной с Сотрудником, чья страница это,Вот так.

Если я правильно понял вашу модель данных, вы можете добиться этого с помощью полусоединения.Это будет выглядеть примерно так:

List<Content__c> results = [
    SELECT Opportunity__r.Name, Opportunity__r.Email__c, Opportunity__r.Phone__c ...
    FROM Content__c
    WHERE Student_Group__c IN (
        SELECT Student_Group__c 
        FROM Employee_Role_Assignment__c 
        WHERE Employee__c = :thisEmployeeId
    )
];

Привязка Apex с : во внутреннем предложении WHERE - это то, что вводит идентификатор запроса Employee, хранящийся в некоторой локальной переменной, в запрос.

...