9
votes

Connexion au service Web de Microsoft Dynamics CRM sur site Web avec Java?

Y a-t-il des ressources en ligne qui montrent les étapes de base pour accéder au service Web Microsoft CRM sur site avec un client écrit en Java?

Quelle boîte à outils de service Web devrais-je utiliser?

Je l'ai essayé avec Jaxb, mais il y a un conflit dans l'élément WSDL Noming qui nécessite une personnalisation de classe. Si je trouve le correctif correct correct, je le posterai ici.


5 commentaires

Avez-vous mis en œuvre Mme Dynamics CRM, si cela vous permet de me guider pour atteindre la même chose. Vous cherchez une réponse.


@Senthilmg Non Nous avons utilisé un client WCF et un échange de messages basé sur un fichier simple. Voir ci-dessous pour un indice que l'axe 2 peut être utilisé.


Je suis confronté à un problème Besoin d'aide pour corriger l'erreur, org.apache.axis2.axisfault: Erreur de transport: 401 Erreur: non autorisé à org.apache.axis2.transport.http.htttptender.Handleresponse (ht tpsender.java:296 ) à org.apache.axis2.transport.http.httpender.sendviapost (https Ender.java:190) à org.apache.axis2.transport.http.htttttpender.send (httpssender.j AVA: 75) à Org. apache.axis2.transport.http.conshttpTransportSender.w ritemessagewithcommo ns (Commonshttptran sportifender.java:364) à org.apache.axis2.transport.http.conshttptransport.i Nvoke (Commonshttptra Nsportsender. Java: 208) ..


@Senthilmg Cela devrait être une nouvelle question. On dirait que les informations d'identification de l'utilisateur sont erronées. Essayez de transmettre le même nom d'utilisateur et Passwort que vous utilisez dans un navigateur pour accéder au WSDL. Le code indiqué dans la réponse ci-dessous utilise l'authentification NTLM, est-ce la même méthode d'authentification dans votre environnement?


Ci-dessous la réponse, obtenez une erreur ci-dessus à la rétréclultiperesponsedocument RMRD = Stub.retrieRievemultiple (RMD, CATD, NULL, NULL); de l'aide?


4 Réponses :


8
votes

L'application Microsoft Dynamics CRM sur la version de principe utilise une authentification Active Directory. Bien que je n'ai jamais essayé de référencer les services Web de Microsoft Dynamics CRM de Java, je suis sûr qu'il est réalisable, car ils sont des services Web standard et ceux-ci peuvent être référencés de Java via SOAP, tout comme n'importe quel autre service Web.

public class TestCRM {  

private static String endpointURL = "http://server:port/MSCrmServices/2007/CrmService.asmx";  
private static String userName = "username";  
private static String password = "password";  
private static String host = "server";  
private static int portport = port;  

//To make sure you are using the correct domain open ie and try to reach the service. The same domain you entered there is needed here  
private static String domain = "DOMAIN";   

private static String orgName = "THIS_IS_REQUIRED"; //this does the work....  


public static void main(String[] args) {  

    CrmServiceStub stub;  
    try {  
        stub = new CrmServiceStub(endpointURL);  
        setOptions(stub._getServiceClient().getOptions());  

        RetrieveMultipleDocument rmd = RetrieveMultipleDocument.Factory.newInstance();  
        RetrieveMultiple rm = RetrieveMultiple.Factory.newInstance();  

        QueryExpression query = QueryExpression.Factory.newInstance();  
        query.setColumnSet(AllColumns.Factory.newInstance());  
        query.setEntityName(EntityName.######.toString());  
        //query.setFilter...  

        rm.setQuery(query);  
        rmd.setRetrieveMultiple(rm);  

        //Now this is required. Without it all i got was 401s errors  
        CrmAuthenticationTokenDocument catd = CrmAuthenticationTokenDocument.Factory.newInstance();  
        CrmAuthenticationToken token = CrmAuthenticationToken.Factory.newInstance();  
        token.setAuthenticationType(0);     
        token.setOrganizationName(orgName);  
        catd.setCrmAuthenticationToken(token);  

        boolean fetchNext = true;  
        while(fetchNext){  
            RetrieveMultipleResponseDocument rmrd = stub.RetrieveMultiple(rmd,  catd, null, null);  
            RetrieveMultipleResponse rmr = rmrd.getRetrieveMultipleResponse();  
            BusinessEntityCollection bec = rmr.getRetrieveMultipleResult();  

            String pagingCookie = bec.getPagingCookie();  
            fetchNext = bec.getMoreRecords();  

            ArrayOfBusinessEntity aobe = bec.getBusinessEntities();  
            BusinessEntity[] myEntitiesAtLast = aobe.getBusinessEntityArray();  

            for(int i=0; i<myEntitiesAtLast.length; i++){  
                //cast to whatever you asked for...  
                ### myEntity = (###) myEntitiesAtLast[i];  
            }  
        }  
    }   
    catch (Exception e) {  
        e.printStackTrace();  
    }  
}  

private static void setOptions(Options options){  
    HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();  

    List authSchemes = new ArrayList();  
    authSchemes.add(HttpTransportProperties.Authenticator.NTLM);   
    auth.setAuthSchemes(authSchemes);   

    auth.setUsername(userName);  
    auth.setPassword(password);  
    auth.setHost(host);  
    auth.setPort(port);  
    auth.setDomain(domain);  
    auth.setPreemptiveAuthentication(false); //it doesnt matter...  
    options.setProperty(HTTPConstants.AUTHENTICATE, auth);  
    options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "true"); //i think this is good.. not required though  
} 


5 commentaires

Ce code source a l'air bien, presque exactement comme le code exemple C # (que j'ai utilisé avec succès). Savez-vous quelle boîte à outils SOAP a généré les classes de service de service en Java?


@Joe, j'ai essayé votre extrait que votre extrait est fourni ici, mais il en résulte une non-reprise, pouvez-vous fournir votre précieuse suggestion à mettre en œuvre une erreur de CRM.Shoveing ​​à la rétréclultipedocument rmd = rétraviénultipedocument.factory.newinstance ();


xception in thread "principale" java.lang.exationninitializImizerError à com.microsoft.schemas.crm._2007.webservices.executeocument $ Execute $ usine.Newi Nstance (Executéocum Entnava:70) à Javamscrm.login.main (LOGIN.JAVA:44) Causé par: Java.Lang.RuntimeException: ne peut pas charger le schémaTypeSystem. Impossible de charger la classe avec nom schemaorg_apache_xmlbeans.system.s0c7b6541d611A1749D5105A4C5 5ec974.typeSystemhol der.


@joe, besoin d'aide pour corriger l'erreur, org.apache.axis2.axisfault: Erreur de transport: 401 Erreur: non autorisé à org.apache.axis2.transport.http.httttpender.Handleresponse (ht tpsender.java:296) à org .apache.axis2.transport.http.httpender.sendviapost (https Ender.java:190) à org.apache.axis2.transport.http.httptors.send (httpsender.j Ava: 75) à org.apache.axis2 .Transport.http.conshttpTransportSender.w ritemessagewithcommo ns (CommonshttpTransp ortsender.java:364) à org.apache.axis2.transport.http.conshttptransportsender.i Nvoke (Commonshttptra NsportSender.java:20 8)


@joe - À quoi ressemblerait le code pour se connecter à CRM 2011? Une idée?



1
votes

Le talon a été créé avec le cadre Apache Axis2.


0 commentaires

4
votes

0
votes

Vous pouvez trouver des ressources ici. Vous pouvez même travailler avec un exemple est disponible dans Dynamics CRM SDK. Comme le dit Manuel Freiolz, vous devez utiliser Axis2.

https://msdn.microsoft.com /en-us/library/jj602979(V=CRM.5).aspx

http://blogs.msdn.com/b/dynamics-coe/archive/2013/09/21/integring-microsoft-dynamics-crm-2011- Online-avec-Java-and-Autres-non-Net-Clients.aspx

Alternativement, vous pouvez utiliser des services Web reposants via l'interface ODATA proposée par dynamique ( https://msdn.microsoft.com/en-us/library/gg334279.aspx )


0 commentaires