本篇继续探索web api,介绍如何通过web api更新记录。

下面是一段简单的更新代码,更新了几个不同类型的字段,entity的赋值和前篇创建时候的一样的。

var entity = {};
entity["name"] = '测试更新';//文本
entity["new_gender"] = 100000001;//选项集
entity["new_birth"] = new Date();//日期
entity["new_testid@odata.bind"] = "/new_tests(55579B39-39E7-E511-9414-ADA183AB6249)";//lookup
entity["new_bool"] = false;//bool
entity["revenue"] = 255;//货币
var jsonEntity = window.JSON.stringify(entity);
var id="D1E50347-86EB-E511-9414-ADA183AB6249";
$.ajax({
async: false,
type: "PATCH",
contentType: "application/json; charset=utf-8",
datatype: "json",
data: jsonEntity,
url: Xrm.Page.context.getClientUrl() + "/api/data/v8.0/accounts(" + id.replace('{', '').replace('}', '') + ")",
success: function (data, textStatus, XmlHttpRequest) {
if (XmlHttpRequest.status=='204') {
alert('更新成功');
}
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
}
});

下面两张图是更新前后的对比

新的更新操作的API几个需要注意的地方:

1、这里的请求type是patch了还不是post

2、这里的返回状态值为204即为更新成功,没有返回值

3、有一种方式的更新要注意,比如你先retrieve出了一个实体的所有属性,然后更改查询出来的entity里的某几个属性字段,再直接把这个entity request出去的话,那对于这个entity里的某些字段的内容没有做过更改系统也进行更新,最直接的体会就是在审核日志中的update记录中有这些字段更新记录(但实际你并没有更改字段内容),所以更新时最好new一个entity出来再进行复制。

以下是上述第三点讲到的sdk中的原文说明

4、前面给出的是一个基本的update代码,一旦你要更新的记录在系统中不存在,执行上面那段代码直接update会出问题,request请求就不是update一条记录而变成create一条记录了,所以要在请求header中加这么一段setRequestHeader("If-Match",
"*"),这样执行后会报404,记录不存在。

再者如果我就想用上述代码来创建一条记录,那你要校验啊,我给定的这个guid在系统中不存在我才创建,所以要在header中加这么一段setRequestHeader("If-None-Match",
"*"),一旦存在就抛错不创建了。

Dynamics CRM2016 Web API之更新记录的更多相关文章

  1. Dynamics CRM2016 Web API之更新记录的单个属性字段值

    在web api中提供了对单个属性的更新接口,这和查询中查询单个属性类似,对这个接口我个人也是比较喜欢的. var id = "{D1E50347-86EB-E511-9414-ADA183 ...

  2. Dynamics CRM2016 Web API之创建记录

    前篇介绍了通过primary key来查询记录,那query的知识点里面还有很多需要学习的,这个有待后面挖掘,本篇来简单介绍下用web api的创建记录. 直接上代码,这里的entity的属性我列了几 ...

  3. Dynamics CRM2016 Web Api之更新时间字段值

    前篇我们论述了时间字段的查询,本篇来论述下时间字段的更新. 还是以之前建的当地时间(时间行为为用户当地时间)字段来测试 可以看到web api更新的是数据库的时间,而在前台的反映就是做了加8处理,所以 ...

  4. Dynamics CRM2016 Web Api之分页查询

    在dynamics crm web api还没出现前,我们是通过fetchxml来实现的,当然这种方式依旧可行,那既然web api来了我们就拥抱新的方式. web api中我们通过指定查询的条数来实 ...

  5. Dynamics CRM2016 Web API之通过实体的primary key查询记录

    CRM2016启用了webapi 而弃用了odata,作为码农的我们又开始学习新东西了. 下面是一段简单的查询代码,通过systemuser的primary key来查询一条记录 Web API查询方 ...

  6. Dynamics CRM2016 Web API获取实体元数据Picklist属性的Text&Value

    通过组织服务中获取实体picklist字段的text和value可以通过RetrieveAttributeRequest实现,但在使用web api的今天该怎么实现,本文即来一探究竟,本篇基于SDK中 ...

  7. Dynamics CRM2016 Web Api之根据时间查询数据

    我的博文里已经有多次提到CRM中的时间处理问题了,本篇继续探讨在web api的场景下时间字段如何处理,本篇只涉及查询,针对2016中新增的时间行为"用户当地时间"和"无 ...

  8. Dynamics CRM2016 Web API之Use custom FetchXML

    CRM2016中新增的web api支持fetch xml了,之前使用FetchXML的场景是在后天代码中通过组织服务的retrieve multiple方法,但实际的应用效果有多大,还需要在实际的项 ...

  9. Dynamics CRM2016 Web API之Create related entities in one operation

    本篇继续来介绍两个web api的接口,一个是"Create related entities in one operation"即在一步操作中完成主实体的创建加关联实体的创建,一 ...

随机推荐

  1. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...

  2. 部署上次的Hapi到Windows+Docker,WindowsDocker

    前言: 理论的就不多说了,具体的架构看图.web这里是上篇文章开发的Hapi服务,数据库Mysql,废话不多说,粗略的画了下,架构图如下: Mysql镜像拉取,配置 数据库镜像查找 docker se ...

  3. Shell的基本命令(第一天),根据w3c学习得

    Shell是一种应用程序,提供一个界面访问操作系统内核的服务. 1:编写shell脚本 vi test.sh #!/bin/bash #指定这个脚本需要什么解释器来执行 echo "Hell ...

  4. StandardContext

    错误信息: 2014-2-6 21:37:19 org.apache.catalina.startup.HostConfig checkResources信息: Reloading context [ ...

  5. [ZJOI 2010]count 数字计数

    Description 题库链接 问你 \([l,r]\) 区间内所有整数中各个数码出现了多少次. \(1\leq a\leq b\leq 10^{12}\) Solution 数位 \(DP\) . ...

  6. [SDOI 2009]HH去散步

    Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又 ...

  7. [Noi2014]购票

    来自FallDream 的博客,未经允许,请勿转载,谢谢. 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.        全国的 ...

  8. Map 探索

    关于Map问题我一直了解的不是很透彻,下面进行比较系统的总结一下. 1.

  9. Python与C的简单比较(Python3.0)

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  10. if else与switch区别

    一.if-else 只是单纯地一个接一个比较:if...else每个条件都计算一遍: 二.switch 使用了Binary Tree算法:绝大部分情况下switch会快一点,除非是if-else的第一 ...