在CRM中导入数据中新增加了一个xlsx格式,这个在之前的版本(2013中没有,2015不清楚是否有)中是没有的 本篇的目的就是为了提醒各位,不要把这个格式和csv的导入功能混淆,因为xlsx格式的用法和csv导入是完全不同的,看下图导入的xlsx格式数据时会有这样的提示,可能我们很多人会忽略它而直接点了提交. 举个例子形象的演示下,我把客户的示例数据通过excel导出 然后更新下第一条数据的主要电话字段数据,并且添加一个叫张学友的客户数据 再把excel重新导入系统后再来看下客户视图的示例数据…
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Linux和Mac. EPPlus.Core 是基于EPPlus 更改而来,在Linux 下需要安装libgdiplus . EPPlus:http://epplus.codeplex.com/ EPPlus.Core:https://github.com/VahidN/EPPlus.Core 下面在A…
Dynamics crm2016 on-premises版本已与12月14日开放下载,下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=50372,在和online的版本号上还是有些许差异的. 本篇要讲的是直接从CRM2015 on-premises升级到CRM2016 on-premises,本人比较懒不想再重新装虚机所以采取直接升级的方式. 先看下我虚机中已有的CRM的版本,确定是2015. 双击解压后的exe安装程序…
NPOI DLL下载地:http://npoi.codeplex.com/releases using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Web; usin…
在CRM2016中对知识库功能进行了加强,新加入了KnowledgeArticle的实体,但在学习的过程中发现了微软的一个bug 下图是我在最新的2016online的版本上看到的service下的service模块 但在实体中看到显示区域的Service模块勾是打着的 在MSDN博客上面的截图又是下面这样的 而导出的站点地图里service节点下是有KnowledgeArticle节点的 我把KnowledgeArticle放到了Collateral节点下,解决方案导入后正常显示了. on-p…
CRM2016中对解决方案的功能有了一定的加强,CRM自2011版本开始引入了solution的概念,但大家的共识是solution的导出导入以及发布都非常的慢,常常会出现发布超时的情况很是头疼. 以account实体为例,假如我的测试环境只更改了一个视图添加了一列,但我要同步到生产环境,我就需要同步整个实体,包括表单.字段.试图等等,但2016中的solution对这块做了加强,它把实体拆分成了若干模块,这里我建了个test的解决方案包 添加实体account点确定后你会看到和之前版本的不同,…
将大的自定义文件导入到 Microsoft Dynamics CRM 时发生超时? 如图: 首先: a.首先需要确认两面的CRM 环境是一致,比如都是Roll up 11等. b.然后确认导出解决方案所在的数据库版本和导入解决方案所在的数据库版本是否一致,特别需要注意sql server 2008 R2 和不是R2. 将大的自定义文件导入到 Microsoft Dynamics CRM 时发生超时? 方法 1: 添加 OLEDBTimeout 和 ExtendedTimeout 注册表子项,以增…
之前有篇博文介绍了如何获取查找字段的name值(跳转),本篇在此基础上再延伸下,实现的效果类似于EntityReference,可以取到查找字段的id,name,localname. 这里我以客户实体为例,定义了一个叫new_city的查找字段,现在获取它的值 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://xx/api/data/v8.0/accounts(1D539D5B-D8B2-E611-80EB-C2…
在dynamics crm web api还没出现前,我们是通过fetchxml来实现的,当然这种方式依旧可行,那既然web api来了我们就拥抱新的方式. web api中我们通过指定查询的条数来实现分页的效果,很简单设置http的head即prefer,odata.maxpagesize就可以了. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(weburi); req.Credentials = new NetworkC…
通过组织服务中获取实体picklist字段的text和value可以通过RetrieveAttributeRequest实现,但在使用web api的今天该怎么实现,本文即来一探究竟,本篇基于SDK中的Query Metadata using the Web API一节. 首先我们要获取到实体的metadataid,代码如下,这个metadataid后面会用到,我这里用的是account实体 string weburi = WebUri + "EntityDefinitions?$filter=…
CRM的产品更新特别快,特别是最近的几个版本,很多客户依旧停留在2011甚至是4.0,也经常会听到有人问2011能不能升级至最新版,2013能不能升级至最新版,本文将简单演示下从2011升级到2016的过程(只限于组织数据库的升级). 下图是我试着将2011的组织直接附加到CRM2015上时的提示,这边试下就知道了只有CRM2013sp1以后的版本才能导入,那就先部署一个2013的环境用来导2011吧. 下图是在我部署的CRM2013sp1的环境里导入CRM2011的组织,提示需要打指定的补丁,…
今天在还原一个老版本的解决方案,在导入时报根组件插入问题"Cannot add a Root Component 38974590-9322-e311-b365-00155d810a00 of type 31 because it is not in the target system".我们的第一反应肯定是去customizations.xml中查询与之相关的组件,删除后发现还是报错,这时你需要去查找solution.xml把里面与之相关的RootComponent删除才可以. 参考…
在CRM2013的环境下导入解决方案报错,具体报错截图如下 根据id去数据库中查找这个id的systemform,确认是存在的,而且通过第二条记录我们也可以看到这个systemform属于哪个实体,我这边定位到的是一个快读视图窗体 编辑我们要导入的解决方案包,查找xml中的该视图id,可以找到下图中的类似红框中的引用,但该form对应的Entity在下图中引用的下方,将该Entity贴到上方去即可,重新压缩后导入系统就没问题了.…
之前的博客中有特地介绍过CRM中的时间字段以及它在不同的应用场景中涉及的时制转换,而CRM2016又给时间字段添加了新的行为,具体见下属截图,简单介绍下每个图中对应的行为的意思,最后会做demo来具体演示. 下图和之前的版本时间一样,带时制 下图是仅限日期,当行为选择仅限日期后,格式自然也就是仅限日期而无法修改为日期和时间了,其他的两种行为均可选择格式 下图的行为顾名思义就是没有时区了,存取该是什么就是什么没有以往那种默认8小时的时差的概念了 下面是个简单的demo,定义了3个字段存放不同的时间…
CRM2016中新增的web api支持fetch xml了,之前使用FetchXML的场景是在后天代码中通过组织服务的retrieve multiple方法,但实际的应用效果有多大,还需要在实际的项目中去体会了. 上代码,注意要对fetch xml进行编码 var fetch="<fetch mapping='logical'>" +"<entity name='account'>" +"<attribute name='a…
CRM2016启用了webapi 而弃用了odata,作为码农的我们又开始学习新东西了. 下面是一段简单的查询代码,通过systemuser的primary key来查询一条记录 Web API查询方式 var userId = Xrm.Page.getAttribute("ownerid").getValue()[0].id; var appellation; $.ajax({ async: false, type: "GET", contentType: &qu…
今天在新的服务器上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了如下错误,向导检测到了我的JavaScript Web 资源中包含对2007终结点的使用,因为新版本已经不支持了,所以无法进行下一步升级. 我们可以根据提示找到日志文件,不得不说日志做的非常的体贴,已经将具体的web resource给你标出了,只需进系统将这段javascript中包含的不支持的内容删除即可,最终成功升级. 顺遍附上受支持的拓展的官方说明:htt…
接上篇,Page页设置完后,按照业务流程管理也可以继续设置Insert page after branch 或者 Add branch,我这里选择后者,并设置了条件,如果Pipeline Phase 字段的值包含develop则换个一个page页显示,新的page页只放一个字段以示区分. 来看下效果,第一个page的字段符合branch的条件,点击next后显示第二个page,而description字段的值就是Test,而这个Test值的由来则是后面要讲要的业务规则.第二幅图中点击done表示…
很多人看过Dynamics CRM Online 2015 Update 1后,被它新的一个界面风格所吸引,还有它的很多新增功能,虽然官网放出了些补丁,但最重要的Server补丁一直没出,包括我在内很多人都在苦等,最后等到2016版本的风声后基本确定微软是不会推出Server端的补丁了,直接上2016,所以我们所期待的所有2015 Update 1中的新功能在2016中都有. 之前我的博文中也介绍了少许的2015 Update 1的新功能,那要想了解更多可以查看SDK,2016的on-premi…
在CRM2016发布在即之时,让咱们看下新版的CRM对IE及Edge的支持 这次和以往不同,官方给出的不只是IE几以上支持,IE几以下不支持,而是有一个对应的系统列表,具体看下表. 当然你也可以说我IE8不照样可以打开可以用嘛,但官方的说法是你用可以用啊,只是打开系统或者加载数据会比较慢,或者无缘无故的会抛个错出来,所以还是按照官方建议的来吧,至少少些问题即使有问题也可以开case寻微软CRM技术团队的支持.…
在CRM中通过导入数据的方式创建用户时报下图中的错误,"could not retrieve saleperson role".原因是系统中的自带的salesperson安全角色被删除了,在用导入数据的方式导入文档新建用户时是没有安全角色让你选择的,系统默认给分派了销售员的的安全角色,当你把这个系统默认的安全角色删除以后,系统无法找到这个安全角色自然就会报错了.…
今天在新的server上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了例如以下错误.向导检測到了我的JavaScript Web 资源中包括对2007终结点的使用,由于新版本号已经不支持了,所以无法进行下一步升级. 我们能够依据提示找到日志文件.不得不说日志做的很的体贴,已经将详细的web resource给你标出了,仅仅需进系统将这段javascript中包括的不支持的内容删除就可以.终于成功升级. 顺遍附上受支持的拓展的官…
今天在用web api创建一条记录时报了个标题里的错,咋看这错说的很明白了,属性字段的值超范围了,但咱们看下具体的问题 请求url是这样的http://xx/api/data/v8.0/new_recommendedrecords,请求参数是这样的 { "new_recommender@odata.bind":"/accounts(daf8a302-bbba-e611-80ed-d7ac411ee81d)", "new_job@odata.bind&quo…
本篇继续来分享web api查询中的一条,利用alternate key进行查询. alternate key是个什么东西这里就不解释了如果有不知道的可以去看sdk.这里以房号信息实体为例,新建一个键叫做房号Id,这个房号id在crm中对应的是new_roomid这个文本字段,会和第三方系统的某张表的主键关联. 键值建好后来看下代码,这里返回的json格式和通过实体guid查出来的返回json格式是一样的,而url上的区别就在于括号里面,通过guid查括号里就是guid,通过alternate…
之前的博文中有介绍过,Web Api中的一个删除单个属性的Api但没提供查找字段的删除方法,本篇补充上,这里给出的示例代码是C#的(主要看url的拼接),看下url中最后的/$ref,这个标示表明了当前删除的字段是一个查找类型的,区别就在这. string weburi = System.Configuration.ConfigurationManager.AppSettings["WebUri"] + entityName +"(" + guid.Replace(…
在使用wei api 创建注释的时候,有个字段需要注意下,就是下面图中的objectid字段,虽然它是个查找字段,但不能像普通的查找字段property@odata.bind来赋值 上代码,注意看倒数倒数第三行,赋值方式是objectid_account,这里我是给客户实体创建一条注释 Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("documentbody"…
本篇又是一次来谈到CRM中时间字段的问题,那这次要谈的是在引用web api过程中写代码上的注意事项,常用的代码场景即JS和c#. 先来看下js,从下图中可以看到,我直接将new Date()赋值给时间字段时,经过json序列化后会将本地时间转化为国际时间,那如果我的时间字段的行为是无时区,写进后台数据库的就是国际时间那就是错误的,会有8小时的时差. 那怎么办呢,我们想到的简单粗暴的方式就是new Date().toString()这样json处理的是字符串而不是时间就不会减8转化为国际时间了,…
最近在用2016做项目,一个同事的一个操作给我带来了一个头疼的问题,他把部署管理员的CRM账号的管理员权限给移除了,导致整个系统的所有账号进CRM都是下图这样 即使系统中还存在其他的拥有管理员权限的账号也没用,这种情况是在2016中新出现的,在之前的2015和2013版本中都试验过均没有这种情况,所以2016系统的部署管理员账号不能随意外泄,特别是很多新手不能随意给,一不小心就扯了. 在删除用户的账号的所有安全角色时,会有下面这样的提示 在更改自己的账号的权限时会提示这样…
在之前的版本中错误报告的弹框提示是可以在隐私首选项中设置关闭的,如下图所示 但是在2016中这个设置没了 有人说在右上角的选项中设置,但那个只能是设置个人的无法修改系统级别的.在系统中找了半天还是没有找到可以设置的地方,既然前台没有入口那只有打后台的主意了,打开组织数据库中的Organization表,将ReportScriptErrors字段的值修改为3(默认值是0)即为关闭.…
前篇我们论述了时间字段的查询,本篇来论述下时间字段的更新. 还是以之前建的当地时间(时间行为为用户当地时间)字段来测试 可以看到web api更新的是数据库的时间,而在前台的反映就是做了加8处理,所以后期在时间字段的处理上要多加注意,分清楚该之间字段的行为到底是什么.…