【问题标题】:sharepoint feature upgrade failing to update modulesharepoint 功能升级无法更新模块
【发布时间】:2017-03-30 10:15:43
【问题描述】:

好的,伙计们,我已经为这个问题低头很久了。让我在这里给你一点背景。我有一个网站集功能 (FileCentral) 正在使用它的版本 '1.0.0.0'。此功能的作用是创建一个文档库,我可以在其中上传将存储在网络共享中的文件。因此,此文档库中的每个项目都存储了指向文件路径的链接。这里没问题。最近有一个需求:“应该可以将文件夹中的文件同步到文档库中”。换句话说,我需要一些方法来扫描放置在网络共享中的文件并创建指向这些文件的相应列表项。建议的解决方案是在此文档库上创建一个自定义操作,单击该操作将打开一个对话框,其中包含一个名为 SyncFiles.aspx 的页面。然后,该页面将调用一个异步服务,负责列出尚未同步的文件。然后用户将选择他想要同步的文件并确认操作。此解决方案的项目结构为:

|Features
|-- FileCentral (Site scoped feature)
|---- FileCentral.feature
|------ FileCentral.Template.xml

|branding (module)
|-- js (folder)
|---- app (folder)
|------ fileCentral (folder)
|-------- home.js
|-- Elements.xml

|Pages (module)
|-- Home.aspx (file)

|Updates (folder)
|-- SyncFileCentral (folder)
|---- Assets (module)
|------ js (folder)
|-------- app (folder)
|---------- fileCentral (folder)
|------------ sync.js
|------ Elements.xml
|---- Button (custom action)
|------ Elements.xml
|---- Pages (module)
|------ SyncFiles.aspx
|------ Elements.xml

Assets 模块将必要的 javascript e css 文件部署到 Masterpage Gallery 以使 SyncFiles.aspx 页面正常工作:

<!-- Assets module -->
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="branding" Url="_catalogs/masterpage" RootWebOnly="TRUE">
    <File Path="branding\js\app\fileCentral\sync.js" Url="branding/js/app/fileCentral/sync.js" ReplaceContent="TRUE" IgnoreIfAlreadyExists="TRUE" Type="GhostableInLibrary" Level="Published"/>
  </Module>
</Elements>

Button 自定义动作部署(猜猜是什么?)自定义动作。 Pages 模块将 SyncFiles.aspx 页面部署到 Pages 文档库中。

<-- Pages module -->
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="Pages" Url="Pages" RootWebOnly="TRUE">
    <File Path="Pages\SyncFiles.aspx" Url="Pages/SyncFiles.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" ReplaceContent="TRUE" Level="Published" />
  </Module>
</Elements>

FileCentral.Template.xml 看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/" **Version="2.0.0.0"** Title="File Central" ActivateOnDefault="FALSE" AlwaysForceInstall="TRUE" Description="DESCRIPTION HERE" Id="XXX" Scope="Site">
  <!-- Feature Upgrade -->
  <UpgradeActions>
    <VersionRange BeginVersion="2.0.0.0" EndVersion="3.0.0.0">
      <ApplyElementManifests>
        <ElementManifest Location="Assets\Elements.xml" />
        <ElementFile Location="Assets\js\app\fileCentral\sync.js" />
        <ElementManifest Location="Button\Elements.xml" />
        <ElementManifest Location="Pages\Elements.xml" />
        <ElementFile Location="Pages\SyncFiles.aspx" />
      </ApplyElementManifests>
    </VersionRange>
  </UpgradeActions>
  <ElementManifests>
    <ElementManifest Location="branding\Elements.xml" />
    <ElementFile Location="branding\js\app\fileCentral\home.js" />
    <ElementManifest Location="Assets\Elements.xml" />
    <ElementFile Location="Assets\js\app\fileCentral\sync.js" />
    <ElementManifest Location="Button\Elements.xml" />
    <ElementManifest Location="Pages\Elements.xml" />
    <ElementFile Location="Pages\SyncFiles.aspx" />
  </ElementManifests>
</Feature>

好的,足够的上下文。这是问题所在:当我 Update-SPSolution -Identity "FileCentralSolution.wsp" -LiteralPath "X" -GACDeployment 时,我可以看到 ($site.QueryFeatures([Microsoft.SharePoint.SPFeatureScope]::网站,$true)) 有功能需要更新。然后,当我更新功能时,我既看不到我的资产也看不到我的页面发生了变化。唯一部署的是我的自定义操作。因此,当我单击按钮时,会打开一个空白对话框。如果我检查网络选项卡,我可以看到资产和页面请求返回 404 状态响应。 我做错了什么?

【问题讨论】:

  • 为什么不直接通过 WebDav 访问文档库?似乎您在重新创建 OOB 功能时遇到了很多麻烦......

标签: sharepoint feature-upgrade


【解决方案1】:

您是否检查过文件系统以查看文件是否确实已部署到正确的配置单元?如果这是 SharePoint 2013,您的解决方案文件是否部署到适合您选择的 UI 模式的文件夹? (兼容性等级 14,15?)

【讨论】:

  • 感谢您的回答@MichaelBailey。我改变了方法。我将 SyncFiles.aspx 移至 Pages 模块(就在 Home.aspx 旁边)。然后我将 sync.js 移动到 fileCentral 文件夹内顶部的 branding 模块。有趣的事情发生了:SyncFiles.aspx 返回 HTTP 200 结果,但 sync.js 文件仍然返回 HTTP NOT FOUND,即使文件夹和文件是在 16/TEMPLATE/ 中创建的功能/文件中心.
  • 我听起来很愚蠢(我知道),但是我怎样才能将文件放入 15 配置单元而不是 16 配置单元?
  • 通过 PowerShell 安装该功能并使用 -CompatibilityLevel ALL 选项。
  • 但是我已经在使用 powershell 更新功能 $site = Get-SPSite http://url; $site.QueryFeatures([Microsoft.SharePoint.SPFeatureScope]::Site, $true); 然后我对从查询功能方法返回的功能运行 $feature.Upgrade($false)
  • 如果您的 CompatibilityLevel 已经是一个问题,那么使用 SPFeature.Upgrade() 将无法解决它。尝试使用 Force 属性集和 CompatibilityLevel -All 运行 Install-SPSolution -All AFTER 更新您的功能(仅此一次),看看它是否将所有内容都放在正确的位置。
猜你喜欢
  • 2018-04-26
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多