SOQL unirse consulta devuelve sObject pero no campos. Cómo utilizar el ID obtenido?
-
08-10-2019 - |
Pregunta
Tengo SOQL abajo y me sale el resultado que contiene el ID de sObject.
Mi suposición era la consulta devolverá los campos de SObject también.
Por ejemplo, mi consulta tratar de conseguir "startDay__c
" (La fecha), que es como campo de ShigotoShousai sobject. Pero resultado de la consulta es sólo ID de la instancia sObject.
( principal : ShigotoShousai
niño : ShigotoAssign
)
sObject[] result = [
SELECT
ShigotoShousai__r.id,
ShigotoShousai__r.startDay__c
FROM ShigotoAssign__c
];
system.debug (resultado) de salida
shigotoAssign_ c: {Id = a06500000067aNjAAI, ShigotoShousai _c = a055000000DlHnOAAV}, shigotoAssign_ c: {Id = a06500000067aNoAAI, ShigotoShousai _c = a055000000DlHnTAAV})
Tengo Identificación de ShigotoShousai__c sObject en lugar de su "startDay__c
" propiedad.
Pensé salida sería algo como:
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnOAAV, startDay__c=2010-10-10},
shigotoAssign__c:{ShigotoShousai__c=a055000000DlHnTAAV, startDay__c=2010-10-13})
Sin embargo, resultado de la consulta sólo me volvió Identificación de ShigotoShousai__c sobject: (
Ahora sé que tienen un valor de ID ShigotoShousai__c
y quiere acceder a su campo por lo que hizo después.
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);
Y esto me da error:
System.TypeException: Invalid conversion from runtime
type Id to SOBJECT:shigotoShousai__c
A continuación, pensé que ID no se puede utilizar para referirse a SObject (es decir ShigotoShousai__c).
Pero tengo su identificador .. ¿Cómo puedo acceder, por ejemplo startDay__c
? ¿Hay una manera de utilizar este ID?
Solución
El problema es que se está asignando el resultado de la consulta a la SOQL Sobject genérica [], que no tiene ningún campos concretos de su propia, a excepción de identificación. Mientras que no estamos tratando de hacer nada de fantasía con SOQL dinámico, intentar algo como esto:
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);
}
Otros consejos
También sólo quieren compartir la información de mi, ya que está relacionada con la cuestión. Es de esperar que alguien encuentre útil esta información.
A continuación consulta implica padre, hijo, nieto y yo ápice utilizado para llegar a cada uno de los valores. Ahora puedo mostrar dichos valores en la página 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);