Microsoft Office SharePoint Server 2007可以轻松建设企业的门户网站,而各个企业中已有的不少系统怎么集成到SPS上去呢?
 集成的方式有很多种,有的用简单的加连接的方式,有的用开发WEB PART的方式集成,有的用开发程序的方式集成,我们现在讲的就是
在.NET 2.0用开发程序的方式集成到SPS.
    用这种程序的方式集成SPS,是最近做的一个项目中用到的,首先实现了AD集成,再用归档的方式把文档归档到SPS中去,现在部分代码
贴出来,与大家共享.
   前提需要引用Microsoft.SharePoint.dll文件,此文件在装了SPS 2007时会生成,好像调试程序时必须装SPS 2007,操作系统为 
Window 2003.
   代码:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.IO;
using System.Xml;
using System.Data;

namespace Epower.ITSM.Web.Common
{
///
/// SPSFormFileUP
///

public class SPSFormFileUP
{
///
/// 上传文件
///

///
///
///
///
public static bool UpFile(System.Web.UI.Page pPage,string pNodeID, string pXmlContent, string pXmlAttach)
{
bool breturn = true;

XmlNode pXmlNode = GetXmlNode(pPage,pNodeID);
int pType = int.Parse(pXmlNode.Attributes["Type"].Value.ToString());
//上传表单内容
if (pType == 0)
{
breturn = UpFormFile(pXmlContent, pXmlAttach, pXmlNode);
}
//上传文档
else
{
breturn = UpDocumentFile(pXmlContent, pXmlAttach, pXmlNode);
}
return breturn;
}

///
/// 上传表单内容,表单内容可能有附件
///

///
///
///
private static bool UpFormFile(string pXmlContent, string pXmlAttach, XmlNode pXmlNode)
{
bool breturn = true;
SPWeb pSPWeb = GetSpWeb(pXmlNode);
SPListItemCollection pitem = pSPWeb.Lists[pXmlNode.Attributes["SpsForm"].Value.ToString()].Items;
SPListItem item = pitem.Add();
SPListItem list = item.ListItems.Add();
try
{
XmlTextReader tr = new XmlTextReader(new StringReader(pXmlContent));
while (tr.Read())
{
if (tr.Name == "Field" && tr.NodeType == XmlNodeType.Element)
{
try
{
list[tr.GetAttribute("FieldName").ToString()] = tr.GetAttribute("Value").Trim();
}
catch
{

}
}
}
//上传附件
if (!string.IsNullOrEmpty(pXmlAttach))
{
XmlTextReader trattach = new XmlTextReader(new StringReader(pXmlAttach));
while (trattach.Read())
{
if (trattach.Name == "Field" && trattach.NodeType == XmlNodeType.Element)
{
byte[] pbyte = GetFileByte(trattach.GetAttribute("Value").Trim());
list.Attachments.Add(trattach.GetAttribute("FieldName").ToString(), pbyte);
}
}
}
}
catch { breturn = false; }
list.Update();
return breturn;
}

///
/// 上传文档
///

///
///
///
private static bool UpDocumentFile(string pXmlContent, string pXmlAttach, XmlNode pXmlNode)
{
bool breturn = true;
SPWeb pSPWeb = GetSpWeb(pXmlNode);
SPFolder folder = pSPWeb.GetFolder(pXmlNode.Attributes["SpsForm"].Value);

//上传附件
if (!string.IsNullOrEmpty(pXmlAttach))
{
XmlTextReader trattach = new XmlTextReader(new StringReader(pXmlAttach));
while (trattach.Read())
{
if (trattach.Name == "Field" && trattach.NodeType == XmlNodeType.Element)
{
byte[] pbyte = GetFileByte(trattach.GetAttribute("Value").Trim());
//上传文件
SPFile spfile = folder.Files.Add(trattach.GetAttribute("FieldName").ToString(), pbyte);

SPListItem item = spfile.Item;
SPList list = item.ParentList;
SPFieldCollection fields = list.Fields;

//TITLE 文件标题
string TITLE = "标题";
try
{
// 加一些自定义的属性
spfile.Item[TITLE] = "test";
}
catch
{
//添加属性
fields.Add(TITLE, SPFieldType.Text, false);
SPField newField_TITLE = fields[TITLE];
SPView view = list.DefaultView;
SPViewFieldCollection viewFields = view.ViewFields;
viewFields.Add(newField_TITLE);
view.Update();

item[TITLE] = "testdf";
}

spfile.Item.Update();
}
}
}

return breturn;
}

///
/// 取得相应的节点
///

///
///
private static XmlNode GetXmlNode(System.Web.UI.Page pPage, string pNodeID)
{
XmlDocument xmlDoc = new XmlDocument();
string sPath = pPage.Server.MapPath("SPSUPSet.xml");
if (!File.Exists(sPath))
throw new Exception("未找到对应配置文件!");
xmlDoc.Load(sPath);
XmlNode root = xmlDoc.DocumentElement.SelectSingleNode("Setting[@id='" + pNodeID + "' ]");
return root;
}

///
/// 取得相应的网站
///

///
private static SPWeb GetSpWeb(XmlNode pXmlNode)
{
string sSpsWebSite = pXmlNode.Attributes["SpsWebSite"].Value.ToString();
string sSpsWeb = pXmlNode.Attributes["SpsWeb"].Value.ToString();

//取得网站
SPSite st = new SPSite(sSpsWebSite);
SPWeb site = st.OpenWeb(sSpsWeb);
site.AllowUnsafeUpdates = true;
return site;
}

///
/// 根据文件路径,取得文件内容
///

///
///
private static byte[] GetFileByte(string fileSourcePath)
{
byte[] bute = null;
FileStream fStream = null;
//取得文件内容
try
{
fStream = new FileStream(fileSourcePath, FileMode.Open, FileAccess.Read, FileShare.Read);

bute = new byte[fStream.Length];
fStream.Read(bute, 0, bute.Length);
}
finally
{
if (fStream != null)
{
fStream.Close();
}
}
return bute;
}
}
}


配置文件:

E8.Net工作流架构大量节约用户的开发成本为企业应用开发提供起点,提升软件生产力,欢迎访问:http://www.feifanit.com.cn
E8.Net工作流平台 提升企业战略执行力
ITIL与ITSM QQ群4:58342347
.NET企业应用开发与工作流QQ群:17110384 53284682(已满) 42302450(已满)
http://www.feifanit.com.cn
posted on 2008-05-23 11:11  朱明春  阅读(481)  评论(0编辑  收藏  举报