1

API 参考: http: //www.salesforce.com/us/developer/docs/api/index.htm
小节:reference->standard objects

客户端详细信息:partner.wsdl、Axis2 1.5、使用解压缩选项 (-u) 生成的存根。

我希望找到一些基本对象,如帐户、联系人等(在上面的 url 中列出),这样我就可以做类似的事情

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

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

[在另一个网络服务中成功使用上述方法 - 'Zuora']

但是,我在生成的类中找不到 Account 类。我想我采用了错误的方法,但至少我应该找到参考 API 中列出的类。

请帮忙。

4

3 回答 3

2

合作伙伴 WSDL 有一个松散类型的数据模型,它允许与任何组织的数据进行交互,而无需事先知道其模式——您只需获得 SObjects。相比之下,企业WSDL 是强类型的,并且具有您正在寻找的 Account、Contact 等类型 - 请参阅http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_partner.htm

此外,由于您为您的组织按需生成企业 WSDL,它包括您的自定义类型(或对象,用 Salesforce 的说法)。

[已更新以回答评论...]

我生成了存根

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.

注意 - 原始 SOAP 接口非常通用,并不是使用 Force.com API 的最简单方法。您可能想看看Force.com Web 服务连接器。还有一个REST API,但目前(2011 年 1 月)处于开发人员预览版中,不适用于生产部署。

于 2010-12-27T18:24:12.340 回答
1

为了补充“metadaddy”发布的回复并帮助“Firefox”以及许多其他可能偶然发现这个答案的人,我想分享一些个人经验的观察:

  1. 将来自 Salesforce.com (SFDC) 的合作伙伴 WSDL 与 Axis(例如 Axis 1.4)一起使用非常容易,但是将合作伙伴 WSDL 与 Axis2(例如 Axis2 1.5.1 或 1.6.0)一起使用非常困难。
  2. 要将合作伙伴 WSDL 与 Axis2 一起使用,您基本上需要创建从企业 WSDL 创建的对象的副本。如果您决定使用这种方法,也可以从企业 WSDL 生成存根,并使用为“Account”、“Contact”等生成的代码作为创建自定义“SObject”实例的起点。
  3. 也就是说,我的建议很简单,就是将企业 WSDL 与 Axis2 一起使用。如果您觉得有必要将合作伙伴 WSDL 与某个版本的 Axis 一起使用,请将其与先前版本的 Axis 一起使用。

在谷歌上搜索会发现很多人都同意我的评估。

更好的是,虽然我没有使用过它,但我建议您考虑改用 SFDC 的 REST API。

于 2011-07-15T16:17:26.380 回答
0

要回答你的第二个问题......看看从这里开始的部分:http: //www.salesforce.com/us/developer/docs/api/index_Left.htm#CSHID=sforce_api_partner.htm |StartTopic=Content%2Fsforce_api_partner .htm|皮肤名称=webhelp

于 2010-12-30T15:06:14.313 回答