2009-07-12 15 views
8

Czy są dostępne zasoby online, które przedstawiają podstawowe kroki umożliwiające uzyskanie dostępu do lokalnej usługi Microsoft CRM za pośrednictwem klienta napisanego w języku Java?Nawiązanie lokalnej usługi WWW systemu Microsoft Dynamics CRM za pomocą Java?

Z jakiego zestawu narzędzi do obsługi sieci należy korzystać?

Próbowałem go z JAXB, ale istnieje konflikt w nazwie elementu WSDL, który wymaga dostosowania klasy. Jeśli znajdę poprawną poprawkę wiążącą, opublikuję ją tutaj.

+0

czy wdrożone MS Dynamics CRM, jeśli tak, niech pan mnie prowadził do osiągnięcia to samo. szukam odpowiedzi. –

+0

@SenthilMg Nie użyliśmy klienta WCF i prostej wymiany wiadomości opartej na plikach. Zobacz poniżej podpowiedź, że można użyć osi 2. – mjn

+0

Mam do czynienia z problemem Potrzebuję pomocy, aby naprawić błąd, org.apache.axis2.AxisFault: Błąd transportu: 401 Błąd: Nieautoryzowane w org.apache.axis2.transport.http.HTTPSender.handleResponse (HTTPSender.java:296) w org.apache.axis2.transport.http.HTTPSender.sendViaPost (HTTPSender.java:190) at org.apache.axis2.transport.http.HTTPSender.send (HTTPSender.java:75) at org.apache.axis2.transport .http.CommonsHTTPTransportSender.writeMessageWithCommo ns (CommonsHTTPTransportSender.java:364) at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke (CommonsHTTPTra nsportSender.java:208) .. –

Odpowiedz

8

Aplikacja Microsoft Dynamics CRM w wersji podstawowej korzysta z uwierzytelniania Active Directory. Chociaż nigdy nie próbowałem odwoływać się do usług internetowych Microsoft Dynamics CRM z Java, jestem pewien, że jest to wykonalne, ponieważ są to standardowe usługi sieciowe i dlatego można je odwoływać się z Javy przez SOAP, tak jak każda inna usługa internetowa.

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

Ten kod źródłowy wygląda dobrze, prawie dokładnie tak jak kod przykładowy C# (z którego z powodzeniem korzystałem). Czy wiesz, który zestaw narzędzi SOAP wygenerował klasy pośredniczące dla usług w języku Java? – mjn

+0

@Joe, wypróbowałem podany tutaj fragment kodu, ale skutkuje to niepowodzeniem, proszę podać cenne sugestie dotyczące implementacji CRM. Błąd wyświetlania w RetrieveMultipleDocument rmd = RetrieveMultipleDocument.Factory.newInstance(); –

+0

xception w wątku "main" java.lang.ExceptionInInitializerError \t na com.microsoft.schemas.crm._2007.webservices.ExecuteDocument $ $ Factory.newInstance Execute (ExecuteDocument.java:70) \t na javaMSCRM.Login.main (Login.java:44) Spowodowane przez: java.lang.RuntimeException: Nie można załadować SchemaTypeSystem. Nie można załadować klasy o nazwie schemaorg_apache_xmlbeans.system.s0C7B6541D611A1749D5105A4C55EC974.TypeSystemHolder. –

1

Kikut został utworzony za pomocą architektury Apache Axis2.

0

Można tutaj znaleźć środki. Możesz nawet pracować z przykładem, który jest dostępny w zestawie SDK Dynamics CRM. Jak powiedział Manuel Freiholz, musisz użyć 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

Alternatywnie, można użyć spokojny usług internetowych za pośrednictwem interfejsu OData oferowanych przez Dynamics (https://msdn.microsoft.com/en-us/library/gg334279.aspx)

Powiązane problemy