xieyixiao 2020-06-14



function ConvertStringToDatetime(dateString) {
var reggie = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2]) - 1,
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
return dateObject;
}
function NameOnchangeHandler() {
var clientURL = Xrm.Page.context.getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientURL + "/api/data/v8.0/ly_tests"), true);
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) {
var testUri = this.getResponseHeader("OData-EntityId");
Xrm.Utility.alertDialog("创建成功的罗勇测试试题记录的URI: " + testUri)
}
else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog("创建罗勇测试实体记录出错." + error.message);
}
}
};
var test = {};
test.ly_name = "单行文本";//单行文本
test.ly_alternatekey = "13926492291";//单行文本
test.ly_bool = true;//两个选项
test.ly_datetime = ConvertStringToDatetime(‘2016-01-07T11:22:30Z‘);//日期和时间,需要将UTC时间转换为本地时间
test.ly_decimal = 10.01;//十进制数
test.ly_float = 10.02//浮点数
test[""] = "/accounts(CE23165A-3AA3-E511-80C7-000D3A807EC7)"//查找字段,注意去/api/data/v8.0/$metadata页面查看关系的Partner属性的值
test.ly_integer = 10;//整数
test.ly_money = 10.03;//货币
test.ly_multilinetext = "多行文本";//多行文本
test.ly_optionset = 364750000;//选项集
test.ly_singlelinetext = "单行文本";//单行文本
req.send(JSON.stringify(test));
}如果创建成功,提示如下:


特别说明下如何为查找字段赋值,因为这个当时也困扰了我一阵子。查找字段在本实体肯定有个N:1的关系对应,找到这个关系的架构名称。

去类似http://lycrmvm.cloudapp.net:5555/Demo/api/data/v8.0/$metadata 页面搜索这个名称,找到的 NavigationProperty 元素的Partner 属性值就是查找字段赋值时候json数据key的前面部分,比如key就是

注意,对于可能包括小数的字段,比如十进制数,货币等,如果你赋予整数的话,比如赋予100,会导致出错。错误信息通常是:Incorrect attribute value type System.Int32 . 或者 The property provided was of type System.Int32, when the expected was of type System.Decimal 。我这里提供的解决办法很很简单,就是设置的值加上 0.00001 ,这个对你要设置的值大小没有影响,我查过数据库,但是又能让系统认为你传递过去的数据是正确的类型。示例是:{ "value": 200 + 0.00001 } 。