Обновите Trello Card с помощью скриптов Google Apps

#javascript #rest #google-apps-script #google-sheets #trello

#javascript #отдых #google-apps-script #google-sheets #трелло

Вопрос:

Я пытаюсь обновить карту Trello с помощью Trello Rest API на основе конкретной ячейки, измененной с помощью скриптов Google apps. Когда я что-то обновляю в Google sheet, он создает еще одну копию с обновленной информацией о карточке в Trello. Карта, которая должна была обновиться, этого не делает.

Самое странное, что иногда это срабатывает. В первый раз я видел, как это работает, когда я перемещал эту карточку в другой список на той же доске. Кроме того, иногда он также создает копию.

Я разместил свой код для сценариев Google apps в нижней части этого текста. Любая помощь будет приветствоваться!

 const ui = SpreadsheetApp.getUi();
const boardId = 'xxxxxxxxxxxxxxxxxx';
const key = 'xxxxxxxxxxxxxxxxxx';
const token = 'xxxxxxxxxxxxxxxxxx';

const atEdit = (e) => {
  const {range: {getRow, getColumn}} = e;
  const [row, column] = [getRow(), getColumn()];

  const {getRange} = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  //Syntax for a single element is .getRange(row, column)
  const [affectedCell, getRangeCells] = [getRange(row, column).getValues(), getRange(row, 1, 1, 23)];
  const googleSheetsRowId = getRangeCells.getValues()[0][0];

  getCard(googleSheetsRowId, affectedCell);
}

const getCard = (rowId, getAffectedCell) => {
  const boardUrl = 'https://api.trello.com/1/boards/'   boardId   '/cards?key='   key   'amp;token='   token;
  const response = UrlFetchApp.fetch(boardUrl);
  
  const trelloCards = JSON.parse(response);
  const {id: trelloCardId} = trelloCards[rowId];
  ui.alert(Object.keys(trelloCards[rowId]));
  updateCard(trelloCardId, getAffectedCell);
}

const buildURL = (params) => {
  var esc = encodeURIComponent;
  var query = Object.keys(params)
    .map(key => esc(key)   '='   esc(params[key]))
    .join('amp;');
  return query;
}

const updateCard = (cardId, affectedData) => {
  // For now, this only works for the name but my next task is for it to work on all the values >_<
  const data = {
    'name': affectedData[0][0],
    'desc': 'sup yo',
  };
  const options = {
    'method' : 'PUT',
    'payload' : JSON.stringify(data),
    'muteHttpExceptions': true
  };

  const updateUrl = 'https://api.trello.com/1/cards/'   cardId   '?key='   key  'amp;token='  token   'amp;'   buildURL(data);   

  const response = UrlFetchApp.fetch(updateUrl, options);

  ErrHTTP(response);
}

const ErrHTTP = (response) => {
  const responseCode = response.getResponseCode();
  const responseBody = response.getContentText();

  if (responseCode === 200) {
    ui.alert('You got it!');
  } else {
    ui.alert(Utilities.formatString("Request failed. Expected 200, got %d: %s", responseCode, responseBody))
  }
}
 

Комментарии:

1. Можете ли вы предоставить официальный документ о методе API, который вы хотите использовать?

2. Это может быть полезно в качестве ссылки на то, как работать с API Trello из Google Apps Script: github.com/andrewroberts/TrelloApp

3. developer.atlassian.com/cloud/trello/rest/api-group-cards/… @Tanaike

4. Спасибо за ответ. Судя по вашему ответу, я протестировал ваш скрипт. Но я не могу повторить вашу проблему. Когда я это тестировал, карта может быть правильно обновлена. Я прошу прощения за это. Могу ли я спросить вас о методе воспроизведения вашей проблемы?