2013-12-08

Force.com : オブジェクトにカスタム項目を大量に追加したい


この記事は Force.com Advend Calender 2013 8日目の記事です。



オブジェクトにカスタム項目を大量に追加したい

めんどい。
細かいこと(ユニーク制約、必須項目、ヘルプテキスト等)は画面で行うとして、ある程度タグを作成して .object ファイルにぺりっと貼って保存してしまえば OK な感じにしておく。



◇ 用意するもの

  • CommonLisp 系処理
※ xyzzy-lisp で動いたので大概動く気がします



◆ .object

■ テキスト
<fields>
    <fullName>API参照名</fullName>
    <externalId>false</externalId>
    <label>ラベル</label>
    <length>100</length>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Text</type>
    <unique>false</unique>
</fields>

■ テキストエリア
<fields>
    <fullName>API参照名</fullName>
    <externalId>false</externalId>
    <label>ラベル</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TextArea</type>
</fields>

■ チェックボックス
<fields>
    <fullName>API参照名</fullName>
    <defaultValue>false</defaultValue>
    <externalId>false</externalId>
    <label>ラベル</label>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Checkbox</type>
</fields>

■ 選択リスト
<fields>
    <fullName>API参照名</fullName>
    <externalId>false</externalId>
    <label>ラベル</label>
    <picklist>
        <picklistValues>
            <fullName>選択肢1</fullName>
            <default>false</default>
        </picklistValues>
        <picklistValues>
            <fullName>選択肢2</fullName>
            <default>false</default>
        </picklistValues>
        <sorted>false</sorted>
    </picklist>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
</fields>



◆ 実装

■ ファイル(カンマ区切り)
type ラベル API参照名 その他 その他
Text ラベル API参照名(__cを除く) 文字数
TextArea ラベル API参照名(__cを除く)
Checkbox ラベル API参照名(__cを除く)
Picklist ラベル API参照名(__cを除く) 選択肢1 選択肢2
ex.)
Checkbox,有効,Isvalid
Text,名前,Name,255
Picklist,性別,Sex,男性,女性
TextArea,備考,Note

■ プログラム
(defun split(str)
  (let ((retval) (spf 0) (spe 0))
    (loop
      (setq spe (position #\comma str :start spf))
      (cond (spe (setq retval (cons (subseq str spf spe) retval)))
            (t
             (setq retval (cons (subseq str spf) retval))
             (return (reverse retval))))
      (setq spf (1+ spe)))))



(with-open-file (in "C:\\test.txt" :direction :input)
  (let ((line) (sp))
    (while (setq line (read-line in nil))
      (setq sp (split line))
      (cond ((equalp (nth 0 sp) "Text")
         (format t "
<fields>
    <fullName>~A__c</fullName>
    <externalId>false</externalId>
    <label>~A</label>
    <length>~A</length>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Text</type>
    <unique>false</unique>
</fields>"
             (nth 2 sp)  (nth 1 sp)  (nth 3 sp)))
        ((equalp (nth 0 sp) "TextArea")
         (format t "
<fields>
    <fullName>~A__c</fullName>
    <externalId>false</externalId>
    <label>~A</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>TextArea</type>
</fields>"
             (nth 2 sp)  (nth 1 sp)))
        ((equalp (nth 0 sp) "Checkbox")
         (format t "
<fields>
    <fullName>~A__c</fullName>
    <externalId>false</externalId>
    <label>~A</label>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Checkbox</type>
</fields>"
             (nth 2 sp)  (nth 1 sp)))
        ((equalp (nth 0 sp) "Picklist")
         (format t "
<fields>
    <fullName>~A__c</fullName>
    <externalId>false</externalId>
    <label>~A</label>
    <picklist>
~{        <picklistValues>
            <fullName>~A</fullName>
            <default>false</default>
        </picklistValues>~%~}        <sorted>false</sorted>
    </picklist>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
</fields>"
             (nth 2 sp)  (nth 1 sp) (member (nth 3 sp) sp))
         )))))



3 件のコメント:

  1. Great explanation to given on this post .The given information very impressed for me really so nice content.

    SEO Training Institute in Chennai

    返信削除
  2. Wonderful blog.. Thanks for sharing informative blog.. its very useful to me..

    Android Training in Chennai

    返信削除


  3. Its very useful to me. Wonderful blog.. Thanks for sharing informative Post.

    Installment loans
    Payday loans
    Title loans

    返信削除