Ajoutez Java et Axis à votre path, par exemple:
JAVA_HOME = C:\Program Files\Java\jdk1.6.0_07 AXIS2_HOME = Q:\SalesForce\WSDL2JAVA_Generation\axis2-1.4.1-bin\axis2-1.4.1
puis, créez un répertoire pour placer vos données. Dans ce répertoire vous pouvez mettre un sous-répertoire pour placer votre WSDL. Puis lancez cette commande:
%AXIS2_HOME%/bin/wsdl2java -t -uri wsdl/enterprise.wsdl -l java -d xmlbeans -p com.salesforce.webservice -sn SforceService -o generated/Salesforce
bien entendu:
- "wsdl/enterprise.wsdl" est le chemin relatif de mon WSDL
- "com.salesforce.webservice" est le nom du package qui contiendra les classes générées
- "generated/Salesforce" est le sous-répertoire qui contiendra les classes du package
Dans mon exemple, a un sous-rpertoire Salesforce est créé dans le répertoire "generated". Il contient:
- [src] qui contient les classes générées
- [resources] qui contient les ressources nécessaires à la connexion avec Salesforce
- [test] qui contient des classes de tests
Empaquetez le contenu du répertoire resources (pas le répertoire lui-même) dans un fichier .jar.
Compilez les classes contenues dans src, et empaquetez-les dans un fichier du nom de salesforce.jar (par exemple).
Ensuite, il vous faut intégrer resources.jar, salesforce.jar et les bibliothèques Axis2 à votre classpath. Pour cela, chacun sa méthode, moi j'utilise Eclipse (pour générer salesforce.jar aussi).
Et voici mon implémentation java:
Voici le constructeur pour mon objet de session Salesforce:
public static final String PROD_SERVER = "https://www.salesforce.com/services/Soap/c/16.0"; public static final String SANDBOX_SERVER = "https://test.salesforce.com/services/Soap/c/16.0"; public Exception exception; private Login login; private SessionHeader sessionHeader; private SessionHeaderDocument sessionHeaderDocument; private String endpoint; private String UserName, PassWord; private int Progress; private String ProgressText; private String server; private SforceServiceStub stub; /** * This constructor initializes a connexion with Saleforce using user name * and password. * * @param UN * Salesforce User Name * @param PW * Salesforce User Password * @throws Exception */ public Salesforce_session(final String UN, final char[] PW) throws Exception { UserName = UN; PassWord = String.valueOf(PW); try { setProgress(0, "Loging"); if (UN.endsWith(".sand")) { endpoint = SANDBOX_SERVER; } else { endpoint = PROD_SERVER; } stub = new SforceServiceStub(endpoint); LoginDocument loginDocument = LoginDocument.Factory.newInstance(); login = Login.Factory.newInstance(); login.setUsername(UserName); login.setPassword(PassWord); loginDocument.setLogin(login); LoginResponseDocument loginResponseDocument = stub.login(loginDocument, null); LoginResponse loginResponse = loginResponseDocument.getLoginResponse(); LoginResult loginResult = loginResponse.getResult(); sessionHeader = SessionHeader.Factory.newInstance(); sessionHeader.setSessionId(loginResult.getSessionId()); sessionHeaderDocument = SessionHeaderDocument.Factory.newInstance(); sessionHeaderDocument.setSessionHeader(sessionHeader); setProgress(10, "Loading service"); fireMyEvent(new MyEvent("Loading Service...")); stub = new SforceServiceStub(loginResult.getServerUrl()); Options options = stub._getServiceClient().getOptions(); fireMyEvent(new MyEvent("Setting Gzip Compression IN...")); options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, Boolean.TRUE); options.setProperty(HTTPConstants.MC_GZIP_REQUEST, Boolean.TRUE); fireMyEvent(new MyEvent("Connexion established")); } catch (AxisFault e) { exception = e; } catch (RemoteException e) { exception = e; } catch (InvalidIdFault e) { exception = e; } catch (UnexpectedErrorFault e) { exception = e; } catch (diva.salesforce.webservice.LoginFault e) { exception = e; } catch (ExceptionInInitializerError e) { exception = (Exception) e.getException(); } }
ainsi que ma méthode de requètes:
/** * Use this method to send SOQL queries to salesforce. * * @param querystr * the SOQL query to send to salesforce. * @return Query Result * @throws RemoteException * @throws InvalidSObjectFault * @throws MalformedQueryFault * @throws InvalidIdFault * @throws InvalidFieldFault * @throws UnexpectedErrorFault * @throws InvalidQueryLocatorFault */ public QueryResult Query(final String querystr) throws RemoteException, InvalidSObjectFault, MalformedQueryFault, InvalidIdFault, InvalidFieldFault, UnexpectedErrorFault, InvalidQueryLocatorFault { Query query; QueryDocument queryDocument; QueryResponseDocument queryResponseDocument; QueryResponse queryResponse; QueryResult queryResult = null; query = Query.Factory.newInstance(); query.setQueryString(querystr); queryDocument = QueryDocument.Factory.newInstance(); queryDocument.setQuery(query); queryResponseDocument = stub.query(queryDocument, sessionHeaderDocument, null, null, null); queryResponse = queryResponseDocument.getQueryResponse(); queryResult = queryResponse.getResult(); return queryResult; }
pareil pour l'insertion en base:
/** * Use this method to insert several {@link SObject} in salesforce. * * @param sObjectsArray * @return a {@link SaveResult} array for each inserted objects * @throws RemoteException * @throws InvalidSObjectFault * @throws InvalidIdFault * @throws InvalidFieldFault * @throws UnexpectedErrorFault */ public SaveResult[] Insert(SObject[] sObjectsArray) throws RemoteException, InvalidSObjectFault, InvalidIdFault, InvalidFieldFault, UnexpectedErrorFault { SaveResult[] saveResultArray = null; // Invoke the create call CreateDocument createDocument = CreateDocument.Factory.newInstance(); Create create = createDocument.addNewCreate(); create.setSObjectsArray(sObjectsArray); CreateResponseDocument createResponseDocument = stub.create(createDocument, sessionHeaderDocument, null, null, null, null, null, null); CreateResponse createResponse = createResponseDocument.getCreateResponse(); saveResultArray = createResponse.getResultArray(); return saveResultArray; }
et la mise-à-jour de champs:
/** * Use this method to update several {@link SObject} in salesforce. * * @param sObjectsArray * @return * @throws RemoteException * @throws InvalidSObjectFault * @throws InvalidIdFault * @throws InvalidFieldFault * @throws UnexpectedErrorFault */ public SaveResult[] Update(SObject[] sObjectsArray) throws RemoteException, InvalidSObjectFault, InvalidIdFault, InvalidFieldFault, UnexpectedErrorFault { SaveResult[] updateResultArray = null; // Invoke the update call UpdateDocument updateDocument = UpdateDocument.Factory.newInstance(); Update update = updateDocument.addNewUpdate(); update.setSObjectsArray(sObjectsArray); UpdateResponseDocument updateResponseDocument = stub.update(updateDocument, sessionHeaderDocument, null, null, null, null, null, null); UpdateResponse updateResponse = updateResponseDocument.getUpdateResponse(); updateResultArray = updateResponse.getResultArray(); return updateResultArray; }
ou la suppression de champs:
/** * This method take an array of object ids to delete ins salesforce. Deleted * object can be retrieved in the recycle bin. * * @param sObjectsIdArray * @return * @throws RemoteException * @throws UnexpectedErrorFault */ public DeleteResult[] Delete(String[] sObjectsIdArray) throws RemoteException, UnexpectedErrorFault { DeleteResult[] deleteResultArray = null; // Invoke the delete call DeleteDocument deleteDocument = DeleteDocument.Factory.newInstance(); com.sforce.soap.enterprise.DeleteDocument.Delete delete = deleteDocument.addNewDelete(); delete.setIdsArray(sObjectsIdArray); DeleteResponseDocument deleteResponseDocument = stub.delete(deleteDocument, sessionHeaderDocument, null, null, null, null, null); DeleteResponse deleteResponse = deleteResponseDocument.getDeleteResponse(); deleteResultArray = deleteResponse.getResultArray(); return deleteResultArray; }
Comme vous pouvez le voir, c'est un peu le même bateau pour chaque méthode.
En espérant vous avoir aidé. Mon post original sur le forum communautaire de Salesforce: http://community.salesforce.com/sforce/board/message?board.id=JAVA_development&message.id=6728#M6728 N'hésitez pas à consulter le site de Salfesforce pour plus d'informations sur les évolutions de la solution : www.salesforce.com/fr
Aucun commentaire:
Enregistrer un commentaire