Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JAVA在线调用Microsoft Dynamics CRM 2011_Java_Dynamics Crm 2011 - Fatal编程技术网

从JAVA在线调用Microsoft Dynamics CRM 2011

从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

我正在从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
,但联系人不与帐户关联

我已经十多年没有使用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中,我有描述,我是否可以查询它们以获得值?谢谢