TypeError: Невозможно прочитать свойство 'getValue' со значением null в welcomeAlert - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в CRM.Мне нужно просто на событии OnLoad на странице показать предупреждение JavaScript: «Добро пожаловать,« Имя учетной записи »».Это мой простой код:

function welcomeAlert()
{
  var userName = Xrm.Page.getAttribute("name").getValue();
  if(userName !== null)
  {
    alert("Welcome " + userName + "!");
  }
}

Но я получаю сообщение об ошибке onLoad: TypeError: Невозможно прочитать свойство 'getValue' со значением null в welcomeAlert.

Если мой код выглядит как код нижевсе отлично работает.

function welcomeAlert()
{
    alert("Welcome ");
}

Кто-нибудь может помочь?Может быть, имя атрибута не в порядке.Но я не знаю, как это проверить.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019
  1. Проверьте атрибут name, чтобы убедиться, что он имеет вид
  2. Если поле является пользовательским атрибутом, то оно будет иметь префикс имени издателя ex.new_name
  3. Если поле добавляется в разделах верхнего / нижнего колонтитула или на этапах BPF, оно будет переименовано в header_name
  4. Проверьте, скрыто или добавлено несколько раз в форме и использованииПанель инструментов браузера разработчика для проверки DOM
  5. Вы можете проверить как if(formContext.getAttribute("name") != null перед доступом к getValue()
0 голосов
/ 22 февраля 2019

Я решил свою проблему!Я прочитал это на docs.microsoft, поэтому я подумал, что атрибут для имени учетной записи - «имя».var nameValue = Xrm.Page.getAttribute("name").getValue(); Назначает значение поля «Имя учетной записи» переменной nameValue.

Правильный атрибут для имени учетной записи - "parentcustomerid".Этот код работает для меня.

    function welcomeAlert() 
     { 
       var userName = Xrm.Page.getAttribute("parentcustomerid").getValue()[0].name; 
       if(userName !== null) 
       { 
         alert("Welcome " + userName + "!"); 
       } 

     }

Спасибо всем за ответ.

0 голосов
/ 22 февраля 2019

В зависимости от вашей версии CRM, Xrm.Page может быть устаревшим.Обратитесь к странице устаревания

. Правильный способ сделать это - использовать объект executionContext, который является параметром, который может быть передан в ваши методы CRM.Microsoft предоставляет пример того, как это сделать здесь , но выполните следующие шаги:

  1. Обновите свой метод, включив в него новый параметр: например, function welcomeAlert(executionContext)
  2. Используйте executionContext для получения formContext: например, var formContext = executionContext.getFormContext()
  3. Используйте formContext вместо Xrm.Page: например, var userName = formContext.getAttribute("name").getValue();
  4. Когда вы регистрируете эту функцию в CRM, вам нужно обязательно проверить контекст выполнения Pass в качестве первого параметра , в противном случае CRM не будет передавать executeContext вашей функции

Собирая все это вместе, ваш метод должен выглядетькак это:

function welcomeAlert(executionContext)
{
  var formContext = executionContext.getFormContext();
  var userName = formContext.getAttribute("name").getValue();
  if(userName !== null)
  {
    alert("Welcome " + userName + "!");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...