SOQL beitreten Abfrage gibt SObject aber keine Felder. Wie die erhaltene ID benutzen?
-
08-10-2019 - |
Frage
Ich habe SOQL unten und ich bekomme das Ergebnis, das SObject der ID enthält.
Meine Vermutung war die Abfrage als auch die Bereiche SObject zurück.
Zum Beispiel meiner Abfrage versuchen „startDay__c
“ (das Datum), die wie Feld ShigotoShousai SObject ist zu bekommen. Aber Ergebnis der Abfrage ist nur ID der SObject Instanz.
( Eltern : ShigotoShousai
Kind : ShigotoAssign
)
sObject[] result = [
SELECT
ShigotoShousai__r.id,
ShigotoShousai__r.startDay__c
FROM ShigotoAssign__c
];
system.debug (Ergebnis) Ausgang
shigotoAssign_ c: {Id = a06500000067aNjAAI, ShigotoShousai _c = a055000000DlHnOAAV}, shigotoAssign_ c: {Id = a06500000067aNoAAI, ShigotoShousai _c = a055000000DlHnTAAV})
habe ich ID von ShigotoShousai__c SObject statt dessen Eigenschaft "startDay__c
".
Ich dachte, Ausgang wäre so etwas wie:
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnOAAV, startDay__c=2010-10-10},
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnTAAV, startDay__c=2010-10-13})
Aber Abfrageergebnis zurückgegeben mich gerade ID von ShigotoShousai__c SObject: (
Jetzt weiß ich, ID-Wert von ShigotoShousai__c
haben und wollen ihre Feld zuzugreifen, so habe ich folgende.
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);
Und das gibt mir eine Fehlermeldung:
System.TypeException: Invalid conversion from runtime
type Id to SOBJECT:shigotoShousai__c
Dann dachte ich, dass ID kann nicht auf SObject (das heißt ShigotoShousai__c) beziehen verwendet werden.
Aber ich seine ID haben .. Wie kann ich, sagen startDay__c
? Gibt es eine Möglichkeit, diese ID zu benutzen?
Lösung
Das Problem ist, dass Sie das SOQL Abfrageergebnis zu dem generischen SObject zuweisen [], die keine konkreten haben Felder der eigenen, mit Ausnahme von Id. Solange Sie nicht so etwas zu tun, etwas Phantasie mit dynamischen SOQL, versuchen Sie versuchen:
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);
}
Andere Tipps
Auch will nur meine Informationen zu teilen, da es auf die Frage bezogen ist. Hoffentlich jemand findet diese Informationen hilfreich.
Unter Abfrage beinhaltet Eltern, Kinder, Enkel und ich Spitze jeweils Werte zu erreichen. Nun kann ich diesen Wert auf Visual Seite angezeigt werden:)
//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);