SForceAPI: невозможно найти классы, перечисленные в API? (Учетная запись, контакт и т. Д.) - PullRequest
1 голос
/ 27 декабря 2010

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']

Однако я не смог найти класс Account в сгенерированных классах. Я думаю, что у меня неправильный подход, но, по крайней мере, я должен найти классы, перечисленные в справочном API.

Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

Партнерский WSDL имеет слабо типизированную модель данных, которая позволяет взаимодействовать с данными любой организации без предварительного ознакомления с ее схемой - вы просто получаете SObjects.Напротив, WSDL enterprise строго типизирован и имеет искомые типы учетных записей, контактов и т. Д. - см. Также 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 .Существует также REST API , но он в настоящее время (январь 2011 г.) находится в предварительном просмотре для разработчиков, а не для производственного развертывания.

1 голос
/ 15 июля 2011

Чтобы добавить к ответу, опубликованному «metadaddy» и помочь «Firefox», а также многим другим, которые могут наткнуться на этот ответ, я хочу поделиться некоторыми наблюдениями из личного опыта:

  1. Очень легко использовать партнерский WSDL из Salesforce.com (SFDC) с Axis (например, Axis 1.4), но очень сложно использовать партнерский WSDL с Axis2 (например, Axis2 1.5.1 или 1.6.0).
  2. Чтобы использовать партнерский WSDL с Axis2, вам в основном необходимо создать факсимиле объектов, созданных из корпоративного WSDL.Если вы решите использовать этот подход, также создайте заглушки из корпоративного WSDL и используйте код, созданный для «Учетной записи», «Контакта» и т. Д., В качестве отправной точки для создания пользовательских экземпляров «SObject».
  3. При этом я просто рекомендую использовать корпоративный WSDL с Axis2.Если вы чувствуете необходимость использовать партнерский WSDL с какой-либо версией Axis, используйте ее с предыдущей версией Axis.

Поиск в Google покажет, что многие люди согласны с моей оценкой.

Еще лучше, хотя я не использовал его, я бы рекомендовал вместо этого использовать REST API SFDC.

0 голосов
/ 30 декабря 2010

Чтобы ответить на ваш второй вопрос ... Посмотрите на раздел, начинающийся здесь: http://www.salesforce.com/us/developer/docs/api/index_Left.htm#CSHID=sforce_api_partner.htm|StartTopic=Content%2Fsforce_api_partner.htm|SkinName=webhelp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...