Не могу создать LookUpField - PullRequest
       88

Не могу создать LookUpField

0 голосов
/ 12 сентября 2018

Я создаю новый список и пытаюсь добавить поле LookUp в список.

Я получаю список, против которого хочу посмотреть:

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 Ответ

0 голосов
/ 13 сентября 2018

Вы можете рассмотреть следующие варианты добавления поля поиска:

1) с помощью Fields.addLookup метод :

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

Ссылки

PnPjs Добавить поля

Обновление

Относительно ошибки, возникающей при вызове метода Fields.addLookup:

параметр __metadata не существует в методе AddField.

похоже, что в последней версии (v1.2.1) есть ошибка для Fields.addLookup метод . Суть в том, что он генерирует недействительные полезные данные, что-то вроде этого:

{
   "__metadata":{
     "type":"SP.FieldCreationInformation"
   },
   "parameters": { 
          "FieldTypeKind":7,
          "LookupFieldName":"Title",
          "LookupListId":"{list-id}",
          "Title":"Cat"
   }
} 

parameters должен быть тегом root в полезной нагрузке для конечной точки http://<site url>/_api/web/lists(guid'<list id>')/fields('<field id>')/addfield ( source )

Согласно истории эта ошибка была введена с одним из последующих коммитов, в любом случае лучше сообщить о проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...