65.9K
CodeProject 正在变化。 阅读更多。
Home

显示数据视图 WebPart 的附件:第一部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (16投票s)

2008年12月19日

CPOL

4分钟阅读

viewsIcon

138609

downloadIcon

384

使用 SharePoint Designer 数据视图 Web 部件显示 WSS 或 MOSS 项附件。

引言

SharePoint Designer 的数据视图 Web 部件是一个很棒的控件。我在自定义列表视图时经常使用它。我唯一不喜欢的是它缺乏附件支持。通过数据视图,您只能检测一个项是否有附件,而不能显示它们或获取有关它们的信息。

据我所知,Microsoft 不建议在枚举列表时进行任何递归,这也许是您无法浏览项附件的原因。

我通过两种方式解决了这个问题。一种是使用 Lists.asmx Web 服务,适用于已认证的环境;另一种是使用自定义通用处理程序 (ashx) 页面。

SharePoint (WSS 3.0 和 MOSS 2007) 有一个 Lists.asmx Web 服务,您可以使用它来访问 SharePoint 对象。好处是您可以通过 JavaScript 使用此 Web 服务。因此,您可以直接从 JavaScript 函数请求 SharePoint 的一些信息。有什么要求?您必须通过身份验证才能使其工作。

网上有很多关于如何从 JavaScript 访问 Lists.asmx Web 服务的资源。我测试了其中两个,它们都有效。一个资源是 Darren Johnston 的博客,他使用了自己的 SharePoint 通信 API;另一个是 Glenc 的博客,它使用了一个用于 HTTP XML 请求的原型以及他自己的 脚本。最终,我选择了 Darren 的 API,它非常易于使用且功能强大。

步骤 1

首先,您需要从 Darren 的博客下载 Office Live 和 SharePoint 的 JavaScript Web 服务 API (1.0.1),或者下载上面的 zip 文件(因为 Darren 的网站似乎已失效)。之后,您需要将其解压到 SharePoint 站点上的某个文件夹中。我在 SharePoint Designer 中创建了一个名为 js 的新文件夹,并将所有 JavaScript 文件都放入了这个文件夹。

DataViewAttachments/Att1.jpg

第二步

下一步是使用 SharePoint Designer 创建一个新页面。您可以通过选择“新建”>“页面”菜单选项来完成此操作。可选地,您可以选择从母版页创建页面(图 2)。

DataViewAttachments/Att2.jpg

步骤 3

要创建数据视图 Web 部件,您需要为网页创建自定义内容(请参见图 3)。

DataViewAttachments/Att3.jpg

您的母版页看起来会稍有不同,但没关系。我只是有一个自定义母版页。流程是相同的。

步骤 4

现在,我们可以添加数据视图 Web 部件。为此,您可以转到“插入”>“SharePoint 控件”>“数据视图”。您的页面应该看起来像这样。

DataViewAttachments/Att4.jpg

步骤 5

下一步是选择您要显示的一个列表。在我的例子中,它是一个名为 Vesti 的列表(在塞尔维亚语中意为“新闻”)。您可以选择任何您喜欢的列表(一个带附件的列表会更好)。您可以通过转到“数据源库”,选择列表,然后单击“显示数据”按钮来选择列表。

DataViewAttachments/Att5.jpg

步骤 6

在“数据源详细信息”选项卡中,您可以选择要显示的列表列,然后只需将它们拖到您的 Web 部件中(页面上显示“单击数据源库中的数据源...”的位置)。现在,我们的页面应该看起来像这样。

DataViewAttachments/Att6.jpg

步骤 7

好的,我们现在有了数据视图。接下来,我们将添加显示附件的选项。首先,我们将转到页面的代码(只需单击页面左下角的“代码”)。将此代码粘贴到页面的 head 部分(用 <asp:Content id="Content1" runat="server" contentplaceholderid="head"> 包围的部分)。

<script src="js/SPAPI_Core.js"></script>
<script src="js/SPAPI_Lists.js"></script>
<script>
function getAttachments(List,ID){
var lists = new SPAPI_Lists('http://YourSharepointSite');
var items = lists.getAttachmentCollection(List,ID);
if (items.status == 200){
var rows = items.responseXML.getElementsByTagName('Attachment');
var str="";
for (var i=0; i<rows.length; i++){
temp=rows[i].childNodes[0].nodeValue;
ext=temp.substring(temp.lastIndexOf('.')+1);
switch(ext){
case "jpg":
case "png":
case "gif":
bdy='<img src="'+temp+'" alt="'+temp+'" border="0" />';
break;
default:
bdy=temp; 
}
str+='<a href="'+temp+'" target="_blank">'+bdy+'</a>'+"<br />";
}
document.getElementById("att"+ID).innerHTML = str;
}else{
alert('There was an error: ' + items.statusText);
}
}
</script>

别忘了输入您的站点名称。我们这里的函数从 SharePoint Web 服务请求附件集合。然后,它选择所有附件节点,并根据扩展名,仅创建文本链接(除图像外的所有文件)或图像链接(如果附件是图像)。

步骤 8

现在,返回到设计视图。选择您想要显示附件的列(例如,我选择了 Body 列)。单击它,然后单击“拆分”按钮(用于拆分视图);请参见此图片。

DataViewAttachments/Att7.jpg

然后,只需将此代码粘贴到列数据下方(在我的示例中是 <xsl:value-of select="@Body" disable-output-escaping="yes"/>;在您的示例中,@Body 将是您的列名)。

<xsl:if test="normalize-space(@Attachments) != '0'">
  <div id="att{@ID}" style="padding: 10px;"></div>
  <script type="text/javascript">
    getAttachments("YourListName",<xsl:value-of select="@ID"/>);
  </script>
</xsl:if>

在此代码中,如果项有附件(<xsl:if test="normalize-space(@Attachments) != '0'">),我们将调用 getAttachments JavaScript 函数,并传入 ListName 参数 – 输入您自己的,以及将自动填充的 ID。我们上面有一个 div 容器。我们需要它来显示我们的附件。

就是这样。现在,您可以预览它了。

DataViewAttachments/Att8.jpg

© . All rights reserved.