Workiva Scripting 為在 Workiva 軟體上運行 Python 程式碼提供了一個靈活、安全的平台。透過撰寫可自動執行可重複流程的自訂腳本,您可在多個報表、檔案和工作區中創造高效率。
註: 目前僅可透過自訂 Workiva 使用腳本。深入了解。
角色和權限
角色是 Workiva 中的全系統設 定,這意味著它們為工作區中的每個腳本建立了標準的存取級別。有三種 Workiva Scripting 角色可由您的工作區管理員指定。
| 角色 | 訪問級別 |
|---|---|
| 腳本運行器 | 可以運行腳本。 |
| 腳本檢視器 | 可以查看腳本。 |
| 腳本編輯器 | 可以檢視、建立和編輯腳本。 |
提示: 與其使用 Script Runner 角色,我們建議大多數非技術性使用者透過整合自動化 啟動腳本。
您也可以透過指定權限來控制每個檔案的存取權限 。由於權限取代角色,因此指令碼擁有者和建立者可以授予或限制個別檔案的存取權。
| 權限 | 訪問級別 |
|---|---|
| 檢視者 | 可以執行和檢視指令碼。 |
| 編輯者 | 可以執行、編輯和檢視指令碼。 |
| 擁有者 | 可執行、編輯、檢視和建立腳本。 |
如何使用 Workiva 腳本
在工作區中啟用腳本後,腳本將與網站中的其他試算表、文件和簡報一起顯示在首頁畫面中。您可以建立新的指令碼,或從檔案清單中選取現有的指令碼。
腳本編輯器是您在網站上建立、編輯和執行腳本的地方。
其中包括:
- 中央畫布 您將在此編寫腳本
- 底部的輸出部分 ,您可以在此檢視執行腳本的結果
- 橫跨頂部的功能表列 ,您可以在此儲存或執行指令碼
- 右側的屬性面板 ,用於管理腳本屬性和執行歷史
- 左側的來源面板
指令碼建立後,可以手動、程式化、透過 Chains(自動化工作流程)或從 Workiva 檔案中執行。
若要手動執行指令碼:
- 按一下螢幕上方功能表列中的Run Script 。
- 按一下+ 新增變數 。
- 輸入要作為參數傳輸的環境變數名稱和值。
- 單擊Run Script 。
要以程式化方式執行指令碼,請向Initiate a script executionprototype endpoint 提出 HTTP POST 請求。
腳本 ID 包含在端點中,您可以在 POST 請求的正文中定義環境變數的名稱和值來傳遞參數。
Script 輸出會記錄為 stderr 和 stdout,以及一些使用指標,以監控產品的健康狀況。
要通過鏈執行腳本,您需要使用 Workiva Scripting 連接器。在此之前,組織安全管理員必須透過「配置」螢幕啟用連接器 。
請參閱以下文章以瞭解更多資訊:
要在 Workiva 檔案中執行指令碼,您需要遵循以下級距的步驟
在文件、試算表或簡報的「自動化」面板中,建立新的自動化,並選擇Manual Execution 作為觸發程序。
新增執行指令碼 動作,選取您要執行的指令碼,並選擇性地定義授權哪些使用者或角色/職務執行該指令碼。
只有那些指定的使用者才能看到並執行檔案內的自動化。
進一步了解使用自動化執行指令碼 。
建立練習腳本
在您的網站上建立即時指令碼之前,我們建議您在指令碼編輯器中建立練習指令碼。這將有助於您在處理實時資料前熟悉流程。
按照以下步驟創建一個簡單的腳本,計算貨幣的時間值:
- 從首頁,按一下+ 建立 => 腳本 。
- 在右側輸入指令碼的名稱和簡短說明。
- 移至畫面中間的指令碼編輯器,刪除任何現有的指令碼。您應該有一個空白的畫布。
-
將此程式碼貼上編輯者:
import os, sys # https://www.investopedia.com/terms/t/timevalueofmoney.asp # 計算貨幣時間值的公式 # FV = PV x [1 + (i / n)]^(n x t) # 假設有一筆 $10,000 的款項投資一年,年複利為 10%。# 這筆錢的未來價平是:# FV = $10,000 x [1 + (10% / 1)] ^ (1 x 1) = $11,000 compounding_periods = {"annual" : 1, "monthly" : 12, "quarterly" : 4, "daily" :365} if 'INVESTMENT' not in os.environ: print("Cannot run the script. 缺少投資。") sys.exit() if 'INTEREST_RATE' not in os.environ: print("Cannot run the script. 缺少利率。") sys.exit() if 'COMPOUNDING_PERIOD' not in os.environ: print("Cannot run the script. Compounding period is missing.") sys.exit() if 'YEARS' not in os.environ: print("Cannot run the script. 缺少年數。") sys.exit() compounding_period = os.getenv('COMPOUNDING_PERIOD') if compounding_period not in compounding_periods.keys(): print("Cannot run the script.", compounding_period," is not a valid period") sys.exit() investment = int(os.getenv('INVESTMENT')) interest_rate = float(os.n = compounding_periods[compounding_period] FV = investment * pow((1 + ((interest_rate/100) / n)),n * years) print("Assume a sum of",investment, "is invested for",years, "year(s) at",\ interest_rate,"% interest compounded on",compounding_period, "basis.") print("The future value of that money is:") print(FV) - 按一下左上方的執行腳本 。
- 按一下+Add Variable ,然後輸入您想使用的任何參數。
- 按一下Run Script 以完成。
現在可以在螢幕底部的Output 面板檢視腳本結果。
如何獲得 Workiva Scripting 的支援
如對 Workiva Scripting 有任何疑問,請聯絡Workiva Support 。但請注意,我們的代理只能協助解決有關平台本身的問題 - 我們無法協助您編寫程式碼或排除程式碼故障。
我們也在支援中心提供了許多解決方案:
這些資源將幫助您開始使用 Workiva Scripting。有關使用 Workiva Public APIs 來編寫您的程式碼以與 Workiva 平台進行程式化互動的問題,請使用我們的開發者與 APIs 社群 。
常見問題集|常見問題
腳本通常如何使用?
Workiva Scripting 可以自動執行許多可重複的耗時任務,否則這些任務將需要手工完成。一些常見的用例包括零行抑制、報表佈局,以及在多個文件中應用自訂格式。
因此,脚本可以广泛地适应许多业务需求。程式碼是您自己的;您如何使用程式碼,主要取決於您的程式碼開發人員、工作區設定,以及您業務中目前的手動流程數量。
是否有任何腳本限制?
是的,Workiva 為 Workiva Scripting 和腳本 API 強制執行一些限制。
進一步了解指令碼限制.
如何從 Chains 觸發腳本?
這需要 Workiva Scripting 連接器。
請參閱以下文章以瞭解更多資訊:
Workiva Scripting 是否符合 Fedramp 規範?
絕對是的。在 Workiva,安全性是我們的首要任務,我們已經建立了一個基礎結構,保證您的代碼運行既安全又高效。
如何保護對腳本的存取?
有幾種方法可以防止未經授權的使用者存取您的程式碼:
- 為授權使用者建立專屬工作區或組織 :為授權使用者建立工作區,甚至整個組織,是最安全的選擇。例如,合作夥伴可在您的組織中為 Workiva Scripting 創建一個工作區,並讓客戶從他們自己的組織中執行腳本。
- 使用角色 :Workiva 的腳本角色 (腳本檢視器、腳本運行器和腳本編輯器)是分層的,因此使用者只能存取其工作所需的腳本。例如,Script Runner 角色允許使用者執行腳本,但不能存取任何程式碼。
- 使用權限 :可以在檔案層級限制腳本檔案,以便只有特定使用者可以編輯或檢視您的程式碼。
瞭解有關scripting 角色和權限的更多資訊 。
有沒有腳本程式允許的 IP 清單?
有,腳本程式允許的 IP 包括這裡 。
是否有可用的腳本庫?
我們收集了一些範例腳本 供您使用。這些腳本也可以使用上一個問題中連結的文章來手動建立。
如何管理腳本版本?
目前,Workiva 只存储脚本的最新版本。
您可以在 Workiva 中创建脚本文件的副本,并将它们组织到文件夹中,但我们建议您使用单独的版本控制系统 -- 特别是当您拥有企业版本控制系统时。
如何將 Workiva 程式碼與企業版本控制系統 (例如 GitHub) 同步?
Workiva Scripting API 提供了源管理端點,用戶可在此檢索腳本的最新版本或將腳本更新為較新的副本。Workiva 目前不提供腳本檔案與您的企業版本控制系統(例如 Gitlab、Github、SVN)之間的自動同步。
如何從腳本存取 Workiva 和非 Workiva 系統的憑證?
有兩種方式可存取 Workiva 和非 Workiva 系統的憑證:
- 以運行時輸入方式發送憑證(首選)
- 在程式碼中硬體編碼憑證
為什麼在執行過程中,腳本執行時輸入的值不會顯示在記錄輸出中?
這是一項安全預防措施。由於輸入參數可能包含敏感資料,因此我們會從使用者面對的記錄中移除這些參數。
如何在執行腳本期間儲存臨時資料?
Workiva 指令碼可使用Python Open 函式 (外部連結) 暫時讀寫 /tmp 資料夾中的檔案。其他路徑受到限制。
每次執行腳本時,都會在 Workiva 的雲基礎架構中啟動一個容器。該容器已安裝 linux,且除了 /tmp(為空)之外,所有路徑都受到限制。資料可以暫時在該路徑中寫入和讀取。一旦執行結束,容器就會被丟棄。
我可以定義全局變數以在多個腳本中使用嗎?
目前不支援。
我可以傳送檔案作為參數嗎?
只要二進位檔案不超過 128KB,並已編碼為文字,就可以作為參數傳送 (例如:binary to text encoding)。
我可以在腳本中存取組織 ID、工作區 ID 和區域嗎?
是的,您的腳本程式碼可以透過環境變數存取組織 ID、工作區 ID 和區域 (美國、亞太地區、歐盟)。例如,os.getenv("WORKIVA_ORGANIZATION_ID").
| 變數 | 說明 |
|---|---|
| WORKIVA_ORGANIZATION_ID | 指令碼所在 Workiva 組織的唯一 ID |
| WORKIVA_ACCOUNT_ID | 指令碼所在 Workiva 工作區的唯一 ID |
| WORKIVA_CLUSTER_DOMAIN | 指令碼所在生產環境的 Workiva 區域 (美國、亞太地區或歐盟) |
| workiva_scripting_script_id | 正在執行的指令碼的唯一 ID |
| workiva_scripting_run_id | 目前執行指令碼的唯一 ID。 |
| workiva_scripting_memory_limit | 單次執行指令碼時,可用的最大 RAM 數量 |
| workiva_scripting_disk_limit | 單次執行時,指令碼在/tmp 目錄下可使用的最大磁碟儲存空間 |
我可以在另一個 Workiva 腳本中使用一個 Workiva 腳本的代碼嗎?
目前無法將 Workiva 腳本包裝成庫,並在多個腳本中重複使用程式碼。目前最好的方法是複製可重複使用的程式碼,並視需要貼到腳本中。