【问题标题】:Dynamics CRM 2016 Javascript forEach not supported不支持 Dynamics CRM 2016 Javascript forEach
【发布时间】:2017-08-25 22:28:59
【问题描述】:

因此,我正在尝试为 Dynamics CRM 2016 中的功能区按钮编写 JavaScript 代码,该代码将从活动潜在客户窗口中可以看到的潜在客户列表中获取电话号码。

但是,当我尝试运行它时,我收到一个错误提示

当我进入我的代码时(我正在调试),我看到了这个错误

这是我正在使用的代码。

   function updateSelected(SelectedControlSelectedItemIds, SelectedEntityTypeName) {
            // this should iterate through the list
            SelectedControlSelectedItemIds.forEach(
           function (selected, index) {
               //this should get the id and name of the selected lead 
               getPhoneNumber(selected, SelectedEntityTypeName);
           });

   }
    //I should have the lead ID and Name here, but it is returning null 
    function getPhoneNumber(id, entityName) {
       var query = "telephone1";
       Sdk.WebApi.retrieveRecord(id, entityName, query, "",
       function (result) {
           var telephone1 = result.telephone1;
           // I'm trying to capture the number and display it via alert.
          alert(telephone1);
       },
       function (error) {
           alert(error);
       })
    }

感谢任何帮助。

【问题讨论】:

  • 您确定没有在 Ribbon Workbench 中混淆参数吗?我认为您只是选择了实体名称作为第一个参数,并选择了 ids 作为第二个参数。应该很容易调试——SelectedControlSelectedItemIds 是什么类型?
  • 我相信 SelectedControlSelectedItemIds 是一个字符串。
  • 如果它是一个字符串,那么你一定是混淆了你的参数
  • 好的,那么工作台中的CRM Parameter顺序应该是:SelectedControlSelectedItedIDs和PrimaryEntityTypeNeame?
  • 您不能简单地调试代码并检查其中的值吗?这确实是编程的基础知识,一点也不难……您提出的问题让我 100% 确信您甚至没有设置一个断点来检查代码中到底发生了什么。

标签: javascript dynamics-crm


【解决方案1】:

您所拥有的是一个 javascript 错误。在 js 中,您只能在数组上使用 forEach。 SelectedControlSelectedItemIds 是一个对象而不是一个数组。

要遍历一个对象,您可以执行以下操作。

for (var key in SelectedControlSelectedItemIds){
    if(SelectedControlSelectedItemIds.hasOwnProperty(key)){
        getPhoneNumber(SelectedControlSelectedItemIds[key], SelectedEntityTypeName)
    }
}

【讨论】:

    【解决方案2】:

    好的,所以我想通了。我得到了帮助,所以我拒绝接受全部功劳。

    首先,我必须下载 SDK.WEBAPI。

    然后,我必须将 webAPI 添加到功能区工具台中的 Javascript 操作中。

    然后,我必须创建一个函数来删除

    周围的括号
    SelectedControlSelectedItemIds
    

    首先,我必须将 API 与 forEach 方法一起使用才能使其工作。

    这些是对我的代码的修订。

    function removeBraces(str) {
        str = str.replace(/[{}]/g, "");
        return str;
    }
    
    
    function updateSelected(SelectedControlSelectedItemIds, SelectedEntityTypeName) {
    
    //alert(SelectedEntityTypeName);
    SelectedControlSelectedItemIds.forEach(
           function (selected, index) {
    
            getPhoneNumber(removeBraces(selected), SelectedEntityTypeName);
        //    alert(selected);
           });
    }
    
    function getPhoneNumber(id, entityName) {
       var query = "telephone1";
       SDK.WEBAPI.retrieveRecord(id, entityName, query, "",
       function (result) {
       var telephone1 = result.telephone1;
       formatted = telephone1.replace(/[- )(]/g,'');
       dialready = "1" + formatted;
       withcolon = dialready.replace(/(.{1})/g,"$1:")
       number = telephone1;      
    
    
        if (Xrm.Page.context.getUserName() == "Jerry Ryback") {
                        url = "http://111.222.333.444/cgi-bin/api-send_key";
                    } else if(Xrm.Page.context.getUserName() == "Frank Jane") { 
                                   url = "http://222.333.444.555/cgi-bin/api-send_key";
                                } 
                       else if( Xrm.Page.context.getUserName() == "Bob Gilfred"){
                                   url = "http://333.444.555.666/cgi-bin/api-send_key";
                                }          
                       else if( Xrm.Page.context.getUserName() == "Cheryl Bradley"){
                                    url = "http://444.555.666.777/cgi-bin/api-send_key";
                                }              
                       else if( Xrm.Page.context.getUserName() == "Bill Dunny"){
                                   url = "http://555.666.777.888/cgi-bin/api-send_key";
                                }
    
    
     if (url != "") {
                        var params = "passcode=admin&keys=" + withcolon + "SEND";
                        var http = new XMLHttpRequest();
    
                        http.open("GET", url + "?" + params, true);
                        http.onreadystatechange = function () {
                            if (http.readyState == 4 && http.status == 200) {
                                alert(http.responseText);
                            }
                        }
                        http.send(null);
                    }
    
    },
       function (error) {
         //  alert(error);
       })
    
    
    }
    

    详细说明,一旦我成功获得号码,我会删除括号、破折号和空格。然后,我在开头添加一个“1”。最后,我在每个数字之间插入冒号。然后,我创建一个 HTTP 命令并将其发送到当时使用 CRM 的任何人的办公室电话。用户 eval 和 HTTP 消息是我的代码。我向您展示所有这些是因为这是一次很棒的学习体验,而且此功能确实增加了功能。

    我希望你们中的一些人觉得这很有用。

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2018-03-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多