MOSS2007主要是用于应用于有着域环境的企业内部网络,但是,MOSS2007依然提供了面向Internet的功能。在面向外网的时候,依然使用域环境认证是不可能的,这个时候,使用匿名登录和表单认证就成了首选。

     在参考了Kaneboy的那本《Office SharePoint Server 2007开发入门指南》和网上的一些资料后,我现在分享一下我的经历。(ps:我很奇怪,为什么我照着Kaneboy上的步骤,是会出一些奇怪的错)

  1.      在Central Administration中创建一个新的web applicaiton(我用的是英文版的MOSS,所以这里直接用的都是英文术语)。至于创建一个Web Application就省略了。在创建top-level site collection 的时候选择下面的这个模板类型。

               

   2.     首先在SQL Server2005上创建一个名字为aspnetdb的database,设置不需要修改,为default就可以。

   3.     在运行SQL Server2005的服务器上的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727路径下,运行aspnet_regsql.exe

               

     一路next之后,来到下面所示,选择相应的server和database,再一路next下去。

                

      4.用Visual Stuido2005新建一个web site。在web config中<appSettings/>下加入一下的connecting string

 

Code

     并做以下的一个修改,这里没有加上RoleManager。

 

     

 

Code

 

      5.     在新建的site中新建两个user,这里新建了user1和user2

             

              

              

                   

                  

     6.     建好了之后,到C:\Inetpub\wwwroot\wss\VirtualDirectories下面。修改新创建的web application和Central administration的web.config文件。

            

Code

 

     其中</SharePoint>和<System.web>是用来定位何处修改的。

     7.将user1加为site collection administrator

     

     8.     将认证模式从windows 改为Form

     

          

     

     9.     现在你可以去这个网站看看了,一开始是没有匿名登录的,你需要以管理员的身份登录进行修改

       

     10.你可以在红框处修改匿名登录的设置

      

          匿名登录

posted @ 2008-09-02 10:52 jdxyw 阅读(339) | 评论 (0)编辑

google 提供了许多的API,其中最为人所知的应该就是Google Map的API了,你只需要到google的网站上申请一个Key,就可以在你的页面上实现了Google API,并可以通过Google提供的大量的API来完成一些很有趣的事情。实际上在MOSS使用Google Map API是一件很容易的事情,你只需要有一个Key就可以了根本就不需要再去写一个webpart,还要完成客户端的调用。MOSS上有个webpart叫做Conent Editor的webpart,在这个webpart上,你可以直接写Html的源代码,也就是可以写javascript的代码,你只需要在配置这个webpart的view source code的窗口里写入很少的javasxript就可以实现了。webpart就稍微麻烦了一点。其实也不是很难,还是直接上代码吧,大家一看就知道了。

 

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace GoogleMapDemo
{
    [Guid(
"003ce99b-6a77-4fe3-921d-0f183cde4db0")]
    
public class GoogleMapDemo : System.Web.UI.WebControls.WebParts.WebPart
    
{
        
private const string script1key = "script1key";
        
private const string script1 = "<script src=\"http://maps.google.com/maps?file=api&amp;v=2&amp;key=Here is your key\" language=javascript></script>";
        private const string script2key="string2key";
        
private const string script2 = "<script language=javascript> function load() {alert('hello'); if (GBrowserIsCompatible()) {var map = new GMap2(document.getElementById('map'));map.setCenter(new GLatLng(37.4419, -122.1419), 13);map.addControl(new GLargeMapControl());}}</script>";

        
private const string script3key = "script3key";
        
private const string script3 = "<script language=javascript>load();</script>";



        
public GoogleMapDemo()
        
{
            
this.PreRender += new EventHandler(GoogleMapDemo_PreRender);
        }


        
void GoogleMapDemo_PreRender(object sender, EventArgs e)
        
{
            
if (!Page.IsClientScriptBlockRegistered(script1key))
                Page.RegisterClientScriptBlock(script1key, script1);

            
if (!Page.IsClientScriptBlockRegistered(script2key))
                Page.RegisterClientScriptBlock(script1key, script2);

            
if (!Page.IsClientScriptBlockRegistered(script3key))
                Page.RegisterClientScriptBlock(script1key, script3);
        }


        
protected override void CreateChildControls()
        
{
            
base.CreateChildControls();

        }

        
protected override void Render(HtmlTextWriter writer)
        
{
            writer.Write(
"<div id='map' style=\"width: 900px; height: 300px\"></div>");
            writer.Write(
"<script language=javascript> function load() {if (GBrowserIsCompatible()) {var map = new GMap2(document.getElementById(\"map\")); map.setCenter(new GLatLng(37.4419, -122.1419), 13);map.addControl(new GLargeMapControl());}}</script>");//这一句是我在debug的时候加上去的,可以去掉试试,不过我没试。
            writer.Write("<script language=javascript>load();</script>");

        }

    }

}

这里使用了Page.IsClientScriptBlockRegistered和Page.RegisterClientScriptBlock分别来判断一段代码是否有注册和注册一点客户端代码。这两个函数已经过时了,现在应该是Page.ClientScript.IsClientScriptBlockRegistered,我懒,就没有该过来了。在webpart上调用客户端代码有两种情况,一个是直接注册一段代码,就像上面写的script2,另外一种是注册某个地方,也许是服务器或是本地上的一个js文件或是service,就像script1一样。

 

posted @ 2008-07-29 14:43 jdxyw 阅读(348) | 评论 (1)编辑
    最近在看Andrew Connell的一篇关于timer job的文章,http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx 其中讲到了如何用feature来对一个新的timer job进行部署。这里使用到了如何添加feature event handler。这里就利用学习timer job 的机会,也写写如何自定义一个feature的event handler
    与feature自身相关的event有四种安装 删除 激活 取消。我们就是利用activate的时候,来控制对job的设置,利用deactivate的时候,将指定的job删除。
    1.在VS中创建一个class library的工程。在reference中加入Microsoft.sharepoint.dll,这个dll可以在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI下找到。
    
    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace TimerJobDemo
{
    
class TimerJobDemoFeature:SPFeatureReceiver
    
{
        
public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        
{
            
//throw new NotImplementedException();
        }


        
public override void FeatureActivated(SPFeatureReceiverProperties properties)
        
{
            
//throw new NotImplementedException();
            SPSite site = new SPSite("http://litwaredemo");
            SPWeb rootweb 
= site.RootWeb;
            SPList list 
= rootweb.Lists["ForTimerJob"];
            SPListItem item 
= list.Items.Add();
            item[
"Title"= "This is a test";
            item.Update();
        }


        
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        
{
            
//throw new NotImplementedException();
        }


        
public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        
{
            
//throw new NotImplementedException();
        }

    }

}


        以上就是feature event handler的代码,我们可以看到,在featurereceiver中我们需要重载四个不同时期的函数,但是我们只是对其中的featureactivate进行了完整的实现。
        2.在同一个工程中新建一个文件夹,命名为TimerJobDemo,创建一个Feature.xml(具体的过程可以参看前面的两篇)
        这个feature的任务就是创建,并注册一个新的timer job,所以这个feature十分的简单。相比前面提到的feature,它多了两个十分主要的属性。
    
<Feature xmlns="http://schemas.microsoft.com/sharepoint/" Title="TimerJobDemo" Id="2D301FC8-DB43-4d5e-93DE-8F722054F4EE" ReceiverAssembly="TimerJobDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=80614946b1f438b6" ReceiverClass="TimerJobDemo.TimerJobDemoFeature" Scope="WebApplication"/>
    这个就是这个feature的全部内容,只有一个节点。Titile ID等属性我们前面都已经提到了,这里出现两个新的属性,就是ReceiverAssembly 和ReceiverClass。ReceiverAssembly 指定的是FeatureReceiver所在的程序集,而ReceiverClass指定的是FeatureReceiver所在的类。在激活feature前,我们需要将已经强签名的程序集Gac。然后安装和激活feature。激活后,我们到前面代码中提到的list中,看看是不是多了一个新的item。
    
        
posted @ 2008-07-14 14:48 jdxyw 阅读(318) | 评论 (1)编辑

    在上一次的文章中,简要的介绍了一下,如何写一个feature的过程,和写一个feature的流程,大部分的feature都是可以按照这样的流程来走的,虽然其中可能还有许多的千差万别,但这个是对功能的不同需求造成的。
    大家在写feature的时候可能会觉的敲这么多东西进去是个很痛苦的事情,要是能够像C++ C#有个自动提示和自动完成的功能就好了。其实使用DTD一样可以在VS2008(VS2005中也是可以的)中实现自动提示和自动完成的功能。
    像前一篇文章所说的,建立一个feature.xml,然后在properties中选择Schemas
                                                                   
        在这里我们会看到一系列的Schemas,如果我们想编辑相应的XML文件,我们可以选择相应的Schemas,来减小我们的工作量、你也可以自己编写相应的schemas来完成相应的XML的编辑。红线框住的就是我们所需要的。如果你是第一次配置的话,是没有这个Schemas的。你需要自己加入。而这个Schemas在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML下面的wss.xsd文件。加入之后,选择使用就可以了。
                                         
                                  
        这时候我就可以使用这个新添加的Schemas了
                                        
                                     
    

posted @ 2008-07-08 11:03 jdxyw 阅读(281) | 评论 (1)编辑
    最近,公司的一些东西用到了feature,本着好记忆不如烂笔头的精神,觉得将自己学习的一些东西写下来,防止以后忘了。我知道园子里有许多人都写过相类似的东西,这里不敢班门弄斧,本着有过改之,无着加勉,希望大家多多提意见。高手们多多指点,新手们共同学习。
    首先是对feature的一个定义,我从MSDN上找到一段对feature的定义
    Windows SharePoint Services 3.0 introduces an inherently portable and modular functionality known as a feature, which simplifies modification of sites through site definitions. A feature is a package of Windows SharePoint Services elements that can be activated for a specific scope and that helps users accomplish a particular goal or task.
     从我自身来说,我觉的可以把feature看做是为了完成某项任务和功能的小模块,而这个小模块可以在不同的范围上激活或是结束。
    既然是讲feature,就先讲一个简单的例子,这个例子是MSDN上的,我在我的虚拟机上实验过了,是可行的,讲这个例子的目的是有个更为直观的认识。
    1.首先,你可以用VS2005创建一个C#的class library的工程,创建这个工程我们不用里面的任何东西,只是为了编辑两个XML文件,在VS2005编辑feature是很方便的,因为我这台电脑不能使用虚拟机,所以方便之处只能下次再说了。你先创建一个文件夹,然后在这个文件中创建两个XML文件,具体的请看下图:
                                          
    2.下面是feature的内容,Ttile不用说了。这里最为重要的是Scope和Id这两个属性,Scope指定了,这个feature可以激活使用的范围是什么。一共是有四个级别的范围。Farm WebApplication Site Web.
    Farm:服务器场范围,这个是最大的范围
    WebApplcation:你可以看就是一个http://ccccc:vv之类的一种形式。在一个服务器场中,会有多个webapplication
    Site:site collection就是网站集。
    Web:subsite网站集下的一个web
    Id属性中的GUID是标识feature的唯一全局标识符,可以用VS2005中的工具来生成,在Tools菜单下面有个Create Guid的工具,选择第四种的格式,你可以不断的生成新的GUID,直到你觉的数字不错了:)
                                 
<Feature Title="New Simple Form Toolbar Button"
  Scope
="Web" 
  Id
="GUID" 
  xmlns
="http://schemas.microsoft.com/sharepoint/">
  
<ElementManifests>
    
<ElementManifest Location="Elements.xml" />
  
</ElementManifests>
</Feature>
    在这个feature.xml文件中是对整个feature做一个描述和基本定义,真正对这个feature起作用的,或是说完成这个feature所预想的功能的是在ElementManifest中指定的文件,你可以指定多个这样的文件,来完成多个工作。
    3.这个feature的目的是adds a button to the toolbar of the form for editing announcements items within the scope of a SharePoint site。因为我用的是英文版本的MOSS2007,我不太清楚里面的有些东西该如何翻译成中文,我也没有见过中文版本的MOSS,所以这里我将英文直接贴出来,希望大家谅解。
    
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  
<CustomAction Title="Simple" 
    Sequence
="10" 
    RegistrationType
="List" 
    RegistrationId
="104" 
    Location
="EditFormToolbar" 
    Id
="Simple Toolbar">
    
<UrlAction Url="/_layouts/SampleUrl.aspx" /> 
  
</CustomAction>
</Elements>

    上面是elements.xml文件的内容。一个CustomAction是为一个link或是工具栏对象定义行为。
    Id:为这个CustomAction指定一个文本标识符
    Sequence:指定action的优先级的顺序
    Location:Action出现的位置,在MSDN中有对Location有详尽的列表,以后会提到。你不仅可以对action指定title还可以加上你想要的图标。
    RgistrationType:Specifies the registration attachment for a per-item action. (不好意思,我不知道该如何翻译才更合适)。这是个可选的文本属性。从我的理解来说,这是对那些类似list中的item指定action。有ContentType List FileType ProgID。这里指定的是List,因为announcements是List的一种类型。
    RegistrationID:104代表着announcements。
    关于RegistrationID等具体的数值在MSDN中有详细的列表,后面的文章中也会有提到。
    UrlAction:指定了,当我们点击相应的item时,调用的是哪个页面。你可以自定义这个页面放在Local_Drive:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Layouts
    
<html>
<head runat="server">
<title>Sample Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
以上就是这个例子的代码。
    4.将刚才创建的文件夹复制到Local_Drive:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Features下面。
    运行 stsadm -o installfeature -filename SimpleFormToolbarButton\Feature.xml 
    这个是安装这个feature的命令行,安装feature的命令行有多种,这个只是其中的一种。
    安装完之后,你选择一个web,site action->site setting->site feature (因为我手中没有MOSS,只是凭记忆,有的地方的书写可能不太对,不过大致一样),进入到feature管理页面,激活后,到一个announcements中,就 可以看到新feature启用了。
posted @ 2008-07-03 14:56 jdxyw 阅读(529) | 评论 (3)编辑
     javascript对我来说是个很神奇的语言,一直以来都是以C++为主,后来又接触的是.net.冷不丁的一接触,还觉的挺新奇的。当然,如何编程语言都是工具,都是为了完成某种特定的任务而生的,其实也没有什么神秘的地方。熟能生巧。只要多学,多用,多看,多想,就可以很好的掌握。
     js中的对象和C++中的对象有着很大的区别,js中只有对象的概念,基本上没有类的概念。今天看了一篇文章,讲述了几种创建js对象,这里就简单的记下来,省的以后忘了。
   1.工厂方式
     function createobject()
{
        var o=new Object();
        o.a=1;
        o.b="w";
        o.c=function(){};
        return o;
}
    当然,你可以给这个函数传入参数进行定制,但是对函数的创建就重复了。
    它还有个相近的版本,但是这个版本可以用new来创建
function createobject()
{
        this.a=1;
        this.b="w";
        this.c=function(){};
}
    2.使用对象的prototype属性,用一个空构造函数来设置对象名,然后所有的属性和方法都直接用prototype来赋予
function o(){};
o.prototype.a=1;
o.prototype.b=function(){};
    此方法也是用new来创建新对象的。
    3.JSON方式来创建
    var o=
{
    a:1,
    b:"aa"
    c:function(){}
}

posted @ 2008-04-09 21:08 jdxyw 阅读(75) | 评论 (0)编辑