2012-06-13 3 views
0

Я смотрю на сокрытие электронной почты на странице руководства.Скрыть электронную почту на странице макета страницы в Salesforce

Я включаю его в раздел, уже имеющий страницу visualforce, но PageLayout не обнаруживает это и все еще требует, чтобы он находился на макете.

Есть ли способ удалить его из PageLayout?

Я прочитал, что вы можете редактировать подборку, но не нашли твердых примеров этого. Я также читал о доступности уровня поля, но я не думаю, что это путь, потому что все являются частью одной и той же роли, и я исключаю только детали, если вы являетесь владельцем. Я также попробовал javascript, но так как моя страница visualforce загружается в iframe, я не могу получить доступ к родительскому документу iframe, чтобы иметь возможность скрывать или удалять значение из электронной почты при просмотре не как владелец.

Любые мысли будут оценены.

ответ

1

Попробуйте спрятать поле с JavaScript, сохраненным в пользовательской кнопке. В JavaScript-клике для кнопки вы можете включить код, который будет запущен при загрузке страницы с помощью jQuery, который скрывает поле электронной почты. Затем вы можете скрыть фактическую кнопку. Очень подходит подход, но он должен работать.

Вот код, который можно ввести в кнопку «Нажатие кнопки» (изменен с Daniel Llewellyn's blog post и mgsmith's force2b blog post). Надеюсь, это должно заставить вас начать прыжок. Я не включил какой-либо код о том, как скрыть поле электронной почты, но вы сказали, что уже пытаетесь выполнить его на своей странице Visualforce, поэтому я решил, что оставлю эту часть вам. Ура!

var interval; 
//The main function that does all the work 
function appendScript() { 
    // Include core jQuery library by injecting it into the DOM 
    var script= document.createElement('script'); 
    script.type= 'text/javascript'; 
    script.src= 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'; 
    head.appendChild(script); 

    // It takes a second to load, so put in a delay 
    // (we don't want to try and reference the script 
    // before it is actually loaded, so we store the interval 
    // in a global variable, and set up an interval. 
    // this interval dealio. This will keep running 
    // until jQuery has been found to be loaded and then 
    //clears the interval so it doesn't keep running. 

    interval=self.setInterval(function(){ 

     //Check to see if jQuery has loaded       
     if(jQuery) { 
      //if jQuery has loaded, clear the interval 
      window.clearInterval(interval); 

      // Hide the Email field 

      // Hide the custom button 
      var btnName = 'buttonName'; 
      try{ 
       var buttons = parent.document.getElementsByName(btnName); 
       for (var i=0; i < buttons.length; i++) { 
        buttons[i].className="btnDisabled "; 
        buttons[i].disabled=true; 
        buttons[i].type='hidden'; 
       } 
      } catch(e) { 
       // var ee = e.message || 0; alert('Error: \n\n'+e+'\n'+ee); 
      } 
     } 
    }, 300);  
} 

appendScript(); 
+0

В конце концов я закончил совершенно другой маршрут из-за большего количества осложнений, но ваш ответ все равно работал бы. Я закончил создание пользовательских представлений и загрузил данные на основе предоставленного состояния, поэтому я больше не использую pagelayout. – Gram