vendredi 26 février 2010

Fiche récapitulative des accesseurs en jquery

 Voici un fiche très pratique pour un débutant comme un développeur confirmé. Elle récapitule la liste des accesseurs aux différents élément d'une page html en jQuery:


C'est vraiment la base de jQuery, mais ce sont 6 pages indispensables :)

vendredi 5 février 2010

Générer ses classes java à partir de l'enterprise.wsdl de Salesforce avec Axis 2

Voici un méthode que j'avais posté il y a quelques temps sur les forum de Salesforce pour générer des classes Java à partir du fichier enterprise.wsdl et axis 2 sous windows. J'utilise wsdl2java pour générer les classes.





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

mardi 2 février 2010

Dyzplastic Production Blog: Android mini collectibles



Une fois n'est pas coutume, je vous donne un lien vers un objet que tout fan d'Android qui se respecte se doit de posséder! Je vous laisse découvrir:

Dyzplastic Production Blog: Android mini collectibles

Add Prefix and/or Suffix to Each Text Line

Un outils intéressant pour les développeurs :)

Add Prefix and/or Suffix to Each Text Line

Ce site permet de coller un texte, et d'entourer chaque ligne d'un préfixe et d'un suffixe.

Bon certe ce n'est pas la panacée, on peut faire mieux avec un grep, mais ça peut dépanner ;)

Twitter