(作者:闪电,转载请注明出处)
在通过PowerShell创建网站集时候,遇到需要获取SharePoint的默认数据库服务器的问题,找了老半天,终于找到了方法。
Function GetDefaultDatabaseServer()
{
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$farm = [microsoft.sharepoint.administration.spfarm]::local
$appBuilder = New-Object Microsoft.SharePoint.Administration.SPWebApplicationBuilder($farm)
return $appBuilder.DatabaseServer
} |
(作者:闪电,转载请注明出处)
为了方便用户使用,我们会把SharePoint网站设计成层次结构,并希望用户在主页上看到来自子网站的内容。比如希望把放在父网站的一个列表的内容显示在子网站的主页上面。这种需求看起来稀松平常,但实际上不容易。
为了说明方便,我把列表所在的网站称为源网站,需要显示WebPart的网站称为目标网站。
实现思路很简单:在源网站的页面上插入一个列表WebPart,然后导出该WebPart,在目标网站上,将刚导出的WebPart导入,之后在目标网站的页面上插入导入的WebPart。
如何导出一个WebPart。首先打开页面,进入编辑模式,在WebPart右上角有个小三角,点开是一个菜单,有个命令"导出",页面会弹出保存WebPart文件,先把它保存到本地。

如果没有导出命令怎么办?请看《恢复导出XSLT List View WebPart》
来一段小插曲,为了在其他网站能够使用该WebPart,需要修改下导出来的文件。用记事本打开它。找到<property name="WebId"节点,将源网站的WebID替换节点内容。WebID可以通过下面的PowerShell脚本获得。
if ((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null)
{
Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
$web = Get-SPWeb http://chenweifeng
Write-Output $web.ID
为了能够在插入WebPart的时候能够选到刚才导出的WebPart,需要将刚才导出的WebPart上传到Web部件库中。Web部件库的地址是/catalogs/wp/ 。
现在就可以在同一网站集的任何网站插入刚才的WebPart了!

插入之后,还可以对该WebPart进行编辑。
(作者:闪电,转载请注明出处)
导出WebPart是SharePoint的一个常用功能。可以快速实现在不同网页显示类似内容的WebPart。比如只是筛选条件不同时,可以先设置好一个WebPart,然后将其导出,之后建WebPart时只需简单几步就可以实现。
但是导出WebPart的功能不是每个WebPart默认有的,就连最常用的XSLT List View WebPart也默认禁用了该功能。怎么办?
在网上找到了一个解决办法《Exporting the XSLT List View Web Part in SharePoint 2010》,比较麻烦,下面简单介绍下如何恢复导出功能。
保存下面的文件Books1.webpart,注意下面高亮部分,需要根据WebPart显示的List做相应修改。
<?xml version="1.0" encoding="utf-8" ?>
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
<importErrorMessage>Cannot import this Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="ListUrl" type="string">Lists/Books</property>
<property name="ExportMode" type="exportmode">All</property>
</properties>
</data>
</webPart>
</webParts>
然后在添加WebPart时上传该WebPart,再添加到页面上。之后就可以看到导出功能了!
图 1插入WebPart时上载webpart文件

图 2在已导入的Web部件中选择刚刚上载的webpart

图 3已经可以导出WebPart啦!

其实有个更简单的办法,就是打开SharePoint Designer编辑页面,修改WebPart的ExportControlledProperties 为true。如下表所示。
<WebPartPages:ListViewWebPart runat="server" __MarkupType="xmlmarkup" WebPart="true" __WebPartId="{0213AD71-58FE-4E5F-AA4C-2A1B47B64FA2}" >
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Calendar</Title>
<FrameType>Default</FrameType>
<Description>Use the Calendar list to keep informed of upcoming meetings, deadlines, and other important events.</Description>
<IsIncluded>true</IsIncluded>
<PartOrder>1</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>true</IsVisible>
<DetailLink>/Lists/Calendar</DetailLink>
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>无法导入此 Web 部件。</MissingAssembly>
<PartImageLarge>/_layouts/images/itevent.png</PartImageLarge>
<IsIncludedFilter />
<ExportControlledProperties>true</ExportControlledProperties>
<ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
<ID>g_a853f9dc_a07c_4ce0_815f_8022223ad333</ID>
<WebId xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">00000000-0000-0000-0000-000000000000</WebId>
<ListViewXml xmlns="http://schemas.microsoft.com/WebPart/v2/ListView"><View Name="{0213AD71-58FE-4E5F-AA4C-2A1B47B64FA2}" MobileView="TRUE" Type="CALENDAR" Hidden="TRUE" TabularView="FALSE" RecurrenceRowset="TRUE" DisplayName="" Url="/SitePages/Home.aspx" Level="1" BaseViewID="2" ContentTypeID="0x" MobileUrl="_layouts/mobile/viewdaily.aspx" ImageUrl="/_layouts/images/events.png"><Toolbar Type="Standard"/><ViewHeader/><ViewBody/><ViewFooter/><ViewEmpty/><ParameterBindings><ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)"/><ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)"/></ParameterBindings><ViewFields><FieldRef Name="EventDate"/><FieldRef Name="EndDate"/><FieldRef Name="fRecurrence"/><FieldRef Name="EventType"/><FieldRef Name="Attachments"/><FieldRef Name="WorkspaceLink"/><FieldRef Name="Title"/><FieldRef Name="Location"/><FieldRef Name="Description"/><FieldRef Name="Workspace"/><FieldRef Name="MasterSeriesItemID"/><FieldRef Name="fAllDayEvent"/></ViewFields><ViewData><FieldRef Name="Title" Type="CalendarMonthTitle"/><FieldRef Name="Title" Type="CalendarWeekTitle"/><FieldRef Name="Location" Type="CalendarWeekLocation"/><FieldRef Name="Title" Type="CalendarDayTitle"/><FieldRef Name="Location" Type="CalendarDayLocation"/></ViewData><Query><Where><DateRangesOverlap><FieldRef Name="EventDate"/><FieldRef Name="EndDate"/><FieldRef Name="RecurrenceID"/><Value Type="DateTime"><Month/></Value></DateRangesOverlap></Where></Query></View></ListViewXml>
<ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">{118803C5-8E95-4219-B6DC-74F316814299}</ListName>
<ListId xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">118803c5-8e95-4219-b6dc-74f316814299</ListId>
<ViewFlag xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">8921097</ViewFlag>
<ViewFlags xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">Html Hidden RecurrenceRowset Calendar Mobile</ViewFlags>
<ViewContentTypeId xmlns="http://schemas.microsoft.com/WebPart/v2/ListView">0x</ViewContentTypeId>
</WebPart>
</WebPartPages:ListViewWebPart>
实战部署
FAST Search Server 2010 for SharePoint
(作者:闪电,转载请注明出处)
一、FAST Search Server 2010 for SharePoint简介
FAST是什么?
简单说,FAST就是企业级搜索工具。它让SharePoint的搜索更加强大。比如
- 交付与上下文相关的结果。
- 用您的业务所用的语言进行搜索。
- 调整相关性以提高准确性。
- 自定义搜索平台以满足您的特定索引和搜索需要。
- 配置用户界面以自定义信息工作者的搜索体验。
上面说的都比较虚,其实企业对搜索的需求越来越强,特别是大型企业,各种企业应用,很多的文档,各种业务相关的新闻、技术资料等。企业如何利用好这些信息,成为对企业发展有用的知识,就需要一个合适的搜索工具,为企业提供决策分析,让企业不会淹没在信息的海洋里。
服务器配置要求
官方提供了最低硬件要求:http://technet.microsoft.com/zh-cn/library/ff381239.aspx
最低硬件要求
| 推荐的硬件要求
|
4 GB RAM | 16 GB RAM |
4 个 CPU 内核,2.0 GHz CPU | 8 个 CPU 内核,2.0 GHz CPU |
50 GB 磁盘 | 包含 6 个或更多轴的 RAID 上拥有 1 TB 磁盘空间。 |
其实,建议配置多台搜索服务器,分别用于不同的服务器角色。
二、安装前准备
部署规划
在部署FAST Search Server 2010 for SharePoint之前,需要规划好服务器的逻辑结构和物理结构。以便能够在以后对服务器场进行灵活扩展。刚开始部署时,由于所上的应用比较少,使用的人员也比较有限,可以采用下面比较简单的部署方式。即需要准备三台服务器,分别用于SharePoint、FAST、SQL Server。
最先安装SQL Server 2008 R2 x64,该服务器为SharePoint提供数据存储服务,也为FAST的Admin Service提供数据存储服务。
然后安装SharePoint Enterprise Server 2010,选择服务器场,完全安装方式,安装所有服务到一台服务器上。在配置SharePoint时候,使用上面安装的数据库服务器作为SharePoint的数据库服务器。
安装FAST Search Server 2010 for SharePoint,选择Single安装方式,将所有功能安装在一台FAST服务器上。在配置FAST时将数据库服务器设置为上面的SQL Server 2008 R2服务器。
最后配置SharePoint的FAST Search服务连接,从而完成整个服务器场的配置。
参考下图所示。这种部署方式的好处是,开始时候简单配置,以后可以根据需要扩充服务器资源,对SharePoint、SQL Server 2008 R2、FAST都可以分别扩展。
需要注意的是,FAST和SharePoint不能安装在同一台机器上,并且FAST不建议在虚拟机中安装,因为FAST需要很多的服务器资源,在虚拟机中跑会很累的(看到FAST跑的这么慢,那个焦急呀)。
服务器准备
本文是基于现有SharePoint 2010安装FAST,并考虑我们的开发环境和生产环境,为此准备了两台IBM小型机。一台用于开发,一台用于生产环境。
如上图,是FAST的开发环境,该服务器安装了两颗Inter Xeon X5650 CPU,64GB内存。从任务管理器上可以看到有24颗CPU(2颗×6核×2线程)。物理内存是32GB。(不是64GB内存吗?由于客户安装操作系统时候选错了版本,安装了标准版的Windows 2008 R2,该版本操作系统最大支持32GB内存。白白浪费了一半内存,可惜!不过客户说拿到企业版的License就可以改成企业版了!暂时就这样用着先吧!)
操作系统建议安装Windows Srver 2008 R2 x64,根据需要选择标准版还是企业版的,比如我这个FAST服务器,就需要企业版才能够支持足够的内存数量。如果服务器的各方面参数小于标准版的最高限制,建议还是装标准版的Windows吧,可以省些银子。
在安装FAST之前,开启Windows Update,将Windows升级到最新版本。并将FAST服务器加入到AD域中。注意,FAST也不能安装在域服务器上。还有其他注意事项,请大家看看FAST Search Server 2010 for SharePoint硬件和软件要求。
SharePoint的版本必须是Enterprise以上的版本才支持FAST,因此在继续之前,先确认下SharePoint的版本是否符合要求。
创建一个FAST的域帐户,比如就叫fast,然后将其加入到SQL Server中,并设置其为dbcreater。并将fast加入到FAST服务器的本地管理员组中。
用fast帐户登录windows。
三、安装和配置第一台FAST Server
安装FAST
准备好服务器以后,就可以开始安装FAST了。双击Splash打开安装界面。
点击Install Software Prequisites,安装一些服务器角色和必要的补丁包。安装过程很简单,如下面几幅图所示。需要注意,该过程是需要连接互联网才能够完成的。如果服务器不能连接互联网,就需要使用其他途径安装这些补丁。
在Install Software Prequisites过程中可以需要重启几次服务器才能完成。不过安装还是很顺利的。
接下来安装FAST,这个过程也很简单,只有一个安装路径需要设置,一路都是Next。参考如下几幅图。
安装过程很简单,到此结束!
配置FAST
以管理员身份运行PowerShell,执行Set-ExecutionPolicy RemoteSigned,不然配置过程无法执行。
以管理员身份运行Microsoft FAST Search Server 2010 for SharePoint Configuration Wizard。
在选择部署类型时,选择Single Server (stand-alone),该选项将包含Admin Server和Non-admin Server的功能。
接下来输入用户名和密码,该用户是先前创建好的fast域帐户。
下面Certificate Password非常重要,用于生成服务器间交互的安全证书,要记住这个密码。
下服务器设置,Server Name必须是一个全域名(FQDN),Base port number建议保留默认选项。如果你准备了一个deployment.xml文件,这里可以将它选进来。也可以不准备deployment.xml,此处可选。
数据库连接,输入之前安装的SQL Server 2008 R2的连接方式,数据库名称建议保留FASTSearchAdminDatabase名称。
Click-through根据SharePoint的设置进行选择,一般情况下选择Server Farm,并输入SharePoint Farm Admin的用户名。也可以选择以后再设置Click-through。
最后检查下设置是否正确。
重启服务器之后,FAST配置就已经完成了!
验证
需要验证FAST Search Server 2010 for SharePoint安装是否正确,需要在Microsoft FAST Search Server 2010 for SharePoint Shell中运行nctrl staus,看看FAST的各项服务是否运行正常。
接下来要做的就是在SharePoint中建立FAST服务连接,待续……
四、安装过程出现问题的解决
我这次安装过程不是很顺利,可以说是由于服务器太好了,24核CPU在配置的过程中不受支持,报了个错,在log文件中找到了错误的原因:
appcmd.exe SET config "ResourceStore" /section:requestFiltering /verbs.allowUnlisted:false /commit:apphost - ERROR ( message:Unknown attribute "verbs.allowUnlisted". Replace with -? for help.)
在一些英文的论坛上找到了答案,是由于appcmd.exe的这个方法不支持超过4核对CPU,为此我将CPU调整为单核。运行msconfig,在Boot中,点击高级设置。
将处理器的数量设置为1,然后重启服务器,配置才成功。
配置成功后,再将处理器的数量设置回原来的24核。
一.WebPart和事件处理程序EventHandler,运行是的权限是以当前登录用户的权限为准。
二.SPD中的工作流活动,所有活动,比如更新列表,删除项目,等等都是以当前的用户权限进行。
三.自己开发的工作流代码,都是以系统管理员的权限进行,比如你在进行工作流的Activity的开发时不需要提升程序的运行级别就可以删除列表中的项目。
引用自:http://winsystem.ctocio.com.cn/234/11731734.shtml
InfoPath本身提供了一个函数UserName()用于获取当前用户,但这个函数只能获取到登录名后面一段。假如当前用户是Domain\User1,用函数UserName()获取到的值是User1。在单域环境下使用UserName()函数是没有问题的。但是遇到复杂的域环境时,该函数就无法满足用户的需要了。比如User1同时在Domain0和Domain1中都有用户名称为User1的用户:Domain0\User1和Domain1\User1。InfoPath的函数UserName()是无法区分这两个名称的。
为了解决这个问题,我在网上搜了好长时间,最后终于找到彻底的解决办法。在此分享给各位网友。
有个前提,就是我使用InfoPath是在SharePoint上填写表单的情况,因此获取当前用户的方法是从SharePoint的UserProfileService中获取的。如果不是在SharePoint填写表单的情况,下面所述方法可能不适合您。
第一步:用SharePoint表单库模板新建一个InfoPath表单

第二步:为UserProfileService建立数据连接
在功能区中选择数据连接:

在数据连接对话框中点击添加按钮:

在数据连接向导第一页选择新建连接->接收数据:

在数据连接向导第二页选择SOAP Web服务:

在数据连接向导第三页输入UserProfileService的网址:http://ServerName/_vti_bin/UserProfileService.asmx

在数据连接向导第四页,选中GetUserProfileByName:

在数据连接向导第五页,不用设置,直接点下一步:

在数据连接向导第六页,保持复选框为非选择状态:

在数据连接向导最后一页,保持默认选项,完成向导:

添加完数据连接后,数据连接对话框变成如下,关闭此对话框:

第三步:建立域用于存放当前用户的LoginName
在域面板中:

添加一字符串域CreaterLoginName:

然后再打开域属性:

设置默认值,点默认值后面的按钮fx:

在插入公式中,点击插入域或组。在域下拉框中选择GetUserProfileByName,然后选中myFields\dataFields\tns:GetUserProfilePyNameResponse\GetUserProfileByNameResult\PropertyData\Values\ValueData\Value。如下图所示:

再点击筛选数据:

点击添加按钮:

在第一个下拉框中选择”选择域或组“,在域下拉框中选择GetUserProfileByName,然后选中myFields\dataFields\tns:GetUserProfilePyNameResponse\GetUserProfileByNameResult\PropertyData\Name。如下图所示:

在第二个下拉框中选择”等于“,在第三个下拉框中,选择”键入文本…“,输入”AccountName“:

点击几次确定,关闭对话框,回到”域或组属性对话框“中,去掉”重新计算公式时刷新值“前面的钩:

第四步:使用LoginName
就看您需要怎么样用LoginName了,我这里简单将CreaterLoginName显示在表单中,看看预览效果:

写在最后:
如果需要获取其他用户的Profile,则只要在获取数据之前给GetUserProfileByName中设置AccountName的值,再获取数据,就能够获取到其他用户的Profile:

如果需要获取其他Profile的值,只需要将AccountName改成其他属性值。可用的属性值有:
UserProfile_GUID
AccountName
FirstName
LastName
PreferredName
WorkPhone
Office
Department
Title
Manager
AboutMe
PersonalSpace
PictureURL
UserName
QuickLinks
WebSite
PublicSiteRedirect
SPS-Dotted-line
SPS-Peers
SPS-Responsibility
SPS-Skills
SPS-PastProjects
SPS-Interests
SPS-School
SPS-SipAddress
SPS-Birthday
SPS-MySiteUpgrade
SPS-DontSuggestList
SPS-ProxyAddresses
SPS-HireDate
SPS-LastColleagueAdded
SPS-OWAUrl
SPS-ResourceAccountName
SPS-MasterAccountName
Assistant
WorkEmail
CellPhone
Fax
HomePhone
摘要: 今天重装系统,顺便把Google Earth安装来玩玩。发现我家乡也拍了较清晰的图像,于是找到了自己的老家。截几张图给大家看看。
阅读全文
摘要: 本文讨论软件开发模式。
世界上唯一不变的是变化。
中国实行改革开放几十年来的事实证明,应对变化的最好方法就是改革,改变自己,适应环境。
阅读全文
摘要: 小心委托在C#语言规范中,对委托(delegate)的描述有这么一句话:“委托同时封装了对象实例和方法”,我用一段小程序来说明这句话的含义,以解答各位在使用委托时出现的奇怪现象。首先定义一个delegate,一个不带参数,只返回字符串的简单委托类型: public delegate string ReturnStringFunc(); 下面的类使用了这个委托,请大家留意委托...
阅读全文