从JAVA在线调用Microsoft Dynamics CRM 2011
我正在从Java应用程序中进行Dynamics CRM集成,我遵循了CRM培训工具包中的示例,成功地连接并创建了客户和联系人。 现在,在帐户创建中添加更多字段以及将联系人与帐户连接时,我遇到了一些问题。 例如,我无法创建带有“address1_freighttermscode”的帐户,该帐户是一个选择列表。 我的代码如下:从JAVA在线调用Microsoft Dynamics CRM 2011,java,dynamics-crm-2011,Java,Dynamics Crm 2011,我正在从Java应用程序中进行Dynamics CRM集成,我遵循了CRM培训工具包中的示例,成功地连接并创建了客户和联系人。 现在,在帐户创建中添加更多字段以及将联系人与帐户连接时,我遇到了一些问题。 例如,我无法创建带有“address1_freighttermscode”的帐户,该帐户是一个选择列表。 我的代码如下: private static OrganizationServiceStub.Guid createAccount(OrganizationServiceStub servi
private static OrganizationServiceStub.Guid createAccount(OrganizationServiceStub serviceStub, String[] args) {
try {
OrganizationServiceStub.Create entry = new OrganizationServiceStub.Create();
OrganizationServiceStub.Entity newEntryInfo = new OrganizationServiceStub.Entity();
OrganizationServiceStub.AttributeCollection collection = new OrganizationServiceStub.AttributeCollection();
if (! (args[0].equals("null") )) {
OrganizationServiceStub.KeyValuePairOfstringanyType values = new OrganizationServiceStub.KeyValuePairOfstringanyType();
values.setKey("name");
values.setValue(args[0]);
collection.addKeyValuePairOfstringanyType(values);
}
if (! (args[13].equals("null"))){
OrganizationServiceStub.KeyValuePairOfstringanyType incoterm = new OrganizationServiceStub.KeyValuePairOfstringanyType();
incoterm.setKey("address1_freighttermscode");
incoterm.setValue(args[13]);
collection.addKeyValuePairOfstringanyType(incoterm);
}
newEntryInfo.setAttributes(collection);
newEntryInfo.setLogicalName("account");
entry.setEntity(newEntryInfo);
OrganizationServiceStub.CreateResponse createResponse = serviceStub.create(entry);
OrganizationServiceStub.Guid createResultGuid = createResponse.getCreateResult();
System.out.println("New Account GUID: " + createResultGuid.getGuid());
return createResultGuid;
} catch (IOrganizationService_Create_OrganizationServiceFaultFault_FaultMessage e) {
logger.error(e.getMessage());
} catch (RemoteException e) {
logger.error(e.getMessage());
}
return null;
}
当它执行时,我得到这个错误
[ERROR] Incorrect attribute value type System.String
有人举过如何处理纠察名单或查找的例子吗
要将联系人与帐户连接,我将使用帐户的GUID和“帐户”填充字段
parentcustomerid
和parentcustomeridtype
,但联系人不与帐户关联 我已经十多年没有使用Java了(而且从来没有像Dynamics这样创建MS),所以它可能与您喜欢的有很大差距。:)
您可以使用RESTWeb服务并直接调用CRM来创建实例。据我所知,这是独立于平台的,只要您可以连接到公开的服务OrganizationData,它就应该可以工作。要设置选取列表值,您必须使用OptionSet,而对于查找,您必须使用EntityReference。请参阅SDK的C#文档,使用Axis生成的Java代码应以相同的方式工作
incoterm.setKey("address1_freighttermscode")
//assuming the arg is an integer value that matches a picklist value for the attribute
OptionSetValue freight = new OptionSetValue();
freight.Value = args[13];
incoterm.setValue(freight);
collection.addKeyValuePairOfstringanyType(incoterm);
我可以问一下你为什么在Java上这么做吗?我能想到几个原因,但我想知道你的具体原因。你的答案得到回答了吗?如果是,请检查答复作为答复。否则,请告诉我你还需要什么。嗨,康拉德,我仍然没有答案。我在java中这样做是因为我是从oracle存储过程调用的,这就是我从那里调用Web服务的方式。我认为情况就是这样。我在下面给了你一个答案,不确定你是否看过。如果您需要更多帮助,请在其上添加注释(以保持线程的结构)。根据我所看到的,从CRM外部调用rest web服务可能比SOAP服务更具挑战性。现在,如果我能举一个例子,说明如何处理拾取列表、查找和引用实体等对象,我想我可以很好地解决这个问题。查找很容易。它基本上是实体的guid(加上一些基本信息、类型和名称等)。选择列表比较棘手,因为它们的值通常与组织名称哈希组合在一起。您是否对联系人实体进行了基本连接/过滤?这是一个很好的起点。根据SDK,不支持从Java调用Dynamics CRM 2011中的REST web服务,SDK规定您必须从应用程序内访问REST服务(即,经过身份验证的浏览器会话)。Nick的提示与选择列表一起工作,试图解决REST问题。Thx您引用的IFRAME在浏览器会话中运行,该会话已通过其调用的Dynamics CRM实例的身份验证。这将使它在应用程序内部。记录在。我并不是说它做不到,只是说它不受支持。使用SOAP端点是实现这一点的正确方法。thx,optionset提示工作得很好。java等效类是OptionSetValue。现在我尝试使用entityreference,但同样地,这些类与C#不同。我有一个EntityReference类,我认为必须设置我想要引用的实体的逻辑名称和guid。是这样吗?为了将联系人与帐户关联起来,我是否也应该使用parentcustomerid的entityreference?我在OptionSetValue上的错误,在Java中与C#相同-我昨晚刚刚犯了一个错误,我已经更正了我的答案。查找应为EntityReference:。需要设置LogicalName属性和Id属性(LogicalName是一个字符串,Id是一个Guid。)thx,以及parentcustomerid是否也应该作为EntityReference?我看到还有一个parentcustomeridtype将父项定义为account或contact,这是一个字符串吗?最后,我已经完成了这项工作,thx支持。还有一个问题,在optionset中,我有描述,我是否可以查询它们以获得值?谢谢