Developer

Metadataからリストビューを取得変更してみました【Salesforce】

Developer
この記事は約6分で読めます。

こんにちは、アンダーソンです。
今回は、MetadataAPIを使ってSalesforceのリストビューを取得して、
その後条件を変更するという事をやってみました。

スポンサーリンク

なぜそんな事を?

今回お客様から、商談のフェーズを一つ廃止して、別の値に変えたいという要件が飛び込んできました。
そこでまず調査として、フェーズのその値がどこで使われているかを調べるためにMetadataからリストビューを取得した事から始まりました。

まず取得

リストビューのMetadataはカスタムオブジェクトの中に入っています。
今回使用したエディタはVSCodeです。
まず下記のようにpackage.xmlを変更します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>Opportunity</members>
        <name>CustomObject</name>
    </types>
    <version>50.0</version>
</Package>

でソース取得のコマンドを実行します。

sfdx force:source:retrieve --manifest ./manifest/package.xml

これでObjectフォルダが作成されますのでその中のOpportunityを開きます。
中に入ってるのは次のフォルダになります。

  • businessProcesses
  • fields
  • listViews
  • recordTypes
  • webLinks

プラスOpportunity.object-meta.xmlが用意されます。

この中のlistViewsを開くと組織のリストビューをメタデータとして見ることができます。形式としては下記のような感じです。

<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>ClosingThisMonth</fullName>
    <booleanFilter>1 OR 2</booleanFilter>
    <columns>OPPORTUNITY.NAME</columns>
    <columns>ACCOUNT.NAME</columns>
    <columns>OPPORTUNITY.AMOUNT</columns>
    <columns>OPPORTUNITY.CLOSE_DATE</columns>
    <columns>OPPORTUNITY.STAGE_NAME</columns>
    <columns>CORE.USERS.ALIAS</columns>
    <filterScope>Everything</filterScope>
    <filters>
        <field>OPPORTUNITY.CLOSED</field>
        <operation>equals</operation>
        <value>0</value>
    </filters>
    <filters>
        <field>OPPORTUNITY.CLOSE_DATE</field>
        <operation>equals</operation>
        <value>THIS_MONTH</value>
    </filters>
    <label>今月クローズ</label>
</ListView>

それぞれの属性を残しておくと

属性説明
fullNameリストビューのAPI名
booleanFilter条件ロジックの内容
columns表示させてるカラム。標準項目の時はOPPORTUNITY.ってなってるので要注意
filterScope私の〇〇とか全ての〇〇のところ。Everythingとかmineとかになる
filters検索条件。複数ある場合はその数分属性がある
field検索条件に使われる項目名
operation検索条件の条件(?)。一致する、含むとかのやつ詳しくはここで
value検索の値
labelリストビューのリスト名

とりあえずこれで取得して、filtersのところにフェーズの廃止する値を含んでないかをGrep検索かけて探しました。

一気にデプロイもしちゃえる

Grep検索かけて探してふとおもいました。

置き換えてデプロイしたら変わるんでは。。
そうです。変更できるんです。

でことで先程のビューを変更してみましょう。

二つ目の条件のTHIS_MONTHをLAST_MONTHに変更して、
1 OR 2の条件を消して全部にします。
できたファイルが下記のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>ClosingThisMonth</fullName>
    <columns>OPPORTUNITY.NAME</columns>
    <columns>ACCOUNT.NAME</columns>
    <columns>OPPORTUNITY.AMOUNT</columns>
    <columns>OPPORTUNITY.CLOSE_DATE</columns>
    <columns>OPPORTUNITY.STAGE_NAME</columns>
    <columns>CORE.USERS.ALIAS</columns>
    <filterScope>Everything</filterScope>
    <filters>
        <field>OPPORTUNITY.CLOSED</field>
        <operation>equals</operation>
        <value>0</value>
    </filters>
    <filters>
        <field>OPPORTUNITY.CLOSE_DATE</field>
        <operation>equals</operation>
        <value>LAST_MONTH</value>
    </filters>
    <label>今月クローズ</label>
</ListView>

で実行します。

sfdx force:source:deploy --sourcepath ./force-app/main/default//objects/Opportunity/listViews/ClosingThisMonth.listView-meta.xml

するとこんなリストビューだったのが。。。

うまく条件が変更されましたね。

上手く使えば効率よく変更できそうです。

まとめ

MetadataAPIは正直かなりややこしいですね笑
ListViewのMetadataAPIのページがあるからとずっとname属性にListViewを入れてたんですが、まさかの商談オブジェクト内にあるとは。。。

でも操れるようになるとかなり時間効率をあげられると思いました。
引き続き勉強していきたいと思います!