SharePoint 会议参与者的机会: 设计时会话

[原文发表地址]  Opportunity for SharePoint Conference attendees: Design Time Sessions

[原文发表时间]   2012-10-05 9:34

如果你注册了在拉斯维加斯举办的SharePoint 会议 2012,你将有机会与 Microsoft 产品专家进行专门、免费的几小时的解决方案设计咨询。

这些设计时会话旨在帮助 IT 专业人员和开发人员构思和计划基于 SharePoint 2013 产品的解决方案。

如果你被选中的话,你将遇到一个或多个专家 (Microsoft 产品团队成员、 顾问、 或经核证的主题专家)来讨论你的解决方案目标,获得对当前的挑战的建议和有关如何使用 SharePoint 2013 产品增强你的解决方案的构思。SharePoint 文档团队成员 (在TechNet、 MSDN,和 Office.com上发布内容) 将促进此会话。

你可在这篇帖子中查看全部细节.

今年提供了开发人员尤其可能感兴趣 的SharePoint 应用程序跟踪 (只是其中的一个):

SharePoint 应用程序(开发人员和 IT 专业人员)

SharePoint 的新云应用程序模型允许组织来快速添加功能到 SharePoint 网站。来和我们谈论一下你计划如何在你的组织环境中开发、 提供、 管理和治理 SharePoint 应用程序吧。

SharePoint 2010中的Web Parts开发选项

[原文发表地址] Web Part Development Options in SharePoint 2010

[原文发表时间] 2011-10-17 07:00

这个图表展示了你在Visual Studio中开发Web Parts可用的项目模板和项目项模板。虽然这些模板达成的效果是一样的(运行SharePoint的很棒的工具),但是开发的过程中可以用代码工作,也可以使用设计器来构建UI,体验是完全不同的。了解更多的详情,请见下列MSDN话题。

clip_image001

使用SharePoint 2010主题(Anweshi Deverasetty)

[原文发表地址] Working with SharePoint 2010 Themes (Anweshi Deverasetty)

[原文发表时间] 2011-02-03 07:00

嗨,大家好,我是Anweshi Deverasetty。在过去的4年半中,我一直担任微软服务全球交付的副顾问。我从事软件行业已有9年,尤其是在SharePoint部分研究。目前,我在做一个项目,要将SharePoint 2007移至2010,实现Pivot视图,BCS,快速搜索等。这篇博客就是我致力开发和部署主题的产物。

希望你们阅读愉快!

介绍

我们的应用涉及SharePoint 2007到2010环境Web应用上的站点集合迁移。在用户角度的基本要求上,介于我们想在站点集合上执行可视化升级,我们用stsadm 中的PreserveOldUserExperience执行了迁移。这会做数据迁移,不过保留SharePoint 2007的外观和感觉。之后,可视化升级会用来升级至SharePoint 2010的外观和感觉。你可以点击这里在MSDN上了解更多PreserveOldUserExperience。

迁移主要涉及3个步骤——数据迁移,可视化升级和使我们的自定义组件与新版本兼容。做完数据迁移之后,执行可视化升级就很简单了,只是从站点设置→站点集合管理执行可视化升级而已,如下图所示(点击查看大图):

clip_image001

1:站点设置中的可视化升级

不过仅仅执行可视化升级并没有多大作用。在你落实可视化升级之前需要考虑很多,做很多准备。第一件事就是在主页和主题上的工作。设计主题前,你要决定你是否希望跟着主题走,或者想要CSS风格。从始至终保持一种风格而不是而不是两种都使用 是很重要的,主题有时可能会覆盖CSS, 反之亦然。接下来会告诉你如何创建和部署一个主题。

关于主题

主题在2010中彻底被改变了。全新的2010主题使用的是完全不同的设计。SharePoint 2007主题使用CSS和图像,而新的2010主题则使用.thmx格式。这就意味着主题可以用PowerPoint或其它任何在本篇后面要讨论的工具简单地创建。你会注意到旧版SharePoint 2007主题在SharePoint 2010中不再使用。当你没有执行可视化升级执行迁移时,旧主题可以支持2007的外观和感觉。

这有许多可用的预定义主题,你可以从站点设置→外观和感觉→站点主题中看到。注意在SharePoint服务器中,你可以在浏览器内自定义主题。在SharePoint Foundation中,这个功能还不支持。以下是SharePoint服务器中站点主题的快速浏览(点击查看大图):

clip_image002

2 :在站点设置中设置主题

创建自定义主题

SharePoint 2007创建主题要花些功夫,因为我们要处理CSS和图像。不过由于2010中主题设计大大改善,所以变得简单多了。下面就是一些可用的工具。提供了多种方法来创建主题。

自定义主题功能

在外观和感觉部分设置站点设置主题是SharePoint服务器中默认的功能,能使你自定义主题。在图2中,你可以看到自定义主题选项,让你自定义选中的主题。无论何时你选择一个预定义主题并自定义它,它就会创建一个新的主题叫做自定义,然后所有的变化都会应用到这个自定义主题中。所以每次你对一个预定义主题做了修改,自定义主题就会被改写。现在,如果你想保存这个主题,并在本地下载,你要按照以下步骤来操作:

1. 查看HTML源代码页面,查找/_catalogs/theme/Themed/uniqueHexId/corev4-uniqueNumber.css

2. 在浏览器中,导航至http://yourServer/_catalogs/theme/Themed/uniqueHexId/theme.thmx并下载文件

3. 重命名文件MyCustomTheme.thmx

主题生成器

你还可以用主题生成器来创建主题,可以在http://connect.microsoft.com/themebuilder获取。你可以选择现有的主题,或者用这个工具创建新的主题。以下是主题生成器的截屏:

clip_image003

3:主题生成器UI

PowerPoint

还可以用PowerPoint来创建主题。在颜色下的设计标签上,选择创建新主题颜色。对它进行自定义,并以thmx格式文件保存。下面是创建新主题颜色对话框的截屏:

clip_image004

4PowerPoint主题UI

部署主题

通过代码和UI有很多种方法部署主题。以下是部署主题的不同方法。

主题Gallery部署

你可以把在PowerPoint或者主题生成器中创建的thmx文件上传到主题Gallery。将主题部署到主题Gallery很不错,尤其是你为单站点集合的话。如果你希望它应用到多个站点集合,那就看下一个方法。你可以通过站点操作→站点设置→主题来访问主题画廊。你一旦上传了,就可以去设置主题界面,如上图2所示,然后设置主题。你可以看到下图所示的主题画廊:

clip_image005

5:主题Gallery

特征部署

发布任何构件作为一个特征,总是最好的实践。这适用于多站点集合。以下是功能和元素XML文件的一个例子。

Feature.xml
<?xml version="1.0" encoding="utf-8" ?>
<Feature  Id="28E39FC9-BFE9-4FAE-9E71-C5BFEB818D2E"
          Title="My Custom Theme"
          Description="My Custom Theme"
          Version="1.0.0.0"
          Scope="Site"
          Hidden="FALSE"
          DefaultResourceFile="core"
          xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="Elements.xml"/>
  </ElementManifests>
</Feature>
 
Elements.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Name="MyCustomTheme" Url="_catalogs/theme" Path="MyCustomTheme" RootWebOnly="true">
    <File Url="MyCustom.thmx" Type="GhostableInLibrary" Path="MyCustom.thmx">
    </File>
  </Module>
</Elements>
 

有关部署和安装功能的详细信息,请见安装或卸载功能。一旦功能被安装启用,就会如图5所示,在主题Gallery中显示。

对象模型部署

你可以使用Microsoft.SharePoint.Utilities命名空间中的ThmxTheme类来程序化部署主题。ApplyTo方法将主题应用至站点集合。以下为代码片段:

C# 代码

using (SPWeb web = site.OpenWeb())
{
    using (ThmxTheme theme = ThmxTheme.Open(web.Site, "./_catalogs/theme/MyCustomTheme.thmx”))
    {
       theme.ApplyTo(web, false);
    }

}

生日快乐,SharePoint!

[原文发表地址]Happy Birthday SharePoint!

[原文发表时间]April 5, 2011 ,9:50AM

本周是SharePoint Portal和团队服务首次发行的10周年纪念。当我在衣橱里翻箱倒柜找第一件SharePoint T恤穿去上班时,我突然意识到是时候该回顾SharePoint的历程,展望即将开启的新篇章了。届时,作为即将到来的Office 365 版本的一部分,SharePoint在线将会帮助更多个人和组织机构。

产品能够赢得全球如此多的顾客和合作伙伴的青睐,我和整个团队都感到非常幸运-实际上,在过去的五年里,每天以20,000 名 SharePoint 新用户 的数量在增加 。然而,工作中最有趣的地方是能听到许多令人惊叹的故事,这些故事告诉我们SharePoint是怎样帮助各种规模和类别的机构提高生产效益。当我们刚开始组建团队时,有些人认为我们不是疯了,就是太鲁莽。但我们看到了SharePoint会帮助我们的客户打破人与科技之间的界限的商机。通过跨越个人,团队,局域网和互联网结构,我们能结合传统合作,文件管理,搜索及门户功能和向用户传递超越网站和Microsoft Office的经验-这一概念挑战了这个行业里界定可能与不可能的许多假设。现今,SharePoint是行业里领先的合作平台,这个平台为成千上万的机构所用,并在一个几十亿美元打造的生态系统中,受许多合作伙伴的创新性解决方案支持。当我们继续提供最简便的团队合作解决方案时,我们已经添加了深层次的功能,从强大的快速搜索到高级Excel和PowerPivot商务智能再到业务集成,包括Mcirosoft Dynamics和通过SAP via Duet。一件有趣的事是,当我上次查看的时候,在Amazon上有超过1,000本 SharePoint 书籍。

一直推动我们前进的动力是SharePoint社区的积极反馈。在SharePoint大会上,我们发布了SharePoint 2010并被你们的反馈所震惊。感谢那些参加过我们的会议以及将要参加今年秋季会议的人们。在反馈中,我们最常听到的话题是SharePoint成功的原因是我们使许多操作变得比以前简单,并且你们希望SharePoint团队能继续将它独有的简约与灵活性带到下一阶段。尽管在过去两年中,我们提供了SharePoint 在线云服务,但我们将跨出一大步,把简化使用最简单和最强大的合作科技作为Office 365的一个目标。我们拥有辛勤工作的团队致力于对它的研究,同时还有将比以前的SharePoint版本更能给大家带来惊喜并能照亮用户的即将上市的版本。希望见证SharePoint为您带来的服务并能倾听您的想法。再次感谢我们的客户、合作伙伴和职员,感谢他们过去10年和未来对SharePoint的支持。未来会更美好!

Jeff

从其他SharePoint工作流程序化调用SharePoint工作流实例

[原文发表地址]Calling SharePoint workflow instances programmatically from other SharePoint workflows (Justin Joyce)

[原文发表时间]2011-08-23 07:00

概述:

我们的客户列出了一系列需要工作流的项。其中的一些由于特定域值和条件会比其他的流更长。一些其他的特定类型项只要几个步骤,然后就会退出流再不回来。

介于这个要求,我们决定使用列表上的两个工作流。主要工作流负责项的创建,执行初始化新列表项所需的常规行为,包括设置唯一属性项ID代码,收集项上初始准许。第二工作流由第一工作流调用,即当特定域值存在,而且项是特定内容类型。

这就产生了一些有趣的问题,比如我们要怎么来完成这个。我们考虑的主要问题在于找到正确的工作流来启动项。我们不能确保实例名称总是我们设置的那个,因为客户会进来可以根据他们的喜好进行变更。由于现在已经有两个工作流模板附在列表上了,我们就不能使用首页属性。

实行:

那么是什么用独特有用的方式在认证工作流模板呢?每一个工作流模板都有一个基本模板ID号,以GUID的形式存在, 给了它一个独特的标识。附加在特定列表的工作流模板通过.BaseID属性保留这个基本模板ID号。啊哈!所以现在我们可以识别目标了。那么最简单的找到适合BaseID属性的GUID方法是什么呢?在我的例子中,介于我开发了两个工作流,所以我可以访问所有代码,进入项目的目标工作流,打开Elements.XML文件(如果你没有源代码,你也可以从工作流的Elements.xml文件中获取这个值,通过以下路径就行了:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\FeatureName\WorkflowName\Elements.xml),下面你会看到工作流节点上的Id属性,就是你的基本模板Id。

clip_image002

现在我们知道我们要找什么了,但是我们要怎么找呢?显然是通过最好的LINQ.

我们正在运行的父列表有一个属性叫做WorkflowAssociations,你可能已经猜到这是可以用LINQ查询到的SPWorkflowAssociation对象的一个集合。

http://msdn.microsoft.com/EN-US/library/ms462802

现在还有一个要注意的地方,可能会出现目标工作流需要更新或者在某些点改变,而同时允许现有工作流实例存在,忽略它们其实已经被最新最好的取代的事实。这样你就要进入设置列表的工作流,将旧的工作流设置为“没有新实例”,然后附上最新的改良版。这就留下了一个潜在问题,我们必须在LINQ询问中要对其解释。由于这些工作流实例可能有相同的基本模板Id,它们可能都满足以下询问标准:

   1: Guid svpwfid = new Guid("4e126fc9-6b12-1212-8c21-21120f264bad");

   2: var wfa = (from SPWorkflowAssociation spwfa in workflowProperties.Item.ParentList.WorkflowAssociations

   3:            where spwfa.BaseId == svpwfid

   4:            select spwfa).FirstOrDefault();

现在看看SPWorkflowAssociation类的成员,像NoNewInstances这样的属性名称是不会跳出什么东西的。

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowassociation_members.aspx

不过有Enabled属性。当你设置附到列表的工作流为没有新实例时,Enabled属性就会是False。因此我们最小化调整LINQ查询,我们可以确认只有调回的结果才是工作流相关模板,即符合我们的基本模板Id,同时允许在特定列表上启动新实例。

   1: Guid svpwfid = new Guid("4e126fc9-6b12-1212-8c21-21120f264bad");

   2: var wfa = (from SPWorkflowAssociation spwfa in workflowProperties.Item.ParentList.WorkflowAssociations

   3:            where spwfa.BaseId == svpwfid && spwfa.Enabled == true

   4:            select spwfa).FirstOrDefault();

既然我们有了查询来获取适合的工作流相关模板,我们就能实例化SPWorkflowManager对象了。并传给工作流相关,相关数据,我们的列表项和bool flag以通过StartWorkflow()函数自动启动属性。

整体实行如下:

   1: Guid svpwfid = new Guid("4e126fc9-6b12-1212-8c21-21120f264bad");

   2: var wfa = (from SPWorkflowAssociation spwfa in workflowProperties.Item.ParentList.WorkflowAssociations

   3:            where spwfa.BaseId == svpwfid && spwfa.Enabled == true

   4:            select spwfa).FirstOrDefault();

   5:  

   6: if (wfa != null)

   7: {

   8:     SPWorkflowManager wfMan = workflowProperties.Item.ParentList.ParentWeb.Site.WorkflowManager;

   9:     wfMan.StartWorkflow(workflowProperties.Item, wfa, wfa.AssociationData, true);

  10: }

  11: else

  12: {

  13:     // could not find workflow template.

  14: }

总结:

这就是你如何从一个工作流找到并启动另一个工作流了。这个代码可以做适当的小小的变化,适应各种其他类型的与SharePoint相关的应用。只是需要做些工作来获取列表,列表项和页面,因为你无法进入工作流上下文。

Justin Joyce