Dynamic 365(online)是MS推出云端的CRM系统,每个entity都有一个字段叫entityimage,常用是用于存储图片的,在product这个实体中,我这公司的产品需要同步至product表,产品有一个图片属性,但Dynamics 365(online)自带的图片与显示功能如下图,并非我想要,位于左上角的logo处,双击时会弹框显示,但图片显示的大小有限
为此,想让图片显示变大,并且非双击后才显示,当我打开product的详细信息页面时直接显示在某个区域内,用户可以直观的看到,效果图如下
我是怎么实现图上的效果呢?
- Dynamics 365(online)的图片是以什么样的方式显示的,我们把图片拖到独立的窗口查看它的路径会发现,它就是一个独立的网页(如下网址信息),显示不同的产品的图片只需要传入product 的guid给它
- https://xxxxxxxx.crm5.dynamics.com/image/download.aspx?attribute=entityimage&entity=product&id=%7b6E8A882C-0E93-EA11-A812-000D3AA0FE67%7d
- 既然是独产的页面,我们可以把它嵌入到product的form页面上,怎么内嵌呢?在product的Form上新建一个iframe框架用于显示这个网页即可,参数设置如下图
- 然后在form的onload方法下获取该iframe控制并将显示图片的网页指定到iframe上来,这里需要写一个javascript脚本绑定图片显示的网址
5.如下是当窗体加载时显示iframe控制里面网页的javascript 脚本,方法名为loadpic()
function loadpic()
{
var entityid = Xrm.Page.data.entity.getId(); //获取当前页面记录的guid,我这里是指product的guid值
var iframevalue = Xrm.Page.ui.controls.get(“IFRAME_XXX_ProductImage”); //获取页面上的iframe控件
entityid = entityid .replace("{", “”); //获取到的guid是属于{032092-xxxx-xxxx…}格式,我这里需要把{}去掉
entityid = entityid .replace("}", “”);
var imgurl = “https://xxxxxxxx.crm5.dynamics.com/image/download.aspx?attribute=entityimage&entity=product&id=”; //拿到显示图片的页面地址,这一串一般是固定不变的
imgurl += “%7b”;
imgurl += entityid ; //把product的guid值传到显示图片的地址中去
imgurl += “%7d”;
iframevalue .setSrc(imgurl); //设置iframe 控件显示图片网页
}
总结:
其实在Dynamcis 365(online)上处理图片是相对较麻烦的事情,关于产品显示的问题,系统自带的只是在左上角的小框内显示,类似logo,但这样不是很直观也不是很清析,用户想要的是当打开产品详细页面就能直观地看到大概的产品图像,不需要再做其他操作。
为此,我采用的此方法或许是较笨的方法,但也是实现了用户的需求,包括后面orderproduct中显示产品明细也是类似这样的方法来实现的,如下较果图,此方法比较笨,之前想在order的orderproduct的subgrid想直接每行显示对应的产品图的,但尝试在view里引webresource来实现,结果没实现,想通过插件来实现也没能实现,时间有限就做如下的简单实现,若有人能有更好的方法能实现,谢谢分享给我。