SalesForceのオブジェクトをJavaのAPIで取得し、csvに出力する手順 – その①
SalesForceにJavaのアプリケーションから接続し、(カスタム)オブジェクトの情報を取得して、それをCSVファイルに出力してみましょう。
日次のバッチなどを組んで、他のシステムにデータ連携を行う場合などに応用できると思います。
今回は「その①」です。
Apexコード内ではよく、SOQLによって、SalesForce内のオブジェクトを取得しますよね。こんな感じで。
for (category__c categorySO : [select id, CNo__c, Name from category__c where IsDeleted = false order by CNo__c]) { p.categoryOptionList.add(new SelectOption(categorySO.CNo__c, categorySO.Name)); }
その際に、取得したオブジェクトの型(上記でいうと、「category__c」)にデータを入れていると思いますが、Javaでも同じことをします。こんな感じで。
for (SObject so : rs.getRecords()) { objectList.add((Category__c)so); }
ということは、Java側に、SalesForce側のカスタムオブジェクトの定義に対応するクラスが無いといけないのですが、いちいち手で作成するのは大変です。
また、オブジェクト以外にもSalesForce側のオブジェクトを表現するのに必要なクラスは山ほどあり、それらを手で作成するのは不可能です。
幸いなことに、SalesForceのAPI情報は取得することが可能ですの、それを利用して、Javaのクラスを自動で生成することができます。
前置きが長くなりましたが、早速、自動生成してみましょう。次回の記事では、生成したクラスを使って、実際にSalesForceのデータを取得し、csvに出力してみたいと思います。
Javaクラス自動生成の手順
では、順に説明します。
①プロジェクト作成
まず最初に、EclipseでJavaのプロジェクトを作成します。これは、説明のしやすさ、実際の開発のしやすさを考えてのことで、必須ではありません。私は「TestSFDCConnect」というプロジェクトを作成しました。
②Enterprise WSDLのダウンロード
次に、自組織のオブジェクト等の情報を表現している「Enterprise WSDL」を、SalesForceからダウンロードします。SalesForceにログインし、「開発」⇒「API」を開きましょう。
このページに「Enterprise WSDL の生成」というリンクがありますので、それをクリックします。
すると、上記のような画面になりますので、「Generate」ボタンをクリックすると、下のようなxmlが表示されるはずです。
これが、この組織の定義情報になります。これをもとにJavaクラスを生成するので、これを開発環境のあるローカルのPCに保存します。
●Chromeの場合・・・右クリックして、「名前を付けて保存」。
●IEの場合・・・「ファイル」⇒「名前を付けて保存」。
私は、「C:workspaceTestSFDCConnectenterprise.wsdl」のように、作成したプロジェクトの直下に置きました。
※Eclipseの場合は、ここで「F5」を押すか、プロジェクトを選択して右クリックから「リフレッシュ」でプロジェクトを更新しておきましょうね。
③スクリプトファイルの作成
次に、自動生成のスクリプトファイルを作ります。といっても、難しいことは無く、毎回のコマンド入力の手間を省くために、コマンドをバッチファイルにするだけです。(当然のことながら、SalesForce側で定義を変更した場合は、対応するjavaのファイルも更新するために再生成する必要があります。)
私は、「C:workspaceTestSFDCConnectwsdl2java.bat」のように、作成したプロジェクトの直下に置きました。
中身は、
cd %~dp0 java -classpath libaxis.jar;libcommons-logging-1.0.4.jar;libcommons-discovery-0.2.jar;libjaxrpc.jar;libactivation.jar;libaxis-ant.jar;libsaaj.jar;libwsdl4j-1.5.1.jar;libmail.jar;libactivation.jar org.apache.axis.wsdl.WSDL2Java -a enterprise.wsdl -o src pause
のようにします。生成のもとになるWSDL定義ファイルと、生成したクラスの出力先を指定するわけです。
いくつか、生成に必要なjaファイルがありますね。これも用意しておきましょう。後ほど、JavaのプログラムからSFDCのWebサービスへのアクセスも行いますので、EclipseのBuildパスにも含めておいた方がよいでしょう。
③-1.Apache Axisのダウンロード
このページからApache Axisをダウンロードして解凍します。
私の時は「axis-bin-1_4.zip」でした。これで、
・axis-ant.jar
・axis.jar
・commons-discovery-0.2.jar
・commons-logging-1.0.4.jar
・jaxrpc.jar
・log4j-1.2.8.jar
・saaj.jar
・wsdl4j-1.5.1.jar
がGetできました。
③-2.JavaMailのダウンロード
このページからJavaMailをダウンロードして解凍します。
私の時は「javamail1_4_5.zip」でした。これで、
・mail.jar
をGetします。
③-3.JavaBeans Activation Frameworkのダウンロード
このページからJAFをダウンロードして解凍します。
この時は「jaf-1_0_2-upd2.zip」でした。これで、
・activation.jar
をGetします。
④ファイル生成
それでは、コマンドプロンプトから「wsdl2java.bat」のあるディレクトリに行って、実行してみましょう。
すると、上記のバッチファイルの最後に指定したディレクトリ「C:workspacTestSFDCConnectsrc」に、Javaのクラス(スタブ)ファイルが生成されます。
お疲れ様です。これで、JavaからAPI経由でSalesForceにアクセスできる用意が整いました!最初に環境を用意しておけば、今後が楽ですから、頑張ってください。
もし、
C:MyDownloadsofteclipse_heliosworkspace_heliosTestSFDCConnect>java -classpath libaxis.jar;libcommons-logging-1.0.4.jar;libcommons-discovery-0.2.jar;libjaxrpc.jar;libactivation.jar;libaxis-ant.jar;libsaaj.jar;libwsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java -a sand_enterprise.wsdl -o src 2012/04/02 19:47:59 org.apache.axis.utils.JavaUtils isAttachmentSupported 警告: 要求されたクラス(javax.activation.DataHandler と javax.mail.internet.MimeMultipart)が見つかりません。Attachmentサポートが利用できません。 / [en]-(Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.) java.io.FileNotFoundException: C:MyDownloadsofteclipse_heliosworkspace_heliosTestSFDCConnectsand_enterprise.wsdl (指定されたファイルが見つかりません。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source) at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:369) at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:420) at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:482) at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361) at java.lang.Thread.run(Unknown Source)
のようなエラーが出る場合は、上記の③-2と③-3のjarが無いと考えられます。
タグ:java, Salesforce
[…] 前回の記事(SalesForceのオブジェクトをJavaのAPIで取得し、csvに出力する手順 – その①) で、自組織の情報をもとに、Javaのクラス(スタブ)ファイルを自動生成するところまでを行いまし […]