SPFx использует @ pnp / sp для создания списка - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь создать пользовательский список, используя @ pnp / sp , в своей процедуре мне нужно проверить, существует ли список, если нет, то я создам список и добавить его столбцы.

Приведенный ниже код иногда работает, возможно, это потому, что sp.web. * методы асинхронные, и это вызывает проблемы.

Итак, как правильно 1) проверить определенный список, 2) добавить список, если он не существует, 3) добавить поля в список?

sp.web.lists.ensure("SliceBox").then( List => {    
    List.fields.getByTitle("Body").get().catch( f => {
        f.fields.addMultilineText("Body", 4, true, false, false, true);
    });

    List.fields.getByTitle("Link").get().catch( f => {
        f.fields.addUrl("Link", UrlFieldFormatType.Hyperlink);
    });

    List.fields.getByTitle("Visible").get().catch( f => {
        f.fields.addBoolean("Visible");
    });
})
.catch( err => {
    console.log("> Failure: ", err);
});

Не имеет значения, если я попробую очень явный способ (см. Ниже), он также потерпит неудачу:

sp.web.lists.ensure("SliceBox").then( List => {
    sp.web.lists.getByTitle("SliceBox").fields.getByTitle("Body").get().catch( f => {
        f.fields.addMultilineText("Body", 4, true, false, false, true);
    });        
    // ... shortened for brevity ...
})
.catch( err => {
    console.log("> Failure: ", err);
});

1 Ответ

0 голосов
/ 04 июля 2018

Мой пример тестового кода, который отлично работает.

sp.web.lists.ensure("SliceBox").then( sliceBox => {                        
      sliceBox.list.fields.getByTitle("Visible").get().catch( f => {
        sliceBox.list.fields.addBoolean("Visible");
        alert('fieldAdded');
      });

  })

Обновление:

Попробуйте это:

sp.web.lists.ensure("SliceBox").then( sliceBox => {                        
      sliceBox.list.fields.getByTitle("Visible").get().catch( f => {
        sliceBox.list.fields.addBoolean("Visible").then(f =>{
          sliceBox.list.fields.getByTitle("Link").get().catch( f => {
            sliceBox.list.fields.addUrl("Link", UrlFieldFormatType.Hyperlink);
            alert('done');
        });
        })

      });

  })
...