Topic
- SalesforceXyToolsCoreを使ってSalesforce組織からのメタデータの取得
メリット
- package.xml配置不要、動的に生成
- すべてのSalesforce組織からのメタデータ一括で取得
Salesforce組織からのメタデータの取得
Salesforce組織のユーザ名、パスワード、Apiバージョン、Product/Sandboxを設定してください。
from SalesforceXytoolsCore import *
import pprint
config = {
"api_version": 42.0,
"username": "sfdc username",
"password": "sfdc password",
"security_token": "",
"is_sandbox": True
}
meta_api = MetadataApi(username=config["username"],
password=config["password"],
security_token=config["security_token"],
sandbox=config["is_sandbox"],
version=config["api_version"]
)
"""retrieve zip file"""
meta_api.retrieveZip("./save_dir","metadata-retrieve.zip")
結果確認:
ls ./save_dir
分析
メタデータ取得ロジック
- retrieve() コールを発行し、非同期的な取得を開始すると、AsyncResult オブジェクトが返されます。id 項目の値をメモし、次のステップで使用します。
- checkRetrieveStatus() コールを発行して、最初のステップの AsyncResult オブジェクトから id 値を渡します。返された RetrieveResult の done 項目の値をチェックします。true の場合、コールが完了して、次のステップに進むことを意味します。それ以外の場合は、done 項目が true になるまで、このステップを繰り返して checkRetrieveStatus() を再度コールします。
- 前のステップの checkRetrieveStatus() への最後のコールで返された RetrieveResult から zip ファイル (zipFile 項目) および他の必要な項目を取得します。
retrieveタスクを開始
タスクを発行する
"""retrieve"""
result = meta_api.startRetrieve()
pprint.pprint(result)
# print(result["done"])
# print(result["id"])
# print(result["state"])
retrieveの状況を確認
宣言的なメタデータコール retrieve() の状況を確認し、zip ファイルの内容を返します。
"""checkRetrieveStatus"""
retrieve_id = result["id"]
check_result = meta_api.checkRetrieveStatus(retrieve_id)
pprint.pprint(check_result)