2013年12月5日,星期四

在Office 365中的PowerShell脚本中使用CSOM

在我最近“Office 365developer decisions, tips 和 tricks”我说过我们’d做了很多“PowerShell with CSOM” work, 和 this was enabling us to run scripts against SharePoint 线上 in the same way that we are used to (for on-premises SharePoint). 这个 is becoming a popular approach, but since I got questions on it I thought it worth writing about.

刚开始使用Office 365时,我记得我非常担心缺少PowerShell cmdlet–基本上我们所有的命令’习惯使用那里不存在。这里’一个免费的图形来说明这一点:

图片

是的,SP2013中的将近800个PowerShell命令(从SP2010中的530个左右)减少到SharePoint 线上中的仅30个。这30个主要涵盖网站,用户和权限的基本操作–没有托管元数据,用户个人资料,搜索等脚本。它’s true to say that some of these things are now available down 在 site-collection scope (needed, of course, when 你不’t have a true “Central Admin”网站,但仍然“tenant-level”您想要使用脚本而不是通过UI进行手动更改的设置。

所以呢’开发人员/管理员做的不好吗?

答案是像往常一样编写PowerShell,但是将CSOM代码嵌入其中。稍后会有更多示例,但是这里’一个小插图:

#获取网站集范围内的功能集(例如,激活一个)–这里没有显示如何获取$ clientContext。
$ siteFeatures = $ clientContext.Site.Features
$ clientContext.Load($ siteFeatures)
$ clientContext.ExecuteQuery()

所以我们’重新使用.NET CSOM,但我们使用的是PowerShell,而不是C#’调用任何.NET对象的能力(实际上,几乎每个脚本都将使用PowerShell’s 新对象 命令)。我们开始喜欢PowerShell的所有东西都重新摆在桌子上:

  • 可以轻松修改脚本,而无需重新编译(或打开Visual Studio)
  • 我们可以使用PowerGui或PowerShell ISE进行调试
  • 我们可以利用PowerShell擅长的其他方面使用其他PowerShell模块和其他API(包括.NET)等可以轻松地从XML文件读取。

当然, 我们只能在.NET CSOM中存在该方法的地方执行操作 – that’是我们能做的事的界限。

入门

第1步–了解风景

的first thing to understand is that there are actually 3 different approaches for scripting against Office 365/SharePoint 线上, depending on what 您 need to do. It might just be me, but I think that when 您 start it’它们之间容易混淆,或者无法完全理解它们全部存在。我的三种方法’m thinking of are:

  • SharePoint 线上 cmdlets
  • MSOL cmdlet
  • PowerShell + CSOM

这个 帖子着重介绍最后的味道。我还写了一篇简短的随笔文章,内容涉及整体情况,以及其他口味的一些细节/示例,网址为 Using SharePoint 线上 和 MSOL cmdlet in PowerShell with Office 365

第2步– prepare the machine 您 will run scripts against SharePoint 线上

选项1-如果您不会从SP2013框(例如SP2013 VM)运行脚本,请执行以下操作:

您 need to obtain the SharePoint DLLs which comprise the .NET CSOM, 和 copy them to a folder on 您r machine –您的脚本将引用这些DLL。

  1. Go to any SharePoint 2013 服务器, 和 copy any DLL
  2. 该文件以C. \ Program Files \ Common Files \ microsoft shared \ Web服务器扩展\ 15 \ ISAPI文件夹中的Microsoft.SharePoint.Client * .dll开头。
  3. 将它们存储在计算机上的文件夹中C:\ Lib–记录此位置。

CSOM DLL

选项2-如果要从SP2013框(例如SP2013 VM)运行脚本,请执行以下操作:

在这种情况下,无需复制DLL。–您的脚本将在原始SharePoint安装位置(C:\ Program Files \ Common Files \ microsoft shared \ Web服务器扩展\ 15 \ ISAPI)中引用它们。

的top of 您r script –引用DLL和身份验证

在使用API​​之前,每个调用SharePoint CSOM的.ps1文件都需要处理两件事。–加载CSOM类型,并认证/获取ClientContext对象。那么你’在脚本顶部需要此代码:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

在下面的脚本中,我们’ll include this “top of script”在下面的每个脚本中通过点置TopOfScript.ps1来填充内容–您可以采用类似的方法(也许使用不同的名称!),也可以将这些内容粘贴到您创建的每个脚本中。如果输入一组有效的凭据和URL,则运行上面的脚本应会发现您已经准备就绪:

PS CSOM具有上下文

脚本示例

在SPO中激活功能

您可能需要在某个时候执行的操作是使用脚本启用或禁用功能。下面的脚本和后面的脚本一样,都引用了我上面的TopOfScript.ps1脚本:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

PS CSOM激活功能

Enable 侧装 (for app deployment)

沿着非常相似的思路(因为它还涉及激活功能)是启用“side-loading”在网站上。默认情况下,如果您’重新开发SharePoint应用程序时,只能将其从Visual Studio F5部署到通过“开发人员网站”模板创建的网站,但要启用“side-loading”您也可以在(例如)团队网站上进行操作。由于功能不是’在用户界面中可见,您’需要一个这样的脚本:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

PS CSOM启用侧面加载

迭代网

有时,您可能想遍历网站集中的所有网站,或在特定网站的下方浏览:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

PS CSOM迭代网

(请注意,在上图中,您还可以看到SharePoint托管的应用程序网络,因为它们只是子网站(尽管可以通过应用程序域URL而不是实际主机站点进行访问)’的网络应用程序网址)。

迭代Web,然后列出,并更新每个列表上的属性

还是将上述示例扩展为不仅迭代Web,而且迭代每个Web列表-我在每个列表上更新的属性是EnableVersioning属性,但您可以通过相同的方式轻松使用任何其他属性或方法:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

 PS CSOM迭代列表启用版本控制

导入搜索架构XML

在SharePoint 2013和Office 365中,搜索配置的许多方面(例如托管属性和爬网属性,查询规则,结果源和结果类型)可以作为XML文件在环境之间导出和导入。以下示例显示了使用PS + CSOM处理的导入操作: 

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

PS CSOM导入搜索架构

概要

如您所愿,那里’使用PowerShell和CSOM组合可以完成很多工作。可以使用CSOM API进行的所有操作都可以包装到脚本中,并且可以像过去一样建立有用的PowerShell代码段库。 您无法使用CSOM做一些有趣的事情(例如,自动化将沙盒WSP上传/部署到Office 365的过程),但是有解决这些问题的方法,我’在以后的文章中,很可能会涉及到这一点(以及我们的经验)。

在PowerShell + CSOM方面的最终想法是,您可以拥有“hybrid”可以同时处理SharePoint 线上和本地SharePoint的脚本。例如,在我当前的项目中,我们构建的所有内容都必须可部署到SPO和本地,并且脚本使用“DeploymentTarget”参数可以在其中的值“Online” or “OnPremises”。脚本之间存在一些差异(即分支),但是对于许多操作,可以运行相同的命令。

相关帖子- Using SharePoint 线上 和 MSO cmdlets in PowerShell with Office 365

Using SharePoint 线上 和 MSOL / WAAD cmdlet in PowerShell with Office 365

这是与之相关的文章 在Office 365中的PowerShell脚本中使用CSOM. 当我 mention over in that article, broadly there are 3 different flavors to writing PowerShell for Office 365–确切地说,您需要运行哪些命令将决定您使用哪个命令,但是它确实’也可以设想您可能在同一脚本中使用所有3个脚本。当您开始使用Office 365时,我认为’它们之间容易混淆,或者无法完全理解它们全部存在。我什么’我想到这里是:

味道

笔记

例子

安装后,您’ll have:

SharePoint 线上 (SPO) cmdlets 这些是 SharePoint 线上 具体的,可以通过“SPO”在cmdlet的名词部分中。 
  • 获取-SPOSite(在Office 365中列出您的网站集)
  • 新站点(用于创建新的网站集)
 SPO外壳
MS 线上 (MSOL)/WAAD cmdlets 这些是与Office 365租赁有关的命令(但不一定特定于Exchange,Lync或SharePoint),并且可以通过以下方式识别“Msol”在cmdlet的名词部分中。
  • Get-MSolUser(列出您的租户中的用户)
  • Set-MsolUserPassword(更新密码)
 MSO外壳
在PS脚本中使用SP CSOM 的main focus of my other post, 在Office 365中的PowerShell脚本中使用CSOM
  • Activating a Feature in SharePoint 线上
  • Updating webs or lists in SharePoint 线上
无需安装–您可以在常规Windows PowerShell命令提示符下运行这种类型的脚本。

 

有关MSOL / Windows Azure AD cmdlet的注释

您可能想知道为什么MSOL cmdlet显示“Windows Azure Active Directory。”在快捷方式标题中(全名是“适用于Windows PowerShell的Windows Azure Active Directory模块”),尽管其他所有内容都被标记了“MSOnline” or “MSOL”。答案是,最初这些cmdlet被称为“Windows PowerShell cmdlet的Microsoft联机服务模块”,但是从那时起,Microsoft便将Windows Azure Active Directory作为正式服务推出。 Every Office 365tenancy is backed by Windows Azure Active Directory (WAAD) –并且由于MSOL cmdlet始终专注于目录内容(管理用户/组,管理与Active Directory的同步等),因此这些已被WAAD产品所吸收。

入门

如果你’对于将定期使用Office 365的开发人员或管理员,我建议安装‘shells’ for both the SharePoint 线上 和 Office 365PowerShell commands – 您’在某个时候可能会需要它们。

  1. Install PowerShell 3.0 if 你不’还没有。它’Windows Management Framework 3.0中包含的- http://www.microsoft.com/en-us/download/details.aspx?id=34595
  2. 安装SPO cmdlet- http://office.microsoft.com/en-gb/sharepoint-help/redir/XT102919083.aspx?CTT=5&origin=HA102919087
  3. 安装MSOL cmdlet- http://technet.microsoft.com/en-us/library/jj151815.aspx#bkmk_installmodule

安装完成后,’重新准备开始思考“top of script” stuff (e.g. authenticating to Office 365). 您’ll find that it’SPO和MSOL脚本都非常相似,但是必须运行不同的cmdlet才能启动会话:

  • 连接SPO服务
  • Connect-MsolService

脚本示例– SPO scripts

Authenticating to SharePoint 线上 to run SPO cmdlet:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

List all site collections in SharePoint 线上:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

Recreate a site collection in SharePoint 线上:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

脚本示例– MSOL/WAAD scripts

Authenticating to Office 365to run MSOL / WAAD cmdlet:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

获取目录中的所有用户

一个简单的MSOL示例,仅出于完整性考虑:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

进一步阅读

附录– 充分 lists of SPO 和 MSOL / WAAD cmdlet

To help 您 get a sense of the 充分 range of commands in each family (in case 你不’还没有安装),我’m在下面列出它们:

SPO cmdlet

Add-SPOUser                                       
连接SPO服务                                
断开SPOService                             
Get-SPOAppErrors                                  
获取SPOAppInfo                                    
Get-SPODeletedSite                                
Get-SPOExternalUser                               
获取-SPOSite                                       
获取-SPOSiteGroup                                  
获取点                                     
获取点LogEntry                             
获取点LogLastAvailableTimeInUtc            
Get-SPOUser                                       
Get-SPOWebTemplate                                
新站点                                       
新星集团                                  
删除SPODeletedSite                             
删除-SPOExternalUser                            
删除-SPOSite                                    
删除-SPOSiteGroup                               
删除-SPOUser                                    
维修现场                                    
Request-SPOUpgradeEvaluationSite                  
Restore-SPODeletedSite                            
固定位置                                       
固定位置Group                                  
设定点                                     
Set-SPOUser                                       
测试现场                                      
升级-现场          

MSOL / WAAD cmdlet

Add-MsolForeignGroupToRole   
Add-MsolGroupMember          
Add-MsolRoleMember           
确认-MsolDomain           
Confirm-MsolEmailVerifiedDomain   
Connect-MsolService          
Convert-MsolDomainToFederated     
Convert-MsolDomainToStandard      
Convert-MsolFederatedUser    
Get-MsolAccountSku           
获取MsolCompanyInformation   
Get-Msol联系              
获取MsolDomain               
获取MsolDomainFederationSettings  
获取MsolDomainVerificationDns     
Get-MsolFederationProperty   
Get-MsolGroup                
Get-MsolGroupMember          
Get-MsolPartnerContract      
Get-MsolPartnerInformation   
Get-MsolPasswordPolicy       
Get-MsolRole                 
Get-MsolRoleMember           
Get-MsolServicePrincipal     
Get-MsolServicePrincipalCredential   
获取Msol订阅         
Get-MsolUser                 
Get-MsolUserByStrongAuthentication
Get-MsolUserRole             
新MsolDomain               
New-MsolFederatedDomain      
新玛索集团                
New-MsolLicenseOptions       
New-MsolServicePrincipal     
New-MsolServicePrincipalAddresses
New-MsolServicePrincipalCredential
New-MsolUser                 
New-MsolWellKnownGroup       
Redo-MsolProvision联系方式    
重做-MsolProvisionGroup      
Redo-MsolProvisionUser       
Remove-MsolApplicationPassword    
Remove-MsolContact           
删除MsolDomain            
Remove-MsolFederatedDomain   
Remove-MsolForeignGroupFromRole   
删除-MsolGroup             
删除-MsolGroupMember       
Remove-MsolRoleMember        
Remove-MsolServicePrincipal       
Remove-MsolServicePrincipalCredential  
Remove-MsolUser              
Reset-MsolStrongAuthenticationMethodByUpn
Restore-MsolUser             
Set-MsolADFSContext          
Set-MsolCompanyContactInformation
Set-MsolCompanySettings      
Set-MsolDirSyncEnabled       
Set-MsolDomain               
Set-MsolDomainAuthentication      
Set-MsolDomainFederationSettings  
Set-MsolGroup                
Set-MsolPartnerInformation   
Set-MsolPasswordPolicy       
Set-MsolServicePrincipal     
Set-MsolUser                 
Set-MsolUserLicense          
Set-MsolUserPassword         
Set-MsolUserPrincipalName    
Update-MsolFederatedDomain   

2013年11月13日,星期三

我的幻灯片“Office 365 –开发人员的决策,技巧和窍门” talk published

最近,在团队和我在一个大型Office 365项目上完成工作之后,我在英国周六的SharePoint上发表了演讲。该项目涉及相当数量的自定义,并且我们发现,过去用于经典SharePoint项目的许多技术无法简单地应用。我个人觉得’在过去的几个月里学到了很多东西–在我当前的雇主(内容和代码)处,我们在第3或第4位“具有SharePoint自定义项的Office 365项目”,我们很幸运在第一个开始之前也有一些时间来准备技术/脚本等。

我可以’不要分享所有这些工作,但是如果您’重新启动类似的项目,您可能会发现一些有用的信息,这些信息已经涵盖了我们所做出的决定。我还指出了一些有用的资源,这些资源可能会有所帮助。

Office 365–开发人员的决策,技巧和窍门

的presentation is embedded below (along with a link to it on SlideShare if 你不’t see it).

内容:

  • 决断–我们如何处理云中的测试环境(例如,您是否需要单独的Office 365租赁进行测试?)
  • 决断–开发人员是否仍需要功能强大的台式机/笔记本电脑来运行虚拟机?
  • 决断–您应该在沙箱中使用(服务器端)代码吗?
    • 而你应该担心“沙盒已弃用” message?
    • What are the alternatives to 服务器-side 码?
  • 使用魔术“PowerShell + CSOM”组合为Office 365编写PowerShell脚本
  • 处理托管元数据字段
    • 使用CSOM设置分类法(术语集),以确保ID一致
    • 我们的方法-100%声明式置备托管元数据字段
  • 的new way of working with Managed Properties – 搜索 schema XML
    • 在CSOM中使用SearchConfigurationPortability对象
  • Automated deployments to Office 365– using PS/CSOM to:
    • 重新创建网站集
    • 导入分类法术语集和术语
    • 导入搜索架构
    • 将沙箱WSP上载到站点’s Solution Gallery
    • 激活功能,将自定义WebTemplate应用于网站
  • 将以上内容包装在TFS构建中以进行持续集成(每晚构建Office 365的最新软件包)

I’在以后的文章中将扩展其中一些主题。同样我’我希望进一步发展这次演讲并纳入新内容。

查看/下载  link - //www.slideshare.net/chrisobrien/chris-o-brien-office-365-decisions-tips-and-tricks-with-screenshots

查看/下载  link - //www.slideshare.net/chrisobrien/chris-o-brien-office-365-decisions-tips-and-tricks-with-screenshots

2013年10月25日,星期五

Waiting for a 搜索 crawl in Office 365–仔细计划搜索驱动的网站

滴漏在2013年秋季/秋季,如果您’在使用Office 365时,您可能会注意到内容更改(例如新页面和文档)需要一些时间才能出现在搜索结果中。我最近花了一些时间考虑这个问题,因为我和我的团队完成了一个搜索驱动的新闻网站的建设。在此项目上,我们主要针对Office 365开发 –我们也使用本地虚拟机,但是由于O365是目标,因此我们会在开发过程中频繁地在其中部署自定义项。

我们注意到“index latency” –新内容出现在搜索索引中所需的时间–比我们在Office 365上预期的要差。我们在不同的订阅级别(例如SharePoint P2,Office 365 E3等)上运行多个租约,我们在所有这些租户中都遇到了问题。有些日子好,有些日子不好。一段难忘的(读的,紧张的)时间,我们度过了“end of sprint demo”-我们的解决方案是在演示前2天进行配置的,这使我们有很多时间来创建测试内容,以使向业务用户展示的演示顺利进行。在演示之前的整整24小时,我们已经完成了页面,文档,图片和视频的添加,并等待主页“light up”因为在Office 365中对内容进行了爬网。

不幸的是,只有一些内容被及时索引了。该演示本身进行得很好,但是可能只是因为一些叙述可以帮助业务用户想象一下‘full’ picture. 总的来说’很难不感到 24小时是等待内容在SharePoint中建立索引的漫长时间! 如今,企业用户期望值更高,并且大多数本地环境’与我们合作使用增量爬网的频率为15或30分钟。

Office 365中的正常时间是多长时间?

糟糕的表现使我们有些惊讶。我和我的同事认为,我们最初阅读到,Office 365中预期最多延迟15分钟,这可能表明SharePoint 2013’s “Continuous Crawl” is used. 的Office 365Service Descriptions – Search 现在页面提示不是’确实如此,但是无论如何在后端进行管理,我们当然都没有’期待这么长时间的延迟。一些进一步的挖掘将带您到此知识库文章:

Search doesn't return all results in SharePoint 线上 – KB2008449

“Search crawls occur continuously to make sure that content 更改s are available through 搜索结果 as soon as possible. Recently uploaded documents may not immediately be displayed in 搜索结果 because of the time that's required to process them. SharePoint 线上 targets 在15分钟到一个小时之间 between upload 和 availability in 搜索结果 (also 已知的 as index freshness). In cases of heavy environment use, this time can increase to 六个小时.”

好,至少’是正式的东西,即使它 ’不一定是我们想听到的。但是,为什么有时我们有时会看到比6小时更长的延迟?我向Microsoft提出了一个服务请求以进行查找。

的support line

简而言之,我没有’无法从Office 365支持获得100%令人满意的答复。最终,听起来这种事情现在在Office 365中是相当正常的。我问其他客户是否正在报告此问题,答案是“是的,但我们只要求他们再等一天”。嗯,那就好!当然,如果您的网站处理的是对时间敏感的内容(或者您只是在寻找合理的时间范围内要显示在搜索结果中的新内容),’t a great situation.

解决问题

因此,如果您需要考虑其他替代方案:

  • 如果你 are dealing with 搜索-driven functionality, could the same thing be provided with 询问 而不是 搜索 (例如,如果您不需要跨网站集进行汇总)?
  • 如果你 are in a 杂种 situation, could the functionality be delivered by an on-premises environment?
  • 您现在是否需要解决方案,还是可以负担得起等待改进的费用? (我个人希望升级到Office 365将来会改善这种情况。)

For us, in fact all three are options we could use. In our situation the 2nd option could be the simplest if we need an immediate solution - everything we are building for this client can work be deployed to Office 365or on-premises SharePoint. 这个 requires quite a lot of careful engineering (not only in terms of the solution, but also deployment scripts/processes etc.), but results in a nice position to be in for a 杂种 deployment.

总的来说,让’希望Microsoft在Office 365中进行此工作。’如果我们看到改进,将及时通知您-如果任何人在此方面有任何有用的信息,请随时在下面的评论中分享。

2013年10月20日,星期日

在SharePoint 2013英国星期六发表演讲–为Office 365开发

SharePoint周六英国

和往常一样’今年会演讲’的SharePoint周六英国活动–我认为这是第四次,也是我第四次在这里发言。它 ’这是一个伟大的事件,而我’我期待从其他会议中学习。就我而言’我将尽力分享从最近的Office 365和SharePoint 2013项目中获得的知识。

我的会议主要针对开发人员和技术人员,但希望在那里’对于正在使用Office 365的任何人来说,它都是其中的东西。我自己和一些同事最近花费了数周/数月的时间交付了一个云项目,感觉就像每天都是学习日。我的讲话有望传达出一些,而我’它将在以后的会议中发展:

Developer decisions, tips 和 tricks - lessons learnt 从 Office 365projects

作为开发人员或技术主管,您早期的Office 365项目可能会提出一些有趣的问题。您应该避免使用沙箱吗?应如何在云中处理测试环境?网站模板应如何实施?当无法使用内部部署技术时,如何配置托管元数据字段?

本届会议遍历“dev strategy”我们在内容和代码上做出的决定,以及原因。在几个演示过程中,我们’还将讨论应用程序,自动化脚本以及高级技术,例如Office 365的持续集成。

活动详情

今年’s event is on 9th 十一月 2013, 和 is held in Hinckley, near Leicester. 如果你’有兴趣的话,可以在这里注册:

http://lanyrd.com/2013/spsuk/

 

2013年9月18日,星期三

在Office 365中置备托管元数据字段–第2部分:为特定环境/租赁构建WSP软件包

在上一篇文章中,我谈到了如何配置Office 365的托管元数据字段是棘手的(因为开发人员无法使用服务器端代码来“hook-up”术语库的字段,例如我们可以在本地部署的字段)。我谈到了我们处理此问题的方式,在这篇文章中,我’图11显示了我们用来构建特定于Office 365租约的WSP的Visual Studio / MSBuild自定义。这里’文章之间的相互关系:

  1. 在Office 365中置备托管元数据字段–处理多种环境
  2. 在Office 365中置备托管元数据字段–为特定的环境/租赁构建WSP软件包[本文]

使用MSBuild /自定义项目配置按Office 365租期生成程序包

这里’是我想出的–在这个阴暗的镜馆世界里,花了好几个晚上“batching”在MSBuild中,大约有500万废弃的方法和几根新的白发。但最后,它对我们很有用:

现在,我们有了一些可在Visual Studio中选择的自定义项目配置:

Custombuildconfigurations_thumb8 
所以不只是‘Debug’ 和 ‘Release’ we are using:

  • “CandCVM” –内容和代码(雇主名称)虚拟机。用于在针对本地VM(而非云)进行开发时
  • “DevTenancy” – the Office 365tenancy we are using for DEV purposes
  • “TestTenancy” – the Office 365tenancy we are using for TEST purposes

这些都是我们现在需要担心的所有环境,但是当然最终将需要其他环境。

VS项目中还有一个XML文件,用于定义每个环境的托管元数据ID。–由于我们现在只需要担心SspId,’s文件包含的唯一值:

SspIdreplacementsfileinsolution_thum

SspId 替代品 file_thumb[2]

切换项目(或解决方案)配置后,我们只需像往常一样将WSP构建/发布到文件系统:

发布sandboxedsolutionfortesttenan

..和你一样’d期望,我们将获得可以在该环境下工作的WSP:

发布edWSPs_thumb2

发生了什么事,如何发生?

在打包WSP时,将执行一些自定义MSBuild。这是什么:

  • 查找SspId_Replacements.xml文件
  • 读取适合环境的SspId值
  • 在将要进入包的所有XML文件中执行查找/替换,并将SspId值替换为从‘replacements’ file

笔记:

  1. 尽管查找SspId并尝试在整个范围内替换似乎效率低下 *所有* XML文件(确实如此),我们确实需要确保捕获:
    1. 托管元数据字段声明(即在elements.xml文件中)
    2. schema.xml文件中的部分(用于列表定义),其中字段重复

      我确实尝试过将搜索限制为不仅限于.xml扩展名,但在MSBuild中发现了这一困难。我也意识到开发人员可以选择具有一个不命名为elements.xml的Feature元素文件的事实:– the 总体 penalty in packaging for using this stuff (compared to a plain 除错 or 发布 build) seems to be around 1-3 seconds –现在完全可以忍受。
  2. 替换基于XML(使用XPath而不是字符串操作),因此,如果附近有XML注释,则可以’t跳出替换物。

好处:与持续集成/自动构建集成

我想在MSBuild中实现的原因之一是因为我知道在CI流程中使用它会很轻松。在TFS中实施构建时,我们选择要构建的解决方案/项目,然后定义我们也希望在其中使用的任何自定义配置(即,除了开发人员机器之外)。在我们的情况下,我们的CI构建将部署到我们的测试租期:

Continuous Integration - Office 365- custom VS configuration_thumb[2]

We then make sure our build definition is using this Configuration (instead of 除错 or 发布):

Continuous Integration - Office 365- Managed Metadata solution_thumb[2]

Want to use this? 这里’s the MSBuild..

如果您认为这可能对您有用,请按以下详细说明–本质上,您需要编辑.csproj文件,将SspId_Replacements.xml文件添加到您的项目中,最后在Visual Studio中定义自定义配置。序列不 ’没关系,只要在尝试构建之前所有部分都就位。在团队开发中,每个VS项目只需执行一次这些步骤(例如,由首席开发人员执行)。

第1步–将自定义MSBuild添加到您的项目中:

编辑您的.csproj文件(如果您有多个文件,则每个文件–解决方案目前“project-scoped”),将其包括在底部:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

第2步–使用您的配置值添加XML文件:

在项目中的路径下添加XML文件“_Replacements \ SspId_Replacements.xml” (N.B. this is configurable, see the MSBuild above). Add in the XML shown above, substituting the relevant SspId(s) for 您r environment(s). If 你不’我的同事不知道在哪里可以找到适合您的环境的SspId 路易斯在他的帖子中提到了这一点.

第三步–在Visual Studio中定义自定义配置:

在Visual Studio中,为构建WSP所需的每个环境定义一个自定义配置。首先转到配置管理器,然后选择“New..”:

定义自定义configuration_thumb [2]

定义自定义配置2_thumb [2]
..然后创建配置,确保使用与XML文件中指定的名称相同的名称– these two need to match. 您’我通常要复制设置“Release”:

定义自定义配置3_thumb [2]

现在关闭配置管理器–实施完成。

建筑包

要创建WSP,请使用“配置”下拉菜单切换到“TestTenancy”(或您使用的任何标签)构建类型–注意平台保持不变“Any CPU”在这里,您可能需要将其改回。然后,只需在解决方案资源管理器中右键单击该项目,然后单击“Package” as usual –然后,您应该获得其中已发生SspId查找/替换的WSP软件包。现在,您可以测试将此部署到与此构建类型相对应的Office 365租用中。

要求说明

请注意,此处使用的MSBuild与SP2010 / Visual Studio 2010不兼容(但’可以,因为此处不需要整个技术。 XmlPeek / XmlPoke MSBuild活动依赖于.NET 4.0,该活动用于更新XML文件。

希望这对某些人有用。

2013年9月17日,星期二

在Office 365中置备托管元数据字段- Part 1:处理多种环境

托管元数据字段一直对SharePoint开发人员来说有些痛苦,但是如果您在SharePoint 2010中进行了任何类型的网站模板或功能开发,则很可能您需要进行一些研究,阅读一些博客文章并了解该解决方案。我在这’d想谈谈Office 365的应用,并展示一些我为帮助我们当前使用的流程而构建的自定义设置。这篇文章很长,因此我将其分为两篇文章:

  1. 在Office 365中置备托管元数据字段–处理多种环境[本文]
  2. 在Office 365中置备托管元数据字段–为特定环境/租赁构建WSP软件包

因此,回到SharePoint 2010的情况-要做的是一些托管元数据详细信息 更改 SharePoint环境之间–因此,与其他字段不同,不能在dev / test / UAT / production中使用相同的配置XML。具体来说,术语存储库,组和术语集的ID在环境之间都不同。提醒一下,广泛的解决方案是:

  • 使用XML定义“static”领域的细节
  • Use 服务器-side 码 to “finish the job” –即使用API​​询问SharePoint(当前环境中的ID)是什么,然后使用该值更新字段配置

如果没有第二步,则将创建该字段,但该字段将被破坏–它将显示为灰色,并且用户无法使用它(此处显示了SP2010示例):

sp2010管理的元数据字段已禁用

帖子作者 阿里·巴克(Ari Bakker) (其图像我’我在上面使用,谢谢阿里(Ari), 威克多·威伦安德鲁·康奈尔 在讨论解决此问题的步骤时很受欢迎。

It’SharePoint 2013 / Office 365中的相同处理 –但是事实证明我们需要不同的技术。

为什么这种方法没有’t work for Office 365/SharePoint 线上

首先, 在沙盒解决方案中已弃用。全站。 [相关-您听到了吗? Microsoft开始澄清没有代码的沙盒解决方案’毕竟真的过时了 (希望MSDN会很快反映出这一点),但是不建议使用沙盒解决方案中的CODE,并且可以在以后的版本中逐步淘汰它。显然,这是一个非常重要的区别。]

But even if we were happy to use sandboxed 码 - in Office 365/SharePoint 线上, we cannot use the Microsoft.SharePoint.Taxonomy namespace in 服务器-side 码 anyway –最终结果是我们无法“finish the job”以这种方式确保字段正确绑定到术语库。这是个问题!更糟糕的是,尽管CSOM API中可以绑定字段, 在供应过程中执行此操作 (例如,通过模板创建网站)具有挑战性,也许是不可能的。也许您可以提出一些富有想象力的技巧,但是’s probably what it would be. And what happens if this 远程码 (e.g. a Remote Event Receiver) fails?

可能的解决方案

我的一个同事 路易斯·马埃兹,做了一些很棒的研究– I’我会在这里给您一个简短的摘要,但我强烈建议您阅读他的文章- Deploying Managed Metadata Fields 声明性地 in SharePoint 2013 线上 (Office 365). 这里’s a summary:

实际上,如果您愿意接受重大的折衷,则可以不用任何代码来配置托管元数据字段 –您 can 声明性地 specify the key details (such as the Term Store ID (also 已知的 as the SspId), the Group ID, the Term Set ID etc.) into 您r XML field definitions. 威克托在他的帖子中提到了这种可能性。 但是请记住,这些细节在环境之间会发生变化!

换句话说,权衡是 需要针对每种环境重建您的WSP.

这对我们来说很棘手,因为在此项目中,我们选择运行多个Office 365租约,以进行开发/测试/生产(’我会在以后的帖子中谈论)–就像传统的成熟过程一样。所以起初我们说“没有 way! 那’违反我们的所有ALM原则! 完全相同的软件包必须在环境之间移动!”。但随后我们理性地研究了可以看到的替代方案:

  • 选项1 - 一些精心制作“remote 码”解决方案,可能涉及在提供站点之后单独运行的代码。在执行此代码之前,无法将文档上载到站点内具有MM字段的库中(并且类似地,如果此远程调用实际上由于任何原因而失败, 在管理员干预之前,这些库将无法正常运行)。
  • 选项2- 客户端需要手动修复任何托管元数据字段–在我们期望的所有5000个站点中。在每个列表和库中。知道某些列表/库最多具有5个此类字段。是啊….

由于这两种方法都不具有吸引力,因此我们继续研究100%声明式定义托管元数据字段的想法。然后我们意识到了这一点。

..如果你以某种方式做事, 您可以 get to the point where ONLY THE TERM STORE ID (SspId) CHANGES BETWEEN ENVIRONMENTS. 那’有点有趣。这意味着只需一个查找/替换操作即可’s needed – assuming 您’很高兴接受整体的权衡。当然,必须替换SspId仍然不是最佳选择,容易出错,而且效果不佳。但是也许我们也可以– 和 that’这些帖子的真正含义是- 为了显示Visual Studio自定义,我们进行了简化,以简化此过程,并减少了人为错误的发生。 如果你 want to skip ahead to this, see 在Office 365中置备托管元数据字段–第2部分:为特定环境/租赁构建WSP软件包. 

但首先,让’s talk about that “如果你以某种方式做事”事物(这意味着在环境之间唯一的SspId会发生变化)。

的充分 recipe for Managed Metadata fields

如果您在,请退后一秒“development mode”(例如,为SharePoint网站创建模板),那么成功进行配置实际上不仅仅涉及以某种方式配置字段本身。有效 您应该寻求提供术语集和字段。不允许管理员在管理界面中创建新的术语集。 这是因为:

  • 这条路, 可以控制您所有术语集的ID–而不是让SharePoint生成该GUID
  • 因为这是静态的“known”ID,我们可以在其他地方引用

这里’需要发生什么:

  • 术语集通过以下方式设置到术语库中“known” IDs
  • 的“known IDs”然后在字段的XML定义中使用
    • 下面的代码示例是100%声明方式提供的Managed Metadata字段的示例。请注意,在‘Customization’部分(使用组合式声明式+代码方法的字段不具备):
      ** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

如果你 do this, 您r Managed Metadata fields will work just fine:

托管元数据字段-工作

大。它’知道Office 365可以做到这一点当然非常有价值。 所以现在我们有了东西 仅SspId值需要在环境之间进行更改。但是那’仍然是讨厌的查找/替换操作–我们怎么做这个 情况更好?

我将在下一篇文章中描述我们使用的机制- 在Office 365中置备托管元数据字段–第2部分:为特定环境/租赁构建WSP软件包.

2013年8月21日,星期三

在SharePoint应用程序中使用Web部件

I’ve之前曾提到“you don’t get very much”当您开始创建包含一些SharePoint托管组件(例如页面)的应用时。您将获得一个基本的ASPX页面,然后从那里开始’取决于您作为开发人员。在玩应用程序的同时,我’我们发现通过将开箱即用的组件(例如SharePoint命名空间中的Web部件/控件)添加到应用页面来进行试验很有趣。结果非常有趣,并得出了一些发现,这些发现可能是工具箱中的有用技巧。如果没有别的,您可能会发现这很有趣“leftfield”发表关于您所没有的一些问题’t thought to ask.

在我们潜水之前,这里’s在我们整个应用程序系列中的位置:

  1. SharePoint 2013应用–架构,功能和UX注意事项
  2. 入门–在SharePoint应用程序中创建列表,内容类型,字段等(配置)
  3. 在应用程序网络中使用数据以及为什么要这样做
  4. 从SharePoint 2013应用访问最终用户数据(在宿主网站中)
  5. 将SharePoint 2013应用推广到企业-租户范围和PowerShell安装
  6. Azure是新的SharePoint‘_layouts’ directory
  7. “Host web apps” –将文件(例如母版页)设置到主机网站
  8. “Host web apps” –设置字段和内容类型
  9. Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365apps) 
  10. 在SharePoint应用程序中使用Web部件[本文]

在应用程序中部署Web部件

如果你 create a SharePoint-hosted app, 您 might notice that the default page 您 get is an ASPX page 而不是 HTML. Also, it has several declarations 在 the top, allowing SharePoint controls to be used:

应用页面默认标记 

的idea here is that 您 might want 您r app to take advantage of some SharePoint building blocks (web parts/controls) 而不是 recreating that functionality 从 scratch. But since 你不’在应用程序中具有整页编辑模型(它’不是SharePoint内容 贡献者可以编辑的,毕竟),所有Web部件都必须(由开发人员)包含在页面的标记中。我进行了一些测试,以查看哪些Web部件似乎可以正常工作,而本文实际上是关于我的发现的。

我扩展了标记,以在Web部件区域中包括一些常见的Web部件(并添加了我开始需要的所有@Register指令)。我的标记是:

** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **

我(可能)可以在应用程序中使用哪些Web部件?

这里’我的结果摘要:

网页部分

可以用吗

内容查询Web部件 没有
内容搜索Web部件
XsltListView Web部件
核心搜索结果Web部件
Page Viewer Web部件
数据视图Web部件 没有
Result Script web part (for 搜索结果) 没有 编辑:是的

内容查询Web部件:

合格证似乎持平“no”. If 你不’在主机网络上未启用发布功能,您’ll get this:

合格证
这似乎与无法获取ContentQueryMain.xsl有关。我注意到它是401而不是404,这很有趣,但是无论如何,如果激活发布,就会得到:

合格证 2

因此,感觉“内容查询” Web部件可能没有受到任何关注,无法使其在应用程序Web上正常工作。它’值得注意的是,XSL的路径引用了应用程序网络(在我的情况下, //cob-387fbe6473fe0b.spapps.dev/Style%20Library/XSL%20Style%20Sheets/ContentQueryMain.xsl)– although it is “structurally”正确(因为样式库是从根引用的),我认为有效’s not possible to “browse”在应用程序网络域上托管网络内容。我什至尝试提供绝对 主机网站 XSL文件的网址,但是也会因‘page not found’ error.

因此,也许需要对CQWP进行重新设计才能使其在应用程序中运行。

内容搜索Web部件:

该Web部件似乎工作正常,这是个好消息:

内容搜索Web部件

It’值得一提的是,显示模板仍是从宿主网站(母版页库)中提取的,但是似乎没有问题。

XsltListView Web部件:

当我’在之前的文章中提到过’第一次将列表添加到正在开发的应用程序中时会有些混乱-默认情况下,’页面上没有任何内容(例如,指向列表的导航链接),它不会告诉您列表配置是否成功。但是,既然你’您将知道列表URL,然后在浏览器地址栏中键入地址以显示该URL。要显示列表中的项目,您可以’ll最有可能想要使用XsltListView– 您’我们将需要手动将标记添加到您的页面之一。当你这样做的时候,你’将会看到在您的应用程序网络中显示列表中的项目效果很好:

列表视图Web部件

我想知道是否可以使用此Web部件显示列表中的项目 在主机网络中。抛开包括令牌之类的潜在问题,例如 〜现场 在URL中(通过使用硬编码的绝对URL进行测试),我发现它不是:

XsltListViewWebPart-宿主网站 

Page Viewer Web部件:

在应用程序中使用Page Viewer Web部件的想法可能非常有趣。我很想知道是否可以在我的应用程序中显示来自宿主网站的页面,但发现它带有警告(如下)。下图显示了–来自宿主网站的页面。一些要点:

  • 的“允许该页面为iframe”消息只是页面上的一些文本
  • 黄色“customized”消息是因为我在SPD中手动编辑了页面以添加<WebPartPages:AllowFraming ID ="AllowFraming" runat="server" />标签。如果这是由其他更高级别的东西(页面布局/母版页)提供的,则此消息将不存在

页面查看器Web部件

但主要的警告可能是,对于硬编码/绝对网址,它们都可以正常工作,但是诸如 〜现场 似乎不起作用。因此,在现实生活中,如果您需要在此处具有任何相对URL,则可能会遇到困难。仍然,也许有用。

结果脚本Web部件(搜索结果):

[2013年8月22日更新:Scot Hillier与我们取得联系,告诉我可以使用此Web部件。解决方案可以在本节的底部找到。]

[下面是原始文本,以显示您可能遇到的错误:]结果脚本Web部件实际上是现代的“search results”SharePoint 2013中的Web部件。可用于显示给定搜索查询的结果– it is the web part used on the default SP2013 搜索结果 page, 和 very powerful it is too. 好像这个 应该 在SharePoint托管的应用程序中工作,但我无法’t quite get there. I’m hoping I’我忽略了某些东西,实际上是有可能的,因为问题似乎只是在搜索查询中获得了正确的转义引号格式(DataProviderJSON属性)。我尝试了各种形式,但我要么看到以下内容:

结果脚本Web部件

..或这个:

结果脚本Web第2部分

我尝试的引号/转义字符的排列包括:

  • \”
  • ””
  • ..等等

更新–解决方案(感谢苏格兰人!):

  • 的answer is to use XHTML encoding of the quotation marks – i.e. &quot; 

当您这样做时,您’会看到结果脚本Web部件在您的应用程序中确实起作用:

结果脚本Web部件-工作

以便’好消息,这意味着我们可以在应用程序中利用此Web部件! 

这个 seems a shame, because 我可以 imagine lots of apps which might want to display 搜索结果. For these apps, a nice web part cannot be used –代码是必需的,例如我在 使用REST调用SharePoint搜索(例如从JavaScript或应用程序).

核心搜索结果网页部分:

尽管事实证明可以使用“结果脚本” Web部件,但是出于任何原因,’不适合您在那里的情况’始终是“核心搜索结果” Web部件–这是您从SharePoint早期版本中了解并喜欢的搜索结果Web部件。它使用XSL(而不是JavaScript显示模板)进行渲染,并且不会’没有复杂的查询生成器(您不会’则无法在应用程序中使用),但可以在页面上显示搜索结果很好:

核心搜索结果Web部件

结论

某些Web部件可以在应用程序内使用,而某些则不能。在其他类型的控件(例如SharePoint服务器控件)方面,我发现应用程序使用的web.config的SafeControl设置比常规设置更具限制性–几个名称空间和特定控件被标记为不安全,因此许多服务器控件在应用程序页面中将被禁止使用。还是’很有可能可以使用一些–这里将需要更多测试。

通常,通常应该适用于SharePoint应用程序的开发人员– check if there’框中的东西,可以在编写代码之前使用。那里的东西可能会节省您大量的精力。

下次-使用应用程序部件(ClientWebPart)将应用程序元素带入主机网络

2013年7月12日,星期五

Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365apps)

Before SharePoint 2013, we were all used to the idea of custom 码 running on SharePoint 服务器s. However, this 更改s with SP2013 –Microsoft强迫我们(Office 365)或指导我们(本地)运行此类代码 的 SharePoint boxes. And 您可以 understand why – frankly Microsoft have no chance of providing a stable Office 365/SharePoint 线上 platform if it has everyone’在其上运行的自定义代码。因此,SharePoint 2013允许事件接收器代码在 远程 服务器. 这个 post looks 在 deploying Remote Event Receiver components to an Azure Website for a SharePoint site running in Office 365. 由于RER在SharePoint 2013中采用提供商提供的应用程序的形式,因此我在此处编写的所有内容也适用于提供商提供的应用程序。 要对本地场实现相同的操作(对代码和配置步骤进行更改), 除非您已将该环境配置为信任ACS。在我们潜水之前,这里’s在我们整个应用程序系列中的位置:

  1. SharePoint 2013应用–架构,功能和UX注意事项
  2. 入门–在SharePoint应用程序中创建列表,内容类型,字段等(配置)
  3. 在应用程序网络中使用数据以及为什么要这样做
  4. 从SharePoint 2013应用访问最终用户数据(在宿主网站中)
  5. 将SharePoint 2013应用推广到企业-租户范围和PowerShell安装
  6. Azure是新的SharePoint‘_layouts’ directory
  7. “Host web apps” –将文件(例如母版页)设置到主机网站
  8. “Host web apps” –设置字段和内容类型
  9. Deploying SP2013 provider-hosted apps/Remote Event Receivers to Azure网站 (for Office 365apps) [本文]
  10. 在SharePoint应用程序中使用Web部件

为什么将这些内容部署到Azure?

I think a good option for SharePoint 远程码 (e.g. some provider-hosted apps, Remote Event Receivers etc.) is to host this 码 on the “Azure Websites” 关ering (*update 可能 2015 - Azure网站 are now 已知的 as "Azure Web Apps"*)。这很引人注目,因为它’s free, quick 和 easy to spin up, 和 你不’t need to provide any in-house 服务器s (with the resulting high availability, scalability, backup/restore 和 performance work which is required). Another significant factor is that 你不’不需要让您的网关/网络团队参与网站的建设(该网站托管着您的提供商托管的应用程序页面和/或用于远程事件接收器的WCF服务) 发布(当然在SSL上)并且可以从外部访问 -例如通过UAG或任何外围设备。 Azure已经在您的防火墙之外,并且当然可以通过Internet和Azure网站访问/寻址 在默认域(* .azurewebsites.net)上具有自动SSL支持. 如果你 want to use a custom DNS host name instead (e.g. 码.MyCompany.com) then 您可以 do that too, with some extra steps.  In general, using Azure网站 is a great way to sidestep many of the infrastructure roadblocks which can derail 您.

如何将我的应用程序/ RER构建为自动托管的应用程序?

* 2015年初更新-Office 365中不再提供自动托管的应用程序!*

It’这是一个公平的问题,因为Office 365不仅会自动托管应用程序“just work”, but in fact they actually run on Azure网站 underneath. 那么,为什么不这样做呢?好吧,这非常适合演示和概念验证代码。但是我个人不会’向客户推荐此架构以进行生产时感到不自在,并且 我注意到其他人也有同样的感觉。坦白说太多了“black box”继续使用自动托管的应用– there aren’目前几乎没有任何旋钮和转盘,而且技术细节很少(例如,比例尺限制,放大的可能性)。此外,任何为商店构建应用程序的人都会注意到,自动托管的应用程序无法在该处出售,因此’目前尚不清楚它们是否会在将来出现。
So, I prefer the more manual approach of deploying to Azure网站 myself. 的benefits I get are:
  • 我可以 scale up 从 Azure网站 (shared) to reserved hardware (e.g. if my app is more heavily used, or uses more processor/memory than anticipated)
  • 我可以 use Azure’s AutoScale功能(当前处于预览状态)可根据我设置的规则(例如处理器阈值)自动执行此操作
  • 我对我的应用程序有更好的监控
  • 我可以 make 更改s to the Azure pieces of my app without redeploying the SharePoint pieces
  • 我可以 publish in many different ways (e.g. FTP, WebDeploy, Continuous Deployment 从 TFS, git etc.)
  • 我可以 examine the files in Azure to do trouble-shooting by opening an FTP client

我的O365 / SP2013排列如何适合本文?我还应该考虑什么?

排列 考虑
Office 365+ app in Azure网站 的focus of this article. 如上所述,它与自动托管的应用程序非常相似,但具有更多的控制权。
On-premises + app in Azure网站 您’d需要对此处讨论的代码/过程进行一些更改。实际上,您需要配置高信任度/ S2S身份验证(而不是ACS的OAuth),并确保您’重新使用正确的TokenHelper方法或等效的自定义代码。 S2S的替代品可能是 即时认证.
Office 365+ app in on-premises 服务器 之所以具有吸引力,是因为它可以轻松地与其他本地应用程序/数据集成。但是,由于操作IT,通常会更加复杂上面列出的挑战。可使用Azure 服务巴士,BCS之类的技术解决,或者通过从本地到Internet / DMZ的自定义服务(例如WCF)公开数据。
On-premises + app in on-premises 服务器 非常简单,因为一切都在防火墙后面。需要S2S身份验证配置或 即时认证.


这可能是什么样的代码?

例子 of such 远程码 in SharePoint 2013/Office 365 are:
  • 远程事件接收器
    • 列出事件(例如ListAdding)
    • ListItem事件
    • 网络活动
  • 应用事件
    • AppInstalling / AppInstalled
    • AppUpgrading / AppUpgradeed
    • AppUninstalling / AppUninstalled
  • 其他应用程式码–即由提供商托管的应用中的全部功能

你需要什么– a summary

尽管简单的F5部署将在开发过程中照顾很多方面,但为了正确打包/部署应用程序以使其“实际使用”,以下是您需要的一些关键事项:
  • A website to be created on Azure网站
  • 使用远程事件接收器的解决方案– 首次执行此操作时,建议您使用保证工作正常的代码,而不要使用您自己的代码(以免弄错代码和/或RER声明)。我用了 MSDN上的BasicDataOperations SP2013提供程序托管的应用程序
  • 在您的SP2013环境或Office租约上向AppRegNew.aspx注册该应用程序–这将创建一个新的应用程序主体“known” to the environment.
  • 在应用内:
    • 应用中的所有URL引用都将更新为指向您Azure网站的绝对URL,例如:
      • 的declaration of the Remote Event Receiver
      • 的app start page listed in AppManifest.xml etc.
    • AppManifest.xml的AppPrincipal部分中列出的远程Web应用程序的ID(即App ID)
  • 对于代表远程网站(而不是应用程序本身)的Visual Studio项目:
    • 的web.config to be updated with the ClientId 和 ClientSecret (请注意,在Azure中,还可以在Web应用程序配置中指定AppSettings值,作为web.config的替代方法。下面的步骤使用此方法)
    • 它将发布到您的Azure网站–有很多选项,但是我喜欢WebDeploy(如下所示)

的detailed process

这里’是整个过程的详细说明-我’尽管我确实指出了一些事情,但我非常关注这里的基础结构/配置而不是代码。
  1. 创建或获取您的解决方案。与任何带有远程组件的SharePoint应用程序一样, 基本数据操作 应用程式I’在使用中,有两个Visual Studio项目:
    1. 一个用于SharePoint应用程序
    2. 一个用于远程组件(即,这是ASP.NET网站,托管用于Remote Event Receiver的Web服务)
  2. 使用AppRegNew.aspx(即可以在/_layouts/15/appregnew.aspx上找到的页面)注册您的应用,并记下应用ID和应用秘诀:

    AppRegNew
    AppRegNew确认
  3. 在以下位置创建您的Azure网站 Azure管理门户 –记下URL。就我而言,这是 //cobspdev.azurewebsites.net
  4. 更新SharePoint应用程序项目,以便URL引用指向此Azure网站:
    1. 的RER declaration 应该 look something like this:
      ** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **
    2. 的AppManifest.xml 应该 look something like this:
      ** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **


      请注意,打包应用程序时,Visual Studio将替换“〜remoteAppUrl”令牌-出现一个对话框,询问您将在何处托管远程Web应用程序,并且您在文本框中输入的值(例如,Azure中的URL)将使用。

  5. 还要确保AppManifest.xml的SharePoint AppPrincipal部分列出了RemoteWebApplication,其中ClientId属性设置为App ID(来自应用程序注册):
    ** N.B.我较新的代码示例未在RSS阅读器中显示- click here for 充分 article **
  6. [OPTIONAL] 如果你 want to debug 您r 远程码, 您 应该 set up a 服务巴士 instance on Azure 和 configure 您r SharePoint app project with it (* 2015年更新-不再需要此步骤-Azure Web Apps中的远程调试现在无需服务总线配置即可进行*):
    1. 转到“Service Bus”Azure管理门户中的“区域”,并为此应用程序创建一个新的命名空间:
      应用程序调试-Azure中的服务总线 
    2. 然后点击“连接信息”此名称空间并查看详细信息–复制连接字符串:
      应用程序调试-服务总线连接字符串
    3. 最后,在Visual Studio中,转到应用程序项目(而不是Web项目)的项目属性。转到“ SharePoint”选项卡,然后滚动到底部– ensure “启用远程事件调试”选中,然后将服务总线连接字符串粘贴到文本框中:
      应用程序调试-配置VS项目
      如果你 need more information on this, see 更新以使用Visual Studio 2012调试SharePoint 2013远程事件.

  7. 发布 the ASP.NET website to Azure – I’m在此处使用WebDeploy(* 2015年更新-注意,如果您安装了Azure SDK,则要比这简单得多-单击VS中的“发布...”按钮后,用于Azure订阅的Web应用程序将列为目标。请注意,如果尚未登录,则需要从VS登录到Azure *):
    1. Download the 发布 Profile for 您r Azure Website:

      下载发布个人资料
      下载发布个人资料-保存 
    2. 发布 the app – importing the 发布 Profile since this is the first time:
      发布 web app
      发布 web app - import   
      发布 web app - import - select file

      发布 web app - validate settings 
    3. 一旦验证了“发布配置文件”中的设置(如上图所示),请单击“Publish” to deploy to 您r Azure site. 您 应该 then see a success message:

      发布 web app - publish success
      的remote components are now deployed to Azure.

  8. 如前所述,可以像往常一样在web.config文件中或在Azure中的Web应用程序属性中指定Azure Web Apps AppSettings。通常,您会使用前者,但是为了说明Azure中的机制,该选项如下所示-您将转到Azure门户 并选择您的网站。请点击 配置,然后向下滚动到AppSettings部分–在此处输入ClientId和ClientSecret:

    Azure-应用程序设置  
  9. 发布 the SharePoint app to Office 365(by first publishing to the filesystem):

    发布 app 
    您’将显示一个类似于以下内容的对话框(* 2015年更新-在更高版本的Visual Studio工具中不再在此处指定“客户端机密”。只需确保该应用在AppSettings中是正确的*)–确保网址和客户ID为 正确指定,这些值将正确打包到应用清单中

    发布 app - enter settings

    发布 app - files generated 

  10. 此时,该应用程序已准备就绪,可以添加到Office 365租约中的“应用程序目录”中。转到  “Apps for SharePoint”关联的App Catalog网站中的库,然后按常规上传.app文件,或将其拖入:

    发布 app - upload to app catalog
  11. 现在可以将应用程序添加到网站:

    应用安装-现场
  12. 一旦许可请求被接受,就可以安装该应用并运行它。通过在“网站内容”页面中单击来输入应用程序:

    应用程式-网站内
..并且在您的Azure站点中运行BasicDataOperations MSDN示例应用程序’忍者CSS和响应式设计的荣耀:

基本数据操作
的point of course, is that 您 now have 远程码 running 和 have a location to host it.

概要

在必须运行代码的情况下“off-box”对于SharePoint(例如Office 365),Azure Web Apps可以提供比本地IIS服务器更轻松的方法。您可以使用Azure’可以灵活地从免费选项(非弹性)扩展到可提供生产级运营水平的付费选项之一。

您 have to consider if 您 are happy for 您r 码 to run there 和 who might "own"的 use of Azure within 您r organization, 和 也许 诸如身份验证/与本地系统集成之类的一些考虑因素可能会为您排除这种情况。否则,它可以使您免于处理许多基础结构方面的问题(尤其是使网站在外部发布),因此该工具箱中的工具非常有用。