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 ;)

dimanche 31 janvier 2010

Flasher le bios d'un Acer Aspire One

Si comme moi vous vous êtes retrouvés avec un écran noir à l'allumage de votre netbook, ou que vous vous êtes retrouvé confrontés aux problèmes de compatibilité avec Ubuntu, vous avez surement eu besoin de flasher le bios de votre Acer Aspire One.


Voici donc la marche à suivre:

  1. Méthode "douce"

    Cette première méthode que j'appelerai "sofware", utilise un logiciel de flash sous dos. Vous êtes sous linux? pas de soucis, moi aussi! Seul bemol, cette methode nécessite que votre ordinateur démarre au delà du bios.

    Vous aurez besoin pour cela d'une clé usb, une 128 suffira :)


    • Téléchargez le bios qui vous convient à cette adresse: http://macles.blogspot.com/p/acer-aspire-one-bios.html
    • Téléchargez UNetbootin: http://unetbootin.sourceforge.net/
    • Installez le :)
    • Dans UNetbootin, sélectionnez la distribution FreeDOS
    • Sélectionnez ensuite votre clef usb dans la liste des lecteurs usb (en bas) et validez.
    • Dezippez votre bios sur la clef usb.
    • Redémarrez l'ordinateur clef usb insérée.
    • A l'affichage de démarrage du bios, pressez F12 pour afficher le menu de démarrage.
    • Sélectionnez la clef usb.
    • Choisissez le démarrage sans drivers de freedos.
    • Vous êtes sous un environnement de type dos. Tapez C: puis entrée.
    • Tapez 3310.BAT (si vous avez pris le bios 3310 bien entendu).
    • Voilà ça flash, laissez le finir et redémarrer seul votre ordi. N'interrompez le processus sous aucun prétexte!
  2. Méthode "rude"

    C'est la méthode qui m'a sauvé plus d'une fois lorsque mon bios s'est effacé tout seul, et oui, c'est LE plus gros défaut de l'AAO, et non des moindres: écran noir au démarrage, le black screen of death :).

    Voilà la méthode, assez illisible que j'avais trouvé ici:
    http://forums.futura-sciences.com/materiel-hardware/277493-acer-aspire-one-150-ecran-noir.html#post2178832

    Je vous la traduis:


    • Téléchargez le bios qui vous convient à cette adresse: http://sites.google.com/site/maclesblogspotcom/
    • Dézippez le sur votre clef USB et renommez le fichier .fd en  ZG5IA32.FD (pas sur que ce soit nécessaire mais j'ai jamais eu envie de tester autrement ^^
    • Insérez votre clef USB dans le port de gauche.
    • Démarrez l'ordi en maintenant FN+Echap, maintenir ces touches jusqu'à que le bouton d'allumage clignote.
    • Lachez le touches et appuyez sur le bouton d'allumage pour lancer le flashing.
    • Voilà ça flash, laissez le finir et redémarrer seul votre ordi. N'interrompez le processus sous aucun prétexte!

Twitter