iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

先解決App Script的問題

從Google的客戶需求單和客戶交付單,定期需要比對兩個表格中的資料,並且在比對後將結果匯入至 Odoo 系統。整個流程包含以下步驟:

  1. 資料集結與比對

    • 從 Google 表單擷取資料。
    • 從獨立的出貨項目清單擷取資料。
    • 比對兩個表格的交集,確認哪些項目符合條件(表示客戶問題已解決並且要出貨)。
  2. 整理與輸出交集資料

    • 將比對結果整理成新的表格格式。
    • 匯入至 Odoo 系統。

步驟 1:擷取資料並比對

function compareAndExportData() {
  // Google 表單的試算表 ID 和出貨項目清單的試算表 ID
  var formSheetId = '你的表單試算表 ID';
  var shippingSheetId = '你的出貨清單試算表 ID';

  // 訪問 Google 表單試算表
  var formSheet = SpreadsheetApp.openById(formSheetId).getSheetByName('表單回應'); // 確認工作表名稱
  var formData = formSheet.getRange(2, 1, formSheet.getLastRow() - 1, formSheet.getLastColumn()).getValues();
  
  // 訪問出貨清單試算表
  var shippingSheet = SpreadsheetApp.openById(shippingSheetId).getSheetByName('出貨清單'); // 確認工作表名稱
  var shippingData = shippingSheet.getRange(2, 1, shippingSheet.getLastRow() - 1, shippingSheet.getLastColumn()).getValues();
  
  // 比對並集結交集資料
  var intersectData = findIntersectingData(formData, shippingData);

  // 將交集資料匯出到新試算表
  var resultSheet = createNewSheet('比對結果');
  exportDataToSheet(intersectData, resultSheet);
  
  // 將資料匯入到 Odoo 系統
  importDataToOdoo(intersectData);
}

// 比對兩個試算表的資料,返回交集資料
function findIntersectingData(formData, shippingData) {
  var intersect = [];

  for (var i = 0; i < formData.length; i++) {
    var formRow = formData[i];
    for (var j = 0; j < shippingData.length; j++) {
      var shippingRow = shippingData[j];
      
      // 比對兩個表格中客戶名稱與訂單號碼(根據需求可調整)
      if (formRow[0] == shippingRow[0] && formRow[1] == shippingRow[1]) {
        intersect.push([...formRow, ...shippingRow]);
      }
    }
  }
  return intersect;
}

// 創建一個新的試算表工作表並返回工作表物件
function createNewSheet(sheetName) {
  var spreadsheet = SpreadsheetApp.create(sheetName);
  var sheet = spreadsheet.getActiveSheet();
  return sheet;
}

// 將資料匯出到試算表
function exportDataToSheet(data, sheet) {
  sheet.clear(); // 清除工作表內容
  sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}

// 匯入資料至 Odoo 系統
function importDataToOdoo(intersectData) {
  // 這裡需要使用 Odoo API 進行資料匯入(假設已有 REST API 端點)
  var url = 'https://你的odoo伺服器/api/endpoint'; // Odoo API 端點
  var token = '你的API Token'; // Odoo API Token

  for (var i = 0; i < intersectData.length; i++) {
    var data = {
      customer_name: intersectData[i][0],
      order_number: intersectData[i][1],
      resolved_issue: intersectData[i][2], // 根據資料列修改字段
      shipping_date: intersectData[i][3], // 根據資料列修改字段
    };

    var options = {
      method: 'post',
      contentType: 'application/json',
      headers: {
        'Authorization': 'Bearer ' + token
      },
      payload: JSON.stringify(data)
    };
    
    UrlFetchApp.fetch(url, options);
  }
}

程式碼解說:

  1. compareAndExportData() 函數

    • 擷取 Google 表單和出貨清單中的資料。
    • 調用 findIntersectingData() 函數來比對兩個表格的交集。
    • 創建一個新的試算表來儲存交集結果。
    • 調用 importDataToOdoo() 函數將資料匯入到 Odoo 系統中。
  2. findIntersectingData() 函數

    • 比對 Google 表單和出貨清單的客戶名稱和訂單號碼(根據需求調整比對邏輯)。
    • 將交集的資料儲存在 intersect 陣列中。
  3. createNewSheet() 函數

    • 創建一個新的 Google 試算表工作表來儲存比對結果。
  4. exportDataToSheet() 函數

    • 將比對的交集資料匯出至指定的工作表。
  5. importDataToOdoo() 函數

    • 使用 Odoo 的 REST API 匯入資料至 Odoo 系統。
    • 需要提供 API 端點和授權 token。

注意事項:

  1. Google 表單和試算表名稱:請確認您的 Google 表單回應試算表和出貨清單試算表的名稱與程式碼中的一致。
  2. Odoo API 端點和 Token:需替換 urltoken 變數為您的 Odoo API 端點和授權 token。
  3. 比對邏輯:在 findIntersectingData() 中調整比對邏輯以符合您具體的資料格式。
  4. 自動化設置:可透過 Apps Script 中的觸發器設置週期性運行,如每週自動執行此腳本。

上一篇
即時同步Google表單資料
下一篇
符合GDPR 或 CCPA 等資料保護法規
系列文
挑戰CRM客戶支援系統搬到Odoo的跨平台RPA工程31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言