承接MOSS各种工作流开发 联系人:王先生.电话:13691349686 QQ:252385878 MSN:wanghao-3@hotmail.com

寻找网络安全产品代理商(主要产品有:主机审计与监控系统,移动介质管理系统,文件集中管理安全存储系统,硬盘锁等)主要针对内网安全和数据防泄密 联系人:张小姐 电话:13522877350 QQ:419919940

Moss年度隆重巨献(核心代码)

                                          在SharePoint发展到今天这个图飞猛进的时代,我们还能做点什么?经过拉半年的不但努力,感觉自己也有所成就,把自己研究的心得和宝贵的代码。我觉得学习就是一个Share的过程。你会,一定要带动大家会,这样你才能理解的更深刻。只有在Show自己的时候,才能更好的去帮助别人。在国内,SharePoint的应用也只是皮毛,希望热爱MOSS的哥们一起努力把。把MOSS的潜能都挖掘出来,这样我们这些热爱SharePoint的同胞们才能更好的。更快的,学习到更先进的技术,让老外们来看我们的“中文”的资料,(嘿嘿,发点牢骚,看E文,头疼,眼睛疼)。。让他们来向我们请教。。。。(希望真正的高手们,Show,Share)....看啦很多“高手的Blog”,都是一些鸡胫。。真正有含量的东西没有。。。。我当时学习MOSS的时候,找一些有用的资料的时候,可是害苦我了。难找啊。。。。找到很多好东西时候,一看,培训交钱,(一天最少也是 1K以上。。。),其实讲的也就是入门级别的东西。。。。。。哎。。。。。
下面Demo介绍 关于怎么样把我们写好的一个WebPart 用代码完成的安装,然后自动启用的到指定页面指定的位置过程,,,前段时间研究拉KaneBoy的QP包装器,然后把它破解。。下次公布代码。。
下面代码很简单。大家看看就应该能明白。。不明白的提出来。。(用最简单的代码,来实现复杂的应用)还是那句话,代码现跑起来,调试容易理解。。。。
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.IO;
using System.Reflection;
using System.Diagnostics;
using Microsoft.SharePoint.WebPartPages;
namespace SetupWebPartTest
{
    class Program
    {
        /// <summary>
        /// 站点IIS绝对路径
        /// </summary>
        static string SiteAbsPath = "";

        static void Main(string[] args)
        {
              ModifyTrust();

           SetupLibrary(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\WebPartTest\WebPartTest\bin\Debug");

            SetupWebpart(@"C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\WebPartTest\WebPartTest\bin\Debug");


        }

        private static void ModifyTrust()
        {

            SPSite site = new SPSite(@"http://lh-vmpc:6060/");

            SiteAbsPath = site.WebApplication.IisSettings[SPUrlZone.Default].Path.FullName;

            string webconfig = SiteAbsPath + "\\web.config";
            XmlDocument config = new XmlDocument();
            config.Load(webconfig);

            //修改信任级别为“<trust level="Full" originUrl="" />”
            XmlNode trust = config.SelectSingleNode("configuration/system.web/trust");
            trust.Attributes["level"].Value = "Full";

            //
            XmlNode sess = config.SelectSingleNode("configuration/system.web/pages");
            sess.Attributes["enableSessionState"].Value = "true";

            XmlNode sessMo = config.SelectSingleNode("configuration/system.web/httpModules");
            XmlNode add = config.CreateElement("add");
            XmlAttribute attr1 = config.CreateAttribute("name");
            attr1.Value = "Session";
            XmlAttribute attr2 = config.CreateAttribute("type");
            attr2.Value = "System.Web.SessionState.SessionStateModule";
            add.Attributes.Append(attr1);
            add.Attributes.Append(attr2);
            sessMo.AppendChild(add);

            config.Save(webconfig);
        }

        private static void SetupLibrary(string path)
        {
            if (Directory.Exists(path))
            {
                string[] files = Directory.GetFiles(path);

                foreach (string file in files)
                {
                    string filename = Path.GetFileName(file);

                    string targetFile = SiteAbsPath + "\\bin\\" + filename;

                    if (!File.Exists(targetFile))
                    {
                        File.Copy(file, targetFile, true);
                    }
                }
            }
        }

 

        private static void SetupWebpart(string path)
        {
            string webpartTitle = "WebPartTitle";
            string webpartDesc = "WebPartDesc";
            string webpartZoneID = "";
            string webpartSiteID = "";
            string webpartXml = "";

            if (Directory.Exists(path))
            {
                string[] dlls = Directory.GetFiles(path);

                foreach (string dll in dlls)
                {
                    if (dll.ToLower().IndexOf(".dll") != -1)
                    {
                        Assembly assembly = Assembly.LoadFile(dll);

                        Type[] types = assembly.GetTypes();
                        SiteAbsPath = @"C:\Inetpub\wwwroot\wss\VirtualDirectories\6060";
                        //拷贝dll文件
                   //     File.Copy(dll, SiteAbsPath + "\\bin\\" + Path.GetFileName(dll));
                       
                        #region 在web.config中组册为安全组件
                        //string safe = "<SafeControl Assembly=\"" + types[0].Module.Name + "\"" + " Namespace=\"" + types[0].Namespace + " TypeName=\"*\" Safe=\"True\" />";
                        XmlDocument config = new XmlDocument();
                        config.Load(SiteAbsPath + "\\web.config");

                        XmlNodeList tmpAsembly = config.SelectNodes("configuration/SharePoint/SafeControls[SafeControl/@Assembly='" + Path.GetFileNameWithoutExtension(types[0].Module.Name) + "']");

                        if (tmpAsembly == null || tmpAsembly.Count == 0)
                        {
                            XmlNode SafeControlNodes = config.SelectSingleNode("configuration/SharePoint/SafeControls");

                            XmlNode SafeControlNode = config.CreateNode(XmlNodeType.Element, "SafeControl", "");
                            XmlAttribute attr;

                            attr = config.CreateAttribute("", "Assembly", "");
                            attr.Value = Path.GetFileNameWithoutExtension(types[0].Module.Name);
                            SafeControlNode.Attributes.Append(attr);

                            attr = config.CreateAttribute("", "Namespace", "");
                            attr.Value = types[0].Namespace;
                            SafeControlNode.Attributes.Append(attr);

                            attr = config.CreateAttribute("", "TypeName", "");
                            attr.Value = "*";
                            SafeControlNode.Attributes.Append(attr);

                            attr = config.CreateAttribute("", "Safe", "");
                            attr.Value = "True";
                            SafeControlNode.Attributes.Append(attr);

                            SafeControlNodes.AppendChild(SafeControlNode);

                            config.Save(SiteAbsPath + "\\web.config");
                        }
                        #endregion

                        #region 在当前站点启用webpart
                        foreach (Type t in types)
                        {
                            //判断是否是webpart
                            try
                            {
                                System.Web.UI.WebControls.WebParts.WebPart tmp = (System.Web.UI.WebControls.WebParts.WebPart)Activator.CreateInstance(t);

                                LH.EIP.ControlPackage.WebPartClassAttribute MyAttribute = (LH.EIP.ControlPackage.WebPartClassAttribute)Attribute.GetCustomAttribute(t, typeof(LH.EIP.ControlPackage.WebPartClassAttribute));

                                webpartTitle = "未知的描述信息";
                                webpartDesc = "未知的描述信息";

                                if (MyAttribute != null)
                                {
                                    webpartTitle = MyAttribute.Title;
                                    webpartDesc = MyAttribute.Description;
                                    webpartZoneID = MyAttribute.ZoneID;
                                    webpartSiteID = MyAttribute.SiteID;
                                }

                                //增加站点的webpart gallery描述,可能一个dll文件中存在多个webpart
                                string gallery = "";
                                gallery = gallery + "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
                                gallery = gallery + "<webParts>";
                                gallery = gallery + "<webPart xmlns=\"http://schemas.microsoft.com/WebPart/v3\">";
                                gallery = gallery + "<metaData>";
                                gallery = gallery + "<type name=\"" + t.AssemblyQualifiedName + "\"/>";
                                gallery = gallery + "<importErrorMessage>Cannot import this web part.</importErrorMessage>";
                                gallery = gallery + "</metaData>";
                                gallery = gallery + "<data>";
                                gallery = gallery + "<properties>";
                                gallery = gallery + "<property name=\"Title\" type=\"string\">" + webpartTitle + "</property>";
                                gallery = gallery + "<property name=\"Description\" type=\"string\">" + webpartDesc + "</property>";
                                gallery = gallery + "</properties>";
                                gallery = gallery + "</data>";
                                gallery = gallery + "</webPart>";
                                gallery = gallery + "</webParts>";

                                webpartXml = gallery;

                                //-------------------------------------------------------------------------------
                                byte[] buffer1 = new UTF8Encoding().GetBytes(gallery);

                                SPSite site = new SPSite(@"http://lh-vmpc:6060/");
                                SPWeb web = site.OpenWeb();
                                SPFileCollection collection2 = web.Files;
                                SPFile file = collection2.Add("_catalogs/wp/" + t.FullName + ".webpart", buffer1);

                                SPListItem item = file.Item;

                                item["用户组"] = "中科软件Webpart库";
                                item.Update();


                                AddWebpartToPage(@"http://lh-vmpc:6060/", webpartXml, "left", 4, "WebPartTest");
                            }
                            catch (Exception ee)
                            {
                                string error = ee.Message;
                            }
                        }
                        #endregion
                    }
                }
            }
        }


        private static bool AddWebpartToPage(string TargetSiteUrl, string webPartXml, string ZoneID, int ZoneIndex, string Title)
        {
            bool flag = false;
            SPLimitedWebPartManager manager = null;

            if (TargetSiteUrl == "" || webPartXml == "" || ZoneID == "")
            {
              //  err = "001";
                return false;
            }

            try
            {
                //重新启动IIS

                Process p = new Process();
                p.StartInfo.FileName = "iisreset.exe";
                p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                p.Start();
                p.WaitForExit();

                SPSite sites = new SPSite(TargetSiteUrl);
                SPWeb web = sites.RootWeb;

                manager = web.GetLimitedWebPartManager(@"http://lh-vmpc:6060/default.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
                StringReader input = new StringReader(webPartXml);
                XmlTextReader reader2 = new XmlTextReader(input);
                string err = "1";
                System.Web.UI.WebControls.WebParts.WebPart webpart = manager.ImportWebPart(reader2, out err);
                webpart.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.None;
                manager.AddWebPart(webpart, ZoneID, ZoneIndex);

                web.Close();

            //    this.SetTip("\"" + Title + "\"" + "安装完成");

                flag = true;

            }
            catch (Exception exception)
            {
               // err = exception.Message;
                flag = false;
            }
            finally
            {
                if (manager != null)
                {
                    manager.Dispose();
                }
            }
            return flag;
        }
    }
}

 

posted on 2007-07-13 14:12 A A 阅读(1901) 评论(20)  编辑 收藏

评论

#1楼  2007-07-13 14:39 abc [未注册用户]

是Kaneboy   回复  引用    

#2楼  2007-07-13 14:58 dudu      

建议发布在SharePoint区。   回复  引用  查看    

#3楼 [楼主] 2007-07-13 15:01 AA(Show)      

难道原创不可以发布到首页?   回复  引用  查看    

#4楼 [楼主] 2007-07-13 15:08 AA(Show)      

1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作)
......................................................dudu 好像没有说不可以发到首页??
。。。。。。。。。。。。。。。。。。。放一放,,   回复  引用  查看    

#5楼  2007-07-13 15:12 dudu      

并不是只要是原创就可以发布在首页。
专门开通SharePoint区就是为了放SharePoint方面的文章。
而且你的文章中主要是代码,如果不是SharePoint方面的,那应该发布在软件发布区。
请理解。   回复  引用  查看    

#6楼  2007-07-13 15:32 df [未注册用户]

infantility!   回复  引用    

#7楼  2007-07-13 15:48 MYOOP      

???????
gaga   回复  引用  查看    

#8楼 [楼主] 2007-07-13 15:54 AA(Show)      

年轻人。。要忍。。。成长需要过程 。。   回复  引用  查看    

#9楼  2007-07-13 15:59 dudu      

@AA(Show)
众口难调,目前只能根据博客园读者的口味做出一个选择。
以后会考虑建立更好的机制来管理首页的文章。   回复  引用  查看    

#10楼 [楼主] 2007-07-13 16:00 AA(Show)      

好的。//谢谢 dudu 给我们好地环境/。。。   回复  引用  查看    

#11楼  2007-07-13 19:46 周银辉      

这篇能不能放在首页,还是需要斟酌的   回复  引用  查看    

#12楼  2007-07-13 20:46 倾城      

老弟, 这些代码现在才掌握呢...
这些不过是把MSDN里说的安装webpart的几个步骤用代码来实现而已.
也不一定要重启IIS.
  回复  引用  查看    

#13楼  2007-07-14 16:49 po [未注册用户]

真棒!
看拉 很多 你的Blog
感觉特别的棒。我说心里话。我在这里学习到很多的知识。,,,真的很好 ,。我感觉你的Blog正是我们需要的。我 今天在家里,把你的Blog“从头到脚”看了一遍。。感觉现在对MOSS开发了解很多,学习到拉你的很多知识。。
但是我看了。。楼上的几个 评语 我感觉 他们。。。。。。简直就是垃圾。。
倾城 你什么都知道。。你怎么不写些Blog出来给我们这些新人来学习啊。。只会说风凉话。。这样的人 。。看到拉 讨嫌。。说心里话,,这位大哥的Blog讲SharePoint开发 。。确实 比较的棒。。对我们这些入门级别的 开发人员来说很棒。。

MYOOP
df
不知道他们是什么意识。。。
但是我觉得。。他为仁兄的BLog 确实 不错 。。。
顶。。。。。。。我会关注大哥的BLog的   回复  引用    

#14楼  2007-07-15 10:53 so [未注册用户]

希望推出更多 好的东西,学习。。。多谢 好心人。。。   回复  引用    

#15楼 [楼主] 2007-07-16 09:13 AA(Show)      

呵呵。谢谢大家的支持,我看群众的眼睛是雪亮的哦。。。。   回复  引用  查看    

#16楼  2007-07-17 16:38 Cnntec [未注册用户]

偶也反编译了...
  回复  引用    

#17楼  2007-07-29 01:33 li [未注册用户]

哥们,真棒,发现你的Blog,我我感觉我非常幸运,高心.把你的所有的帖子都读拉一次,感觉自己现在好象完全提升拉一个档次,希望大哥多写好文章.

直接加入收夹   回复  引用    

#18楼  2007-09-14 16:32 与派 [未注册用户]

与派WebMAIL-RTC-MEET-OA-EIP(邮局-实时通讯-视频会议-办公自动化-信息门户)技术支持网 http://www.yupai.net 基于Windows Server、Active Directory、Exchange Server、Sharepoint Server、Live Communications、Live Meeting技术,致力于办公自动化系统OA、实时通讯RTC、视频会议MEET、工作流WORKFLOW、企业邮局MAIL、企业信息门户EIP等开发,交流技术、分享源码、下载资源、人才招聘自荐的供求园地   回复  引用    

#19楼 [楼主] 2007-09-14 20:09 AA()      

广告!。。。。。。哎   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-09-15 12:15 编辑过


相关链接: