「docforce2」salesforceオブジェクト設計書作成ツール

salesforceのオブジェクト構成をExcel設計書に出力するツールを作ったので公開します。
https://github.com/nyasba/docforce2

[@junojisan](https://twitter.com/junojisan)さんの[docforce](https://docforce.herokuapp.com/)という設計書出力ツールも便利ではあったのですが、オブジェクト一覧だけでは手で設計書を書く部分も多かったため自作しました。そのため、docforce **2**と名付けています。

## 作った背景

salesforceの開発では設計書をきっちり書いてから実装とはせずに、実装を終えてから必要に応じて後で設計書を起こしていることが多いです。そういったケースでは実装から設計書が起こすことができれば、
1. 設計書の不備が発生しない
2. 設計書作るコストも不要
3. その設計書で設定内容を俯瞰して妥当性をチェックできる

というメリットばかりだということに気づき、作り始めました。

## 出力できる設計書

### 設計書の構成

オブジェクト単位の設計書としています。シートの構成は以下の通り。

* 表紙
* 改版履歴
* オブジェクト情報
* カスタム項目
* 入力規則
* 承認プロセス
* ワークフロールール
* ワークフローアクション

いわゆるエンタープライズでお客様に設計書を納品することを意識して作成しています。

ここから設計書サンプルの紹介なのですが、2016年12月に行われたsalesforce world tourでのminihack課題1のアプリケーションのようなものを想定しています（多少パタンは増やしてます）
https://developer.salesforce.com/ja/worldtour2016/minihacks

#### 表紙
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/4690ea40-efe3-5910-7bee-e8308f8375f9.png)

#### 改版履歴

現時点でこれは単なる空のシートです。実際に使いだすと改版履歴のメンテが面倒なので、ツールのつくりを変えようかと考えてはいます。
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/29e77564-a9b3-1d9f-7fe7-f62db8a88365.png)


#### オブジェクト情報

オブジェクトの情報に加えてレコードタイプもここに並べて表示できるようにしています。
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/2dd2add4-922d-4efc-5e60-c7c330097afc.png)


#### カスタム項目

以下の項目に対応しています。

* Name項目
* テキスト
* テキストエリア
* ロングテキストエリア
* 数値
* 通貨
* 選択リスト
* 複数選択リスト
* 自動採番
* 日付
* 日付/時間
* チェックボックス
* 電話番号
* 上記の数式項目

一覧性を重視しているのでラベルが分かりにくいとかはあるかもしれません。
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/6987f321-9ee9-1476-2600-143392609416.png)

### 入力規則

![image](https://qiita-image-store.s3.amazonaws.com/0/47589/4c715cbd-54c0-f47a-0101-6c3963a64d31.png)

### 承認プロセス

ここが一番作りこんだところです。salesforceの画面そのままといえばそうなのですが、複雑な承認プロセスの場合は設計書レベルで違うと気づくことが多くあり、品質向上に役立っています。
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/79751548-fbd0-72a5-381d-0e5fbd399cc7.png)

複数の承認プロセスがある場合はシートが分かれて出力されるようにしています。

### ワークフロールール

これは出張申請では使っていなかったので、別のサンプルです。
![image](https://qiita-image-store.s3.amazonaws.com/0/47589/43a67a3b-a730-7377-68c4-470839a5159f.png)

### ワークフローアクション

項目自動更新とメールアラートに対応しています。アウトバウンドメッセージは対象外。

![image](https://qiita-image-store.s3.amazonaws.com/0/47589/d30914fb-ecf4-cc49-0ea0-036af5a50d6b.png)


## ツールの構成

salesforceからmavensmateやforce.com移行ツールを使ってメタデータXML(object,approvalprocess,workflowの3種類)を取得し、それらを設定ファイルに基づいて変換してpoiでexcel出力しています。メタデータの変換はgroovyがうまく活用できたように思えます。

![image](https://qiita-image-store.s3.amazonaws.com/0/47589/c4188073-b10a-0205-77bb-48d05a6a49a4.png)


## 使い方

1. docforce.ymlを編集
2. ```./gradlew run``` でoutput配下に出力される

```./gradlew run -Pconffile=/path/to/pdocforce.yml```のように任意のパスにある設定ファイルを指定することも可能

### 動作環境

Javaインストール済

### 設定ファイル：docforce.yml

#### inputBaseDir

メタデータファイルのパスを指定する。必須。

#### outputDir

Excelの出力先ディレクトリを指定する。設定しなかった場合、outputディレクトリに出力される

#### resource

カスタムオブジェクト単位で指定する。複数指定可。

| キー            | 説明       |
|:----------------|:-----------|
| object          | オブジェクトのメタデータファイルのinputBaseDirからのパス |
| approvalProcess | 承認プロセスのメタデータファイルのinputBaseDirからのパス。複数指定可 |
| workflow        | ワークフローのメタデータファイルのinputBaseDirからのパス |
| author       　 | タイトルシートに記入される作成者(会社名など) |


#### サンプル

```
inputBaseDir : "src/test/resources/"
outputDir : "output/test"
resources :
    - resource :
          object : "object/Travel_Request__c.object"
          approvalProcesses :
            - "approvalProcess/Travel_Request__c.TravelRequestApprovalProcess.approvalProcess"
          workflow : "workflow/Travel_Request__c.workflow"
          author: "nyasba"
    - resource :
          object : "object/HolidayRequest__c.object"
          approvalProcesses :
          workflow : "workflow/HolidayRequest__c.workflow"
          author: "nyasba"
```

## 今後の話

改版履歴や設定ファイルについては継続的に使っていくにはまだまだ面倒な部分が多いと感じているので適宜開発はしていこうと考えています。
あわせて、force.com移行ツールとセットで活用していく流れは社内展開時にも必要になりますので、githubに手順を書いていきます。もし利用いただける方がいらっしゃいましたらフィードバックいただけると励みになります。