TypeError:在welcomeAlert处无法读取null的属性“ getValue”

时间:2019-02-21 20:46:09

标签: javascript dynamics-crm

我是CRM的新手。 我只需要在页面的OnLoad事件上显示一个JavaScript警报消息:“ Welcome'Account Name'”。 这是我的简单代码:

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

但是我在onLoad上收到错误消息:TypeError:在welcomeAlert处无法读取null的属性'getValue'。

如果我的代码看起来像下面的代码,则一切正常。

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

有人可以帮忙吗?也许属性名称不正确。但是我不知道如何检查。

3 个答案:

答案 0 :(得分:0)

根据您的CRM版本,Xrm.Page可能已被弃用。请参阅deprecation page

执行此操作的正确方法是使用executionContext对象,该对象可以由CRM传递给您的方法。 Microsoft提供了一个有关如何进行此操作的示例here,但步骤如下:

  1. 更新您的方法以包括一个新参数:例如function welcomeAlert(executionContext)
  2. 使用executionContext来检索formContext:例如var formContext = executionContext.getFormContext()
  3. 使用formContext代替Xrm.Page:例如var userName = formContext.getAttribute("name").getValue();
  4. 在CRM中注册此功能时,需要确保选中将执行上下文作为第一个参数选项,否则CRM不会将执行上下文传递给您的函数

将它们放在一起,您的方法应如下所示:

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

答案 1 :(得分:0)

  1. 验证属性name,以确保其格式
  2. 如果该字段是自定义属性,则它将具有发布者名称前缀ex。 new_name
  3. 如果将该字段添加到页眉/页脚节或BPF阶段中,则它将重命名为header_name
  4. 检查它是否在表单中被隐藏或添加了多次,并使用浏览器开发者工具栏检查DOM
  5. 您可以在访问if(formContext.getAttribute("name") != null之前像getValue()一样进行验证

答案 2 :(得分:0)

我解决了我的问题! 我在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 + "!"); 
       } 

     }

谢谢大家的回复。