LoginSignup
0
1

More than 5 years have passed since last update.

force cli : force field creatの改造

Posted at

はじめに

force cliを使ってカスタムオブジェクトにカスタムフィールドを追加します。
ただし、picklistの場合にうまくいかなかった。
そこでforce cliを少し改造しました。その時の備忘録です。

変更前の挙動

picklist型の項目を追加するコマンドの例

$force field create CustomObject__c "CustomField":picklist picklist:"1,2" label:区分

実行結果の例

Options:  map[label:区分 picklist>picklistValues:1,2]
Key label
Options:  map[picklist>picklistValues:1,2 label:区分]
Key picklist>picklistValues
ERROR: Property 'picklist' not valid in version 40.0

とversion 40.0ではpicklistは使えないと出てきます。

エラーの中身は?

https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_picklist.htm
を見てみると この型は、API バージョン 37.0 以前でのみ使用します。
となっています。どうもversion 40.0では異なっているようです。

そこで、既にpicklistを指定しているカスタムオブジェクトのmetaデータを確認します。
valueSetというタグに変わっているようです。

変更内容

field createで実際にmeta データを作っているプログラムは
go/src/github.com/ForceCLI/force/lib/metadata.goにありますので確認。
ちょうど866行目あたりにありました。
この部分を改造すればなんとかなりそうです。

soapField += "<picklist>\n"を
soapField += "<valueSet>\n<restricted>true</restricted>\n<valueSetDefinition>\n"に変更。

soapField += fmt.Sprintf("<picklistValues>\n<fullName>%s</fullName>\n<default>false</default>\n</picklistValues>\n", strings.Trim(k, " "))を
soapField += fmt.Sprintf("<value>\n<fullName>%s</fullName>\n<default>false</default>\n<label>%s</label></value>\n", strings.Trim(k, " "), strings.Trim(k, " "))に変更。

soapField += "</picklis>\n"を
soapField += "</valueSetDefinition>\n</valueSet>\n"に変更。

以上3行を変更すればできそう。

実際に確認してみます。
force cliのmain.goがあるディレィトリーに移動して

$go run ./main.go field create CustomObject__c "CustomField":picklist picklist:"1,2" label:区分

を実行すれば、実際に動くかを確かめられます。(うまくいけば項目が追加されます)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1