如何在用户单击功能区按钮时将数据导入CRM Dynamics 2013

How to import data into CRM Dynamics 2013 when user clicks a ribbon button

本文关键字:数据 导入 CRM 2013 Dynamics 按钮 用户 单击 功能区      更新时间:2023-09-26

我有一个场景,我需要将excel电子表格中的一些数据导入CRM Dynamics,用户会单击上传功能区按钮,然后数据必须导入。有问题,我知道CRM中的数据导入,这就是我想要构建的,我的问题是如何构建它,以便功能区触发导入,我是否构建一个WCF服务来进行导入,然后在ribbon中的JavaScript上调用它,这可能吗?还是作为windows服务?请提供更好的方法。WCF服务可以使用JavaScript或Windows服务从CRM功能区按钮触发吗。

很抱歉有假答案,但这是我第一次使用SO:)。我最近也完成了同样的解决方案。我用ODS解析器和编写器解析Excel数据,然后用XRMServiceTolkit更新记录。它完全是客户端解决方案。您不需要构建任何WCF服务或其他东西。

这是我的样品:

  1. 将Excel文件传递到对话框中;

  2. 传递Excel文件后,需要将其数据转换为BinaryString。对于跨浏览器支持(因此readAsBinaryString是不复杂的):

    function toBinaryString(buffer) {
        var binary = '';
        var bytes = new Uint8Array(buffer);
        var length = bytes.byteLength;
        for (var i = 0; i < length; i++) {
            binary += String.fromCharCode(bytes[i]);
        }
        return binary;
     }
    
  3. 和解析器调用函数(使用ODS解析器):

    function handleFile(inputFile) {
        var files = inputFile.files;
        var i, f;
        for (i = 0, f = files[i]; i != files.length; ++i) {
           var reader = new FileReader();
           var name = f.name;
           reader.onload = function (e) {
               var resultLog = "";
               var data = toBinaryString(e.target.result);
               var workbook = XLSX.read(data, { type: 'binary' });
               if (workbook.Sheets.hasOwnProperty("List")) {
                   var str = workbook.Sheets["List"];
                   var rowsCount = parseInt(str["!ref"].substring(str["!ref"].indexOf(":") + 2));
                   for (var i = 2; i <= rowsCount; i++) {
                       var rowNum = i;
                       var aoName = str.hasOwnProperty("A" + i.toString()) ? str["A" + i.toString()].v : "-";
                       var aoOp = str.hasOwnProperty("B" + i.toString()) ? str["B" + i.toString()].v : "-";
                       var aoSig = str.hasOwnProperty("C" + i.toString()) ? str["C" + i.toString()].v : "-";
                       var aoStatus = str.hasOwnProperty("D" + i.toString()) ? str["D" + i.toString()].v : "-";
                       var aoComment = str.hasOwnProperty("E" + i.toString()) ? str["E" + i.toString()].v : "-";
                       var validateResult = valdateData(rowNum, aoName, aoOp, aoSig, aoStatus, aoComment);
                       resultLog += validateResult ? validateResult : submitRecord(rowNum, aoName, aoOp, aoSig, aoStatus, aoComment);
            }
        }
    };
    reader.readAsArrayBuffer(f);
    

    }}