我正在从Java应用程序进行Dynamics CRM集成,我已经按照CRM培训工具包中的示例进行了管理,并成功管理连接和创建帐户和联系人。 现在,我在帐户创建中添加更多字段以及将联系人与帐户相关联时遇到一些问题。 例如,我无法使用“address1_freighttermscode”创建帐户,这是一个选项列表。 我的代码如下:
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
,但该联系人未与该帐户相关联。
答案 0 :(得分:1)
要设置选项列表值,您必须使用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);
答案 1 :(得分:-1)
我已经十多年没有使用Java了(而且从来没有像动态这样的MS创作)所以它可能远离你喜欢的东西。 :)
您可以使用REST Web服务直接调用CRM来创建实例。据我所知,这是平台独立的,只要您可以连接到公开的服务 OrganizationData ,它就应该工作。