将“文档库”列表中的“名称”字段导出到移动应用

使用 Visual Studio SharePoint 列表向导将文档库列表的名称字段导出到移动应用程序。 当用户在 SharePoint 中创建一个文档库的移动应用程序时,名称字段不会自动出现。 在文档库列表中,用户可以上传各种文档。 文档的列表项通常具有 标题名称以及指向文档的链接作为属性。 如果开发人员针对文档库创建Windows Phone 7 应用,则 IDE 向导中不会导出“名称”字段。 因此,开发人员无法轻松了解文档名称。 (这是因为默认情况下 SharePoint 不支持类型为“FILE”的字段。)

注意

Title 属性不包括文件扩展名。

所以,如果要读取文档、创建文档的完整 URL 并在默认应用程序(例如 Word)中打开文档,您必须编写代码来获取实际的文件名。

重要说明:若要开发 Windows Phone 8 版应用,必须使用 Visual Studio Express 2012,而不是 Visual Studio 2010 Express。 除开发环境外,本文中的其他所有信息都适用于创建 Windows Phone 8 和 Windows Phone 7 版应用。 > 有关详细信息,请参阅 如何:设置用于开发 SharePoint 移动应用的环境

导出文档库的“名称”字段的先决条件

  • SharePoint

  • 带有新 SharePoint 模板的 Visual Studio Express 2010

自定义生成的类

若要从文档库中导出 Name 字段并访问附件,您必须更改 ListDataProvider 类、DisplayItemViewModel.cs 和 DisplayForm 类。 当开发人员从 Visual Studio 使用新的 SPList 向导时,该向导会创建多个遵循 Model-View-ViewModel 设计模式的类。 (有关详细信息,请参阅 使用 Model-View-ViewModel Pattern.) 创建了两个文件夹:一个文件夹名为 Views,包含修改各种列表视图 (所需的所有文件,例如 DisplayForm、EditForm、List 和 NewForm) 。 另一个名为 ViewModels,其中包含 DisplayItemViewModel、EditItemViewModel、ListViewModel、NewItemViewModel。 您将修改由向导生成的这些类中的某些类。

步骤 1:修改 ListDataProvider 以获取 SPListItem.File 属性

  1. ListDataProvider 类中,在 LoadItem 方法中添加以下代码行。

    Context.Load(spListItem, Item => Item.File);

  2. 此外,在 ListDataProvider 类中,在 LoadData 方法中添加以下代码。

    Context.Load(items, listItems => listItems.Include(item => item.File));

步骤 2:添加 FileUrl 和 FileName 属性

  • 在 DisplayItemViewModel.cs 中,将以下代码添加到 DisplayVM
  
public string m_fileUrl;
        public string FileUrl
        {
            get
            {
                if (string.IsNullOrEmpty(m_fileUrl))
                {
                    IListDataProvider p = this.DataProvider;
                    p.LoadItem(this.ID, (LoadItemCompletedEventArgs args) =>
                         {
                             FileUrl = this.DataProvider.SiteUrl + 
                                       args.Item.File.ServerRelativeUrl;
                         });
                }
                return m_fileUrl;
            }
            set
            {
                m_fileUrl = value;
                RaisePropertyChanged("FileUrl");
            }
        }
        public string m_fileName;
        public string FileName
        {
            get
            {
                if (string.IsNullOrEmpty(m_fileName))
                {
                    IListDataProvider p = this.DataProvider;
                    p.LoadItem(this.ID, (LoadItemCompletedEventArgs args) =>
                    {
                        FileName = args.Item.File.Name;
                    });
                }

                return m_fileName;
            }
            set
            {
                m_fileName = value;
                RaisePropertyChanged("FileName");
            }
        }
  • 在显示窗体中添加以下更改。
  
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Margin="0,5,0,5">
  <TextBlock TextWrapping="Wrap" Width="150" HorizontalAlignment="Left" 
   Style="{StaticResource PhoneTextNormalStyle}">
    FileUrl :
  </TextBlock>
  <HyperlinkButton Content="{Binding FileName}" NavigateUri="{Binding FileUrl}" 
   x:Name="hypFile" TargetName="_blank" />
</StackPanel>

另请参阅