是否有任何在线资源显示使用 Java 编写的客户端访问 Microsoft CRM 本地 Web 服务的基本步骤?
我应该使用哪个 Web 服务工具包?
我使用 JAXB 进行了尝试,但 WSDL 元素命名存在冲突,需要自定义类。如果我找到正确的绑定修复,我会在这里发布。
是否有任何在线资源显示使用 Java 编写的客户端访问 Microsoft CRM 本地 Web 服务的基本步骤?
我应该使用哪个 Web 服务工具包?
我使用 JAXB 进行了尝试,但 WSDL 元素命名存在冲突,需要自定义类。如果我找到正确的绑定修复,我会在这里发布。
本地版本的 Microsoft Dynamics CRM 应用程序使用 Active Directory 身份验证。虽然我从未尝试过从 Java 引用 Microsoft Dynamics CRM Web 服务,但我确信这是可行的,因为这些是标准 Web 服务,因此可以通过 SOAP 从 Java 引用,就像任何其他 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
}
Java -> SOAP -> MS CRM 2011 在线:http: //zsvoboda.blogspot.com/2011/03/connecting-to-microsoft-crm-2011-online.html
存根是使用 Apache Axis2 框架创建的。
你可以在这里找到资源。您甚至可以使用 Dynamics CRM SDK 中提供的示例。正如 Manuel Freiholz 所说,您必须使用 Axis2。
https://msdn.microsoft.com/en-us/library/jj602979(v=crm.5).aspx
或者,您可以通过 Dynamics 提供的 OData 接口使用 RESTFul Web 服务 ( https://msdn.microsoft.com/en-us/library/gg334279.aspx )