关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复164或者20151021可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!

上一篇博客:为Dynamics CRM注释的图片附件做个预览功能 发布后,有读者问,可以为其他类型附件做个预览功能吗?可以得,我这里提供主要的Office文件类型(Office 2007或者更高版本的Word,Excel,PowerPoint文档)的在线查阅功能,follow me。

为了更加好的显示效果,更方便的开发,我这里利用微软Office官方网站提供的联机查看Office文档功能,网址是 https://products.office.com/zh-CN/office-online/view-office-documents-online ,如果你的office文档有个可以通过http 或者Https 访问的url,就可以利用的官方的这个功能,这个就是Office Online的部分功能吧。支持的浏览器包括 Internet Explorer 7 或更高版本、Safari 4 或更高版本、Firefox 3.5 或更高版本以及 Chrome。 支持的 Office Online 手机查看器包括 iPhone? 上的 Safari 以及 Windows Phone 上的 Internet Explorer。  官方的支持,无需插件,无需自己电脑安装Office软件,可以联机查看,下载,查找,打印,以PDF形式下载等功能,我估摸着,以后功能会更加强大,就选它,我看行。

由于需要一个可以公开访问的文档URL,所以我这里建立了一个辅助的网站,这个网站我部署在Microsoft Azure上面,网站的首页地址是 http://mvpluoyong.azurewebsites.net ,主要用到的一个文件是 GetAnnotationDocument.ashx ,主要代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using LuoYong.CRMOperation;{    /// <summary>    /// Summary description for GetAnnotationDocument    /// </summary>    public class GetAnnotationDocument : IHttpHandler    {        public void Proce***equest(HttpContext context)        {            try {                string AnnotationId = context.Request.QueryString["AnnotationId"];                CRMAnnotationMgr annotationMgr = new CRMAnnotationMgr();                if (!string.IsNullOrEmpty(AnnotationId))                {                    var annotation = annotationMgr.GetAnnatationAttachementBody(new Guid(AnnotationId));                    context.Response.ContentType = annotation.MimeType;                    byte[] mybyte = Convert.FromBase64String(annotation.DocumentBody);                    context.Response.BinaryWrite(mybyte);                    context.Response.Flush();                    context.Response.End();                }                else                {                    throw new Exception("AnnotationId没有提供!");                }            }            catch (Exception ex)            {                context.Response.ContentType = "text/plain";                context.Response.Write("Error." + ex.Message);            }        }        public bool IsReusable        {            get            {                return false;            }        }    }}

 

 

然后还是稍微修改前面文章的 HTML Web资源后如下,代码优化了一下,点击链接的反映速度会些了,因为不一定都去查询附件的内容了:

<!DOCTYPE HTML><html> <head>  <title>微软MVP罗勇测试注释</title>        <style type="text/css">            table {                border:1px solid #666666;                border-collapse:collapse;            }            table thead th {                 padding: 8px;                    border:1px solid #666666;                 background-color: #dedede;            }            table tbody td {                border: 1px solid  #666666;             padding: 8px;             background-color: #ffffff;            }            table thead tr th {                font-family:Microsoft YaHei,SimSun,Tahoma,Arial;                font-size:12px;                font-weight:bold;                color:#000000;            }            table tbody tr td {                color:#444444;                font-family:Microsoft YaHei,SimSun,Tahoma,Arial;                font-size:12px;            }            .web_dialog_overlay            {               position: fixed;               top: 0;               right: 0;               bottom: 0;               left: 0;               height: 100%;               width: 100%;               margin: 0;               padding: 0;               background: #000000;               opacity: .15;               filter: alpha(opacity=15);               -moz-opacity: .15;               z-index: 101;               display: none;            }            .web_dialog            {               display: none;               position: fixed;               width: 400px;               height: 450px;               top: 50%;               left: 50%;               margin-left: -190px;               margin-top: -100px;               background-color: #ffffff;               border: 1px solid #336699;               padding: 0px;               z-index: 102;               font-family: Verdana;               font-size: 10pt;            }            .web_dialog_title            {               border-bottom: solid 2px #336699;               background-color: #336699;               padding: 4px;               color: White;               font-weight:bold;               height:20px;               width:100%;            }            .align_right            {               text-align: right;            }        </style>        <script type="text/javascript" src="../../ClientGlobalContext.js.aspx"></script>        <script type="text/javascript" src="../common/jquery.min.js"></script>        <script type="text/javascript" src="../common/XrmServiceToolkit.min.js"></script>        <script type="text/javascript">            Date.prototype.format = function (fmt) {                var o = {                    "M+": this.getMonth() + 1,//月份                       "d+": this.getDate(),//日                       "h+": this.getHours(),//小时                       "m+": this.getMinutes(),//分                       "s+": this.getSeconds()//秒                     };                if (/(y+)/.test(fmt))                    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));                for (var k in o)                    if (new RegExp("(" + k + ")").test(fmt))                        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ?                                 (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));                return fmt;            }            function ShowDialog(modal) {                $("#overlay").show();                $("#dialog").fadeIn(300);                if (modal) {                    $("#overlay").unbind("click");                }                else {                    $("#overlay").click(function (e) {                        HideDialog();                    });                }            }            function HideDialog() {                $("#overlay").hide();                $("#dialog").fadeOut(300);            }            function ShowAttachmentByNoteId(NoteId, MimeType) {                if (MimeType.indexOf("image") > -1) {                    XrmServiceToolkit.Rest.Retrieve(                        NoteId,                        "AnnotationSet",                        "DocumentBody",                        null,                        function (result) {                            var DocumentBody = result.DocumentBody;                            var img = $("<img />");                            img.attr("alt", "Embedded Image");                            img.attr("src", "data:" + MimeType + ";base64," + DocumentBody);                            img.appendTo($("#dialog"));                            ShowDialog(true);                        },                        function (error) {                            alert(error.message);                        },                        true                    );                }                else if (MimeType.indexOf("officedocument.presentationml.presentation") > -1 || MimeType.indexOf("officedocument.spreadsheetml.sheet") > -1 || MimeType.indexOf("officedocument.wordprocessingml.document") > -1) {//office文档                    window.open("https://view.officeapps.live.com/op/view.aspx?src=" + encodeURIComponent("http://mvpluoyong.azurewebsites.net/GetAnnotationDocument.ashx?AnnotationId=" + NoteId));                }                else if (MimeType.indexOf("pdf") > -1) {                    window.open("http://mvpluoyong.azurewebsites.net/GetAnnotationDocument.ashx?AnnotationId=" + encodeURIComponent(NoteId));                }                else{                    alert("暂时不支持MimeType=" + MimeType + "类型附件的预览,敬请期待后续博文!");                }            }            $(function () {                var clientUrl = GetGlobalContext().getClientUrl();                //var id = window.parent.Xrm.Page.data.entity.getId(); //这种方法可以获取表单中的很多信息,包括id                var match = RegExp('[?&]id=([^&]*)').exec(window.location.search);//这里是外接通过url传递id的值过来                var id = match && decodeURIComponent(match[1].replace(/\+/g, ' '));                match = RegExp('[?&]typename=([^&]*)').exec(window.location.search);                var typename = match && decodeURIComponent(match[1].replace(/\+/g, ' '));                XrmServiceToolkit.Rest.RetrieveMultiple(                "AnnotationSet",                "?$select=AnnotationId,Subject,NoteText,MimeType,FileName,FileSize,IsDocument,CreatedOn,CreatedBy,ModifiedOn,ModifiedBy&$filter=ObjectTypeCode eq '" + typename + "' and ObjectId/Id eq guid'" + id + "'&$orderby=CreatedOn asc",                function (results) {                    for (var i = 0; i < results.length; i++) {                        var tr = $("<tr></tr>");                        tr.appendTo($("#notestable tbody"));                        var td = $("<td>" + (i+1) + "</td>");                        td.appendTo(tr);                        td = $("<td>" + (results[i].Subject == null ? "" : results[i].Subject) + "</td>");                        td.appendTo(tr);                        td = $("<td><a href='" + clientUrl + "/main.aspx?etn=annotation&pagetype=entityrecord&id=%7B" + results[i].AnnotationId + "%7D' target='_blank'>" + results[i].NoteText + "</a></td>");                        td.appendTo(tr);                        td = $("<td>" + results[i].CreatedBy.Name + "</td>");                        td.appendTo(tr);                        td = $("<td>" + results[i].CreatedOn.format('yyyy-MM-ddThh:mm:ssZ') + "</td>");                        td.appendTo(tr);                        td = $("<td>" + results[i].ModifiedBy.Name + "</td>");                        td.appendTo(tr);                        td = $("<td>" + results[i].ModifiedOn.format('yyyy-MM-ddThh:mm:ssZ') + "</td>");                        td.appendTo(tr);                        td = $("<td>" + (results[i].IsDocument ? "是" : "否") + "</td>");                        td.appendTo(tr);                        td = $("<td>" + (results[i].FileName == null ? "" : ("<a href='#' data-annotationid='" + results[i].AnnotationId + "' data-mimetype='" + results[i].MimeType + "'>" + results[i].FileName + "</a>") + "</td>"));                        td.find("a").click(function() {                            ShowAttachmentByNoteId($(this).attr("data-annotationid"),$(this).attr("data-mimetype"));                        });                        td.appendTo(tr);                        td = $("<td>" + (results[i].FileSize == null ? "" : Math.round((results[i].FileSize)/1024)) + "</td>");                        td.appendTo(tr);                    }                },                function (error) {                    alert(error.message);                },                function () {                },                true                );                $("#dialogclosebtn").click(function (e) {                    HideDialog();                    e.preventDefault();                });            });        </script> </head> <body>        <table id="notestable">            <thead>               <tr>                   <th>序号</th>                   <th>注释标题</th>                   <th>注释内容</th>                   <th>创建人</th>                   <th>创建时间</th>                   <th>修改人</th>                   <th>修改时间</th>                   <th>是否包含附件</th>                   <th>附件名称</th>                   <th>附件大小(KB)</th>               </tr>            </thead>            <tbody>            </tbody>        </table>        <div id="overlay" class="web_dialog_overlay"></div>        <div id="dialog" class="web_dialog">            <div class="web_dialog_title"><span id="dialogtitle" style="float:left;">附件内容预览</span><span id="dialogclosebtn" style="float:right;">关闭</span></div>        </div> </body></html>

 

我上传了几个Office文件,如下:

 

测试点击Office文档的话会在新窗口中打开文档,当然是利用Office Online功能:

1. Word文档, .docx 文档:

 

2. Excel文档,.xlsx 文档:

 

3.PPT文档,.pptx文档:可以看到还可以放映幻灯片呢,给力!

 

4.pdf文档则会直接在浏览器中打开,如果你安装了PDF阅读软件也允许直接在浏览器中打开的话:

 


©著作权归作者所有:来自51CTO博客作者luoyong0201的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. 顶踩投票功能,你大概要敲多少代码才能搞定【付源码】
  2. Oracle Linux 7.9+Oracle 12c+ASM安装文档--4、添加ASM磁盘组
  3. Oracle Linux 7.9+Oracle 12c+ASM安装文档--5、数据库软件安装
  4. Linux tar 压缩 备份
  5. Oracle Linux 7.9+Oracle 12c+ASM安装文档--3、GRID软件安装
  6. 微信PC版重磅更新!2个困扰多年的大麻烦,这次终于解决了
  7. 介绍Dynamics 365/Power Apps生成PDF的功能
  8. 功能强大却可以免费使用的报表工具是真实存在的!
  9. 微信偷偷上线了新功能!你发现了吗?

随机推荐

  1. 在Android设备与Mac电脑之间传输文件
  2. android与linux之间的关系
  3. 修改 framework 代码的经验和踩过的坑
  4. Android下Content Provider使用
  5. 一些摘抄
  6. Android OTA升级原理和流程分析(一)--updat
  7. Android_简单笔记一
  8. 【Android(安卓)学习笔记】save data(1)—
  9. 【Android】Broadcast控制音乐暂停继续等
  10. Android本地硬盘的API文档打开速度慢