首页 > 解决方案 > 如何从其他 App Kintone 复制数据?

问题描述

我的要求是——

  1. Create一个带有按钮的应用程序
  2. 单击show data源应用程序的按钮。

我的解决方案是从源 App获取数据并将其发布到主 App。但是我无法更新我的主应用程序,因此我在前进时遇到了麻烦。

Note: I must use JS customize.

我的代码如下:

let copyId = 112;
let appID = kintone.app.getId();
function getCopyAppData() {
    let body = {
      "app": copyId,
      "query": kintone.app.getQuery()
    };
    return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {return resp;})

      
 }
  function addDataToCurrentApp(data) {
    let body = {
      "app": appID,
      "records": data
    };
    return kintone.api(kintone.api.url('/k/v1/records', true), 'POST', body).then(function(resp) {
      return resp;
    })
  }
getCopyAppData().then(function(data) {
  let events = ['app.record.create.show', 'app.record.edit.show', "app.record.index.show"];
    kintone.events.on(events, function(e) {
      if (document.getElementById('addData') !== null) {
          return;
      }
      let menuButton = document.createElement("button");
          menuButton.id = "addData";
          menuButton.innerHTML = "Add data";
      kintone.app.getHeaderMenuSpaceElement().appendChild(menuButton);
      menuButton.onclick = function() {
        addDataToCurrentApp(data);
      }
    })
})

标签: javascript

解决方案


好像之前的评论被删除了,所以让我再次回答你的问题。

这是从 Kintone 中的另一个应用程序复制数据的示例代码。

(function() {
"use strict";
let copyId = 112;
let appID = kintone.app.getId();
function getCopyAppData() {
    let body = {
      "app": copyId,
      "query": kintone.app.getQuery()
    };
    // return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {return resp;})
    return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {
        addDataToCurrentApp(resp.records); 
        return resp
    })


 }
  function addDataToCurrentApp(data) {


    var wData = [];
    for(var i =0;i<data.length;i++){
        var param2 = {
                      "str":{
                         "value":data[i].str.value
                    }
                }
        wData.push(param2);
    }

//        wData.push(data[i]);



    let body = {
      "app": appID,
      "records":wData
    };

    return kintone.api(kintone.api.url('/k/v1/records', true), 'POST', body).then(function(resp) {
      return resp;
    },function(err) {
        console.log(err);
    })
  }
// getCopyAppData().then(function(data) {
  let events = ['app.record.create.show', 'app.record.edit.show', "app.record.index.show"];
    kintone.events.on(events, function(e) {
      if (document.getElementById('addData') !== null) {
          return;
      }
      let menuButton = document.createElement("button");
          menuButton.id = "addData";
          menuButton.innerHTML = "Add data";
      kintone.app.getHeaderMenuSpaceElement().appendChild(menuButton);
      menuButton.onclick = function() {
        // addDataToCurrentApp(data);
        getCopyAppData();
          }
        })
    // })     
})();

仅供参考,在类似的情况下,我看到一个用户卡在错误代码 GAIA_DA02 中。这是由于同时运行的进程太多。
在这种情况下,请考虑以下内容来帮助您避免同样的错误。
•减少每个应用程序中的字段和注册记录的数量,以便处理记录更新等处理时间不会太长。
•拆分API请求,避免重复处理时间
•简化您的应用设置,例如设置权限,设置复杂的设置等
•错误无法更新的记录应留待重试处理,然后一次重试当其他更新处理和时间不重叠时。

另外,在 Kintone 开发者社区网站上也有类似的询问,请查看以供参考。 https://developer.kintone.io/hc/en-us/community/posts/360027677873-Copy-data-from-another-app

我希望这有帮助


推荐阅读