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
-
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 WorkivaAuth
python3 setup.py sdist
cd .
- 新規従属関係ディレクトリに従属をインストールします。
pip3 install --target ./dependencies --requirement requirements.txt
-
dependencies.zipファイルを作成します。
cd dependencies
zip -r ../dependencies.zip .
cd ....
この記事の最終パートでは、ステップ1 で作成したスクリプトにこのファイルをアップロードする方法を表示します。
ステップ3: Workivaへの依存先のアップロード
依存先ファイルの作成が完了したら、Workivaに戻り、ソースとしてアップロードします。
- 移動先 : Workiva Scripting に移動し、本記事で作成したスクリプトファイルを開きます。
- 左側の「ソース」 パネルに移動し、現在のファイルのすぐ下の空白を右クリックし、「ソースファイルのアップロード」 を選択します。
-
Browse を選択し、前ステップへ作成したdependencies.zip ファイルを探します。
-
dependencies.zip ファイルをアップロードして完了です。
dependencies.zip という選択不可能なソースが表示されるはずです。これは、認証情報を公開せずに Workiva に認証する準備ができたことを示しています!