1、代码调试确定进程 cd c:windowssystem32inetsrv appcmd list wp pause 注:保存成批处理文件,查看进程.bat,用的时候双击即可
2、类似列表新建打开方式的弹出脚本 <script type="text/javascript"> function OpenFrameDialog() { var options =SP.UI.$create_DialogOptions(); options.url="http://www.baidu.com"; options.height=160; options.dialogReturnValueCallback=Function.createDelegate(null,CloseDialogCallback); SP.UI.ModalDialog.showModalDialog(options); } function CloseDialogCallback(result,target) { if(result===SP.UI.DialogResult.OK) { javascript:setTimeout('javascript:return true;',8000); messageId=SP.UI.Notify.addNotification("<img src='_layouts/images/loading.gif'/>Creating list<b>"+target+"</b>..."); } if(result ===SP.UI.DialogResult.cancel) { SP.UI.Notify.addNotification("Operation was cancelled...",false,"",null) } } </script> <a href="Javascript:OpenFrameDialog();">Open dialog</a> 注:在Moss页面上运行即可
3、网站的备份还原命令 PowerShell的命令: 备份:backup-SPSite http://localhost:10086 -Path C:100861.bak 还原:Restore-SPSite http://localhost:10087 -Path C:10086.bak -Force -DatabaseServer sharepoint2010 -DatabaseName
wss_content_10087Test Stsadm的命令: 备份:C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14BIN>stsadm -o backup -url http://localhost -
filename c:/80.bak 还原:C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14BIN>stsadm -o restore -url http://localhost -
filename c:/80.bak -overwrite 管理中心->备份和还原 注:管理中心的备份功能,可以通过PowerShell和Stsadm的命令进行还原,而管理中心的还原功能,需要打到sp1补丁。
4、SharePoint 2010的对象模型编程 建议使用.Net 3.5的引用,如果使用.Net 4.0,编译后会无法使用Microsoft.SharePoint的类库,Perfessional 2010 Development这本书中记
录是SharePoint不支持.Net 4.0。
5、浏览器自动兼容到IE7 <meta http-equiv="X-UA-Compatible" content="IE=7" />
6、代码修改2010站点风格为2007 SPSite site = new SPSite(站点集路径); SPWeb web = site.OpenWeb(要设置的站点路径); web.UIVersion = 3; //改为2007风格 web.Update();
7、显示出来错误,不显示友好界面(2007里修改前两项,2010修改三项) 修改web.config,找到如下三个节点,并修改成如下值: <SafeMode CallStack="true" /> <customErrors mode="Off" /> <compilation debug="true" /> 这样,详细的错误信息就会显示出来
8、最大权限才能看到"网站操作" <SharePoint:SPSecurityTrimmedControl AuthenticationRestrictions="AuthenticatedUsersOnly" Permissions="FullMask"
runat="server" ID="yincangwangzhancaozuo"> <span class="siteActionMenu"> <PublishingSiteAction:SiteActionMenu runat="server"/> </span> </SharePoint:SPSecurityTrimmedControl>
9、修改上传附件大小设置 stsadm -o setproperty -propertyname max-template-document-size -propertyvalue 524288000(500M这是最大了。)
10、列表导入和导出 stsadm -o exportlist -siteurl http://site1/ -listname ABCList -filename d:abclist.cmp (导出列表到一个文件) stsadm -o importlist -siteurl http://site2/ -filename d:abclist.cmp 注:把一个文件导入到SharePoint网站里,恢复成一个列表
11、开启部件视图的匿名功能 stsadm -o deactivatefeature -url http://localhost:8084 -filename ViewFormPagesLockDownfeature.xml 注:很多场景下,网站开启匿名了,但是依然需要登录,主要有些视图没有开启匿名,需要这个命令。运行一遍,关掉匿名,再开即可。
12、释放SharePoint补丁的命令 d:mossofficeserver2007sp1-kb936984-x86-fullfile-zh-cn.exe /extract:d:mossUpdates
13、Iframe去掉背景 在嵌入的Iframe中加入allowtransparency="true" scrolling="no"
14、颜色渐变的css滤镜 <div id="popupWin_content" onMouseDown="event.cancelBubble=true;" style="overflow:hidden; text-align:center; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#FFE0E9F8', EndColorStr='#FFFFFFFF');position:absolute; 878px; top:0px; height:500px;"
onmouseout="style.textDecoration='none';">嵌入的iframe</div>
15、字号、磅数、像素对应关系 中文字号VS英文字号(磅)VS像素值的对应关系(96Dpi情况下): 八号=5磅(5pt) ==(5/72)*96=6.67 =6px 七号=5.5磅 ==(5.5/72)*96=7.3 =7px 小六=6.5磅 ==(6.5/72)*96=8.67 =8px 六号=7.5磅 ==(7.5/72)*96=10px 小五=9磅 ==(9/72)*96=12px 五号=10.5磅 ==(10.5/72)*96=14px 小四=12磅 ==(12/72)*96=16px 四号=14磅 ==(14/72)*96=18.67 =18px 小三=15磅 ==(15/72)*96=20px 三号=16磅 ==(16/72)*96=21.3 =21px 小二=18磅 ==(18/72)*96=24px 二号=22磅 ==(22/72)*96=29.3 =29px 小一=24磅 ==(24/72)*96=32px 一号=26磅 ==(26/72)*96=34.67 =34px 小初=36磅 ==(36/72)*96=48px 初号=42磅 ==(42/72)*96=56px
取得列表中的Item的数量:
Int count = SPContext.Current.List.Items.Count;
这句是取得Item的数目,不得不取得列表中的所有的Item的metadata,这样我们程序运行的速度就会相对慢一些,如果列表中的数据量不大,那不会有明显的影响,如果列表中的数据量很大,那在效率上会有很大的影响。
Int count = SPContext.Current.List.ItemCount;//建议使用这个来取得列表中的item数量。
- 显示列表中的item
SPList list = SPContext.Current.List;
For(int i=0;i<50;i++)
{
SPListItem listItem = list.Items[i];
}
这样每次都会请求SPListItemCollection集合的新的对象,而使item集合对象没有被缓存。因此不断的从数据库请求所有的数据项,对性能上造成很大的影响。
建议的方法是:
SPListItemCollection item = SPContext.Current.List.Items;
For(int i=0;i<50;i++)
{
SPListItem item = items[i];
}
- 取得item对象
SPListItem item = SPContext.Current.List.Items[0];
这句主要是从list中先取得对象的所有的Item的Metadata,然后再从这些Item的集合中取得到index是0的Item
建议使用下面语句进行取得Item对象:
SPListItem item = SPContext.Current.List.GetItemById(0);
两句SDK执行的区别就是我们使用SQL语句进行查询的时候,第一没有设置where子句的条件,而第二句则是设置了where子句的条件,在数据量很大的情况下,这样第二句执行的速度会远远大于第一句执行的速度。
- 更新大量的SharePoint 列表数据项
For(int itemIndex=0;itemIndex<100;itemIndex++)
{
SPListItem newItem = items.Add();
newItem.Update();
}
实际上item的Add 或是Update方法是调用了一个存储过程,来完成这个操作的。
如果需要大量的数据更行的使用建议使用SPWeb的ProcessBatchData方法进行更新。具体实例如下:
SPContext.Current.Web.ProcessBatchData(queryString);
- 取得SharePoint的列表对象
SPList list = SPContext.Current.Web.Lists[title];
这句取得列表对象先从站点中取得所有的List的Metadata和title进行比较,找到符合条件的list之后返回。
建议使用下面的方法取得列表对象:
SPList list = SPContext.Current.Web.GetList(listUrl);或
SPList list = SPContext.Current.Web.GetListByUrl(listUrl);
- SharePoint中常用的自定义Feature的Location和GroupId
位置 |
自定义操作组 ID |
组说明 |
默认自定义操作 ID |
DisplayFormToolbar |
N/A |
Location 对应于列表的显示表单工具栏。 |
ExportEventToolbarButton(日历) ExportContactToolbarButton(联系人) |
EditControlBlock |
N/A |
对应于每项编辑控件块 (ECB) 菜单。 |
|
EditFormToolbar |
N/A |
Location 对应于列表的编辑表单工具栏。 |
|
Microsoft.SharePoint.Administration.ApplicationCreated |
链接 |
“已创建应用程序”页。 |
CreateSite HomePage |
Microsoft.SharePoint.Administration.ApplicationManagement |
ApplicationSecurity |
管理中心的“应用程序管理”页面上的“应用程序安全性”部分。 |
ManageAuthenticationProviders |
Microsoft.SharePoint.Administration.ApplicationManagement |
ExternalService |
|
DocConversion |
Microsoft.SharePoint.Administration.ApplicationManagement |
SiteManagement |
|
ListSiteCollections |
Microsoft.SharePoint.Administration.ApplicationManagement |
WebApplicationConfiguration |
|
ListWebApplications |
Microsoft.SharePoint.Administration.ApplicationManagement |
WorkflowManagement |
管理中心的“应用程序管理”页面上的“工作流管理”部分。 |
WorkflowManagement |
Microsoft.SharePoint.Administration.Operations |
BackupRestore |
管理中心的“操作”页面上的“备份和还原”部分。 |
BackupStatus |
Microsoft.SharePoint.Administration.Operations |
DataConfiguration |
管理中心的“操作”页面上的“数据配置”部分。 |
DataRetrieval |
Microsoft.SharePoint.Administration.Operations |
GlobalConfiguration |
|
Solutions |
Microsoft.SharePoint.Administration.Operations |
LoggingAndReporting |
管理中心的“操作”页面上的“日志记录和报告”部分。 |
UsageAnalysis |
Microsoft.SharePoint.Administration.Operations |
Security |
管理中心的“操作”页面上的“安全性配置”部分。 |
AdministrationRoles |
Microsoft.SharePoint.Administration.Operations |
Topology |
管理中心的“操作”页面上的“拓扑结构和服务”部分。 |
EmailConfiguration |
Microsoft.SharePoint.Administration.Operations |
Upgrade |
管理中心的“操作”页面。 |
FinalizeUpgrade |
Microsoft.SharePoint.ContentTypeSettings |
Fields |
|
|
Microsoft.SharePoint.ContentTypeSettings |
General |
|
|
Microsoft.SharePoint.ContentTypeTemplateSettings |
Fields |
|
|
Microsoft.SharePoint.ContentTypeTemplateSettings |
General |
列表的“内容类型”页面上的“设置”部分。 |
RemoveContentType |
Microsoft.SharePoint.Create |
WebPages |
“创建”页面上的“网页”部分。 |
|
Microsoft.SharePoint.GroupsPage |
NewMenu |
网站集的“人员和组”页面上的“新建”菜单。 |
|
Microsoft.SharePoint.GroupsPage |
SettingsMenu |
网站集的“人员和组”页面上的“设置”菜单。 |
|
Microsoft.SharePoint.ListEdit |
Communications |
列表或文档库的“自定义”页面上的“通信”部分。 |
|
Microsoft.SharePoint.ListEdit |
GeneralSettings |
列表的“自定义”页面上的“常规设置”部分。 |
|
Microsoft.SharePoint.ListEdit |
Permissions |
列表或文档库的“自定义”页面上的“权限和管理”部分。 |
|
Microsoft.SharePoint.ListEdit.DocumentLibrary |
GeneralSettings |
文档库的“自定义”页面上的“常规设置”部分。 |
|
Microsoft.SharePoint.PeoplePage |
ActionsMenu |
网站集的“人员和组”页面上的“操作”菜单。 |
|
Microsoft.SharePoint.PeoplePage |
NewMenu |
网站集的“人员和组”页面上的“新建”菜单。 |
|
Microsoft.SharePoint.PeoplePage |
SettingsMenu |
网站集的“人员和组”页面上的“设置”菜单。 |
|
Microsoft.SharePoint.SiteSettings |
Customization |
|
|
Microsoft.SharePoint.SiteSettings |
Galleries |
|
|
Microsoft.SharePoint.SiteSettings |
SiteAdministration |
|
|
Microsoft.SharePoint.SiteSettings |
SiteCollectionAdmin |
|
|
Microsoft.SharePoint.SiteSettings |
UsersAndPermissions |
|
|
Microsoft.SharePoint.StandardMenu |
ActionsMenu |
列表和文档库视图中的“操作”菜单。 |
|
Microsoft.SharePoint.StandardMenu |
ActionsMenuForSurvey |
用于调查的“网站操作”菜单。 |
|
Microsoft.SharePoint.StandardMenu |
NewMenu |
列表和文档库视图中的“新建”菜单。 |
|
Microsoft.SharePoint.StandardMenu |
SettingsMenu |
列表和文档库视图中的“设置”菜单。 |
|
Microsoft.SharePoint.StandardMenu |
SettingsMenuForSurvey |
用于调查的“网站设置”链接。 |
|
Microsoft.SharePoint.StandardMenu |
SiteActions |
“网站操作”菜单。 |
|
Microsoft.SharePoint.StandardMenu |
UploadMenu |
文档库视图中的“上载”菜单。 |
|
Microsoft.SharePoint.User |
ActionsMenu |
网站的“权限”页面上的“操作”菜单。 |
|
Microsoft.SharePoint.User |
NewMenu |
网站的“权限”页面上的“新建”菜单。 |
|
Microsoft.SharePoint.User |
SettingsMenu |
网站的“权限”页面上的“设置”菜单。 |
|
Microsoft.SharePoint.Workflows |
LeftNavBarLinks |
用于管理工作流的页面上的左侧导航区域。 |
|
NewFormToolbar |
N/A |
Location 对应于列表的新建表单工具栏。 |
|
ViewToolbar |
N/A |
Location 对应于列表视图中的工具栏。 |
- 如果遇到字符串拼接,我们通常使用StringBuilder,而不是直接使用字符串直接的链接
字符串直接的链接需要的内存量很大,效率很低。建议方法如下:
StringBuilder msgString = new StringBuidler();
xmlString.Append(“message1”);
xmlString.Append(“message1”);
string message = msgString.ToString();
不建议使用的方法是:
String message = “message1”+”message2”;
特别是在消息字符串很长的情况下。程序运行的效率相当的低。
- SharePoint中有一些对象是非托管的对象,所以需要我们手动进行释放,防止内存泄漏。
例如:SPSite,SPWeb等等其他一些对象。但是需要注意的是我们如果使用全局的SPWeb,就不应该进行释放,例如:SPContext.Current.Web就是一个全局的Web对象,当我们使用这个对象的时候,我们不应该把这个对象进行Dispose。
一般的释放非托管对象的方法有两种:
(1) try ---catch---finally
SPSite site = null;
Try
{
Site = new SPSite(“http://server:80”);
}
Catch(Exception er)
{
//TODO:
}
Finally
{
If(site != null)
{
Site.Dispose();
}
}
(2) using
using(SPSite site = new SPSite(“http://server:80”))
{
//TODO
}
- 字符串的比较操作
在比较的时候我们应该注意是否忽略大小写,这个地方是很容易出现问题的地方。
String name1 = “A”;
String name2 = “a”;
Bool flag = name1.Equals(name2);// flag 是false
Bool flag = name1.Equals(name2, StringComparison.OrdinalIgnoreCase);//flag 是true
- 在SharePoint中我们要设置folder的权限,首先我们要打破原有的继承的权限,但是这里有一个问题需要注意一下:
如果使用folder.Item.BreakRoleInheritance(false)的时候会抛出一个异常,原因是SharePoint API中原有这个问题。我们解决这个问题通常使用folder. Item.BreakRoleInheritance(true);然后我们在删除掉他原有的权限。这样操作之后再给这个folder赋予新的权限即可。
- 保持程度的可读性
(1) 在程序中最好不要多次使用return , 尽量在程序结束或是我们的逻辑完成的时候进行return例如:
If(testValue == 1)
{
Return 1;
}
Else if(testValue == 2)
{
Return 2;
}
…….
建议使用如下方法:
Int returnValue =0;
If(testValue ==1)
{
returnValue = 1;
}
Elseif(testValue ==2)
{
returnValue = 2;
}
……
Return returnValue;
(2) 在程序中尽量不要使用GoTo语句,使用GoTO语句使程序非常的不可读,可能之后编写程序的人才懂程序的意思,其他人根本看不懂程序是完成什么功能的,还有可能时间长了,编写程序的人自己也不懂具体是什么意思了,这样会非常糟糕,不利于以后的扩展和维护。
- 判断字符串是否为空串,应该尽量使用下面方法:
String message = “123”;
Bool flag = string.IsNullOrEmpty(message);
我们在初始化一个空字符串的时候,应该尽量使用如下方法:
String str1 = string.Empty;
尽量不要使用 string str2 = “”;
因为这两种内存分配的方式,是不同的,C#内部处理的机制也是不相同的。
- 注意C#中的拆箱和装箱问题
在编程实践中我们如果使用List<T> lists = new List<T>();,能够解决的问题,最好不要使用ArrayList和Hashtable等集合,因为ArrayList、Hashtable这样的集合会存在拆箱和装箱问题,占用程序很大的性能,如果数量过多会严重影响性能。