在沙盒解决方案中的功能激活期间将Web部件部署到页面

时间:2010-07-04 07:02:13

标签: sharepoint web-parts sharepoint-2010

在过去的几天里,我一直在撞墙。我有一个非常简单的要求,但我不知道如何在沙盒解决方案中实现它。我很沮丧,因为我觉得它是一个严重的限制因素,也会让我对未来的解决方案感到悲伤。

以下是该方案。

我有一个现有网站,我希望能够激活一项功能,然后作为该激活的一部分,将网页部件放到某些特定页面上。在我的情况下,我希望能够将其放到列表的“AllItems.aspx”页面上,但我同样无法将其添加到default.aspx主页。我会很高兴。

注意:我希望能够在现有网站上激活此功能,我不想创建新的网站定义。

以下是我的尝试:

  1. 功能接收器:不行。您无法使用SPLimitedWebPartManager类,并且SPWebPartManager类仅在其实例化的页面的上下文中起作用。所以基本上,你不能在代码中这样做。

  2. XML模块:我认为这是最有可能的前进路径,但似乎总是希望为网站配置文件。例如,如果我想将一个Web部件添加到主页(default.aspx),那么似乎没有办法获得对该页面的引用,总是想要用新文件覆盖它。但我不想这样做,我只想在现有页面中添加Web部件。请参阅下面的我的元素XML,我尝试了各种“IgnoreIfAlreadyExists”组合并删除了Path属性,并将其设置为空白。

  3. 委托控制:沙箱中不允许。

  4. 我实际上希望能够将Web部件添加到列表的“AllItems.aspx”形式,因此我还尝试通过SCHEMA.XML文件添加Web部件,如下所述:{{ 3}}但这也不起作用。我应该能够通过更多地定制列表定义来实现它,但这似乎有点过头了,我不愿意这样做,然后排除其他选项。

  5. 因此,我能看到的唯一 Neat 方式是某种“配置”页面,然后通过Web服务进行。但这很痛苦,用户“激活”该功能,然后在我的配置页面上再次“激活”。

    无论如何,可能只是因为我错过了一些明显的东西。在我的XML上摆弄SharePoint之间已经有一段时间了,这是我的第一个Sandbox解决方案。真的希望别人能破解这个坚果。

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Module Name="Pages">
        <File Path="" Url="default.aspx">
          <AllUsersWebPart WebPartZoneID="Left" WebPartOrder="1">
            <![CDATA[
                  <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" xmlns:iwp="http://schemas.microsoft.com/WebPart/v2/Image">
                    <Assembly>(Assembly), Version=1.0.0.0, Culture=neutral, PublicKeyToken=12baeb5f1600543c</Assembly>
                    <TypeName>(Typename)</TypeName>
                    <FrameType>None</FrameType>
                    <Title>ListAnnouncement</Title>
                  </WebPart>
                ]]>
          </AllUsersWebPart>
        </File>
    </Module>
    </Elements>
    

1 个答案:

答案 0 :(得分:0)

您可以使用完全信任代理将Web部件添加到现有页面。引用MSDN:

  

“沙盒代理是使您能够完全信任的组件   沙盒解决方案可用的功能。“

简而言之,您只需要创建一个单独的非沙盒程序集,其中包含按照正常情况在指定的URL上添加Web部件的方法(即使用SPLimitedWebPartManager类)。然后,您在沙盒解决方案中引用并注册<​​/ strong>此代理程序集 - 与真正使用Web服务不同。

所有内容详见:How to: Create and Register a Sandbox Proxy

以下是已经完成此操作的人:Add Web Part Programmatically in Sandbox Environment

我正在尝试在要部署到SharePoint Online的沙箱解决方案中执行相同的操作。这被证明是一个小问题,因为您无法将功能范围扩展到服务器场级别 - 但您不应该在内部部署环境中遇到此问题。让我知道你是怎么过的......