Workiva でスクリプトがどのように機能するかを示すために、私たちは以前、スプレッドシートのセルを更新するスクリプトを作成しました。この記事では、その例に基づいて、トークン・ベースの認証を使用して同じ操作を実行する方法を示します。
注: スクリプトは現在カスタマイズWorkivaからのみ利用可能です。詳細はこちら。
要件
- ワークスペースで Workiva スクリプトを有効にする必要があります。Workivaスクリプトの詳細はこちら。
- スクリプトを作成または編集するには、スクリプト編集者 の役割が必要です。
ステップ1:スクリプトファイルの作成
このスクリプトは、サンプル: スプレッドシートを更新するスクリプトの記事で使われているスクリプトのバリエーションです。このバージョンは、クライアントIDとクライアントシークレットを保護し、代わりにコードがWorkivaに認証することを可能にするトークンを取得します。
ワークスペースでスクリプトを構築するには、以下のステップに従います:
- ホームから+ 作成 => スクリプト をクリックする。
- 右側に、スクリプトの名称と簡単な説明を入力します。
-
画面中央のスクリプトエディタに移動し、既存のコードを削除します。以下をコピーし貼り付けます:
# Welcome to Workiva Scripting import requests import json import os from WorkivaAuth import WorkivaAuth OUTPUT_SS_ID = os.getenv('OUTPUT_SS_ID') OUTPUT_SHEET_ID = os.getenv('OUTPUT_SHEET_ID') SS_API_URL = 'https://api.app.wdesk.com/platform/v1/spreadsheets/' class SSApi: def __init__(self, accessToken, ssId, sheetId): self._accessToken = 'Bearer ' + accessToken self._headers = {'Authorization': self._accessToken} self._ssId = ssId self._sheetId = sheetId def updateRange(self, range, values): url = SS_API_URL + self._ssId + "/sheets/" + \ self._sheetId + "/values/" + range requests.put(url, headers=self._headers, data=json.dumps(values)) def updateSS(outputSSApi: SSApi): values = [] values.append(["Hello World"]) outputSSApi.updateRange('A1', {"values": values}) def main(): authToken = WorkivaAuth.getWorkivaAuthToken() outputSSApi = SSApi(authToken, OUTPUT_SS_ID, OUTPUT_SHEET_ID) updateSS(outputSSApi) print("SS updated!!!") main() - [保存]をクリックします。
ステップ2:ローカルマシンで依存先を生成する
このセクションを読んでいくと、このバリエーションにはクライアントIDとクライアントシークレットに基づいてトークンを生成するコードが含まれていないことに気づくだろう。そうではなく、コードはWorkivaAuth という名前のローカルで作成されたライブラリにアブストラクトされ、リクエストライブラリと一緒にdependencies.zip バンドルにパックされます。
フォローするには、ローカルマシンでターミナルを開き、以下のステップを完了する:
-
Creds という名前のフォルダーを作成する。
mkdir Creds -
Credsフォルダの中にステップします。 cd Creds
cd Creds -
次のコンテンツを含む requirements.txt ファイルを作成する:
./WorkivaAuth/dist/WorkivaAuth-1.0.tar.gz requests==2.29.0 -
WorkivaAuth という名前のフォルダーを作成する。
mkdir WorkivaAuth -
WorkivaAuthフォルダ内のステップ。
cd WorkivaAuth -
WorkivaAuth フォルダー内に 次のコンテンツを含むsetup.pyファイルを作成する:
from setuptools import setup, find_packages setup( name='WorkivaAuth', version='1.0', packages=find_packages(), install_requires=[ 'requests' ] ) -
WorkivaAuth フォルダー内に WorkivaAuth という名前の別のフォルダーを作成する。
mkdir WorkivaAuth注: これはタイプミスではない。正しいパスは./WorkivaAuth/WorkivaAuth.
-
作成したばかりのWorkivaAuthフォルダにステップインする。
cd WorkivaAuth -
空の __init__.py ファイルと WorkivaAuth.py ファイルを WorkivaAuth/WorkivaAuth フォルダー内に次のコンテンツで作成する:
# WorkivaAuth import requests import json # 実際の URL に置き換える AUTH_URL = "https://api.app.wdesk.com/iam/v1/oauth2/token" # 不足している変数 CLIENT_ID を定義する CLIENT_ID = "your_client_id" # 不足している変数 CLIENT_SECRET を定義する CLIENT_SECRET = "your_client_secret" def getWorkivaAuthToken(): data = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'grant_type': 'client_credentials' } # 適切なヘッダーに置き換える headers = { 'Content-Type': 'application/x-www-form-urlencoded', } tokenRes = requests.post( AUTH_URL, data=data, headers=headers ) tokenResponse = json.loads(tokenRes.text) return tokenResponse['access_token']これで次のようなフォルダ構成になるはずです:
Creds/ |-- WorkivaAuth/ | |-- WorkivaAuth/ | | |-- __init__.py | | |-- WorkivaAuth.py | |-- setup.py |-- requirements.txt -
Creds フォルダにステップバックしてください。
cd ..cd .. -
次のコマンドを実行して WorkivaAuth 配布パッケージを生成する。
cd WorkivaAuthpython3 setup.py sdistcd .. -
依存関係を新しい Dependencies ディレクトリにインストールする。
pip3 install --target ./dependencies --requirement requirements.txt -
dependencies.zip ファイルを作成する。
cd dependencieszip -r ../dependencies.zip .cd ..
この記事の最終パートでは、ステップ1 で作成したスクリプトにこのファイルをアップロードする方法を表示します。
ステップ3: Workivaへの依存先のアップロード
依存先ファイルの作成が完了したら、Workivaに戻り、ソースとしてアップロードします。
- 移動先 : Workiva Scripting に移動し、本記事で作成したスクリプトファイルを開きます。
- 左側の「ソース」 パネルに移動し、現在のファイルのすぐ下の空白を右クリックし、「ソースファイルのアップロード」 を選択します。
-
Browse を選択し、前ステップへ作成したdependencies.zip ファイルを探します。
-
dependencies.zip ファイルをアップロードして完了です。
dependencies.zip という選択不可能なソースが表示されるはずです。これは、認証情報を公開せずに Workiva に認証する準備ができたことを示しています!