Salesforce notes
- Json字符串中带有自对象信息,不能直接转成Sobject
{
"sobjectfield":"value",
"Children__r": [{
"SomeField": "some value"
}, {
"SomeField": "some value"
}]
}
需要将子对象做一下转化:
{
"sobjectfield":"value",
"Children__r": {
"totalSize": 123,
"done": true,
"records":[{
"SomeField": "some value"
}, {
"SomeField": "some value"
}]
}
}
前端解决方案:
function rewriteSubquery(array) {
if (array && !array.hasOwnProperty('records')) {
var tempArray = array;
array = {
totalSize: tempArray.length,
done: true,
records: tempArray
}
}
return array;
};
递归解决复杂的对象:
let rewriteSubquery = (jsonObj) => {
let jsTypes = ['Array', 'Object'];
if (objType(jsonObj) == jsTypes[0]) {
jsonObj.map((x, i) => (rewriteSubquery(x)));
// for (let i = 0; i < jsonObj.length; i++) {
// rewriteSubquery(jsonObj[i]);
// }
} else {
for (key in jsonObj) {
console.log('-->', key);
//key:属性名
//attr[key]:属性值
let value = jsonObj[key];
console.log('22-->', objType(value));
//判断是不是__r
if (key.endsWith('__r')) {
//判断是不是数组
if (objType(value) == jsTypes[0]) {
//是数组则格式化为后台可以处理的类型
jsonObj[key] = addAttrs(value);
// rewriteSubquery(jsonObj[key]);
//return jsonObj[key];
}
}
console.log('33-->', objType(value));
//判断是不是object
if (objType(value) == jsTypes[1] || objType(value) == jsTypes[0]) {
console.log('44-->', objType(value));
rewriteSubquery(value);
}
}
}
};
let addAttrs = (array) => {
if (array && !array.hasOwnProperty('records')) {
var tempArray = array;
array = {
totalSize: tempArray.length,
done: true,
records: tempArray
}
}
return array;
};
let objType = (obj) => {
let jsTypes = ['String', 'Number', 'Boolean', 'Array', 'Null', 'Undefined', 'Object', 'Function', 'Date', 'RegExp', 'Symbol'];
let theType;
jsTypes.map(x => {
if (Object.prototype.toString.call(obj) == '[object ' + x + ']') {
theType = x;
}
})
return theType;
}
e.g.:
let jsonObj = {
"key1": { 'a': 'b' },
"key2__r": { 'a2': 'b2' },
"key3__r": [{ 'a3': 'b3' }],
"key4": [
{
"key2__r": { 'a2': 'b2' },
}, {
"key3__r": [
{ 'a3': 'b3' },
{ 'a3': 'b3' },
{ 'key5__r': [{'b5':'a5'}] },
],
}
]
};
//调用
rewriteSubquery(jsonObj);
//输出:
{
"key1": {"a": "b"},
"key2__r": {"a2": "b2"},
"key3__r": {
"totalSize": 1,
"done": true,
"records": [{
"a3": "b3"
}]
},
"key4": [{"key2__r": {"a2": "b2"}}, {
"key3__r": {
"totalSize": 3,
"done": true,
"records": [{"a3": "b3"},
{"a3": "b3"}, {
"key5__r": {
"totalSize": 1,
"done": true,
"records": [{
"b5": "a5"
}]
}
}]
}
}]
}
- 前端导出Excel简版
var data = [
[表头1, 表头2],
[值1, 值2]
]
var filename = fileName + ".xlsx";
var ws_name = sheetName; //Excel第一个sheet的名称
var wb = XLSX.utils.book_new(), ws = XLSX.utils.aoa_to_sheet(data);
XLSX.utils.book_append_sheet(wb, ws, ws_name); //将数据添加到工作薄
XLSX.writeFile(wb, filename); //导出Excel