通过visual studio for sharepoint在自定义网站定义中定义的文档库中添加自定义列

时间:2015-09-29 12:37:27

标签: visual-studio sharepoint

我正在尝试为网站定义中的文档库定义自定义列,以便在我的Sharepoint项目中创建动态网站。

我在visual studio中创建了网站定义,onet.xml在以下代码中定义:

<?xml version="1.0" encoding="utf-8"?>
<Project Title="AuditSiteDefinition1" Revision="2" ListDir="" xmlns:ows="Microsoft SharePoint" xmlns="http://schemas.microsoft.com/sharepoint/">
  <NavBars>
  </NavBars>
  <Configurations>
    <Configuration ID="0" Name="AuditSiteDefinition1">
      <Lists>
        <List Title="Documents" Url="Documents" FeatureId="00bfea71-e717-4e80-aa17-d0c71b360101" Type="101" VersioningEnabled="True" EnableMinorVersions="True" />
      </Lists>
      <SiteFeatures>
      </SiteFeatures>
      <WebFeatures>
      </WebFeatures>
      <Modules>
        <Module Name="DefaultBlank" />
      </Modules>
    </Configuration>
  </Configurations>
  <Modules>
    <Module Name="DefaultBlank" Url="" Path="">
      <File Url="default.aspx">
      </File>
    </Module>
  </Modules>
</Project>

正如您所看到的,我在Lists标签中定义了文档库,但我找不到如何在文档库中定义其他列的方法。

当我要通过代码添加文档并离开前面提到的结构时,我想到将这些列定义为Hashtable道具。

我的问题是: 在我的文档库中定义通过visual studio定义的自定义列的首选方法是什么?

1 个答案:

答案 0 :(得分:0)

当您以动态方式添加文档时,可以将每个添加的文档的附加数据定义为元数据(通过Hashtable)。

public string AddNewDocument(DocumentSPViewModel document, Guid siteId, string docLib, byte[] content, string rootsiteurl, out Guid uniqueId)
        {
            Hashtable props = new Hashtable();

            props.Add("Title", document.Title);
            props.Add("vti_title", document.Title);
            props.Add("FullName", document.ModifiedBy);

            if (document.DocumentType != null)
            {
                props.Add("DocumentTypeId", document.DocumentType.Id.ToString());
                props.Add("DocumentTypeTitle", document.DocumentType.Title);
            }
            props.Add("Active", document.Active);

            return AddNewDocument(siteId, docLib, content, document.Name, props, rootsiteurl, out uniqueId);
        }

        public string AddNewDocument(Guid siteId, string docLibName, byte[] content, string fileName, Hashtable documentProperties, string rootsiteurl, out Guid uniqueId)
        {
            SPWeb web = null;
            SPSite site = null;

            try
            {
                if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException("FileName");
                if (content == null) throw new ArgumentNullException("Content");
                if (content.Length == 0) throw new ArgumentNullException("Content");

                site = new SPSite(rootsiteurl);

                web = site.OpenWeb(siteId);
                web.AllowUnsafeUpdates = true;

                SPFolder folder = web.GetFolder(docLibName);

                string generatedFileName = "Test"

                SPFile file = folder.Files.Add(generatedFileName, content, documentProperties, true);
                uniqueId = file.UniqueId;

                return generatedFileName;
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                web.Close();
                web.Dispose();
                site.Close();
                site.Dispose();
            }
        }