无法创建 LookUpField
Can't create a LookUpField
我正在创建一个新列表并尝试在列表中添加一个查找字段。
我检索了我要查找的列表:
let list = sp.web.lists.getByTitle("Trucks");
list.get().then(list => {
this._ensureMyList("MySPListTest", list)
});
然后我创建新列表和新字段:
private _ensureMyList(listName: string, truckList): void {
sp.web.lists.ensure(listName)
.then((ler: ListEnsureResult) => {
if (ler.created) {
console.log("list was created");
ler.list.fields.add("LookupTest", "SP.FieldLookup", {
Group: "~Example",
FieldTypeKind: 7,
Filterable: true,
Hidden: false,
EnforceUniqueValues: true,
})
.then((result) => {
console.log("result: ", result);
});
}
});
}
我收到错误:
Uncaught (in promise) Error: Error making HttpClient request in queryable: [500] ::> {"responseBody":{"odata.error":{"code":"-2146232832, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"Please use addfield to add a lookup field instead."}}},"responseHeaders":{}}
我从以下位置获得了字段名称和 TypeKind:
https://msdn.microsoft.com/en-us/library/office/dn600182.aspx#bk_FieldLookup
我也试过使用addLookup
方法:
ler.list.fields.addLookup("LookupTest", truckList.Id, "Truck")
.then((result) => {
console.log("result: ", result);
});
错误:
Uncaught (in promise) Error: Error making HttpClient request in queryable: [400] ::> {"responseBody":{"odata.error":{"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"en-US","value":"The parameter __metadata does not exist in method AddField."}}},"responseHeaders":{}}
您可以考虑使用以下选项来添加查找字段:
1) 通过 Fields.addLookup
method:
let list = await sp.web.lists.getByTitle(listTitle); //get list resource
let lookupList = await sp.web.lists.getByTitle(lookupListTitle).select("Id").get(); //select Lookup List Id
let field = await list.fields.addLookup(lookupFieldName, lookupList.Id ,"Title"); // add lookup field to list
2) 通过Fields.createFieldAsXml
方法:
let list = await sp.web.lists.getByTitle(listTitle); //get target list resource
let lookupList = await sp.web.lists.getByTitle("Categories").select("Id").get(); //determine lookup list id
let fieldXml = `<Field Name="Category" Type="Lookup" DisplayName="Category" List="{${lookupList.Id}}" ShowField="Title"/>`; //construct lookup field schema
let field = await list.fields.createFieldAsXml(fieldXml); //add field to list
参考资料
更新
关于调用Fields.addLookup
方法时出现的错误:
the parameter __metadata does not exist in method AddField.
Fields.addLookup
method 的最新版本 (v1.2.1
) 似乎存在错误。关键是它会生成 invalid 有效负载,如下所示:
{
"__metadata":{
"type":"SP.FieldCreationInformation"
},
"parameters": {
"FieldTypeKind":7,
"LookupFieldName":"Title",
"LookupListId":"{list-id}",
"Title":"Cat"
}
}
parameters
应该是 http://<site url>/_api/web/lists(guid'<list id>')/fields('<field id>')/addfield
端点 (source)
有效载荷中的 root 标签
According to the history这个bug是在后来的一个提交中引入的,无论如何还是报告一个问题更好。
我正在创建一个新列表并尝试在列表中添加一个查找字段。
我检索了我要查找的列表:
let list = sp.web.lists.getByTitle("Trucks");
list.get().then(list => {
this._ensureMyList("MySPListTest", list)
});
然后我创建新列表和新字段:
private _ensureMyList(listName: string, truckList): void {
sp.web.lists.ensure(listName)
.then((ler: ListEnsureResult) => {
if (ler.created) {
console.log("list was created");
ler.list.fields.add("LookupTest", "SP.FieldLookup", {
Group: "~Example",
FieldTypeKind: 7,
Filterable: true,
Hidden: false,
EnforceUniqueValues: true,
})
.then((result) => {
console.log("result: ", result);
});
}
});
}
我收到错误:
Uncaught (in promise) Error: Error making HttpClient request in queryable: [500] ::> {"responseBody":{"odata.error":{"code":"-2146232832, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"Please use addfield to add a lookup field instead."}}},"responseHeaders":{}}
我从以下位置获得了字段名称和 TypeKind:
https://msdn.microsoft.com/en-us/library/office/dn600182.aspx#bk_FieldLookup
我也试过使用addLookup
方法:
ler.list.fields.addLookup("LookupTest", truckList.Id, "Truck")
.then((result) => {
console.log("result: ", result);
});
错误:
Uncaught (in promise) Error: Error making HttpClient request in queryable: [400] ::> {"responseBody":{"odata.error":{"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"en-US","value":"The parameter __metadata does not exist in method AddField."}}},"responseHeaders":{}}
您可以考虑使用以下选项来添加查找字段:
1) 通过 Fields.addLookup
method:
let list = await sp.web.lists.getByTitle(listTitle); //get list resource
let lookupList = await sp.web.lists.getByTitle(lookupListTitle).select("Id").get(); //select Lookup List Id
let field = await list.fields.addLookup(lookupFieldName, lookupList.Id ,"Title"); // add lookup field to list
2) 通过Fields.createFieldAsXml
方法:
let list = await sp.web.lists.getByTitle(listTitle); //get target list resource
let lookupList = await sp.web.lists.getByTitle("Categories").select("Id").get(); //determine lookup list id
let fieldXml = `<Field Name="Category" Type="Lookup" DisplayName="Category" List="{${lookupList.Id}}" ShowField="Title"/>`; //construct lookup field schema
let field = await list.fields.createFieldAsXml(fieldXml); //add field to list
参考资料
更新
关于调用Fields.addLookup
方法时出现的错误:
the parameter __metadata does not exist in method AddField.
Fields.addLookup
method 的最新版本 (v1.2.1
) 似乎存在错误。关键是它会生成 invalid 有效负载,如下所示:
{
"__metadata":{
"type":"SP.FieldCreationInformation"
},
"parameters": {
"FieldTypeKind":7,
"LookupFieldName":"Title",
"LookupListId":"{list-id}",
"Title":"Cat"
}
}
parameters
应该是 http://<site url>/_api/web/lists(guid'<list id>')/fields('<field id>')/addfield
端点 (source)
According to the history这个bug是在后来的一个提交中引入的,无论如何还是报告一个问题更好。