Проблема с iframe: Salesforce не получает родительский объект во вложенном запросе SOQL

СИТУАЦИЯ. Привет, у меня есть запрос, который хорошо работает и соответствует ожиданиям только на странице vf salesforce.

ПРОБЛЕМА Он возвращает результат без родительского объекта при вызове из iframe.

Код на вершине:

public class showServiceHistory {
CKSW_BASE__Service__c services;
String id = ApexPages.currentPage().getParameters().get('id');
String x;
public myValues()
{
    services = [SELECT id, name, (SELECT Name, Previous_Status__c, New_Status__c, Reason_Code__c, comment__c FROM Service_Status_History__r) FROM CKSW_BASE__Service__c WHERE id=:id];           
}
public String getxx()
{
    x=JSON.Serialize(services);
    return x;   
}
}

Код в VF

< apex:page controller="myValues" >

< apex:pageBlock title="{!xx}" >

< /apex:pageBlock >

< /apex:page >

Вывод из Salesforce

{"attributes":{"type":"CKSW_BASE__Service__c","url":"/services/data/v38.0/sobjects/CKSW_BASE__Service__c/sss"},"Id":"s","Name":"S","Service_Status_History__r":{"totalSize":6,"done":true,"records":[{"attributes":{"type":"Service_Status_History__c","url":"/services/data/v38.0/sobjects/Service_Status_History__c/ss"},"Service__c":"asss","Id":"uu","Name":"yyy","Previous_Status__c":"xyz","New_Status__c":"y","Reason_Code__c":"xyz","Comment__c":"abc"}]}

А также

Вывод из iframe

{"attributes": {"type": "CKSW_BASE__Service__c", "url": "/ services / data / v38.0 / sobjects / CKSW_BASE__Service__c / 444"}, "Id": "444", "Name": "xyz "}

На странице Vf я получаю желаемый результат с полным значением, но из iframe в моем URL-адресе force.com родительский объект (вложенный запрос) недоступен.

Однако, когда я вызываю только родительский элемент с помощью простого специального запроса, он возвращает значение в обоих (iframe и url) места.

ПОЧЕМУ МОЙ ВЛОЖЕННЫЙ SOQL НЕ МОЖЕТ ПОЛУЧИТЬ РОДИТЕЛЬСКИЙ ОБЪЕКТ. ЧТО Я НЕ МОГУ ЗДЕСЬ ??

Заранее спасибо. Пожалуйста помоги.

Вывод из Iframe


person Abhinav Ankur    schedule 28.11.2016    source источник


Ответы (2)


Вы проверили свой ДУТ?

Сборка -> Разработка -> Сайты -> -> Настройки общего доступа

В большинстве случаев это является виновником исхода Force.com.

person Riyaz Mohamed    schedule 29.11.2016

Да, я уже проверял, предоставлен публичный доступ. И даже я могу их видеть при конвертировании и печати в формате JSON. Но я не вижу их в iframe, если они напечатаны с формой объекта синтаксического анализа.

Следовательно, это сработало для меня, отправив значения в строковом формате Json и проанализировав их там.

На странице Vf

<apex:page Controller="showServiceHistory" sidebar="false" showheader="false">
<html>
    <head>
    <!--<meta http-equiv="refresh" content="20" ></meta> -->

</head>
<a id="history_data" style="display:none;">{!history}</a>
<a id="service_data" style="display:none">{!service}</a>
<style>
    table {
        width: 100%;
    }

    table,
    th,
    td {
        border-collapse: collapse;
        color: #3088D0;
    }

    th,
    td {
        padding: 5px;
        text-align: left;
        color: #1F497D;
    }

    tr {
        //color: #337AB7;
    }

    table#t01 tr:nth-child(even) {
        background-color: #DCE6F1;
        //color: #337AB7;
    }

    table#t01 tr:nth-child(odd) {
        background-color: #fff;
    }

    table#t01 th {
        background-color: #B8CCE4;
        //color: #000015;
    }

    a:link {
        color: #62B3E2;
    }

    a:visited {
        color: #62B3E2;
    }
</style>


<table id="t01">
    <thead>
        <tr>
            <th>
                Name
            </th>

            <th>
                Previous Status
            </th>
            <th>
                New Status
            </th>
            <th>
                Comment
            </th>
        </tr>
    </thead>
    <tbody id="show_values">
    </tbody>

</table>
<script>
    function x()
    {
    var history={}; var service={};
    history=JSON.parse(document.getElementById("history_data").innerHTML); 
    service=JSON.parse(document.getElementById("service_data").innerHTML); 
    var show='';
        for(var i=0;i<history.length;i++)
        {
           show=show+'<tr><td>'+history[i].Name+'</td><td>'+history[i].Previous_Status__c+'</td><td>'+history[i].New_Status__c+'</td><td>'+history[i].Comment__c+'</td><td>'+service.CKSW_BASE__Location__c+'</td></tr>';
        }
            document.getElementById("show_values").innerHTML=document.getElementById("show_values").innerHTML+show;
    }
    x();
</script>
</html>

In apex code page

public class showServiceHistory {
List<Service_Status_History__c> histories;
String x;
CKSW_BASE__Service__c services;
String id = ApexPages.currentPage().getParameters().get('id');
 public showServiceHistory()
{
    services = [SELECT CKSW_BASE__Resource__c, CKSW_BASE__Location__c, (SELECT Name, Previous_Status__c, New_Status__c, comment__c FROM Service_Status_History__r) FROM CKSW_BASE__Service__c WHERE id=:id];         
    histories = services.Service_Status_History__r;
}
public String getService()
{
    return JSON.Serialize(services);   
}
public String getHistory()
{
    return JSON.Serialize(histories);
}

}

person Abhinav Ankur    schedule 01.12.2016