0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WorkatoAdvent Calendar 2022

Day 10

Workato:Google Sheetsへ複数行を追加する(Bulkアクション不使用)

Last updated at Posted at 2022-12-09

はじめに

WorkatoでGoogle Sheetsコネクタを利用してGoogle Sheetsへ行を複数追加する際は、Add row を利用して1行ずつループで追加するか、Add rows in bulk を利用して複数行まとめて追加します。

Add rows in bulk を利用すれば複数行をまとめて(ループせず1タスクで)Google Sheetsへ追加できますが、このアクションを利用するには別途オプション(ETL/ELT Bulk Data Processing)契約が必要となります。

今回は、オプション契約せずにGoogle Sheetsへ複数行追加する方法について考えてみました。

レシピ

レシピの再利用性を高めるために、Recipe functionsとして作成を進めます。
Recipe functionsとしてレシピを作成することで、サブルーチンや関数のように別のレシピから呼び出して利用することができます。

image.png

設定

トリガ

Parameter schemaを次の通り定義します。
image.png

キー
spreadsheet_id 追加先のGoogle SheetsスプレッドシートID(赤枠で示した箇所)
image.png
sheet 追加先のGoogle Sheetsのシート名(赤枠で示した箇所)
image.png
rows 行(リスト)
└row 行のセルの値( ::: をセパレータとして複数列の値をセットする)

※スキーマ設定(JSON)

[
  {
    "name": "spreadsheet_id",
    "type": "string",
    "optional": false,
    "control_type": "text",
    "label": "Spreadsheet ID",
    "hint": "Google SheetsのSpreadsheetIdを入力します。"
  },
  {
    "name": "sheet",
    "type": "string",
    "optional": false,
    "hint": "Google Sheetsのシート名を入力します。",
    "control_type": "text",
    "label": "Sheet"
  },
  {
    "name": "rows",
    "type": "array",
    "optional": false,
    "properties": [
      {
        "name": "row",
        "type": "string",
        "optional": false,
        "control_type": "text",
        "label": "Row",
        "hint": "列の値をセットします。列の区切り文字(セパレータ)は ::: を使用してください。"
      }
    ],
    "of": "object",
    "label": "Rows"
  }
]

アクション

Step 2

Rubyコネクタを追加し、次の通り定義します。
image.png

Name

任意の名称

Input

キー
rows Step 1の Rows を指定し、formulaモードへ切り替えたうえで .to_jsonメソッドでJSONテキストに変換する
image.png

Output schema

キー
result JSONテキスト用のリスト文字列を出力する

Code

各行のセパレータやダブルクォーテーションのエスケープ処理を行いながら、JSONテキスト用のリスト文字列を生成します。

rows = parse_json(input['rows']).pluck('row')
result = ''

rows.each{|row|
  tmp = '';
  
  if ! result.blank?
    result = result + ",\n"
  end
  
  row.split(':::').each{|col|
    if tmp.blank? 
      tmp = '['
    else
      tmp = tmp + ','
    end
    tmp = tmp + '"' + col.gsub('"','\"') + '"'
  }
  tmp = tmp + ']'
  result = result  + tmp  
}

{result: result}

Step3

Google Sheetsコネクタを追加し、 Custom action を選択します。
image.png

※Google Sheets APIの、Method: spreadsheets.values.appendを利用して複数行を追加します。

次の通り定義を進めます。
image.png

Action name

任意の名称

Method

POST

Path

以下の通り定義します。
image.png

※上のイメージを文字列化したもの

"spreadsheets/" + <Spreadsheet ID | Step1>  + "/values/" + <Sheet | Step1>.encode_url + ":append?valueInputOption=USER_ENTERED"
データピル 説明
Spreadsheet ID | Step1 Step1 のSpreadsheet ID
image.png
Sheet | Step1 Step1 のSheet
image.png

Request type

Raw request body

Response type

JSON response

Input

image.png

※上のイメージを文字列化したもの

{
  "values":  [<Result | Step2>]
}
データピル 説明
Result | Step2 Step2 のResult
image.png

Request headers

Name Value
Content-Type application/json

実行結果

作成したレシピをテスト実行してみます。
image.png

テスト実行後、行が追加されたことが確認できます。
image.png

もう一度テスト実行すると、行がさらに追加されたことが確認できます。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?