Javascript TypeError:无法读取属性';getValue';在welcomeAlert时为空

Javascript TypeError:无法读取属性';getValue';在welcomeAlert时为空,javascript,dynamics-crm,Javascript,Dynamics Crm,我是CRM的新手。 我只需要在页面的OnLoad事件上显示一条JavaScript警报消息:“欢迎‘帐户名’”。 这是我的简单代码: function welcomeAlert() { var userName = Xrm.Page.getAttribute("name").getValue(); if(userName !== null) { alert("Welcome " + userName + "!"); } } 但我在加载时收到错误消息:TypeError:

我是CRM的新手。 我只需要在页面的OnLoad事件上显示一条JavaScript警报消息:“欢迎‘帐户名’”。 这是我的简单代码:

function welcomeAlert()
{
  var userName = Xrm.Page.getAttribute("name").getValue();
  if(userName !== null)
  {
    alert("Welcome " + userName + "!");
  }
}
但我在加载时收到错误消息:TypeError:无法在welcomeAlert读取null的属性“getValue”

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

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

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

根据您的CRM版本,
Xrm.Page
可能会被弃用。指

正确的方法是使用
executionContext
对象,这是一个可以通过CRM传递给方法的参数。Microsoft提供了一个如何执行此操作的示例,但步骤如下:

  • 更新方法以包含新参数:例如
    函数welcomeAlert(executionContext)
  • 使用
    executionContext
    检索
    formContext
    :例如
    var formContext=executionContext.getFormContext()
  • 使用
    formContext
    替代
    Xrm.Page
    :例如
    var userName=formContext.getAttribute(“name”).getValue()
  • 在CRM中注册此函数时,您需要确保选中将执行上下文作为第一个参数传递选项,否则CRM将不会将执行上下文传递给您的函数
  • 综上所述,您的方法应该如下所示:

    function welcomeAlert(executionContext)
    {
      var formContext = executionContext.getFormContext();
      var userName = formContext.getAttribute("name").getValue();
      if(userName !== null)
      {
        alert("Welcome " + userName + "!");
      }
    }
    
  • 验证属性
    name
    ,以确保其在表单中
  • 如果该字段是一个自定义属性,则它将具有出版商名称前缀ex.
    new\u name
  • 如果在页眉/页脚部分或BPF阶段添加该字段,则该字段将被重命名,如
    header\u name
  • 检查它是否在表单中多次隐藏或添加&使用browser developer工具栏检查DOM
  • 在访问
    getValue()
  • 我解决了我的问题! 我是在docs.microsoft上读到的,所以我认为帐户名的属性是“Name”。
    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 + "!"); 
           } 
    
         }
    

    谢谢大家的回复。

    因此getAttribute('name')显然没有返回任何内容。因为我不知道Xrm或Page是什么,所以我无法提供更具体的帮助。打开调试器,在var username行上放置一个断点,并将鼠标悬停在对象上,查看它们具有哪些属性。这可能会有所帮助。“name”是否可能重复字段存在于您的页面中?我创建了所有4个阶段,但这并没有解决问题。得到相同的错误是表单上的
    name
    字段?否。我在docs.microsoft上读到了这一点,所以我认为帐户名的属性是“name”。var nameValue=Xrm.Page.getAttribute(“name”).getValue();将帐户名称字段的值分配给nameValue变量。帐户名称的正确属性是“parentcustomerid”。此代码对我适用。函数welcomeAlert(){var userName=Xrm.Page.getAttribute(“parentcustomerid”).getValue()[0]。Name;if(userName!==null){alert(“欢迎”+userName+“!”);}谢谢你的回复。哦,你不是在
    账户上
    表单上-你是在
    联系人上
    表单上。这现在是有意义的。你自己修好了:)天哪,完全不同的属性。很高兴你解决了。由于您是本网站的新手,当您发布您的问题时,请尝试添加您正在谈论的内容的截图。。因此,问题很容易识别。祝您愉快:)