SPFx使用@ pnp / sp创建列表

时间:2018-07-03 04:34:51

标签: typescript sharepoint-online spfx

我正在尝试使用 @ 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 :(得分:0)

我的示例测试代码运行正常。

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');
        });
        })

      });

  })