今天为了安装SHAREPOINT2010 ,到MSDN上去DOWN了SQL2008 R2 64位的CTP版本。

要运行SHAREPOINT配置向导时出现

一时不知道什么错误,觉得安装都没什么大问题,之前安装英文的SHAREPOINT2010也没出现类似问题。

后面先打开SQLSERVER MANAGEMENT STUDIO发现无法连接到现有数据库,出现下面的提示。

初步断定是没有为SQLserver配置远程连接导致。

而后我们打开SQL配置管理器(在开始--〉程序里)

如下图

发现MSSQLSERVER的协议里的TCP/IP的协议是禁用的,

将其打开,SQLSERVER MANAGEMENT STUDIO中可正常打开,成功解决问题。

 

posted @ 2009-11-23 20:44 雷君 阅读(212) 评论(0) 编辑

默认MOSS设置了FORM认证后是这样一个界面,但是今天,经过一点美工和代码的修正,给一个朋友做了下面的一个界面

今天希望把自己的代码和图片分享给大家。

希望能够帮助一些入门者。

部署方式:

1。附件里有MOSS文件夹,请放到12\TAMEPATE\IMAGES  目录下

2。login.aspx和login.master放到12\tamplate\layouts目录下,会覆盖原来的login.aspx文件,请注意先备份,login.aspx主要是做一些HTML的调整。

3。新增login.master,由于默认login.aspx调用的是LAYOUTS目录下的simple.master,为了不直接修改simple.master文件,新建立了一个login.master提供login.aspx调用

 

/Files/lickies/moss.rar

posted @ 2009-02-23 20:34 雷君 阅读(874) 评论(1) 编辑
摘要: 首先,想先讲讲MOSS的认证方式。默认MOSS安装完是采用AD的认证方式,首先AD的认证方式比较适合于内部网络,不建议在外部网络使用,因为开启AD认证要开启相应不必要的端口,并且目前代理服务器通常设置只允许80端口访问,这样将不能访问基于AD的MOSS系统。因此,很多人想到了FORM表单认证,早在2003年前,大家都会对SHAREPOINT只能支持AD认证报有遗憾,那么随着MOSS2007的推出,...阅读全文
posted @ 2009-02-23 20:12 雷君 阅读(2334) 评论(6) 编辑
未命名.jpg
2.jpg ( 156.68 K)

2008-9-3 13:06:20

2.jpg

3.jpg ( 49.71 K)

2008-9-3 13:06:20

3.jpg

5.jpg ( 106.76 K)

2008-9-3 13:06:20

5.jpg

posted @ 2009-01-22 10:18 雷君 阅读(409) 评论(2) 编辑
根据我们项目的成果,现在提供我们SHAREPONT平台的界面方案.....当然...希望有更多的高手能够提出更多的成果和大家共享....

具体的范例请见我的BLOG...
blog.lickies.cn
现在提供原文件下载..请大家有意见的提意见.....
文件说明
CORE.CSS请存放到12\_LAYOUTS\TEMPLATE\2052\STYLES\目录下
DEFAULT.MASTER请根据自己需要自行更改到母版页中
080711目录请存放到12\LAYOUTS\IMAGES目录下.
有问题请及时联系我,.....QQ10356075....lickies_1983@hotmail.com,,,建议论坛留言 ...

附件: default.rar (2008-10-23 21:48:33, 504.17 K)

posted @ 2009-01-22 10:17 雷君 阅读(609) 评论(0) 编辑
很多人都是用FORM认证
那么可能很多人已经很讨厌了LOGIN.ASPX那个讨厌的页面了.
那么我们这个文章教大家如何制作精彩的LOGIN页面.首先我们来看我们的效果图
下面.把我做的LOGIN页面公布出来,并附图片,大家可以研究一下.

未命名图片.png 

有兴趣的可以下载

http://www.msotec.com/attachment.aspx?attachmentid=721

posted @ 2009-01-22 10:15 雷君 阅读(620) 评论(1) 编辑
第一次开车去厦门,,,还是有点心惊,毕竟人生地不熟,虽然前一晚上仔细看了地图,结果还是走错了路,饶了一圈.
 
言归正传,受到广州微软的彭海峰的邀请,准备了一堂半个小时的SHAREPOINT经验课,由于我是客户,从客户的角度出发来看MOSS的效果那是最好的征服客户的方式.
 
由于之前已经在公司内部进行培训不下几十场,很多材料也是信手拿来,所以材料看了是没问题了,个人觉得也很生动,线条很流畅,自己给自己顶一个...想想,,这都是2年来的甘苦换来的呀....
 
好了.不卖关子了...大家有兴趣看附件吧.
 
 
这次厦门之旅收获最大的就是认识海峰,永锐,笑天,陈超等MS的同志了...HOHO
posted @ 2009-01-22 10:10 雷君 阅读(232) 评论(0) 编辑
在MOSS相关的项目中,我们经常要将内容聚合到首页:比方说新闻、通知、文档等内容,由于首页内容相对较多,因此要对各部分内容显示的区域加以限制,才能保证整个页面布局的和谐与统一,限制标题显示的字符数,就成了一个必须的要求。MOSS的文档库和列表本身的试图并不提供本身的功能,所以要实现这样的功能就必须自己动手,一是写自己的webpart,取出库和列表的内容,然后按照自己的要求去展示内容,这种方法的优点是通用性强,并且可以将webpart写的更加通用些,一次投入就一直受益,适合有开发能力的公司或个人;这种方法在SPS2003下就有人做了相应的工作。
      那么,对于像我这样的专注于系统而没有开发经验的人来说,是不是就没有办法了呢?答案当然是否定的!在Sharepoint designer中,有一项神奇的功能,可以将MOSS的库和列表转换成XSLT数据视图,借助于XSLT,我们可以灵活的控制内容展示的形式。
      比如,我们想对这个列表的标题的字数加以限制,当字数<=12时,则显示全部的标题,如果字数>12,则截取前面的9个字,并在后面加上...
      在SPD中找到我们插入页面的库或列表,右键,选择转换成XSLT试图。
      对于列表,选择列表的标题,对应的XSL代码为:
        <xsl:value-of disable-output-escaping="no" select="@Title" />
      将代码替换为:
      <xsl:if test="string-length(@Title)<=12">    判断如果标题的字符串长度是否<=12
              <xsl:value-of disable-output-escaping="no" select="@Title" />    显示完整标题:select="@Title"
      </xsl:if>
      <xsl:if test="string-length(@Title)>12">    判断如果标题的字符串长度是否>12
              <xsl:value-of select="substring(string(@Title),1,9)" />...        显示标题的前9个字符,并在后面加上 ...
      </xsl:if>
      对于文档库,select的值不是标题,而是将文件名处理后的标题,代码如下:
      <xsl:value-of select="ddwrt:UrlBaseName(string(@LinkFilename))" />
      我们需要将对应的代码修改如下:
        <xsl:if test="string-length(@LinkFilename)<=12">
              <xsl:value-of select="ddwrt:UrlBaseName(string(@LinkFilename))" />
        </xsl:if>
        <xsl:if test="string-length(@LinkFilename)>12">
              <xsl:value-of select="substring(ddwrt:UrlBaseName(string(@LinkFilename)),1,9)" />...
        </xsl:if>

      美中不足的是,我发现代码中对于字符串的计数是不分全角半角的,统统按照一个计算,这样的话,如果标题或文件名中如果包含了半角的字母或数字,所显示的结果就不会如我们的想象一样,是一个固定的长度,不过,对于标题过长从而换行导致的布局问题,总算是解决了!
      注:文中标题部分的代码,参考了西安huahua同学在MOSS群中的讨论,才使得我对这个问题有了一个完整的认识,在此表示感谢!
posted @ 2009-01-22 10:07 雷君 阅读(249) 评论(0) 编辑

MOSS用那么久了,有人采用AD认证,有人采用FORM认证,我们公司是采用中间的替换方法,因为采用FORM认证个人觉得还是不是太方便,例如需要开两个端口等。个人有个做法把经验共享给大家,如果做得不对或者有更好的办法的话,可以联系我。

 

1.原因

为什么要进行表单登录,默认MOSS采用AD认证,是因为用户默认存储为AD,如果有人要把用户和以前的系统进行结合的方式,那么请采用正规的FORM认证进行开发。

我今天要讲的是AD认证,AD认证有个不好的方式就是弹出对话框,界面不友好,例如我要在界面上放一个忘记密码的方式是完全做不到的。

 

</P>

现在教大家一种采用表单进行提交的简单方法。其实这个办法很早的时候十一就搞过,不复杂,我只是稍微完善了一下。

 

1.首先采用匿名访问。

  1.1IIS开启匿名访问。

</P>

  1.2验证提供程序需要开启。操作方式:管理中心--》应用程序管理--》应用程序安全性--》验证提供程序--》默认

 

</P>

  1.3开启网站匿名访问。操作为:网站操作--》高级权限--》设置--》匿名访问,如下

<BR></P>

2.设置登录界面

我们需要开发一个登录界面。输入用户。密码。

</

这个登录界面可以放在_LAYOUTS/目录底下。

登录界面代码请见附件。

需要改几个地址如下:

http://www.cnblogs.com/sharepoint/test/default.aspx 这个界面是需要验证的界面(默认网站已经开了匿名,只需要验证到其他一个非匿名访问的地址即可)

http://10.49.28.7  这个是我们要返回的界面

如果还不清楚的。可以访问http://keji.lickies.cn 查看。

 

3.登录后自动跳转到登录界面的方式,因为我们已经开放了匿名,默认我们是可以进去的,那么我们需要增加一段程序,判断如果AD用户为空的话则跳转到登录界面。

我们采用一个办法是在MASTERPAGE里增加一个USERCONTROL

 

如何做呢?打开默认的在12/TEMPLATE/GLOBRAL/DEFAULT.MASTER(如果有改过则到SPD里找)

<%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %>

下增加
<%@ Register TagPrefix="wssuc" TagName="login" Src="~/_controltemplates/chklogin9.ascx" %>

 

在<BODY scroll="yes" onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();">

下增加

<wssuc:login id="chklogin" runat="server" EnableViewState="false"></wssuc:login>

可能很多人在问CHKLOGIN.ascx是啥。

就是我们的用户控件,,,这个文件如下。附件可以下载。。

 

<%@ Control Language="C#" Inherits="Microsoft.SharePoint.ApplicationPages.WebControls.ActionBar,Microsoft.

SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"    compilationMode="Always" %>
<%@ Register Tagprefix="wssawc" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral,

PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%

if(HttpContext.Current.User.Identity.Name.ToString()=="")
{
    Response.Redirect("/_layouts/web/login.aspx");
}

%>

请把这个文件放到c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES下即可。

大概写了一下。有问题的话,大家QQ群联系。

posted @ 2009-01-22 10:05 雷君 阅读(786) 评论(1) 编辑

using System.DirectoryServices;


--先应用


 


--添加用户


DirectoryEntry entry = new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString(), AuthenticationTypes.Secure);
   DirectoryEntry  subEntry  =  entry.Children.Find(ou.Value);
   DirectoryEntry deUser = subEntry.Children.Add("cn=" +firstname.Text.ToString()+lastname.Text.ToString(), "user");
   deUser.Properties["userPrincipalName"].Add((accountname.Text.ToString()+"@"+BaseFunctions.Domainname));
   deUser.Properties["samAccountName"].Add(accountname.Text.ToString());//帐户
   deUser.Properties["description"].Value = desc.Text.ToString();
   deUser.Properties["sn"].Add(firstname.Text.ToString());
   deUser.Properties["givenName"].Add(lastname.Text.ToString());
   deUser.Properties["displayName"].Add(firstname.Text.ToString()+lastname.Text.ToString());
    deUser.CommitChanges();


   deUser.Invoke("ChangePassword",new object[]{"",password.Text.ToString()});
   deUser.Properties["userAccountControl"].Value = 0x200;
   deUser.CommitChanges();
   deUser.Close();
   lblShowInfo.Text="添加成功";


 


----修改密码


if(tb_newpass.Value.Trim()!=tb_newpass1.Value.Trim())
   {
    lblShowInfo.Text="两次输入的新密码不一样";
    return;
   }
   try
   {
    DirectoryEntry de=new DirectoryEntry(BaseFunctions.DomainSrv,BaseFunctions.GetUserNameFromSession(),BaseFunctions.GetPassWord());
    
    DirectorySearcher deSearch = new DirectorySearcher(de);
    deSearch.Filter = "(&(&(objectCategory=person)(objectClass=user))(sAMAccountName="+Request.QueryString["username"]+"))";
    deSearch.SearchScope = SearchScope.Subtree;
    SearchResult result = deSearch.FindOne();
    DirectoryEntry de1=result.GetDirectoryEntry();
    object retResult=de1.Invoke("SetPassword", new Object[]{tb_newpass.Value.Trim()});
    lblShowInfo.Text="成功修改密码!";
    de1.Close();
    de.Close();
    de1.Dispose();
    de.Dispose();
   }
   catch(Exception ex)
   {
    if(ex.InnerException!=null)
     lblShowInfo.Text=ex.InnerException.Message;
    else
     lblShowInfo.Text+=ex.Message;
   }


 


---将用户改变组织单位


 


DirectoryEntry de=new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString());
   object o = de.NativeObject;
   DirectorySearcher ds = new DirectorySearcher(de);
   ds.Filter = "(SAMAccountName=" + Server.UrlDecode(Request.QueryString["username"]) + ")";
   ds.PropertiesToLoad.Add("cn");
   SearchResult sr = ds.FindOne();//查找该用户
   
   //Response.Write(sr.GetDirectoryEntry().Properties["name"][0]);


   DirectoryEntry de2=sr.GetDirectoryEntry();//设置de2为用户
   DirectoryEntry  ou2  =  de.Children.Find(Request.QueryString["ou"]);//获取新ou对象
   
   de2.MoveTo(ou2);//移动OU
   de2.CommitChanges();//提交
   Response.Write("<script language=javascript>"); 
   Response.Write("alert('移动完毕');");
   Response.Write("opener.window.location.reload(true);");
   Response.Write("window.close();");
   Response.Write("</script>");


 


--用递归方式显示组织单位.还有小部分没做好,只是显示出来,没优化,有兴趣的同志可以改界面呈现方式


调用函数


GetOu("泉州移动",5);----5代表是显示5级 


 


public void GetOu(string ouname,int amstr)
  {
   DirectoryEntry entry=new DirectoryEntry(BaseFunctions.DomainSrv,BaseFunctions.GetUserNameFromSession(),BaseFunctions.GetPassWord());
   System.DirectoryServices.DirectoryEntry subentry=entry.Children.Find(ouname,"organizationalUnit");


   string ax;
   ax="";
   string am;
   am="";
   foreach(DirectoryEntry res in subentry.Children)
   {
     
    am="";
    foreach(DirectoryEntry res1 in res.Children)
    {
     if(res1.Name.Substring(0,3)=="OU=")
     {
      am=am+"1";
     }


    }


    if(res.Name.Substring(0,3)=="OU=")//判断是组织单位还是其他类型,例如cn=用户,GROUP=组等
    {



     ax=ax+"1"; 
 
     string []strArray;//用于存储上级目录的字符串
     string ou;
     ou="";
     strArray=ouname.Split(',');//分割


     for(int j=strArray.Length;j>0;j--)
     {
      if(j==1)
      {
       if(amstr==ax.Length)
        {
         HttpContext.Current.Response.Write("<img src=images/tree2.gif>");
        }
        else
        {
        HttpContext.Current.Response.Write("<img src=images/tree1.gif>");
       }
      }
      else
      {
       HttpContext.Current.Response.Write("<img src=images/tree3.gif>");
      }


     }//根据上级目录的深度来显示目录树的层次
     
     if(am=="")
     {
      Response.Write("<img src=images/tree6.gif>");
     }
     else
     {
      Response.Write("<img src=images/tree5.gif>");
     }
   
     string []strArray2;
     string tem;
     tem=res.Name.ToString()+","+ouname;//存储本级目录
     strArray2=tem.Split(',');
     for(int k=strArray2.Length;k>0;k--)
     {


      ou=ou+strArray2[k-1].Replace("OU=","/");
     }
     //OU存储本级目录的新格式,例如.泉州移动--网络部--IT中心等


 


     if(HttpContext.Current.Request.QueryString["action"]=="move")
     {
      HttpContext.Current.Response.Write("<a onclick=movechk('"+Server.UrlEncode(res.Name.ToString()+","+ouname)+"','"+HttpContext.Current.Request.QueryString["username"]+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
     }
     else if(HttpContext.Current.Request.QueryString["action"]=="add")
     {
      HttpContext.Current.Response.Write("<a onclick=chk('"+ou+"','"+res.Name.ToString()+","+ouname+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
     
     }
     else
     {
      HttpContext.Current.Response.Write("<a onclick=magchk('"+Server.UrlEncode(res.Name.ToString()+","+ouname)+"');>"+res.Name.ToString().Replace("OU=","")+"</a><br>");
     
     }


     GetOu(res.Name.ToString()+","+ouname,am.Length);
    }
    else
    {
     
    }
   }


 


----显示所有域用户的信息


 


DirectoryEntry de = new DirectoryEntry(BaseFunctions.DomainSrv,HttpContext.Current.Session["username"].ToString(),HttpContext.Current.Session["password"].ToString());
   DirectorySearcher srch=new DirectorySearcher();
   srch.Filter =("(objectclass=User)");


   srch.SearchRoot=de;
   srch.SearchScope = SearchScope.Subtree;
   srch.PropertiesToLoad.Add("sn");
   srch.PropertiesToLoad.Add("givenName");
   srch.PropertiesToLoad.Add("uid");
   srch.PropertiesToLoad.Add("telephoneNumber");
   srch.PropertiesToLoad.Add("employeeNumber");
 
   Response.Write("<table width=100% border=0 align=center Class=border");
   Response.Write("<tr background=images/topbar_bg.gif>");
   Response.Write("<td align=center height=22>帐号</td>");
   Response.Write("<td align=center height=22>名字</td>");
   Response.Write("<td align=center height=22>姓</td>");
   Response.Write("<td align=center height=22>名</td>");
   Response.Write("<td align=center height=22>显示名称</td>");
   Response.Write("<td align=center height=22>手机</td>");
   Response.Write("<td align=center height=22>部门</td>");
   Response.Write("<td align=center height=22>状态</td>");
  
   Response.Write("</tr>");


   foreach(SearchResult res in srch.FindAll())
   {
    if(res.Path.IndexOf("泉州移动")>0)
    {


     Response.Write("<tr class=tdbg>");
     Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"</td>");
     Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["Name"][0]+"</td>");
     Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["Sn"][0]+"</td>");


     try
     {
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["givenName"][0]+"</td>");
     }
     catch
     {
    
      Response.Write("<td align=center></td>");
    
     }
     
     Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["displayName"][0]+"</td>");
     try
     {
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["telephoneNumber"][0]+"</td>");
     }
     catch
     {
    
      Response.Write("<td align=center></td>");
    
     }
     try
     {
      Response.Write("<td align=center>"+res.GetDirectoryEntry().Properties["mail"][0]+"</td>");
     }
     catch
     {
    
      Response.Write("<td align=center></td>");
    
     }
     string []strArray;
     string str;
     str="";
     strArray=res.Path.Split(',');
     for(int j=strArray.Length;j>0;j--)


     {
      if(strArray[j-1].Substring(0,3)=="OU=")
      {
       str=str+"-"+strArray[j-1].Replace("OU=","");
      }


     }
     Response.Write("<td align=center>"+str+"</td>");


     if(res.GetDirectoryEntry().Properties["userAccountControl"][0].ToString()=="514")
     {
      Response.Write("<td align=center>锁定</td>"); 
     }
     else
     {
      Response.Write("<td align=center>正常</td>");
    
     }
     /*
     Response.Write("<td align=center>");
     if(res.GetDirectoryEntry().Properties["userAccountControl"][0].ToString()=="514")
     {
      Response.Write("<input type=button value=解锁 onclick=\"javascript:window.open('setstate.aspx?action=1&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=0, location=0, statusbars=1, menubars=0, resizable=1, width=50, height=50');\">"); 
     }
     else
     {
      Response.Write("<input type=button value=锁定 onclick=\"javascript:window.open('setstate.aspx?action=2&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=0, location=0, statusbars=1, menubars=0, resizable=1, width=50, height=50');\">");
     }
     Response.Write("<input type=button value=移动部门 onclick=\"javascript:window.open('ou.aspx?action=move&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=1, location=0, statusbars=1, menubars=0, resizable=1, width=200, height=650');\">");
     Response.Write("<input type=button value=更改密码 onclick=\"javascript:window.open('changeuserpass.aspx?action=password&username="+res.GetDirectoryEntry().Properties["sAMAccountName"][0]+"', 'poppage', 'toolbars=1, scrollbars=1, location=0, statusbars=1, menubars=0, resizable=1, width=500, height=150');\">");
   
     Response.Write("</td>");
     */
     Response.Write("</tr>");
     //CreateExcelFile2(res.GetDirectoryEntry().Password.ToString(),res.GetDirectoryEntry().Properties["Name"][0].ToString(),res.GetDirectoryEntry().Properties["telephoneNumber"][0].ToString(),res.GetDirectoryEntry().Properties["sn"][0].ToString(),res.GetDirectoryEntry().Properties["givenName"][0].ToString(),res.GetDirectoryEntry().Properties["displayName"][0].ToString());
    }
   }
   Response.Write("</table>");


posted @ 2009-01-22 10:00 雷君 阅读(490) 评论(0) 编辑