公布:SharePoint Diagnostic Studio

[原文发表地址] Announcing the SharePoint Diagnostic Studio

[原文发表时间]

维护SharePoint部署最具挑战的方面之一是了解为什么部属环境中会出现某些事件,通常IT专业人士和开发人员只有在事件发生和分配时才能着手研究,并通过分析性能计数器,事件和诊断日志,或通过对Usage数据库执行Transact-SQL语句去了解在何种情况下发生了什么和为什么会发生这些事件。这些任务一般都是由一系列工具来完成的,例如Excel,日志分析器,SQL Server Management Studio和其他工具。而且,IT专业人员和开发者还要对相关信息进行整理并并浓缩成有意义的格式。这些任务颇具挑战。大型复杂的服务器farm环境还使得所有这些任务变得更加困难。

通常最方便的识别并解决发生在服务器farm环境中的问题的方法是使用SharePoint Health AnalyzerSystems Center Operations Manager

SharePoint Administration Toolkit的下个版本(v2.0)包括新的SharePoint Diagnostics Studio。支持这些流程和解决方案,除了以上提到的这些SharePoint
Diagnostics Studio还提供了第三层可以用来实现的方法。

SharePoint Administration Toolkit的新版本中,我们介绍了一个新的修正过的SharePoint Diagnostics Studio,它完全从之前的诊断工具包中分离出来。作为下一代的SharePoint 诊断工具,SharePoint Diagnostics Studio通过可视化和结构化的方式来呈现服务器的诊断信息,使开发人员和IT专业人员能够在SharePoint 2010环境中快速诊断并处理间歇性性能问题,可靠性和功能性等问题等。

SharePoint Diagnostics Studio对每个请求都提供了前所未有的深度解析,涵括了用最小的权限来远程访问的每台机器。这样的深度使用使IT专业人员或开发人员能够迅速鉴别并隔离问题,而不需要对支持底层环境的物理硬件请求访问权。

SharePoint Diagnostics Studio除了从Usage数据库收集信息,还收集整理了事件和诊断(ULS)日志,并通过图形用户界面,为影响部署的问题提供清晰、单一的视图。SharePoint
Diagnostics Studio提供了各种各样的报告,旨在解决最常见问题的需求,包括容量,性能,可用性,和使用情况等。这些报告可以独立使用或一起使用,来识别并隔离发生在SharePoint环境中问题。

SharePoint Diagnostics Studio提供的报告分为五类:

1.基本情况

2.容量

3.性能

4.可用性

5.使用情况

整合的搜索功能使我们可以快速洞察在生命周期的请求阶段就已经发生的问题。它允许IT专业人员或开发人员对最常见的标准进行搜索,包括日期和时间,相关联Id和源用户。

 

SharePoint Diagnostics Studio支持快照和导出功能,使我们可以提取离线信息。

根据当前上下文自动检索的帮助功能对每种报告的目的和如何使用提供了指导。

现在就请下载SharePoint Administration Toolkit,开始解决你的问题吧。

更多资料

SharePoint Diagnostics Studio文档:http://technet.microsoft.com/en-us/library/hh144782.aspx

通过MSBuild增加应用程序的版本值(Phil Hoff)

[原文发表地址] Incrementing the feature version through MSBuild (Phil Hoff)

[原文发表时间] 29 Apr 2011 6:10 AM

如果你们正在使用TeamBuild MSBuild创建SharePoint 工程,那么大家就可以给SharePoint应用程序的新版本自动地增加版本号了。

可以将下面的MSBuild示例代码添加到一个SharePoint工程文件(.csproj or .vbproj)中来使包中所有应用程序的版本号在封装之前立即自动增值。它在项目服务图表生成和实际清单生成之间插入一个自定义目标。然后目标调用一个自定义,内嵌的MSBuild任务获取每一个已经解决功能的设计器文件,打开它,更新它的版本属性,然后把它写回到磁盘。

 

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\SharePointTools\
        Microsoft.VisualStudio.SharePoint.targets" />
<UsingTask TaskName="IncrementFeatureVersion" 
           TaskFactory="CodeTaskFactory" 
           AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
 <ParameterGroup>
  <Features ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
 </ParameterGroup>
 <Task>
  <Reference Include="Microsoft.VisualStudio.SharePoint" />
  <Reference Include="Microsoft.VisualStudio.SharePoint.Designers.Models.Features" />
  <Using Namespace="System.IO" />
  <Using Namespace="Microsoft.VisualStudio.SharePoint.Features" />
  <Using Namespace="Microsoft.VisualStudio.SharePoint.Designers.Models.Features" />
  <Code Type="Fragment" Language="cs">
   <![CDATA[
   foreach (ITaskItem featureTaskItem in Features)
   {
    string fullPath = featureTaskItem.GetMetadata("FullPath");
       
    // Ensure the file is read-write (as it may be read-only if not checked out of SCC).
    File.SetAttributes(fullPath, File.GetAttributes(fullPath) & ~FileAttributes.ReadOnly);
        
    Log.LogMessage(String.Format("Feature: {0}", fullPath), MessageImportance.High);
 
    // Read the feature from the designer (*.feature) file.
    IFeature feature = FeatureManager.ReadFeature(fullPath);
 
    // If no version has been specified, assume 1.0 (no build or revision).
    Version oldVersion = feature.Version ?? new Version(1, 0);
 
    Log.LogMessage(String.Format("Old Version: {0}", oldVersion), MessageImportance.High);                               
            
    // Increment the build number or start at 1, if old version did not specify one.
    int newBuild = oldVersion.Build != -1 ? oldVersion.Build + 1 : 1;
 
    Version newVersion = null;
            
    if (oldVersion.Revision != -1)
    {
     // Create a new version using the existing revision.
     newVersion = new Version(oldVersion.Major, 
                              oldVersion.Minor, 
                              newBuild, 
                              oldVersion.Revision);
    }
    else
    {
     // Create a new version without a revision (as passing -1 for undefined will throw).
     newVersion = new Version(oldVersion.Major, oldVersion.Minor, newBuild);
    }
            
    feature.Version = newVersion;
 
    Log.LogMessage(String.Format("New Version: {0}", feature.Version), MessageImportance.High);      
 
    // Write the feature back to the designer (*.feature) file.
    FeatureManager.WriteFeature(feature, fullPath);         
   }
   ]]>
  </Code>
 </Task>
</UsingTask>
 
<PropertyGroup>
 <!-- Increment feature versions before packaging (i.e. before PerformEnumeration). -->
 <CreatePackageDependsOn>
  PerformIncrementFeatureVersion;
  $(CreatePackageDependsOn);
 </CreatePackageDependsOn>
</PropertyGroup>
 
<!--
 Increments the Version attribute of each packaged feature's manifest.
    
 Inputs:   @(Feature)
 Outputs:  None
      
 NOTE: The Feature ItemGroup is built by CreateSharePointProjectService, hence the target dependency.      
  -->
<Target Name="PerformIncrementFeatureVersion" DependsOnTargets="CreateSharePointProjectService">
  <Message Importance="High" Text="Incrementing feature versions..." />
  <IncrementFeatureVersion Features="@(Feature)" />

</Target>

 

 

 

 

 

国际保护基金会依靠SharePoint作为其数字营销战略的重要组成部分

[原文发表时间] Mar 16, 2011, 12:32 AM
国际保护基金会(Conservation International)是致力于为人类利益保持地球的健康与富饶的一个非政府组织。通过科技,政策和野外工作,国际保护基金会应用智能解决方案来保护我们赖以生存的资源。
3名专职人员组成的一个小型网络团队负责管理和生成Conservation.org的内容。他们通过生成网络页面和快速响应需求,为来自组织不同部门不同背景的20多名员工提供支持。非技术人员可以使用SharePoint创建他们的内容并提交给网络团队来进行审批,而不用将所有内容直接交手给网络团队。这种分散化授权的方法的一个好处是,员工可以迅速更正错误或作出重要改变,而不会遇到瓶颈。SharePoint为不同国家、不同语种的职员带来的便捷,以及根据他们各自技能差异对集群邮箱服务(CMS)操作的灵活性,让员工们都乐在其中。
非技术人员也能在接受极少量培训和网络团队参与的情况下,通过添加页面或子站点扩展他们分配到的部分。这就使得他们不仅能创造性地开发内容,也能使内容在国家或部门内的网站上实现。
网站的创建是通过门户解决方案,微软的数字营销金牌合作伙伴和门户以及协助的共同努力下实现的。

使用数据服务, 将Outlook预约整合到SharePoint 2010 日历列表中

[原文作者]:Beth Massi

[原文链接]:Integrate Outlook Appointments with SharePoint 2010 Calendar Lists using Data Services

        一天, 我的一个朋友问我有没有可能发送一个在Outlook里创建的预约到SharePoint日历列表中. 这样的话, 我们通过使用Visual Studio 构建一个外接程序, 就变的非常简单的获取这些Outlook的数据. 我们知道, 使用内建的WCF数据服务发送消息到SharePoint是一件很容易的事情. 下面我就与你分享一下更新这些数据通过WCF服务.

创建Outlook外接程序和添加Sharepoint数据服务引用

        我打算使用Visual Studio 2010创建一个Outlook 2010外接程序, 当然你也可以创建一个OutLook 2007 外接程序, 事实上, 你也可以使用Visual Studio 2008 来创建OutLook外接程序和访问数据服务, 你只需要保证你使用的是.Net 3.5或更高的版本.

        文件->新建->项目, 选择Office 2010节点, 再选择OutLook 2010 外接程序. 我把这个事例命名为UpdateSharePointCalendar, 接下来我们要做的第一件事情是添加一个SharePoint 2010 数据服务引用到我们刚才新建的项目, 当然你也可以使用相同的方法添加一些其他的WCF数据服务. 在项目上单击右键, 选择添加服务引用, 如果你已经安装了SharePoint 2010, 你就可以通过向导的方式找到你想要的数据服务, 你可以通过这种方式http://<servername>/_vti_bin/ListData.svc来访问这些数据服务. 在我的本地的机器上已经安装了SharePoint 2010, 所有我使用这个地址: http://localhost/_vti_bin/ListData.svc并且把这个数据服务命名为 SPService.

        一旦我们添加了这个服务引用, 客户端的实体类型将会自动生成, 并且这个程序集引用System.Data.Services.Client 也已经添加了. 所有的SharePoint 的服务, 方法和数据已经可以被客户端所调用. 我们可以打开数据协议展台来浏览这些数据类型. 只要你安装了数据协议展台, 你在数据服务SPService上单击右键然后选择”查看用图表的方式”, 展开实体类型, 然后把CalendarItem 拖到图表中查看他的属性, 你可以看到有很多字段是SharePoint私有的, 当然你也可以看到如Title, StartTime, EndTime 和Description是我们可以外部调用的.

image

添加窗体 Region Ribbon Outlook预约

        现在我们已经添加了一些数据服务引用和一些界面元素, 对于这个例子, 我想显示一个并列的窗体当用户创建一个新的Outlook预约时, 并且所有的事件必须显示在SharePoint的日历中在那天. 我将使用一个简单的只读的Data Grid 在这个例子中, 但是它可以显示所有的东西在这里(尽管在过去我喜欢使用WPF控件), 当然我还需要添加一个按钮到Ribbon以至于用户可以单击它来发送预约信息到SharePoint日历列表.

        我们在项目上单击右键选择添加-> 新建元素然后选择OutLook窗体Region, 我把它命名为AddToSharePoint, 单击添加, 下一步选择”设计一个新的窗体Region”, 下一步选择窗体Region的类型, 在这里, 对于并行的窗体, 我觉得把它命名为” SharePoint Calendar Events”.

        在这个界面的底部,要求我们选择窗体区域的显示模式, 默认是三种模式都被选中, 如果我们添加这个窗体区域到邮件上, 这个区域应该需要显示, 因此, 只读面板, 分离组建和只读模式对于OutLook的预约来说是不需要的, 我们需要的是检测用户有没有创建一个新的预约在运行时. 点击下一步, 然后选择预约消息的类, 这个类将会关联到窗体区域, 最后点击完成按钮.

image

        这个窗体区域仅仅是一个用户控件并且在这个例子中我们仅仅使用data grid来显示数据, 所有我想打开数据资源窗口(数据->显示数据资源)并且把Calendar拖到用户控件中, 这会为我们创建一个CalendarBindingSource并且会自动添加相应的数据绑定, 我们需要做的事情是设置CalendarBindingSource.DataSource的属性在代码中以至于我们的数据在Grid中可以显示. 接下来我们编辑我们想显示的列并且设置data grid 为只读属性.

image

       现在我想添加一个Ribbon, 在项目上右键选择添加->新建项, 然后选择Ribbon并且单击添加按钮. 第一件我们要做的事情是把Ribbon关联到Outlook的预约, 我们要做的就是把Ribbon的属于RibbonType 设置为Microsoft.Outlook.App

image

        通过上面的设置, 这个Ribbon按钮就应该会出现在我们新建的预约的第一个选项卡中, 为了做到这一点, 我们还需要了就OutLook的内部控制标识符, 在这个例子中, 你可以找到它在这个OutlookAppointmentItemControls.xlsx, 这里你也可以看到一个名字为TabAppointment 的主选项卡, 所有在我们Ribbon的设计器中选择选项卡然后在属性中设置ControlID 为TabAppointment.最后我们再从工具箱拖一个按钮到Group1命名为BtnSharePoint并且设置它的ControlSize 属性为Large. 这里我们还可以创建自己的照片, 但是我很懒, 所有我就用OutLook中已经存在的一个非常漂亮的图片作为我的照片. 内建图片的IDs是很容易找到的, 如果你用的是OutLook”自定义的Ribbon”, 你也可以从文件->选项中找到. 你只需要停留在你喜欢的照片上面, 在括号中你就会看到你要的IDs. 然后在”Ribbon”按钮的