【问题标题】:Formatting API data for client side in a Google Script web app在 Google Script Web 应用程序中为客户端格式化 API 数据
【发布时间】:2017-08-31 16:22:22
【问题描述】:

我正在通过 CRM API 提取数据,并成功地在我的 Google Script Web 应用程序的前端呈现该数据。但是为前端操作或格式化这些数据对我来说是一个挑战。

在下面的代码中,第二行的Potential Name 正在向页面呈现正确的数据。但名为Quote 的第一行显示未定义。此数据是我尝试格式化的数据,以便仅将最后六个字符或字符串打印到页面上。

显然,我一定是在尝试错误地从 API 访问数据。有人可以向我提供在 Google Scripts 中处理这些数据的正确方法吗?

代码.gs

function doGet() {
    var templ = HtmlService.createTemplateFromFile('Allied-po');
    templ.data = requestRecordFromCRM();
    return templ.evaluate()
        .setTitle('Purchase Order')
        .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

/*Fetch record data from CRM*/
function requestRecordFromCRM() {
    requestedId = '1234';
    var authToken = 'XXXX';
    var zohoRequestUrl = 'https://crm.zoho.com/crm/private/json/Potentials/getRecordById?&authtoken=' + authToken + '&scope=crmapi&id=' + requestedId;
    var response = UrlFetchApp.fetch(zohoRequestUrl);
    var sanitizedResponse = (response.getContentText());

    /*Sanitize json*/
    var output = JSON.parse(sanitizedResponse);
    Logger.log(output);

    /*Declare the variables you want to print*/
    var parsedOutput = output.response.result.Potentials.row.FL;
    var recordObj = {}

    Logger.log(typeof output)
    Logger.log(output.response.result.Potentials.row.FL.length)

    for (var i = 0; i < output.response.result.Potentials.row.FL.length; i++) {
      if (output.response.result.Potentials.row.FL[i].val == 'Potential Name') {
        recordObj.potentialName = output.response.result.Potentials.row.FL[i].content
      } 
    }

    return (recordObj);
}

Index.html

<html>
    <head>
        <base target="_blank">
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Purchase Order</title>
        <?!= HtmlService.createHtmlOutputFromFile('Stylesheet').getContent(); ?>
    </head>
    <body>
      <div>
         Quote: <span id="job-number"><?= data.potentialName ?></span>
      </div>
      <div>
         Potential Name: <?= data.potentialName ?>
      </div>
        <?!= HtmlService.createHtmlOutputFromFile('Javascript').getContent(); ?>
    </body>
</html>

Javascript.html

    <!-- Load jQuery, jQuery UI, and Bootstrap libraries -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <script>
        //Format Job Numbers - return only last six characters in potentialName string
        (function() {

          var parts = document.getElementById('job-number');
          var selectedPart = parts.split(":");
          var thePart = selectedPart[0];

          return (thePart);
        }());
</script>

【问题讨论】:

    标签: javascript api google-apps-script


    【解决方案1】:

    此特定代码检索 HTML 元素,但不检索 innerHTML 文本

     var parts = document.getElementById('job-number');
    

    改为获取嵌入的 HTML,该 HTML 可用于拆分字符串,如下所示:

    var parts = document.getElementById('job-number').innerHTML;
    

    最终代码将如下所示:

    <script>
            //Format Job Numbers - return only last six characters in potentialName string
       (function() {
          var parts = document.getElementById('job-number');
          var selectedPart = parts.innerHTML.split(":");
          console.log(parts)
          console.log(selectedPart)
          var thePart = selectedPart[1];
          parts.innerHTML = thePart
          return (thePart);
        }());
    
    </script>
    

    关于对象结构的信息有限?这里的假设是 data.potentialName 值中的“:”之前有六个字符。如果你更想要六个字符,你可以这样做:

    var selectedPart = parts.subString(0,6)
    

    希望对您有所帮助!

    【讨论】:

    • 这很有意义,但它仍然没有将字符串的编辑版本打印到页面上。该对象通常看起来是这样的:Company ABC: 123456。我们正在尝试获取最后六个数字。但即使进行了这些更改,它仍在打印完整的字符串,Company ABC: 123456
    • 是的,就是这样!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2014-04-04
    • 1970-01-01
    • 2018-08-21
    • 2011-06-21
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多