・カスタム項目を一括で作成する方法
・サンプルコードの公開
・項目レベルセキュリティについて
Salesforceを利用する企業にとって、データ管理とカスタマイズは不可欠な要素です。特に、業務に特化したカスタム項目を作成することで、データの管理効率や業務プロセスの最適化が可能となります。しかし、手動でカスタム項目を作成するのは時間と手間がかかります。
Pythonのライブラリ「simple-salesforce」を活用しカスタム項目を一括作成することで、時間と手間を削減することができます。今回はPythonスクリプト(サンプルコード有り)を使って効率的にカスタム項目を作成する手順を詳しく解説します。
ここで紹介するコードは、テキスト型と数値型の項目作成に対応しています。
他のデータ型も作成できるようにコードを追加することが可能です。
まず、simple-salesforceをインストールします。
pip install simple-salesforce
ディレクトリ構成
以下のようなディレクトリ構成を作成します。
└── Project/
├── csv_files/
│ └── custom_fields.csv
├── salesforce_credentials.json
├── common_salesforce.py
└── create_custom_field_by_csv.py
各ファイルの内容は以下の通りです。
Salesforceにログインするユーザーの認証情報を記載します。
{
"username": "xxxxxx@xxx.xxx",
"password": "xxxxxxxxxxx",
"security_token": "xxxxxxxxxxx",
"domain": "login"
}
username
: ユーザー名password
: パスワードsecurity_token
: セキュリティトークン(取得方法はSalesforceヘルプ「セキュリティトークンをリセットする」)
domain
: 本番かSandboxlogin
サンプルコード
Salesforceにログインするスクリプトです。 create_custom_field_by_csv.py
から呼び出されます。
import json
from simple_salesforce import Salesforce
def login_to_salesforce(credentials_file_path):
# 資格情報ファイルを読み込み
with open(credentials_file_path, mode='r', encoding='utf-8') as credentials_file:
credentials = json.load(credentials_file)
# Salesforceにログイン
sf = Salesforce(
username=credentials['username'],
password=credentials['password'],
security_token=credentials['security_token'],
domain=credentials['domain']
)
print('Salesforceへのログインに成功しました。')
return sf.mdapi
create_custom_field_by_csv.pyCSVファイルからカスタム項目を作成するスクリプトです。
import csv
from common_salesforce import login_to_salesforce
def create_custom_fields_from_csv(csv_file_path, metadata_client):
custom_fields = []
with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
# カスタム項目のパラメータを定義
field_args = {
'fullName': f"{row['ObjectName']}.{row['FieldName']}__c",
'label': row['Label'],
'type': metadata_client.FieldType(row['Type'])
}
# データ型に応じた追加パラメータを設定
if row['Type'].lower() == 'number':
field_args['precision'] = int(row['Precision'])
field_args['scale'] = int(row['Scale'])
elif row['Type'].lower() == 'text':
field_args['length'] = int(row['Length'])
custom_field = metadata_client.CustomField(**field_args)
custom_fields.append(custom_field)
return custom_fields
def main():
credentials_file_path = 'salesforce_credentials.json'
csv_file_path = 'csv_files/custom_fields.csv'
metadata_client = login_to_salesforce(credentials_file_path)
custom_fields = create_custom_fields_from_csv(csv_file_path, metadata_client)
# カスタム項目を作成
if custom_fields:
metadata_client.CustomField.create(custom_fields)
print('カスタム項目の作成に成功しました。')
if __name__ == '__main__':
main()
custom_fields.csv作成するカスタム項目の情報を記載します。
ObjectName,FieldName,Label,Type,Length,Precision,Scale
ExampleObject,ExampleField1,Example Label1,Text,255
ExampleObject,ExampleField2,Example Label2,Number,,5,2
ObjectName
: カスタム項目を作成するオブジェクトのAPI参照名__c
まで含めます。FieldName
: API参照名Label
: 表示ラベルType
: データ型Text
Number
create_custom_field_by_csv.py
のコードを追加する必要があります。Length
: 文字数 (テキスト型の場合、必須)Precision
: 文字数 (数値型の場合、必須)Scale
: 小数点の位置 (数値型の場合、必須)
4.Pythonスクリプトの実行最後に、以下のコマンドを実行してPythonスクリプトを実行します。
cd [作成したProjectフォルダへのパス]
python create_custom_field_by_csv.py
custom_fields.csv
に作成したいデータ型に必要な項目を列を追加します。FieldType
に記載されております。create_custom_field_by_csv.py
の#
データ型に応じた追加パラメータを設定
の部分に処理を追加します。上記の手順でカスタム項目を一括作成することができますが、作成された項目には項目レベルセキュリティが設定されていません。
そのため、システム管理者ですら作成した項目の参照・編集権限を持っていません。
項目レベルセキュリティの設定は、Salesforceの画面から項目ごとに行うことも可能ですが、カスタム項目を一括作成するのと同様に一括で設定することもできます。
その具体的な手順は、「[Salesforce]複数プロファイルの項目レベルセキュリティ一括更新」でご紹介しています。