SFORCEAPI:APIにリストされているクラスを見つけることができませんか? (アカウント、連絡先など)

StackOverflow https://stackoverflow.com/questions/4536991

質問

紹介されたAPI: http://www.salesforce.com/us/developer/docs/api/index.htm
サブセクション:参照 - >標準オブジェクト

クライアントサイドの詳細: partner.wsdl、axis2 1.5, 、解放されたオプション(-U)を使用した生成されたスタブ。

アカウント、連絡先などの基本的なオブジェクト(上記のURLにリストされている)を見つけたいと思っていました。

-> SObject[] sObjArray = queryResult.getRecords(); 

   for(SObject sObj : sObjArray){
     Account acc = [Account] sObj; 
   }

別のウェブサービスで上記のアプローチを正常に使用 - 「Zuora」

ただし、生成されたクラスにアカウントクラスが見つかりませんでした。私は間違ったアプローチに夢中になっていると思いますが、少なくともリファレンスAPIにリストされているクラスを見つけるべきです。

助けてください。

役に立ちましたか?

解決

パートナーWSDLには、スキーマが事前に知られていない組織のデータとの相互作用を可能にするゆるい型のデータモデルがあります。対照的に、 企業 WSDLは強く入力されており、お探しのアカウント、連絡先などのタイプがあります - 参照 http://www.salesforce.com/us/developer/docs/api/content/sforce_api_partner.htm

また、組織の需要のエンタープライズWSDLを生成するため、カスタムタイプ(またはセールスフォース用語)が含まれます。

コメントに答えるために更新されました...

でスタブを生成しました

wsdl2java.sh -uri ~/soapclient/partner.wsdl.xml -p com.superpat.partner -d adb -u -s

私はAxis2の専門家ではありませんが、私は一緒に次のことをハッキングしました、そしてそれはうまくいくようです:

package axis2partner;

import com.sforce.soap.partner.Login;
import com.sforce.soap.partner.LoginResult;
import com.sforce.soap.partner.Query;
import com.sforce.soap.partner.QueryResult;
import com.sforce.soap.partner.SessionHeader;
import com.sforce.soap.partner.sobject.SObject;
import com.superpat.partner.SforceServiceStub;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.axiom.om.OMElement;

public class Main {
    private static String username = "user@example.com";
    private static String password = "password";
    private static String securityToken = "SECURITY_TOKEN";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            // First, login to get a session ID and server URL
            SforceServiceStub loginStub = new SforceServiceStub();

            Login login = new Login();

            login.setUsername(username);
            login.setPassword(password + securityToken);

            LoginResult loginResult
                    = loginStub.login(login, null, null).getResult();

            // Now make a stub for the correct service instance
            SforceServiceStub serviceStub
                    = new SforceServiceStub(loginResult.getServerUrl());

            SessionHeader sessionHeader = new SessionHeader();
            sessionHeader.setSessionId(loginResult.getSessionId());

            // Now we can execute the actual query
            Query query = new Query();
            query.setQueryString("SELECT Id, Name, AccountNumber, BillingCity,"
                    + " BillingState, Description FROM Account");

            QueryResult queryResult = serviceStub.query(query, sessionHeader,
                    null, null, null, null).getResult();

            SObject[] sObjArray = queryResult.getRecords();

            for ( SObject sObj : sObjArray ) {
                System.out.println(sObj.getId());
                for ( OMElement omElement : sObj.getExtraElement() ) {
                    System.out.println("\t" + omElement.getLocalName() + ": "
                            + omElement.getText());
                }
            }
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

私の開発組織では、これはフォームの出力を生成します。

0015000000VALE3AAP
    Id: 0015000000VALE3AAP
    Name: United Oil & Gas Corp.
    AccountNumber: CD355118
    BillingCity: New York
    BillingState: NY
    Description: World's third largest oil and gas company.

注 - 生の石鹸インターフェイスはかなり一般的であり、Force.com APIを使用する最も簡単な方法ではありません。あなたはを見てみたいかもしれません Force.com Webサービスコネクタ. 。 aもあります REST API, 、しかし、それは現在(2011年1月)開発者プレビューであり、生産展開ではありません。

他のヒント

「Metadaddy」によって投稿された回答に追加し、「Firefox」とこの答えにつまずく可能性のある他の多くの人々を支援するために、個人的な経験からいくつかの観察結果を共有したいと思います。

  1. 軸を持つSalesforce.com(SFDC)のパートナーWSDLを使用するのは非常に簡単ですが(軸1.4など)、axis2(axis2 1.5.1または1.6.0)でパートナーWSDLを使用することは非常に困難です。
  2. Axis2を使用してパートナーWSDLを使用するには、基本的にエンタープライズWSDLから作成されたオブジェクトのファクシミリを作成する必要があります。このアプローチを使用することにした場合、エンタープライズWSDLからスタブを生成し、「アカウント」、「連絡」などに生成されたコードを使用して、カスタム「Sobject」インスタンスを作成する出発点として使用します。
  3. とはいえ、私の推奨事項は、単純に、axis2を使用してエンタープライズWSDLを使用することです。パートナーWSDLを軸のバージョンで使用することを強いられている場合は、以前のバージョンのAxisで使用してください。

Googleでの検索では、多くの人が私の評価に同意することが示されます。

さらに良いことに、私はそれを使用していませんが、代わりにSFDCのREST APIの使用を検討することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top