SOQL Присоединение к запросу возвращает SOBJECT, но не поля. Как использовать полученный идентификатор?
-
08-10-2019 - |
Вопрос
У меня SOQL ниже, и я получаю результат, который содержит идентификатор SOBJECT. Мое предположение было запрос, также вернет поля SOBJECT. Например, мой запрос пытается получитьstartDay__c
«(Дата), которая похожа на поле Shigotoshousai SOBJECT. Но результат запроса - это просто идентификатор экземпляра профита.
(родитель: ShigotoShousai
ребенок: ShigotoAssign
)
sObject[] result = [
SELECT
ShigotoShousai__r.id,
ShigotoShousai__r.startDay__c
FROM ShigotoAssign__c
];
System.debug (Результат) Выход
Shigotoassign_C: {ID = A06500000067ANJAAI, Шиготошоусай_c = a055000000dlhnoaav}, Shigotoassign_C: {ID = A06500000067anoaai, Shigotoshousai_c = a055000000dlhntaav})
Я получил удостоверение личности Shigotoshousai__c SObject вместо его собственности "startDay__c
«. Я думал, что вывод будет чем-то вроде:
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnOAAV, startDay__c=2010-10-10},
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnTAAV, startDay__c=2010-10-13})
Но результат запроса только что вернул меня идентификатор SHIGOTOSHUSAI__C SOBJECT :(
Теперь я знаю, что есть идентификационная стоимость ShigotoShousai__c
И хочу получить доступ к своей области, поэтому я выполнил.
ShigotoShousai__c foo = (ShigotoShousai__c)result[0].get('ShigotoShousai__c');
//now I assume I can access to some fields like below
system.debug(foo.workDate);
И это дает мне ошибку:
System.TypeException: Invalid conversion from runtime
type Id to SOBJECT:shigotoShousai__c
Затем я подумал, что идентификатор не может быть использован для ссылки на SOBJECT (т.е. Shigotoshousai__c).
Но у меня есть свой идентификатор .. Как я могу получить доступ, сказать startDay__c
? Есть ли способ использовать этот идентификатор?
Решение
Проблема в том, что вы присваиваете результат запроса SOQL к универсальному объему SOBJECT [], у которых нет собственных конкретных полей, кроме удостоверения личности. Пока вы не пытаетесь сделать что-нибудь фантазия с динамическим SOQL, попробуйте что-то вроде этого:
ShigotoAssign__c[] result = [
SELECT
ShigotoShousai__r.id,
ShigotoShousai__r.startDay__c
FROM ShigotoAssign__c
];
for(ShigotoAssign__c s : result) {
System.debug(s.ShigotoShousai__r.startDay__c);
}
Другие советы
Также просто хочу поделиться моей информацией, поскольку она связана с вопросом. Надеюсь, кто-то найдет это полезное.
Ниже запрос предполагает родитель, ребенок, внук, и я использовал вершину для достижения каждых значений. Теперь я могу отобразить те значение на странице VisualForce :)
//WORK
public String workName { get; set; }
public String workContent { get; set; }
public String workCategory { get; set; }
public String workSponsor { get; set; }
//WORK DETAIL
public String workDetailStartDay { get; set; }
public String workDetailStartHour { get; set; }
public String workDetailStartMin { get; set; }
public String workDetailEndDay { get; set; }
public String workDetailEndHour { get; set; }
public String workDetailEndMin { get; set; }
public String workDetailCategory { get; set; }
public String workDetailDivision { get; set; }
//WORK ASSIGN
ShigotoAssign__c[] result = [
SELECT
ShigotoShousai__r.Shigoto__r.name,
ShigotoShousai__r.Shigoto__r.workContent__c,
ShigotoShousai__r.Shigoto__r.category__c,
ShigotoShousai__r.Shigoto__r.sponsor__c,
ShigotoShousai__r.id, ShigotoShousai__r.startDay__c, ShigotoShousai__r.startHour__c,
ShigotoShousai__r.startMin__c,
ShigotoShousai__r.endDay__c, ShigotoShousai__r.endHour__c, ShigotoShousai__r.endMin__c,
ShigotoShousai__r.workCategory__c, ShigotoShousai__r.workDivision__c,
ShigotoShousai__r.address__c,
id, contactStat__c
FROM ShigotoAssign__c
WHERE id = :workAssigned.id
];
//get WORK info to show on email template page
workName = result[0].ShigotoShousai__r.Shigoto__r.name;
workContent = result[0].ShigotoShousai__r.Shigoto__r.workContent__c;
workSponsor = result[0].ShigotoShousai__r.Shigoto__r.sponsor__c;
//get WORK DETAIL info to show on email template page
workDetailStartDay = String.valueOf(result[0].ShigotoShousai__r.startDay__c);