Dynamics 365利用HTML页面创建实体记录并同步上传附件
我是微软Dynamcis 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复342或者20190605可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
关于Deep Insert请参考我的博文:Dynamics CRM 中Web API中的深度创建(Deep Insert) 我这里不再赘述。
JavaScript的 instanceOfFileReader.readAsDataURL(blob)方法刚好能将要上传的文件内容读成base64编码,我们知道Dynamics 365 Customer Engagement中的附件存储在数据库中就是base64格式。
我下面直接上代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>罗勇开发的示例程序</title>
<script src="../../../ClientGlobalContext.js.aspx" type="text/javascript"></script>
<script type="text/javascript">
function createCaseandNote() {
var file = document.querySelector("#img").files[0];
var reader = new FileReader();
if (file) {
reader.readAsDataURL(file);
}
reader.addEventListener("load", function () {
console.log(file.name);
console.log(file.type);
console.log(file.size);
console.log(file.lastModifiedDate);
console.log(reader.result);
var result = reader.result;
var base64result = result.substring(result.indexOf(";base64,") + 8);
var requestJson = {
"title": "罗勇示例Case",
"customerid_account@odata.bind": "/accounts(f9fa6e76-ab12-e811-a959-000d3a109495)",
"description": "罗勇通过代码一次创建case及其附件的示例",
"Incident_Annotation":
[
{
"subject": file.size.toString(),
"notetext": file.lastModifiedDate,
"mimetype": file.type,
"isdocument": true,
"filename": file.name,
"documentbody": base64result
}
]
};
var clientURL = Xrm.Utility.getGlobalContext().getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientURL + "/api/data/v9.1/incidents", false));
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {//204代表成功无返回值
var currentAppUrl = Xrm.Utility.getGlobalContext().getCurrentAppUrl();
if (currentAppUrl.indexOf("appid=") <= -1) {
currentAppUrl += "/main.aspx?";
}
else {
currentAppUrl += "&";
}
Xrm.Navigation.openUrl(currentAppUrl + "pagetype=entityrecord&etn=incident&id=" + this.getResponseHeader("OData-EntityId").match(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/)[0] + "&navbar=off&cmdbar=false");
}
else {
var error = JSON.parse(this.response).error;
alert("错误:" + error.message);
}
}
};
req.send(JSON.stringify(requestJson));
}, false);
} function previewFile() {
var preview = document.querySelector('#imgprivew');
var file = document.querySelector("#img").files[0];
var reader = new FileReader();
reader.addEventListener("load", function () {
preview.src = reader.result;
}, false); if (file) {
reader.readAsDataURL(file);
}
}
</script>
</head>
<body>
<input id="img" type="file" onchange="previewFile()">
<input type="button" onclick="createCaseandNote()" value="上传并创建案例及包含附件的注释" /><br />
<img id="imgprivew" src="" width="600" alt="Image preview...">
</body>
</html>
效果如图,选择图片后有预览效果,点击按钮后会使用Deep Insert同步创建一个Case实体记录并同时将该附件作为注释和该case实体记录关联。

创建后打开的case实体记录效果如下:

Dynamics 365利用HTML页面创建实体记录并同步上传附件的更多相关文章
- 自定义适用于手机和平板电脑的 Dynamics 365(三):显示的实体
您可以启用 适用于手机的 Dynamics 365 和 适用于平板电脑的 Dynamics 365 的有限实体集. 若要查看是否启用了实体,或者要启用实体,请单击“设置”>“自定义”>“自 ...
- Docker 创建镜像、修改、上传镜像
Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...
- 利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载
利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载 1.页面显示代码 <%@ page language="java" import="java ...
- 使用GitHub-Pages创建博客和图片上传问题解决
title: 使用GitHub Pages创建博客和图片上传问题解决 date: 2017-10-22 20:44:11 tags: IT 技术 toc: true 搭建博客 博客的搭建过程完全参照小 ...
- hadoop学习记录--hdfs文件上传过程源码解析
本节并不大算为大家讲接什么是hadoop,或者hadoop的基础知识因为这些知识在网上有很多详细的介绍,在这里想说的是关于hdfs的相关内容.或许大家都知道hdfs是hadoop底层存储模块,专门用于 ...
- JQuery Uplodify上传附件(同一个页面多个uplodify控件解决方案)
功能描述:实现同一页面中多个不同附件的上传保存,且做到最大程度的减少代码修改量(最大程度的公用),为了方便实现垃圾数据和垃圾文件的处理,项目采用临时文件夹的方式:即:文件自动上传先保存到临时文件夹下, ...
- 跟我学SharePoint 2013视频培训课程——怎样创建文档库并上传文档(8)
课程简介 第8天,怎样在SharePoint 2013怎样创建文档库并上传文档. 视频 SharePoint 2013 交流群 41032413
- Dynamics 365利用Web API对视图进行查询
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...
随机推荐
- 【AGC035F】Two Histograms
Problem Description 你有一个 \(N\) 行.\(M\) 列的.每个格子都填写着 0 的表格.你进行了下面的操作: 对于每一行 \(i\) ,选定自然数 \(r_i\) (\(0\ ...
- Java生鲜电商平台-商家支付系统与对账系统架构实战
Java生鲜电商平台-商家支付系统与对账系统架构实战 说明:关于生鲜电商平台,支付系统是连接消费者.商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付 ...
- extjs 动态加载列表,优化思路
功能截图 之前做法,先查询每一行的前4个字段,然后动态拼接出其他的字段,效率极低,以下是优化后的代码,供参考,只提供一个优化思路,授人以鱼不如授人以渔 后台Sql语句优化(语法仅支持Oracle) S ...
- Easy User Manager System writeup
0x01 解题 思路 一个进程用自己的ip去申请拿到code然后进入verify页面,另外一个进程去申请8.8.8.8 步骤 1. 首先注册一个账号 然后用两个不同的浏览器进入Change页面.这里我 ...
- 转战物联网·基础篇05-通俗理解MQTT协议的实现原理和异步方式
网络上搜索MQTT协议,会出现太多的解释,这里就不做官方标准释义的复制了.这一节我们从实战理解角度,通俗的将MQTT协议的作用及实现原理说一下,旨在可以快速理解MQTT协议.所以可能会出现很多看似 ...
- PHP匿名函数、闭包、function use
匿名函数,也叫闭包函数(closures) ,允许临时创建一个没有制定名称的函数.最常用作回调函数(callback)参数的值. 闭包函数也可以作为变量的值来使用.PHP将会自动把此种表达式转换成内置 ...
- 并发编程~~~多线程~~~守护线程, 互斥锁, 死锁现象与递归锁, 信号量 (Semaphore), GIL全局解释器锁
一 守护线程 from threading import Thread import time def foo(): print(123) time.sleep(1) print('end123') ...
- 3-SQL过滤
# 筛选最大生命值大于6000,最大法力值大1700的英雄,然后按照二者之和从高到低进行排序 SELECT NAME , hp_max, mp_max FROM he ...
- git集成idea
1.Git Gui的使用 2.Ssh key 介绍及使用 3.Idea配置使用并使用git Git Gui的使用 Ssh key 介绍及使用 Ssh key介绍 我理解的就是每台电脑上会产生出一个ss ...
- 04-Node.js学习笔记-相对路径VS绝对路径
4.1相对路径VS绝对路径 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录 在读取文件或者设置文件路径时都会选择绝对路径 4.2使用__dirname 获取当前文件所在的 ...