2009-07-12 6 views
8

Esistono risorse online che mostrano i passaggi di base per accedere al servizio Web in loco di Microsoft CRM con un client scritto in Java?Connessione al servizio Web in locale di Microsoft Dynamics CRM con Java?

Quale kit di strumenti del servizio Web devo utilizzare?

Ho provato con JAXB ma c'è un conflitto nella denominazione dell'elemento WSDL che richiede una personalizzazione della classe. Se trovo la correzione vincolante corretta, la posterò qui.

+0

hai implementato MS Dynamics CRM, in caso affermativo consentono di guidarmi per raggiungere lo stesso. cercando la tua risposta –

+0

@SenthilMg no abbiamo usato un client WCF e un semplice scambio di messaggi basato su file. Vedi sotto per un suggerimento sull'Asse 2 che può essere usato. – mjn

+0

sto affrontando un problema Ho bisogno di aiuto per correggere l'errore, org.apache.axis2.AxisFault: errore di trasporto: 401 Errore: non autorizzato su org.apache.axis2.transport.http.HTTPSender.handleResponse (HTTPSender.java:296) all'indirizzo org.apache.axis2.transport.http.HTTPSender.sendViaPost (HTTPSender.java:190) all'indirizzo org.apache.axis2.transport.http.HTTPSender.send (HTTPSender.java:75) all'indirizzo org.apache.axis2.transport .http.CommonsHTTPTransportSender.writeMessageWithCommo ns (CommonsHTTPTransportSender.java:364) su org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke (CommonsHTTPTra nsportSender.java:208) .. –

risposta

8

L'applicazione Microsoft Dynamics CRM in versione locale utilizza l'autenticazione di Active Directory. Anche se non ho mai provato a fare riferimento ai servizi Web Microsoft Dynamics CRM da Java, sono sicuro che sia fattibile, in quanto si tratta di servizi Web standard e quindi è possibile fare riferimento a Java tramite SOAP, proprio come qualsiasi altro servizio 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 
} 
+0

Questo codice sorgente sembra buono, quasi esattamente come il codice di esempio C# (che ho usato con successo). Sai quale toolkit SOAP ha generato le classi di stub del servizio in Java? – mjn

+0

@Joe, ho provato il tuo snippet fornito qui ma non ha esito positivo, puoi fornire il tuo prezioso suggerimento per implementare CRM. Errore con RetrieveMultipleDocument rmd = RetrieveMultipleDocument.Factory.newInstance(); –

+0

xception in thread "main" java.lang.ExceptionInInitializerError \t a com.microsoft.schemas.crm._2007.webservices.ExecuteDocument $ Execute $ Factory.newInstance (ExecuteDocument.java:70) \t a javaMSCRM.Login.main (Login.java:44) Causato da: java.lang.RuntimeException: Impossibile caricare SchemaTypeSystem. Impossibile caricare la classe con nome schemaorg_apache_xmlbeans.system.s0C7B6541D611A1749D5105A4C55EC974.TypeSystemHolder. –

1

Lo stub è stato creato con il framework Apache Axis2.

0

È possibile trovare le risorse qui. Puoi persino lavorare con un esempio disponibile in Dynamics CRM SDK. Come ha detto Manuel Freiholz, devi usare Axis2.

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

http://blogs.msdn.com/b/dynamics-coe/archive/2013/09/21/integrating-microsoft-dynamics-crm-2011-online-with-java-and-other-non-net-clients.aspx

In alternativa, è possibile utilizzare i servizi RESTful Web attraverso l'interfaccia OData offerto da Dynamics (https://msdn.microsoft.com/en-us/library/gg334279.aspx)