Apex Wrapper Salesforce Metadata API Part 2

\:cloud: Metadata API

以下の日本語訳です。少々長いので分けています。

https://github.com/financialforcedev/apex-mdapi

#メタデータ取得デモ

[MetadataRetrieveController](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/classes/MetadataRetrieveController.cls)と[metadataretrieve.page](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/pages/metadataretrieve.page)のサンプルは、優れたJSZipライブラリを使用してzip取得ファイルの内容を処理し、Apexで処理するためにzipエントリをコントローラーに戻す方法を示しています。このサンプルでは、​​ファイルデータをコントローラーのリストに格納しますが、適切と思われる方法でファイルを送信または処理することもできます。また、AsyncRequestおよびcheckStatus呼び出しを処理する方法も示しています。楽しんでください、そしてここにスクリーンショットがあります！


![image.png](https://camo.githubusercontent.com/c0cb81af5e2a8366de147b6c2d9f3b1b5e7b8682/68747470733a2f2f7261772e6769746875622e636f6d2f66696e616e6369616c666f7263656465762f617065782d6d646170692f6d61737465722f696d616765732f6d64726574726965766564656d6f2e706e67)


注：私は、JSZipを使用せずに、純粋な100％ネイティブのApexおよびVisualforceの方法でこれをほぼ機能させました。メタデータCRUDAPIを利用して、zipファイルを静的リソースとして動的にアップロードしました。次に、PageReference.getContentを使用してピークに達しました。ただし、名前にスペースが含まれるファイルを含む静的リソースにはバグがあるようです。 URLをどのようにエスケープしても、404を取得しました。これについてはさらに調査しています。だからこのスペースを見てください...


#Metadata Deploy Demo

重要な注意：このデモでは、（理論的にはすべてをテストしていないため）ApexClassを含むメタデータコンポーネントタイプをデプロイできます。多くのユースケースでは、Salesforceが提供する既存のツール（チェンジセット、移行ツールキット（別名Ant）、パッケージ）を使用してApexをデプロイできます。この機能は、ユースケースで必要とされることが確実な場合にのみ使用してください。これは、実稼働環境にデプロイするときに、正しいカバレッジでテストコードをデプロイする必要性を回避しないことに注意してください。

Apexコード（およびCRUD操作でカバーされていない他のメタデータコンポーネントタイプ）をデプロイする機能は、多くの人が求めているようです。 JSZipライブラリを使用して、これを機能させました。また、このライブラリをラップして少し使いやすくするために、いくつかのVisualforceコンポーネントを作成することにしました。これらのコンポーネントはzip、zipEntry、unzipと呼ばれ、このデモと上記のデモで使用されているページで実際の動作を確認できます。

エラー処理を説明するために、フィードバックの取得は成功したものと同じようにソリューションの重要な側面であるため、意図的に失敗した展開をスクリーンショットに示しました。サンプルの主要な実装部分を以下に示します。お楽しみください。

![image.png](https://camo.githubusercontent.com/61386c422ebf0d66a03de08dc0bb9e3d5ef4b50e/68747470733a2f2f7261772e6769746875622e636f6d2f66696e616e6369616c666f7263656465762f617065782d6d646170692f6d61737465722f696d616765732f6d646465706c6f7964656d6f2e706e67)

注：上記の2つの例では、Visualforce状態（別名Viewstate）とVisualforceAJAXを使用しています。これにより、交換されるファイルとzipファイルのサイズが制限されます。 JavaScript Remotingを使用すると、ファイルサイズの柔軟性が向上します（ドキュメントには、15MBの応答サイズがサポートされていると記載されています）。ただし、これはカスタムオブジェクトに状態を保存することを意味します。これらのサンプルでは、​​これが少し複雑になるのを避けたかったのです。以下に示すように、私は最近（2012年12月）別のリポジトリのzipコンポーネントを拡張しました。これらはこのリポジトリのコンポーネントに基づいているため、レトロフィットするのはかなり簡単です。最初にサンプルを見てください。最後に、他のほとんどのメタデータコンポーネントタイプでも、上記のようにCRUD操作を使用できることに注意してください。これにより、zipファイルの処理が回避されます。

完全なコードについては、[MetadataDeployController](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/classes/MetadataDeployController.cls)と[metadatadeploy.page](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/pages/metadatadeploy.page)を確認できます。いくつかのzipVFコンポーネントも含まれています。 2012年12月から、[ここに](https://github.com/financialforcedev/apex-zip)zip処理専用のリポジトリを作成しました。これらに興味がある場合は、このリポジトリを参照して最新情報を入手してください。

#Metadata Explore Demo

最近のSenchaのスキルで、describeMetadataAPI呼び出しを使用してメタデータエクスプローラーツールのルーツを開始できるかどうかを確認することにしました。私はそれの基本をレポにコミットしました、これはあなたにアイデアを与えるためのスクリーンショットです。これは、Sencha StoresとTreeコントロールを使用して、ユーザーがメタデータタイプを展開するときにツリーを段階的にロードすることで機能します。とても楽しいです！

![image.png](https://camo.githubusercontent.com/6e9272d78445bdce5fe5fb215aaaec933607f11c/68747470733a2f2f7261772e6769746875622e636f6d2f66696e616e6369616c666f7263656465762f617065782d6d646170692f6d61737465722f696d616765732f6d6462726f77736564656d6f2e706e67)

[ここでは](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/pages/metadatabrowser.page)、Senchaストアのデータプロキシとして[metadatadataページ](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/pages/metadatadata.page)を利用して、Senchaコードを主に含むVisualforceページを調べることができます。このデータプロキシページのコントローラーは[こちら](https://github.com/financialforcedev/apex-mdapi/blob/master/apex-mdapi/src/classes/MetadataDataController.cls)です。これは、Senchaストアで使用されるJSONデータ（describeMetadata API呼び出しへの呼び出しを使用）を発行します。