#やりたいこと
不要になったソースをクラスごと消したい。がしかし、sandbox上では削除できるんだけども、本番環境は削除できない。
sandboxから削除したという情報をリリースもできない。
詰んでしまった👼👼👼
そこで、調べてみると、 destructiveChanges.xml
をリリースすることで削除できるということがわかりました。
#やりかた
##ファイルを作る
ファイルを2つつくります。階層は下記のようにしてください。
folder
├──package.xml
└──destructiveChanges.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<version>41.0</version> <!-- APIバージョン -->
</Package>
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>codepkg</fullName>
<types>
<!-- 消したいクラスの名前をmembersに -->
<members>OpportunityRefAccountUpdTriggerHandler</members>
<members>OpportunityRefAccountUpdTriggerHdlTest</members>
<name>ApexClass</name>
</types>
<types>
<!-- 消したいトリガーの名前をmembersに -->
<members>OpportunityRefAccountUpdTrigger</members>
<name>ApexTrigger</name>
</types>
<version>41.0</version>
</Package>
カスタムオブジェクトなども削除できるみたいです。
##作ったファイルをZipにします
ここからが苦労ポイントでした。
Mac先生の標準機能でフォルダを圧縮すると、余計な隠しファイルを入れてきます。
そいつが悪さする。すごく。
この状態で以降の処理をすると「No package.xml file found」のエラーになってしまうので、もしそのエラーが出たら、隠しファイルを疑ってみてください。
Macで作った手順。
###zipファイルを作る
zip -r archive ./folder
###中身を見る
unzip -l ./archive.zip
はい、余計な隠しファイルがいる!
Archive: ./archive.zip
Length Date Time Name
-------- ---- ---- ----
0 11-09-17 18:48 folder/
6148 11-09-17 18:41 folder/.DS_Store <--おまえだ
603 11-09-17 17:26 folder/destructiveChanges.xml
135 11-09-17 17:28 folder/package.xml
-------- -------
6886 4 files
###隠しファイルを消す
zip -d ./archive.zip folder/.DS_Store
Archive: ./archive.zip
Length Date Time Name
-------- ---- ---- ----
0 11-09-17 18:48 folder/
603 11-09-17 17:26 folder/destructiveChanges.xml
135 11-09-17 17:28 folder/package.xml
-------- -------
738 3 files
消えました
これでZipファイルの作成は完了です。
##Workbench
Salesforceにログインをしたあと、workbenchにアクセスします。
認証しましょう。
Deploy
を押せば完了
#参考にしたもの
https://help.salesforce.com/articleView?id=000187562&language=ja&type=1
https://medium.com/@wangyidan621/salesforce-workbench-zip-deployment-no-package-xml-found-error-on-mac-ec7ce49a7126