Hide/Remove 来自具有 JavaScript 的 SP 列表的 ContentType
Hide/Remove ContentType from a SP List with JavaScript
我正在通过 REST 创建一个 SP 列表 API,在创建列表后,我正在向该列表添加自定义 ContentType。
因此,我的自定义 ContentType 应该是该列表中的默认 CT。
我已经试过了,但它不起作用,可能我的 contentType 必须是一个对象..
let dfd = new $.Deferred();
let targetUrl = config.App + subsiteTitle;
let clientContext = new SP.ClientContext(targetUrl);
if (clientContext !== undefined && clientContext !== null) {
let web = clientContext.get_web();
let listCollection = web.get_lists();
let list = listCollection.getByTitle(listTitle);
let contentType = list.get_contentTypes().getById('0x01');
contentType.deleteObject();
clientContext.executeQueryAsync(
Function.createDelegate(this, function() {
dfd.resolve(this);
}),
Function.createDelegate(this, function(sender, args) {
console.log('Failed to remove content type ' + args.get_message());
})
)
}
return dfd.promise();
有谁知道如何使用 JavaScript 从该列表中隐藏或删除 'Item' ContentType,或者将我的自定义 ContentType 设置为默认值,是否通过 REST [=20] 无关紧要=] 还是 JSOM?
非常感谢!
我们可以使用下面的代码将自定义内容类型设置为默认值。注意:修改"listname"为你的列表名。
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(ChangeContentTypeOrder, "sp.js");
function ChangeContentTypeOrder(){
var listname="CustomList";
var c = new SP.ClientContext.get_current();
var folder = c.get_web().get_lists().getByTitle(listname).get_rootFolder();
c.load(folder, 'ContentTypeOrder');
c.executeQueryAsync(function() {
folder.set_uniqueContentTypeOrder(folder.get_contentTypeOrder().reverse());
folder.update();
c.executeQueryAsync();
});
}
</script>
我们可以在列表设置中使用 SharePoint UI 进行设置。
在您的示例中缺少两个操作:
- 将内容类型添加到列表中,
SP.ContentTypeCollection.addExistingContentType
method 可用于该目的
- 为了将特定内容设置为默认内容,需要
指定为第一个使用
SP.Folder.uniqueContentTypeOrder
property
例子
let ctx = new SP.ClientContext(targetUrl);
let ct = ctx.get_site().get_rootWeb().get_contentTypes().getById(contentTypeId);
let targetList = ctx.get_web().get_lists().getByTitle(listTitle);
let listContentTypes = targetList.get_contentTypes();
listContentTypes.addExistingContentType(ct); //1. add content type into list
var folder = targetList.get_rootFolder();
ctx.load(folder, 'ContentTypeOrder');
ctx.load(ct);
executeQuery(ctx)
.then(() => {
//2. set added content type as a default one
let ctIdList = folder.get_contentTypeOrder().sort((x,y) =>{
return x.get_stringValue().indexOf(contentTypeId) != -1 ? -1 : y.get_stringValue().indexOf(contentTypeId) != -1 ? 1 : 0;
});
folder.set_uniqueContentTypeOrder(ctIdList);
folder.update();
return executeQuery(ctx);
})
.then(() => {
console.log("Done!");
})
哪里
function executeQuery(context) {
return new Promise((resolve, reject) => {
context.executeQueryAsync(function () {
resolve();
}, function (sender, args) {
reject(args);
});
});
}
我正在通过 REST 创建一个 SP 列表 API,在创建列表后,我正在向该列表添加自定义 ContentType。 因此,我的自定义 ContentType 应该是该列表中的默认 CT。
我已经试过了,但它不起作用,可能我的 contentType 必须是一个对象..
let dfd = new $.Deferred();
let targetUrl = config.App + subsiteTitle;
let clientContext = new SP.ClientContext(targetUrl);
if (clientContext !== undefined && clientContext !== null) {
let web = clientContext.get_web();
let listCollection = web.get_lists();
let list = listCollection.getByTitle(listTitle);
let contentType = list.get_contentTypes().getById('0x01');
contentType.deleteObject();
clientContext.executeQueryAsync(
Function.createDelegate(this, function() {
dfd.resolve(this);
}),
Function.createDelegate(this, function(sender, args) {
console.log('Failed to remove content type ' + args.get_message());
})
)
}
return dfd.promise();
有谁知道如何使用 JavaScript 从该列表中隐藏或删除 'Item' ContentType,或者将我的自定义 ContentType 设置为默认值,是否通过 REST [=20] 无关紧要=] 还是 JSOM? 非常感谢!
我们可以使用下面的代码将自定义内容类型设置为默认值。注意:修改"listname"为你的列表名。
<script type="text/javascript">
ExecuteOrDelayUntilScriptLoaded(ChangeContentTypeOrder, "sp.js");
function ChangeContentTypeOrder(){
var listname="CustomList";
var c = new SP.ClientContext.get_current();
var folder = c.get_web().get_lists().getByTitle(listname).get_rootFolder();
c.load(folder, 'ContentTypeOrder');
c.executeQueryAsync(function() {
folder.set_uniqueContentTypeOrder(folder.get_contentTypeOrder().reverse());
folder.update();
c.executeQueryAsync();
});
}
</script>
我们可以在列表设置中使用 SharePoint UI 进行设置。
在您的示例中缺少两个操作:
- 将内容类型添加到列表中,
SP.ContentTypeCollection.addExistingContentType
method 可用于该目的 - 为了将特定内容设置为默认内容,需要
指定为第一个使用
SP.Folder.uniqueContentTypeOrder
property
例子
let ctx = new SP.ClientContext(targetUrl);
let ct = ctx.get_site().get_rootWeb().get_contentTypes().getById(contentTypeId);
let targetList = ctx.get_web().get_lists().getByTitle(listTitle);
let listContentTypes = targetList.get_contentTypes();
listContentTypes.addExistingContentType(ct); //1. add content type into list
var folder = targetList.get_rootFolder();
ctx.load(folder, 'ContentTypeOrder');
ctx.load(ct);
executeQuery(ctx)
.then(() => {
//2. set added content type as a default one
let ctIdList = folder.get_contentTypeOrder().sort((x,y) =>{
return x.get_stringValue().indexOf(contentTypeId) != -1 ? -1 : y.get_stringValue().indexOf(contentTypeId) != -1 ? 1 : 0;
});
folder.set_uniqueContentTypeOrder(ctIdList);
folder.update();
return executeQuery(ctx);
})
.then(() => {
console.log("Done!");
})
哪里
function executeQuery(context) {
return new Promise((resolve, reject) => {
context.executeQueryAsync(function () {
resolve();
}, function (sender, args) {
reject(args);
});
});
}