Microsoft Dynamics CRM 批量上传web资源(非官方WebResourceUtility)并替换实体图标
背景:
去年以前可以按照目录WebResourceUtility批量上传web资源,昨天发现用不了了,拿到WebResourceUtility源码改了一下都不是很方便,感觉官方写的太冗余,太长了,跟我喜欢的简单粗暴思想不太符合,刚好无意阅览了一个上传资源的代码,干脆自己手写一个根据目录去上传web资源的工具。
工具:
LinqPad 5
Microsoft Dynamics SDK 9.0
XrmToolBox
老规矩先上效果图:
目录包含的文件
批量创建web资源后,发布
解决方案添加现有资源
代码
//Microsoft Dynamics CRM 批量上传web资源(非官方WebResourceUtility)替换图标
//对应web资源在mscrm的文件类型
enum FileTypes
{
HTML = ,
CSS = ,
JS = ,
XML = ,
PNG = ,
JPG = ,
GIF = ,
XAP = ,
XSL = ,
ICO = ,
SVG = ,
RESX =
}
//根据目录获取目录下所有的文件
Dictionary<string, int> GetFilesWithDir(string localPath)
{
Dictionary<string, int> dict = new Dictionary<string, int>();
var typelist = Enum.GetNames(typeof(FileTypes));
var dirs = Directory.GetDirectories(localPath);
//dirs.Dump();
foreach (var dir in dirs)
{
var files = Directory.GetFiles(dir);
//files.Dump();
foreach (var file in files)
{
var index = file.LastIndexOf(".");//.Dump();
if (index == -) continue;
var filetype = file.Substring(index + ).ToUpper();
if (typelist.Contains(filetype))
{
dict.Add(file,
Enum.Parse(typeof(FileTypes), filetype).GetHashCode()
);
} }
}
return dict;
} //创建或更新web资源
Guid CreateOrUpateFile2WebResoulse(IOrganizationService service, string filePath, FileTypes type, string rootPath, string serverPath = "new_/icons/")
{
Stopwatch sw = new Stopwatch();
sw.Start(); string fileName = filePath.Replace(rootPath, serverPath).Replace("\\", "/"); var fileContent = File.ReadAllText(filePath); fileName = Regex.Replace(fileName, @"[\u4e00-\u9fa5]", "").Replace("//", "/"); //常规文本文件
var customTypes = new int[] { , , , , , }; QueryExpression query = new QueryExpression("webresource")
{
ColumnSet = new ColumnSet(new string[] { "webresourceid" }),
Criteria = new FilterExpression(LogicalOperator.And)
};
query.Criteria.AddCondition("name", ConditionOperator.Equal, new object[] { fileName });
EntityCollection entitys = service.RetrieveMultiple(query); Guid entityId; Entity entity = new Entity("webresource");
entity["content"] = customTypes.Contains(type.GetHashCode()) ? Convert.ToBase64String(Encoding.UTF8.GetBytes(fileContent.ToString())) : ImgToBase64String(filePath); if (entitys.Entities.Count == )
{
entity["webresourcetype"] = new OptionSetValue(type.GetHashCode());
entity["displayname"] = fileName;
entity["name"] = fileName;
entity["componentstate"] = new OptionSetValue();
entityId = service.Create(entity);
}
else
{
entity = entitys.Entities[];
service.Update(entity);
entityId = entity.Id;
}
sw.Stop();
Console.WriteLine($"{fileName} 创建/更新成功!耗时:{sw.ElapsedMilliseconds} 毫秒。");
return entityId;
} //发布web资源
void publishWebResources(List<Guid> ids,IOrganizationService service)
{
Stopwatch sw=new Stopwatch();
sw.Start(); var sb=new StringBuilder(); foreach (var id in ids)
{
sb.AppendLine($"\r\n<webresource>{id.ToString().ToUpper()}</webresource>\r\n");
}
XElement element = XElement.Parse("<importexportxml>\r\n<webresources>"+sb.ToString()+"</webresources>\r\n</importexportxml>");
PublishXmlRequest request = new PublishXmlRequest();
request.ParameterXml = element.ToString();
service.Execute(request);
sw.Stop();
Console.WriteLine($"批量发布!耗时:{sw.ElapsedMilliseconds} 毫秒。"); }
void Main()
{
var service = Dynamic365.GetService(Envs.dev); var rootPath = @"D:\Desktop\图标20191123\图标20191123\";
var targetPath = @"new_/dyicon/";
var dict=GetFilesWithDir(rootPath).Dump("目录包含的文件"); var ids=new List<Guid>(); foreach (var kv in dict)
{
Guid id;
try
{
id=CreateOrUpateFile2WebResoulse(service, kv.Key, (FileTypes)kv.Value, rootPath, targetPath); }
catch(Exception ex)
{
ex.Dump(); //报错重新执行一次
id=CreateOrUpateFile2WebResoulse(service, kv.Key, (FileTypes)kv.Value, rootPath, targetPath);
}
ids.Add(id);
} publishWebResources(ids,service);
}
问题延伸:
web资源批量上传后,但是还是需要手动选择web资源替换实体图标,这里在xrmtoolbox的插件市场找到iconator插件
实体修改图标最终效果图
更换站点地图底色后
移动端:
Microsoft Dynamics CRM 批量上传web资源(非官方WebResourceUtility)并替换实体图标的更多相关文章
- Dynamics CRM2016 升级老版本报“JavaScript Web 资源包含对 Microsoft Dynamics CRM 4.0 (2007) Web 服务终结点的引用”问题的解决办法
今天在新的服务器上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了如下错误,向导检测到了我的JavaScript Web 资源中包含 ...
- Dynamics CRM2016 升级老版本号报“JavaScript Web 资源包括对 Microsoft Dynamics CRM 4.0 (2007) Web 服务终结点的引用”问题的解决的方法
今天在新的server上部署了CRM2016 on-premises,并将CRM2015的数据库拷贝过来准备附加后升级,但在升级过程中遇到了例如以下错误.向导检測到了我的JavaScript Web ...
- Dynamics CRM 自定义上传附件的图片悬浮层显示
CRM中的附件是以流的形式保存在了数据库中,这样做的一个坏处是一旦系统运行时间久,附件上传的多了势必会导致数据库极速扩大,即影响系统的运行效率也对后期的迁移维护带来了不必要的麻烦.所以很多的客户都会要 ...
- 一、Microsoft Dynamics CRM 4.0 SDK概述
Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...
- WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- WEB版一次选择多个文件进行批量上传(Plupload)的解决方案
WEB版一次选择多个文件进行批量上传(Plupload)的解决方案 转载自http://www.cnblogs.com/chillsrc/archive/2013/01/30/2883648.htm ...
- WEB版一次选择多个图片进行批量上传(WebUploader)的解决方案
最近在学习百度的开源上传组件WebUploader,上一篇文章,学习了批量文件上传,今天学习一下批量图片上传,实际上与文件上传很类似,只是添加了图片显示功能,这个功能WebUploader组件中已经提 ...
- Microsoft Dynamics CRM 2011 当您在 大型数据集上执行 RetrieveMultiple 查询很慢的解决方法
症状 当您在 Microsoft Dynamics CRM 2011 年大型数据集上执行 RetrieveMultiple 查询时,您会比较慢. 原因 发生此问题是因为大型数据集缓存 Retrieve ...
- WEB版一次选择多个文件进行批量上传(swfupload)的解决方案
说明:功能完全支持ie和firefox浏览器! 一般的WEB方式文件上传只能使用FileUpload控件进行一个文件一个文件的进行上传,就算是批量上传,也要把文件一个一个的添加到页面,无法如windo ...
随机推荐
- 数据结构c语言
这篇博客是为了对数据结构进行一系列的学习整理,包括线性表,栈和队列,串,数组和广义表,树和二叉树,图,动态储存管理,查找,内部排序,外部排序文件进行部分笔记的记录. 基本概念和术语 数据:是对客观事物 ...
- spring security原理-学习笔记2-核心组件
核心组件 AuthenticationManager,ProviderManager和AuthenticationProvider AuthenticationManager只是一个接口,实际中是如何 ...
- SSO原理解析
什么是单点登录 简单点说就是公司有A,B两个系统,我登录了A系统之后再跳转到B系统可以直接访问,而不需要再次登录B系统. 几种常见的单点登录实现方式 在讲解单点登录之前先讲解几个基本的概念: Cook ...
- 树莓派apt报错:E: '\Release' 这个值对 APT::Default-Release 是无效的,因为在源里找不到这样的发行
E: '\jessie' 这个值对 APT::Default-Release 是无效的,因为在源里找不到这样的发行 开始尝试了各种方法, 换apt源, 改/etc/apt/apt.conf.d/10d ...
- 百万年薪python之路 -- 字典(dict)练习
1.请将列表中的每个元素通过 "_" 链接起来. users = ['大黑哥','龚明阳',666,'渣渣辉'] users = ['大黑哥','龚明阳',666,'渣渣辉'] u ...
- JAVA NIO 获取udp数据报的 发送方ip
程序是通了,但是没法转发,获取不到对方ip.nio中 udp使用的是DatagramChannel ,但是SelectorKey.channel()转化之后的DatagramChannel,调用get ...
- 使用maven替换项目依赖中的字节码
问题描述 我们偶尔会发现一些开源项目的问题,或者出于其他原因,想在某个dependency的代码中加几行或者删除几行来达到目的. 我这里遇到一个dubbo 2.7.3和open feign冲突的问题 ...
- OptimalSolution(1)--递归和动态规划(2)矩阵的最小路径和与换钱的最少货币数问题
一.矩阵的最小路径和 1 3 5 9 1 4 9 18 1 4 9 18 8 1 3 4 9 9 5 8 12 5 0 6 1 14 14 5 11 12 8 8 4 0 22 22 13 15 12 ...
- Java基础(三十六)日期和时间
1.Date类 (1)无参数构造方法创建的对象可以获取本机当前时间 (2)有参数构造方法创建的对象表示举例计算机系统自身时间的距离为给定的参数 Date date = new Date(); // 当 ...
- 23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」
前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...