Logo 主页   内容管理   网站设置   向上至 海洋工作室
Web 部件页标题栏图像
Blog

 

collapse 2008年8月1日
在MOSS中给增强型RTF字段增加按钮

SPS

很多人会抱怨MOSS默认的讨论区比较弱,比起大部分BBS来说,确实少了很多功能。实际上对于MOSS的讨论区来说,已经是一个树型结构了, 我们只要稍加改善,就能够让讨论区更完善一些。

昨天中午和同事讨论起这个话题,认为讨论区只要要改进4个地方:

  • 1:贴图,也就是能否在编辑帖子的时候,同时上传图片,并且贴到正文里面。这个我在前几天的blog里面已经讲了,这个功能已经实现了, 大家可以参考:在MOSS中实现自动上传图片
  • 2:有头像,这个功能MOSS本身就有。大家看我的讨论区,我的帖子就有我的头像,当然现在还不允许大家自己设置头像,我想以后我会实现这个功能。
  • 3:有签名,能够在发帖的时候增加签名档,这个是需要改进的地方。也是我考虑下一步去实现的。
  • 4:能够贴表情,也就是类似QQ,MSN一样,能有贴表情的按钮。
  • 今天我们就讲讲如何实现第4个,首先看贴图:

    这张图截自我的网站的讨论区, http://www.oceanstudio.net/Lists/SharePoint3/AllItems.aspx,大家可以自己去看实际效果,当然为了防止恶意灌水,本讨论区需要注册。

    我的实现方式很简单,讨论区默认的正文输入框是一个增强型的RTF,我做的就是在上面加了一个按钮。

    上篇Blog我们曾经讲过,如果要替换掉整个编辑器,我只要重写RTE_ConvertTextAreaToRichEdit()这个函数就可以了。但是有时我只希望增加一两个按钮,如何做呢?

    FullHtml,也就是增强型RTF的工具栏的按钮,都在RTE_FullHtmlToolBarDefinitionFactory()这个函数里面定义这,这里面有一个toolbar变量,我们只要在合适 的位置,增加我们的按钮就可以,我把它加入到插入图片的按钮后面,向toolbar加入按钮的时候,首先要生成一个新按钮,按钮有三种:

  • 1:ExecCmdButton,这属于命令按钮,就是点中按钮后没有多余界面出来,比如copy,paste,cut等
  • 2: JScriptButton,这些都会弹出对话框,比如“插入图片”,“插入链接”这些按钮等
  • 3:SpecialButton,这些就是类似我做的这个插入表情的按钮,它会有一个下拉单,让你选择,另外还有就是选择“前景色”,“背景色”的这些按钮。就是类似下图这样的。
  • //////////////////////自定义按钮///////////////////////////
    //增加表情按钮
    toolBar.push(
    	new C_RTE_TB_SpecialButton(
    	g_strRTEInsertEmoticonMnemonic,
    	RTE_GenerateInsertEmoticonToolBarButtonHtml,
    	true,
    	new C_RTE_TB_SetEnabledAlways()));
    ///////////////////////////////////////////////////////////
    		

    创建好按钮后,就要生成这个按钮的主体html,这个我们定义一个新函数:RTE_GenerateInsertEmoticonToolBarButtonHtml。生成完按钮主体后, 就要生成那个表情选择器,这个选择器我也创建了一个新函数RTE_DD_OpenInsertEmoticonSelector。选择器实际上有现成的一些函数可以调用。 这个函数就是:RTE_DD_GenerateMenuItemHtml,每个MenuItem就是一个表情按钮。通过这些已经预定好的函数生成选择器后,你会发现你不用去设定位置, 它会自动的在你的按钮的下方出现。

    当你的按钮出来之后,你需要做的就是点击按钮返回的动作,这个动作会调用RTE_ExecuteCommandOnSelection这个函数,在这个函数里面,执行了 docEditor.execCommand()函数,执行插入图像的动作,每个表情就是一个图片。

    if (strCommand == "InsertEmoticon") {
         docEditor.execCommand("InsertImage", fUserInterface, RTE_GetServerRelativeImageUrl("Emoticon/" + strValue));
    }
    		

    这里提醒大家注意一下的就是,我们的toolbar是在一个Iframe里面的,所以点击了表情按钮之后,实际上的函数调用发生在Iframe内部,如果你想让它调用 父框架的函数,那么请使用parent或者top。这个按钮我一共花了3个小时,但是这个小问题就花了我1个小时的时间,之后才恍然大悟想起来表情按钮都是在Iframe中。

    当然实际上做一个按钮不需要那么长时间,除了刚刚的那个Iframe问题之外,我还花了一些时间来收集表情图片,并且一个一个的写到数组里面,这个也属于个体力活。

    当我们给这个工具栏加上按钮后,那么每个字段,只要采用了增强RTF型,就会有这个插入表情的功能。

        欢迎访问海洋工作室( http://sps.oceanstudio.net

    22:23 | 评论

    collapse 2008年7月30日
    在MOSS中实现自动上传图片

    SPS

    我经常会被问到这么两个问题:

  • 在MOSS中,我们是否能换掉那个多行文本输入框默认的html编辑器?
  • 在多行文本输入框的html编辑工具栏中,插入图片那个按钮是否能让我将本地的图片上传到服务器上?
  • 我也不太清楚为什么,这两个问题我确实被问了无数遍,我每次都会回答:可以,没有问题。然后天马行空的说 一些我的想法,结果很多人还是没有搞清楚。恰好现在我也希望我的讨论区有图片上传的功能,昨天晚上就开始真正 的去实现这么一个文件上传。

    我在本文中,就具体的谈一谈,我们应该如何去实现它,并且阐述一下MOSS自身的一些机理。

    我做了一个小例子,大家可以先看一下,当然大家也可以从 http://www.oceanstudio.net/Lists/SharePoint3/AllItems.aspx这里直接看到我做的例子,为了防止机器人在我的讨论区灌水,本讨论区是需要注册登录才能发帖子的。我是贴图大王,大家先看贴图:

    首先,当我们点击“插入图片”按钮后,弹出了对话框,为了实现文件上传功能,我直接替换掉了这个对话框。

    这个对话框有两个功能,第一个就是原先的功能,你可以自己填写url,第二个功能就是你可以选择上载,然后通过uploadfile 控件,选择一个文件。在这里,我选择了我桌面上的一个图片文件,这个文件也是我的网站海洋工作室的logo。

    点击上传按钮,这个时候会显示上载成功。然后我们就可以点击确定按钮了。

    点击了确定按钮之后,我们可以看到,这个logo图片已经显示在多行文本区了。

    这是我们点击确定后,新建的一个帖子,图片能够正确的在web页面上显示出来。现在大家发帖子,就可以将自己的错误 信息截图直接贴到正文里,而不需要像以前那样添加到附件里面那么麻烦了。

    我们看一下这个图片的属性,这个图片显示的路径是:http://www.oceanstudio.net/Lists/SharePoint3/_ocean_upload/12861814871598000-logo.jpg, logo.jpg是这个文件的原文件名,为了防止文件名冲突,我直接在文件名前面加了一个时间戳。

    我终于过完了贴图瘾,下面我们就谈谈我们如何来做,大家觉得很奇怪,既然我从昨天晚上才开始想起来做,几个小时就做完了, 连blog都写出来了,这么简单的东西,SharePoint产品组干吗不直接加上这个功能?毕竟这是一个很实用的功能。

    我认为这个主要在于几点:

  • 最严重的问题,上传的图片存放在什么位置?这实际上是个很严重的问题,因为大家会发现我做的例子,当你的项目还没有 添加的时候,图片就已经上传到服务器上了。我是自己定了一个位置,位于列表的_ocean_upload目录,这个目录是我自己建立的。 但是很明显开发组不能这么干,因为如果我关闭了浏览器,那么这个上传上去的图片就永远存在与服务器上了,那么作为一个产品 来说,这是不能忍受的。而对于我们一个具体的解决方案,可以具体情况具体分析,我可以存放在任何位置,只要我觉得合适就可以。
  • 权限问题,MOSS的每个项目都是可以有单独权限的,而很明显项目里面的内容,如果有图片的话,那么这些图片的权限 也应该跟随项目的权限,而像我这样直接放在一个统一的目录里面,就等于凡是能阅读这个列表库的,就都能看到这些图片,图片的权限就无法 和具体的每一个栏目挂钩了。
  • 有人会说,那为什么不像附件一样呢?我们说附件,虽然你选择了附加文件,但是这些文件是当你点击确定,添加整个项目的时候 才会上传的,而不是事先传上去的。如果我们不事先上传图片,那么图片的位置就只能用一个统一的占位符来表示,而无法在编辑的时候直接预览, 我想这也是这个方案的一个问题。
  • 开发组可能考虑了还要多的东西,最终没有将这个功能加入进来,SPS2003没有,MOSS2007也同样没有。

    但是,我们却可以进行扩展,MOSS是个很灵活的架构,在MOSS的平台上进行开发,你会觉得非常的优雅,因为MOSS确实是一个非常优秀的开发平台。

    首先我们从原理开始讲起,第一个问题,我们能否替换掉那个Html编辑器?这个答案是没有问题,方案有二

  • 1:我们直接通过MOSS2007的自定义字段类型的特性,直接开发一个新的字段类型,这时UI是我们自己控制的,我们可以直接嵌入一个我们想要的HTML编辑器,这也是 最省时省力的方案。然后在需要用到的地方,建立这个新类型的字段就可以了。
  • 2:有人较真,说我就想改掉它自带的,而不是新建一个类型,那实际上就复杂了,我们就需要研究一下MOSS是如何做的了。
  • 我们知道,在MOSS里面,多行文本有三种形式,简单型,RTF型和增强RTF型。我们真正要动手的,实际上就是这个RTF型和增强RTF型。那么 在你新建或者编辑项目,含有这些类型的字段时,MOSS是如何做的呢?

    MOSS首先输出一个textarea标签,这个标签是多行文本框,然后紧随其后,它会调用一个JavaScript函数:RTE_ConvertTextAreaToRichEdit(),这个函数的定义如下:

    		function RTE_ConvertTextAreaToRichEdit(
    			strBaseElementID,
    			fRestrictedMode,
    			fAllowHyperlink,
    			strDirection,
    			strWebLocale,
    			fSimpleTextOnly,
    			fEditable,
    			fUseDynamicHeightSizing,
    			iMaxHeightSize,
    			iMinHeightSize,
    			strMode,
    			urlWebRoot,
    			strThemeUrl,
    			strBodyClassName,
    			fAllowRelativeLinks,
    			strBaseUrl,
    			fUseDynamicWidthSizing,
    			iMaxWidthSize,
    			iMinWidthSize,
    			fEnforceAccessibilityMode,
    			fPreserveScript,
    			fHookUpEvents,
    			fGenerateToolbar
    			)
    		

    其中第11个参数是strMode,这个参数为"FullHtml"时,就是增强的RTF类型,如果是Compatible,就是普通RTF类型。那么这个函数在哪儿呢? 它位于C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\2052下的FORM.JS ,这个路径是默认安装的路径,如果是英文版,就把2052换成1033(下同)。然后我们就可以打开FORM.JS看看这个函数是如何实现的。这个文件比较 长,差不多有6000行,好在没有进行任何混淆,版式也很规整,所以读起来并不难。通过阅读源代码,我们知道它在页面生成了一个IFrame,我们 所编辑的所有内容,都会被存到这个IFrame里面,并且使用RTE_TransferIFrameContentsToTextArea这个函数把IFrame里面的内容显示到 TextArea里面。所以实际上如果我们要替换编辑器的话,我们只要重新写这个函数就可以了,我们可以重写这个函数,输出我们自己的html编辑器, 只要最终在保存之前,我们把我们的html编辑器里面的内容存到这个TextArea里面就可以了。

    当然替换一个htmleditor实在是不划算的事情,因为自己写一个htmleditor很复杂,当然如果有现成的并且免费的html editor也不错。 不过我想大多数人,都希望修改原来的editor,比如增加个按钮什么的,这个也是可以做到的。因为在RTE_GetCompatibleToolBarDefinition 和RTE_FullHtmlToolBarDefinitionFactory这两个函数里面,定义了toolbar里面的按钮,我们只要在这里面增加新的按钮即可。

    下面就回到了第二个问题,如果我仅仅是希望添加图片的时候,让图片具有上传的功能,我该如何做呢?当点击了html编辑工具栏的“插入图片” 按钮后,调用了RTE_ModalDialog这个函数,在这个函数里面,弹出了那个对话框,这个对话框默认是/_layouts/RteDialog.aspx,因为MOSS 是不提供源代码的,所以改写RteDialog.aspx困难一点,我所采用的方法,就是重新写一个对话框。并且在这个对话框里面实现文件上传的功能。

    在写之前,我们要考虑一个问题,就是上传的图片放在什么地方?我想有下面几个地方:

  • 1:放在磁盘目录里面,并且这个磁盘目录能够在web上访问到,这种方式最简单,因为直接脱离了MOSS,我们的代码里面也不需要对MOSS进行任何操作了。 缺点就是完全脱离了MOSS,当我对我的网站进行备份时,我需要单独为磁盘上的这些图片备份。而且权限系统完全脱离了MOSS的管辖。
  • 2:放在MOSS的某个文件夹中,如果我们一个MOSS公共文件夹里面,有点就是当我备份站点时,这些图片会被一同备份。缺点是所有的图片都在一个文件夹里面, 会比较乱,而且权限无法区分清楚。
  • 3:放在各自的列表的某个文件夹里面,我的那个例子就是采用的这个方法,比如那个SharePoint讨论区,列表的名字是"SharePoint3",上传图片就会 放到对应的"SharePoint3/_ocean_upload"这么一个目录里面,第二种方法是一个网站对应一个目录,现在这种方法是一个列表对应一个目录。这个好处就是 当你删除列表时,图片也会一并被删除。权限也限制到了列表级,也就是拥有列表读权限的就能访问。缺点是权限仍然没有和某一个具体的项目挂钩。
  • 4:图片放到相应的项目所对应的目录下,我们知道如果列表允许附件,那么所有附件都会放在Attachment这个目录里面,并且在这个目录里面根据项目的id 分子目录,附件则放在对应项目的子目录里面,这样的好处就是当某个项目删除后,图片也立即删除了。但是要实现这个还是有一定问题的。主要就在与新建项目时, 还不知道新建的项目的id,这个时候先上传图片根本不知道放在什么地方,所以最终我采用了第三个方案。
  • 还有一个问题就是,我们的web application放在什么地方?很多文章都讲我们要放在_layouts下面,实际上,我们放到任何位置都可以,我 放的位置是/OceanFileUpload,大家从截图上就能看到。/OceanFileUpload是我在IIS下建立的虚拟应用,这个虚拟应用只要在MOSS的 站点下就可以使用MOSS的上下文。

    这个文件具体怎么上传我就不细讲了,因为在asp.net2.0里面,文件上传实在太容易了,有自带的FileUpload控件。当点击了上载按钮后,就把上传的 文件存到MOSS里面,讲文件存到MOSS里面,我们可以使用public SPFile Add(string urlOfFile, Stream stream);这个函数,其中的stream我们 可以直接从FileUpload.FileContent获得,因为这个FileContent本身就是一个Stream类型的。当然你的项目要引用Microsoft.Sharepoint.dll。

    文件上传完毕后,返回这个文件在服务器上的url就可以了。

    另外,因为网站采用Form认证后,批量上传图片的功能就无法使用了,所以我干脆自己做了一个Silverlight相册,这是基于Silverlight2 beta2的,欢迎大家去做客。

    欢迎访问海洋工作室

        欢迎访问海洋工作室( http://sps.oceanstudio.net

    0:19 | 评论

    collapse 2007年9月9日
    在Windows Server2008中运行MOSS不能启动Excel Service的问题

    SPS

          如果你现在使用Windows Server 2008 beta3 来运行MOSS2007,那么你可能会遇到一个我问题,就是MOSS2007中的Excel Calculation Service 无法启动,这是Windows Server 2008 beta3中的一个已知Bug,并且这个Bug在下一个版本里面将会修复。你可以采用下面的命令启动Excel Calculation Service。

        STSADM.EXE -o provisionservice -action start -servicetype "Microsoft.Office.Excel.Server.ExcelServerSharedWebService,Microsoft.Office.Excel.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  

        运行完后你就可以看到Excel Calculation Service正常启动了。执行得界面如下:



          启动后出错的界面:


          同时你在系统日志中会发现下面的记录:
       

    Log Name:      Application

    Source:        Windows SharePoint Services 3

    Date:          2007/9/4 23:24:02

    Event ID:      7034

    Task Category: Topology

    Level:         Error

    Keywords:      Classic

    User:          N/A

    Computer:      vhaijulonghorn.fareast.corp.microsoft.com

    Description:

    An attempt to start/stop instance  of service Excel Calculation Services on server VHAIJULONGHORN did not succeed.  Re-run the action via UI or command line on the specified server. Additional information is below.

     

    Failed to resolve the site ID for 'Office Server Web Services'.

    Event Xml:

    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">

      <System>

        <Provider Name="Windows SharePoint Services 3" />

        <EventID Qualifiers="0">7034</EventID>

        <Level>2</Level>

        <Task>807</Task>

        <Keywords>0x80000000000000</Keywords>

        <TimeCreated SystemTime="2007-09-04T15:24:02.000Z" />

        <EventRecordID>4113</EventRecordID>

        <Channel>Application</Channel>

        <Computer>vhaijulonghorn.fareast.corp.microsoft.com</Computer>

        <Security />

      </System>

      <EventData>

        <Data>

        </Data>

        <Data>Excel Calculation Services</Data>

        <Data>VHAIJULONGHORN</Data>

        <Data>Failed to resolve the site ID for 'Office Server Web Services'.</Data>

      </EventData>

    </Event>

        欢迎访问海洋工作室( http://sps.oceanstudio.net

    22:37 | 评论

    collapse 2007年8月6日
    我也谈谈执行力

    杂谈

    最近在博客园里面闲诳,发现谈执行力的两篇文章,这个我比较感兴趣,我也发表了一个评论,其主要主张就是管理者,管人是非常重要的,这个要比管理者自身所掌握的技术重要。我引了《史记》中刘邦说过的一段话“夫运筹策帷帐之中,决胜于千里之外,吾不如子房;镇国家,抚百姓,给馈饷,不绝粮道,吾不如萧何;连百万之兵,战必胜,攻必取,吾不如韩信。此三人,皆人杰也,吾能用之,此吾所以取天下也。”。我们知道刘邦和项羽打仗,没有一条计谋是自己出的,没有一场战役是自己指挥的,在未得韩信之前也是屡战屡败。那刘邦为什么成功呢?这就是有人才,而且在于能够知人善人,有时你的手里有人才,但是你不能用,一样不成。刘邦后面跟着一句“项羽有一范增而不能用,此其所以为我擒也。”。后面接着有一哥们说这个太理论化了,怎么具体呢?

    首先我们要达成一个共识,管理一个团队,就是管人,对于管理者(或者说这个项目经理)管人是最主要的,那么我们就要分析一下团队的角色。我首先假定项目的合同已经拿到手了,下面要做的是完成项目,所以我着重分析技术角色。

    我认为在一个技术团队里面可能存在这么几种角色:

    技术牛人:对技术有个很高的把握,而且有很强的新技术学习能力,这种人通常目高一切,而且容易不把其他技术人员放在眼里。

    积极学习型技术员:学习能力一般,技术基本了解,能够做一般的程序工作,但是对技术充满热爱,富有激情,而且很希望能够通过项目提高自身水平。

    消极型技术员:能力同积极学习型技术员,但是不爱学习,得过且过,干活也没有积极性。

    积极学习型新手:刚毕业的,没有多少项目经验的,技术能力不强,但是有潜力并且肯学习,有望成为新一代技术骨干的。

    无潜力型新手:刚毕业、无经验、技术能力弱,而且不善、不愿学习,无发展潜力的。

    优秀型老员工:工作年头长,并且工作积极,有良好的表率作用。

    混日子型老员工:工作年头长,工作不积极,开始混日子。

    大家发现这里有点奇怪,就是这些角色和我们普通的程序员、测试员、设计师、架构师这种角色划分不同。没错,要管人,首先要分析人,分析人需要从这个人的性格、潜力来分析,而不是从职位分析,上面只是一个大概的划分,大部分人应该能够概括到这几种类型中。

    那么我们拿到一个团队,就要首先搞清楚都有哪些人,然后再根据这些人的特点,分别给他们不同的利益,并且将他们放在不同的位置上。这样才能知人善任。

    那么我们就先说说技术牛人型,这类人通常最头疼,不容易指挥,目空一切,从心里可能根本瞧不起你这个刚来的项目经理,你说炒掉吧,这还是技术骨干,项目离了这种人你还可能玩不转,真真是左右为难啊。怎么办呢?两个词,信任、尊重。建立信任和互相尊重是指挥和用好牛人的第一步。知人啊,重要的在知己,对于管理者来说,首先要尊重孙悟空式的技术专家,管理者通常自己不懂或者不太懂技术,这个没关系,关键在于不能不懂装懂,不懂装懂的管理者是得不到信任的。刘邦在拜韩信为大将军后和韩信有过一段谈话,韩信问刘邦,说你看凭你的士兵啊、财力啊、魅力啊,你能和项羽比吗?《史记》记了6个字,“沛公默然良久”,这个刘邦想了很久,然后又记了三个字,“不如也”。韩信原来是在项羽手下的,然后投靠了刘邦,为什么韩信那么牛的人,“攻必取,战必胜”,反而会听刘邦的呢?很大的一点在于刘邦诚实,刘邦首先知己,如实相告,不加隐瞒。在拜韩信为大将军时,“择吉、沐浴、斋戒、筑台”,给了韩信应有的尊重。所以我们对技术牛人来说,尊重他们是必要的,自己不懂的技术问题多向技术牛人请教,不丢人,对于下级来说,上级来请教本来就是对下级的一种信任和尊重,对于上级没什么丢脸面的,这叫“不耻下问”啊,重视团队中牛人的作用。实际上技术型的人才很好管理,肚子里面没有那么多肠子,只要你信任、尊重他们,大多都会为你做事。那么在具体的职务上如何安排呢?这就是一个善任问题了。对于团队中的技术牛人,一定要放在关键的位子上,并且让他知道自己做的事情对项目的成败很关键,技术型牛人虽然目空一切,但是通常责任心都是强的。同时呢,一定要在项目中采用一些新技术,让技术型牛人对这些新技术进行研究,这也是技术型牛人的一个特点,如果你总是让他做重复性的代码工作,估计你再尊重也没用,相反你让他研究一些新技术,这正符合他的心意,本来他要工作之余研究,现在成了职责所在了,只会感谢你,并且把其它的本职工作做好。一个团队,必须互相尊重,但是获得目空一切的牛人的信任和尊重很难,如果你能搞定技术牛人,那么我想你获得整个团队的信任和尊重就不困难了吧?

    有了团队成员之间的相互信任和尊重,这个团队就有了凝聚力和战斗力,执行力自然也会形成,这是一个水到而渠成的事情。那么对于我们一般的积极学习型技术员呢?我们要关注培养,让他们在项目中获得更多的经验。学习更多的技术知识。而对于消极型的技术员呢,则要看情况分析,如果能够完成指定工作,那么消极点就消极点吧,只要对团队的士气不构成影响,就不用大动干戈。我送三个字“缓图之”。就是说你要慢慢想办法,是转变思想?还是炒掉?都要慢慢来。

    对于新手呢?积极学习型新手一定要加以培养,让他们取代那些消极型技术员。可以在工作之余多组织一些技术讲座,可以让技术牛人主讲吗,这也是对技术牛人的肯定啊。互惠互利,何乐而不为。对于那些无潜力型新手,我的建议是趁早炒掉,另外招人。一个员工,来两个月就走了,大家可能没感觉,如果来一年才炒掉,大家可能就会有猜疑,有议论。所以对于无潜力的新手,建议就是尽快炒掉。

    最后呢我们就要讨论一下让人头疼的老员工了,中国不是一直有个什么30岁程序员之论吗,有时你发现老员工学东西不快了,做事情慢了,钱不少拿,怎么办呢?我们仍然要从人的角度入手,对于优秀型的老员工,一定要重用,这里的优秀更多的是激情、经验,老员工不一定干活快,但是经验足,经常能意识到潜在的风险和问题。如果工作积极,态度端正,那么干活慢一点是没什么关系的,遇到这种员工是种福气。但是对于那些混日子的老员工就难办了,你说炒,因为在公司年头长,人际广,直接炒掉可能会有让人想到两句话,哪两句呢?就是“狡兔死,走狗烹;高鸟尽,良弓藏”。这么做有卸磨杀驴的嫌疑,容易让新员工猜疑啊,新员工可能会想,我们工作年头长了,成为老员工后,工作能力降了,会不会也是这个结果啊。容易扰乱军心。所以对于这种老员工,也一样要缓缓图之,具体怎么做这里就不说了。

    分析完人的角色,我们就可能让这个团队有战斗力,那么团队有战斗力,那么这个战斗力就是执行力吗?所以我们下面还要再讨论一下执行的问题。

    有朋友拿美国西点军校和《没有任何借口》说事,这是大错特错。坚决服从命令是军人的天职。所以你就说“上面”说了,“下面”就必须无条件的执行。这是只知其一而不知其二了。那就是如何养成的这种服从。我们看抗日战争,经常有首长说:“XX营长,你们阵地就算剩了最后一个人,也要给我保证阵地不丢!”,那边回答“是,誓死不丢阵地”。这是怎么形成的呢?根本在于大家的认识是统一的,比如保卫师部转移,保卫XX根据地,大家知道自己在做什么,大家乐意用生命来保卫。所以这里有一个前提是你的命令不能让众人疑惑,而且要让众人都觉得是和他们的既定目标一致。这么说又有人反对了,说有时要用奇计,不能让下属知道,我这个命令看着没道理,实际有道理,但是我又不能明讲,比如韩信的背水一战,有人就问啊,自古兵法上说营地后面应该是山,前面是水,现在反过来了,后面是水,这不是处于死地吗?士兵也很奇怪啊,但是没有说什么,还是服从,最后置之死地而后生,大胜赵国军队。大家分析一下,实际上这是一个很危险的举动,因为在做这个举动的时候,军心已经有点不稳,但是大家为什么还继续执行呢?因为韩信在以往的战争中“攻必取、战必胜”,所以大家对韩信打仗带兵深信不疑,这次虽然有点莫名其妙,但是大家还是信任韩信,而且胜利了之后韩信也把胜利的道理讲了。你要下属执行命令,首先要让下属明白这个是对的,是有意义的。如果每次都这样,那么你突然下一条莫名其妙的命令,大家根据以往执行命令的情况一般而言也会执行,但是事后一定要让下属明白为什么有那么一条命令。否则你莫名其妙的命令下多了,大家就会产生怀疑,军心就可能不稳,事后如果还不知道为什么,那不出乱子才怪呢。所以你要让大家执行,就要让大家明白为什么要执行,而不是一味的,机械的执行。更何况经商不完全等同军队打仗,团队成员完全可以换个老板,如果你的命令总是莫名其妙,干吗要听你的呢?即使军队的人也可以换阵营啊,当年许攸不就是从袁绍阵营叛逃到曹操阵营,从而帮助曹操赢得了官渡之战吗?

    另外一个问题就是如何改革的问题,改革是必须的,也是必要的,但是做为一个新的项目经理啊,有时总是异想天开的希望大刀阔斧的改革一番,制定了很多制度,赏罚措施等等,最后碰了一鼻子灰。这就是一个方法问题了。老子曰“治大国若烹小鲜”,烹小鲜是什么意思呢?小鲜就是小鱼小虾,就是你烹这个小鱼小虾啊,你要放点油,小火,慢慢煎,你不能拿个铲子使劲铲,那样就都烂了。这个意思就是说你不要折腾,你要分析清楚各股的力量,慢慢来,削弱对你的项目有阻碍的力量,壮大对你的项目有利的力量。你大刀阔斧很可能激起很多股力量的反击,最终是自己做不成事情。所以这个不是讨论要不要改革,而是怎么实行改革的问题。

    当然有了这些还不够,一个团队的成员必须要有相应的薪水,即使不算高,也至少要保持一个行业的平均水平,否则利益过少,仍然不足以维持,另外除了工资外,还有其它的一些因素,比如发展前景、工作环境、工作时间、团队的融洽度等等。如果这些做的比较好,成员也不容易离开,你想另外一家给你的工资可能比现在高个千八块钱,但是你会考虑另外一个公司可能没有这里这么好的工作环境啊,个人发展前景啊,那么还是不会走的。当然了,如果另外一个公司直接就给高一倍的薪水,可能八成人都会跳,你其它的事情做的再多可能也没用,所以如果一个公司的薪水过低,也是发展不了的。毕竟员工是以生活为主,赚钱更多的是为了养家啊!

    那么对于小公司来说,发不了高薪,怎么办呢?比如这个公司一共也就10个人。大家每个月2000块,甚至有时发不出工资。怎么办?那么这个公司的创始人最好有个远大的理想,而且坚定这个理想,让员工也坚定这个理想,这叫做“有前景”。阿里巴巴的马云,在北京混了好几年,最后也没成功,又跑回杭州老家,这个时候市政府有领导问,说你这个公司以后会怎么样啊,马云说,这个公司以后会是一个价值五十亿美金的公司,那个时候马云五万人民币都拿不出来啊,工资发不出,为什么他的核心团队没有人走呢?马云给他们的期望,而且也是马云的个人魅力,领导的个人魅力也是很重要的,这也是管理者应该注重的。小公司小,你开个空头支票你还会吧?股份,期权等等,给大家先画一个大饼,重要的是凭借你的魅力要让大家都相信这张饼存在,而且以后能吃到嘴里。刘邦在垓下被项羽团团围住啊,各路诸侯都不来救,包括在齐国的韩信(韩信攻打下齐国后就自命为齐王)。刘邦怎么做呢?开空头支票啊,写信给这些诸侯说,你们来帮我,打下了天下,哪块地方就给你,比如韩信给你哪块地方,彭越给你哪块地方,等等,先分完了。这不就是典型的空头支票吗,最后各路诸侯出兵,十面埋伏,四面楚歌,项羽自刎。如果创业者没有日后能做到很大,而是得过且过得这种心态,那就趁早关门吧,你也趁早跳槽吧。马云在困境中没有说过一句丧气话啊,而且无论多困难(发不出工资的时候都有),都坚信B2B能成功。刘备大半辈子都在漂泊,没有根据地,但是从来没有忘记掉“恢复汉室,一统天下”啊。

    管理,实际上就是调和内部的矛盾,形成高度一直的步调,实现共同的理想。管理,就是管人,一个真正的管理大师,就算一点技术都不懂,也能管理好一个技术团队,因为他一定会谦虚的听取技术工程师的意见,他一定会获得团队的尊重和信任,他一定会让团队的成员发挥出自己的价值,他一定会让团队的成员得到应有的利益,他一定会让团队富有激情和战斗力。

    最后一个问题呢,就是可为不可为的问题,有时你会感觉啊,你无论分析过来分析过去,这个项目都没办法成功,团队总是凝聚不起来,这个时候的原因就在公司身上,给自己选择一个好老板,如果你在一个公司里面,老板对你是“言不听,计不用”,那你还呆着干吗呢?这是一个双向选择的社会,在某些情况下,你是要考虑另谋高就的。扶不起来的阿斗常有,人生不如意事十之八九。这里就有一个大的话题了,这个话题就是“如何选择一个好老板”,这个话题以后有时间再谈吧。

    当然了,匆忙之中,挂一漏万。很多地方也是值得商榷的。只是希望给大家引一个思路,大家也能多思考一些罢了。

        欢迎访问海洋工作室( http://sps.oceanstudio.net

    3:41 | 评论

    collapse 2007年1月7日
    将网站从WSS2.0升级到WSS3.0的心得

    SPS

            最近终于抽出写时间,将网站从WSS2.0升级到WSS3.0,根据升级的过程,将升级的一些经验总结了一下,大家共享。

           此文不是一份完整的升级文档,是在我具体实施升级的一些步骤和经验总结。升级的官方文档请参考:http://technet2.microsoft.com/Office/en-us/library/91046a84-57a1-40cb-a32c-ff3395073dc91033.mspx?mfr=true

           1:首先安装WSS3.0,安装的时候有几个选项,按照我的经验,最好选择第一项,默认的是第二项。如果选择第二项,则在装完WSS3.0后,会自动对服务器上的所有网站进行升级,但是存在很大的风险,我首先在虚拟机上进行了升级试验,一次就升级成功,但是在真实的海洋工作室服务器上,则升级失败,结果导致原先的WSS2.0的网站也无法访问。所以建议选择第一项,执行逐步升级,这样可以一个网站一个网站升级,而且如果升级失败,还可以恢复。比较保险一些。

           安装完毕后就要进行配置,但是很多网友可以在配置的时候出现下图的错误: 

            这是因为在运行配置向导之前没有运行prescan.exe的原因,在配置向导运行之前必须首先运行prescan.exe,这个在12目录下的bin目录,如下图:

            关于prescan.exe的描述,您可以参考:http://technet2.microsoft.com/Office/en-us/library/035a3024-bd27-4d63-9499-0f15ac00c6e61033.mspx

            运行完prescan.exe后,您就可以进行配置了,配置的过程和安装一个新服务器场的过程一样,在此不多叙述,配置完后打开管理中心,首先在”操作“-“服务器场上的服务”中启动必须的服务,然后在“操作”标签页中找到“升级并迁移”,选择“网站内容升级状态”。

           在“网站内容升级状态”中,可以看到所有的WSS2.0的网站,选择你要升级的网站,然后选择“开始升级”。 

          点击开始升级后,会有一个升级页面,升级并不是直接升级原先的站点数据库和Web站点,而是会建立一个新的数据库和新的站点,然后将原先WSS2.0的站点改变到另外一个端口或者另外一个主机头。所以升级完毕之后,原先WSS2.0的站点仍然可以访问。当你删除升级后的WSS3.0的站点的时候,原先的WSS2.0的站点也会自动的改回去。这一点非常重要,因为如果升级后站点的问题太多,你还有退路恢复。

            WSS3.0会首先检查数据库,然后给出一个信息列表。并且给出升级后的数据库的名字。如果一切没有问题,就点击“升级网站”按钮,点完按钮后需要耐心等待一段时间,升级的过程根据数据库的大小和网站的个数不同而花费的时间不同。

            升级完之后,就会显示升级成功的界面,然后你可以访问新升级的站点,如果没有意外的话,就会正常访问到升级后的站点。 

           当升级完所有的站点后,选择“完成升级”,点击”完成升级“后,就会断开和WSS2.0服务器场的连接,这时你在服务器上就无法访问WSS2.0了,整个升级过程完毕。

            下面是对WSS2.0升级到WSS3.0的几点建议:
                    1:要做好备份,备份是最后的底线,因为真实环境错综复杂,并不能保证升级一定万无一失。
                    2:先在一台测试机或者虚拟机上做升级试验,升级成功后再在真实环境中升级。
                    3:升级后经过原先经过Frontpage定制化的页面在显示上可能会有小问题,只要用SharePoint Designer重新修改一下即可,这个不是个大问题。
                    4:如果你WSS2.0使用的是SQL Server2000,那么在升级WSS3.0的时候,你可以让升级后的站点继续使用SQL Server2000,也可以考虑升级后的站点采用SQL Server2005。如果你使用SQL Server2000的话,请打上SQL Server2000 SP4和后续补丁。
                    5:建议在装好WSS3.0后,首先不要基于升级,而是先建立一个Web Application,看看WSS3.0是否正常工作,如果WSS3.0在装好之后就不能正常工作,那么就不要进行升级了。我在真实环境下第一次升级失败,后来才发现不是升级的问题,而是WSS3.0装上后本身就有问题,从而导致浪费了大量时间排错。
                    6:谨慎+小心+胆大=成功。

             欢迎大家访问海洋工作室(http://www.oceanstudio.net ),我会在近期将站点改成Form认证并且提供会员注册。也祝愿大家的网站升级成功。

        欢迎访问海洋工作室( http://sps.oceanstudio.net

    2:42 | 评论


    (Items 1 to 5)Next
     

     搜索

     

     存档

    按存档时间:
    当月
    上个月
    两个月以前
     

     链接

    使用上面的“内容管理”添加新的链接。
     

     最新评论

    讨论正文筛选
    走走
    拜读过楼主的WSS2.0升级心得,并按此方法尝试升级,不过总是遇到问题,自动升级不用说了试了几次都失败了,选择逐步升级方法,但是在但是在运行prescan.exe 后的报告里总是有个错误:
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Scan finished with failure.
    请问“无效的 URI: 无法确定 URI 的格式。” 这个错误如何解决呢?

    在不排除错误的情况下配置WSS3.0向导后升级就失败了,已经试验N次,请高手指点一下,谢谢!
    走走
    拜读过楼主的WSS2.0升级心得,并按此方法尝试升级,不过总是遇到问题,自动升级不用说了试了几次都失败了,选择逐步升级方法,但是在但是在运行prescan.exe 后的报告里总是有个错误:
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Scan finished with failure.
    请问“无效的 URI: 无法确定 URI 的格式。” 这个错误如何解决呢?

    在不排除错误的情况下配置WSS3.0向导后升级就失败了,已经试验N次,请高手指点一下,谢谢!
    走走
    拜读过楼主的WSS2.0升级心得,并按此方法尝试升级,不过总是遇到问题,自动升级不用说了试了几次都失败了,选择逐步升级方法,但是在但是在运行prescan.exe 后的报告里总是有个错误:
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Scan finished with failure.
     
    请问“无效的 URI: 无法确定 URI 的格式。” 这个错误如何解决呢?

     

    在不排除错误的情况下配置WSS3.0向导后升级就失败了,已经试验N次,请高手指点一下,谢谢!


    走走
    拜读过楼主的WSS2.0升级心得,并按此方法尝试升级,不过总是遇到问题,自动升级不用说了试了几次都失败了,选择逐步升级方法,但是在但是在运行prescan.exe 后的报告里总是有个错误:
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Scan finished with failure.
     
    请问“无效的 URI: 无法确定 URI 的格式。” 这个错误如何解决呢?

     

    在不排除错误的情况下配置WSS3.0向导后升级就失败了,已经试验N次,请高手指点一下,谢谢!


    走走
    拜读过楼主的WSS2.0升级心得,并按此方法尝试升级,不过总是遇到问题,自动升级不用说了试了几次都失败了,选择逐步升级方法,但是在但是在运行prescan.exe 后的报告里总是有个错误:
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Error: Cannot get SPSite from URL:\all
    11/13/2008 14:56:06 System.UriFormatException: 无效的 URI: 无法确定 URI 的格式。
       at System.Uri.Parse()
       at System.Uri..ctor(String uriString, Boolean dontEscape)
       at System.Uri..ctor(String uriString)
       at Microsoft.SharePoint.SPSite.a(String A_0, SPVirtualServer A_1, a A_2, Int32 A_3)
       at Microsoft.SharePoint.SPSite..ctor(String strUrl)
       at Microsoft.SharePoint.PreupgradeReport.Scan.GetSPSite(String url)
    11/13/2008 14:56:06 Scan finished with failure.
     
    请问“无效的 URI: 无法确定 URI 的格式。” 这个错误如何解决呢?

     

    在不排除错误的情况下配置WSS3.0向导后升级就失败了,已经试验N次,请高手指点一下,谢谢!


    gowhere
    图片不能用了,能重新刷一次吗
    谢谢了,Ocean大哥
    gowhere
    图片不能用了,看不到,能重新刷一次图片吗,ocean大哥,谢谢了。
    gowhere
    图片不能用了,看不到,能重新刷一次图片吗,ocean大哥,谢谢了。
    alcome
    MOSS2007怎样设置目标访问群体为当前的登陆用户
     
    此目的是为了过滤显示用户自己创建的列表、任务、文档等
    谢谢!
     
     
    littleman
    用domain administrator来做application pool account?
    1 - 10 下一步
     添加新项目