是否有任何在线资源显示使用Java编写的客户端访问Microsoft CRM内部部署Web服务的基本步骤?
我应该使用哪个Web服务工具包?
我尝试使用JAXB,但WSDL元素命名中存在冲突,需要进行类自定义.如果我找到正确的绑定修复程序,我会在此处发布.
我需要在实体上单击功能区按钮执行一些代码,该实体可以从CRM Online 2011更新一些相关数据.我宁愿不必在JScript中编写所有这些逻辑.有没有办法从JScript调用C#代码?我查看了Microsoft在功能区中使用的JScript文件,它看起来像这样:
Mscrm.Campaign.copyCampaign = function (campaignId, saveAsTemplate) {
var $v_0 = new RemoteCommand("MarketingAutomation", "CopyCampaign", null);
$v_0.SetParameter("campaignId", campaignId);
$v_0.SetParameter("saveAsTemplate", saveAsTemplate.toString());
var $v_1 = $v_0.Execute(),
$v_2 = $v_1.ReturnValue;
openObj(Mscrm.EntityTypeCode.Campaign, $v_2, null, null, Mscrm.NavigationMode.NavigationModeInline, null);
Mscrm.Utilities.refreshParentGrid(Mscrm.EntityTypeCode.Campaign, campaignId)
};
Run Code Online (Sandbox Code Playgroud)
我看到正在放置一个RemoteCommand调用,我假设它正在回到一些Web服务功能.我希望能做到这样的事情.我可以添加自己的Web服务功能吗?
我能够从JScript调用为实体发送"分配"消息,就像测试一样.这可能适用于插件,但为执行事件发送消息似乎很奇怪,实际上并不只是为了运行一些C#代码("分配","更新"等)而且我不喜欢看到创建自己的消息的方法.
javascript c# dynamics-crm dynamics-crm-2011 dynamics-crm-online
这个问题与我现在为Dynamics CRM 2011创建的插件有关.
我有一个有5个属性的实体.其中1个属性是另一个实体的查找.
我想用插件做的是修改Lookup实体的Guid.简单吧?
但不,它给了我麻烦,我已经尝试了几十种方法使用EntityReference来获取guid但不能.我试过创建一个失败的preImage.
这是CODE的片段.
Entity entity = (Entity)context.InputParameters["Target"];
if (entity.LogicalName == "new_producttaxrate")
{
if (entity.Attributes.Contains("new_product"))
{
EntityReference ownerLookup = (EntityReference)entity.Attributes["new_product"];
productName = ownerLookup.Name;
Guid productId = ownerLookup.Id;
}
}
Run Code Online (Sandbox Code Playgroud)
也想出了这个
if (entity.Attributes.Contains("new_producttaxrateid"))
{
Guid myGuid = (Guid)entity.Attributes["new_producttaxrateid"];
EntityReference ownerLookup = new EntityReference("new_product", myGuid);
pid = ownerLookup.Id;
}
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Condition for attribute 'new_producttaxrate.new_product': expected argument(s) of type 'System.Guid' but received 'System.DBNull'.Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
<ErrorCode>-2147220989</ErrorCode>
<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<KeyValuePairOfstringanyType>
<d2p1:key>CallStack</d2p1:key>
<d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" …Run Code Online (Sandbox Code Playgroud) 如何让CRM系统尊重这些引用的命名空间.
我尝试了一些从谷歌出现的项目,但没有一项正在运作.
既然你可以使用2个香草组织来重现这个问题,我会想象一下我们可以做的代码层之外的东西,而不必返回并为2个组织重构一堆代码.
谢谢,
乔恩
我使用Erik Pool的实现ICodeWriterFilterService和Manny Grewal的GenerateOption函数作为模型来过滤掉CRMSvcUtil生成的文件中不需要的实体.虽然Erik建议返回true为GenerateOptionSet方法enums集生成的方法,但这样做会复制任何特定实体使用的任何全局选项集(如该帖子的其中一条评论中所述).
为了解决这个问题,我检查是否已经生成了选项集,如果是,我将返回默认选项(大概false是大多数情况下),如下所示.
//list of generated option sets, instantiated in the constructor
private List<string> GeneratedOptionSets;
public bool GenerateOptionSet
(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
{
if (!GeneratedOptionSets.Contains(optionSetMetadata.Name))
{
GeneratedOptionSets.Add(optionSetMetadata.Name);
return true;
}
return _defaultService.GenerateOptionSet(optionSetMetadata, services);
}
Run Code Online (Sandbox Code Playgroud)
但是当在我的CRM项目中合并生成的文件时,编译错误
Run Code Online (Sandbox Code Playgroud)Cannot convert type 'Microsoft.Xrm.Sdk.OptionSetValue' to 'int'
总是被看起来像的每一行代码抛出
this.SetAttributeValue
("address1_shippingmethodcode", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value))));
Run Code Online (Sandbox Code Playgroud)
.
作为一种变通方法,我用一个单独的项目中,我过滤我需要的实体运行CRMSvcUtil的论据埃里克表明,更换代码的麻烦的部分(int)(value)(这里value是一个OptionSetValue含)value.Value时生成的文件后,再重新保存文件,并所有问题都消失了.
我的问题是:我是否需要做一些不同的事情来修复这个编译错误与默认CRMSvcUtil生成的文件,而不做像修改生成的文件这样的hackish?
我使用CRM 2011 Developer Toolkit在Visual Studio 2010中实现了一个自定义工作流.它与系统生成的命名空间一起工作正常.但是,当我更改项目的命名空间时,它会抛出错误"注册插件和/或工作流程时出错.插件程序集不包含所需的类型或程序集内容无法更新." 在部署时.我已经更改了.crmregister文件,项目属性和源代码中的命名空间.然后是这里的问题.
我目前正在使用Dynamics CRM 4.0 Web服务.我做的第一件事是Java/JAX-WS基于webservice的WSDL为wsimport生成正确的类.在生成类时,我遇到了一些错误:
[ERROR] A class/interface with the same name
"com.microsoft.schemas.crm._2007.webservices.RetrieveResponse" is already in use. Use a class customization to resolve this conflict.
line 979 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl
[ERROR] (Relevant to above error) another "RetrieveResponse" is generated from here.
line 12274 of file://src/main/webapp/WEB-INF/classes/META-INF/wsdl/CrmServiceWsdl.wsdl
Run Code Online (Sandbox Code Playgroud)
979行告诉我们:
<s:element name="RetrieveResponse">
<s:complexType>
<s:sequence>
<s:element name="RetrieveResult" type="s3:BusinessEntity" />
</s:sequence>
</s:complexType>
</s:element>
Run Code Online (Sandbox Code Playgroud)
第12274行给了我们:
<s:complexType name="RetrieveResponse">
<s:complexContent mixed="false">
<s:extension base="tns:Response">
<s:sequence>
<s:element ref="s3:BusinessEntity" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
Run Code Online (Sandbox Code Playgroud)
两个部分都在同一名称空间中.两者都将生成为RetrieveResponse.class,因此它们会发生碰撞.我找到了这个问题的解决方案,即JAX-B绑定xml文件:
<bindings node="//xsd:complexType[@name='RetrieveResponse']">
<jaxb:class name="RetrieveResponseType"/>
</bindings>
Run Code Online (Sandbox Code Playgroud)
这有效(不确定这是否是正确的方法..?)..
所以在此之后,我成功地创建了一些成功的Web服务调用,这很棒! …
我正在开发自定义工作流程活动.我用代码生成工具(CrmSvcUtil.exe)创建了自己的helper.cs(Early Bound Entity Classes)
当我尝试编译代码时,它返回以下错误:
命名空间''已包含'Workflow'的定义
从Helper.cs文件.
有谁知道这意味着什么?
c# workflow-activity dynamic-programming dynamics-crm dynamics-crm-2011
我目前正在开始使用插件扩展Microsoft Dynamics CRM.
是否可以在这些插件中添加依赖注入(用于测试,松耦合等目的)?我在哪里可以注册我的IoC容器,以便它用于所有相同类型的插件?
我计划将我的CRM(内部)2011升级到CRM 2016(内部部署).现在我正在寻找迁移数据的最佳方法.顺便说一下,有很多自定义数据(实体,字段,WF).Microsoft建议逐步升级2011-> 2013-> 2015-> 2016(因为db strucutre显着改变,正如他们所说),但这对我来说不是最好的方式.我想首先进行干净安装,然后将数据从2011年移动到2016年.我所遇到的解决方案是调查新结构,然后编写自定义SQL脚本,这将完成工作.有没有开箱即用的方式?
另一个问题是关于CRM版本.Microsoft提供Dynamics CRM 365(内部部署)和Dynamics CRM 2016(内部部署).有什么不同?我可以发现,当2016年是一次性付款时,365就像是订阅许可证?
TL; DR:
- 从2011年升级到2016年CRM的最佳方式,最佳实践.
- 将数据从2011年迁移到清洁2016 CRM的最佳方式.
- CRM 2016和CRM 365之间的区别(内部,两者)
非常感谢您即将到来的答案.
dynamics-crm ×10
c# ×5
.net ×1
asp.net ×1
c#-4.0 ×1
entity ×1
enums ×1
java ×1
javascript ×1
jax-ws ×1
jaxb ×1
plugins ×1
web-services ×1
wsimport ×1