Category Archives: My CV

Almost 150 FREE Microsoft eBooks, covering Windows 7, Windows 8, Office 2010, Office 2013, Office 365, Office Web Apps, Windows Server 2012, Windows Phone 7, Windows Phone 8, SQL Server 2008, SQL Server 2012, SharePoint Server 2010, SharePoint Server 2013, Azure

Here’s the list of the Top 50 FREE Microsoft eBooks downloaded so far:

Windows 7 Power Users GuidePDF Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI
Programming Windows Phone 7
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2008 R2
PDF
XPS
Get started with SharePoint Server 2010
PDF
EPUB
MOBI
Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI
Understanding Microsoft Virtualization R2 Solutions
PDF
XPS
Microsoft Office 2010 First Look
PDF
XPS
Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS
Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS
Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB
Programming Windows Phone 7 (Special Excerpt 2)
PDF
Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI
Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI
Deploying Windows 7 Essential Guidance
PDF
Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI
Own Your Future
PDF
XPS
Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI
Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI
Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI
Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI
Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI
Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF
Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI
Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI
SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI
Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI
Master Data Services Capacity Guidelines
PDF
EPUB
MOBI
Configure Kerberos Authentication for SharePoint 2010 Products
DOCX
PDF
EPUB
MOBI
Deployment guide for Office 2013
EPUB
MOBI
PDF
SQL Server 2012 Developer Training KitPDF Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF
Developing Applications for the Cloud, 2nd EditionPDF Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS
Programming Windows 8 Apps 2nd Preview
PDF
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS
Welcome to Windows 7PDF Explore SharePoint 2013
EPUB
MOBI
PDF
Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI
Operations guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

5) The other thing I have been asked many times is, “Do you have one single post with all of the eBooks listed so we can go through them instead of bouncing between the three different posts?” The answer to that has been No to date; however, I figured that since I was pulling together all of the stats last night, I could pull together the books into a single list as well. As such, here they are, almost 150 completely FREE Microsoft eBooks for you to download and use: (NOTE: If you don’t see a list of links below the book image, it is because it is only available in one format. Just click on the image and your download will begin)

Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF
Programming Windows Phone 7
PDF
EPUB
MOBI
Programming Windows Phone 7 (Special Excerpt 2)
PDF
Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS
Windows 7 Power Users Guide Deploying Windows 7 Essential Guidance
PDF
Welcome to Windows 7 What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS
Administrator’s Guide for Microsoft Application Virtualization (App-V) 5.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft BitLocker Administration and Monitoring 1.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 7
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 8.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft User Experience Virtualization (UE-V) 1.0
EPUB
MOBI
PDF
Developing an end-to-end Windows Store app using C++ and XAML: Hilo
PDF
Developing an end-to-end Windows Store app using JavaScript: Hilo
PDF
Prism for the Windows Runtime: Developing a Windows Store business app using C#, XAML, and Prism
PDF
Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI
Microsoft Office 2010 First Look
PDF
XPS
Deployment guide for Office 2013
EPUB
MOBI
PDF
Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF
Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS
Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI
Planning guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Deployment guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Deployment guide for Office 2013 Preview Office 2010 Developer Training Kit Office 365 Developer Training Kit Office 365 Guides for professionals and small businesses
Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI
Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI
Get started with SharePoint Server 2010
PDF
EPUB
MOBI
Explore SharePoint 2013
EPUB
MOBI
PDF
Deployment guide for SharePoint 2013
EPUB
MOBI
PDF
Test Lab Guide: eBook for SharePoint Server 2013 Intranet and Team Sites
EPUB
MOBI
PDF
DOC
Create a Balanced Scorecard (SharePoint Server 2010)
EPUB
MOBI
PDF
SharePoint Server for Business Intelligence
EPUB
MOBI
PDF
Deployment guide for SharePoint 2013 Preview Getting started with Microsoft SharePoint Foundation 2010 Technical reference for Microsoft SharePoint Server 2010
Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI
Remote BLOB storage for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Upgrading to SharePoint Server 2010
PDF
EPUB
MOBI
Getting Started with SharePoint Server 2010
PDF
DOC
XPS
EPUB
MOBI
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 2
PDF
DOC
XPS
Planning guide for server farms and environments for Microsoft SharePoint Server 2010
PDF
XPS
DOC
Capacity planning for Microsoft SharePoint Server 2010
PDF
XPS
DOC
5 Tips for a Smooth SSIS Upgrade to SQL Server 2012
EPUB
MOBI
PDF
A Hitchiker’s Guide to Microsoft StreamInsight Queries
EPUB
MOBI
PDF
Data Mining Extensions (DMX) Reference
EPUB
MOBI
PDF
Data Quality Services
EPUB
MOBI
PDF
High Availability Solutions
EPUB
MOBI
PDF
Master Data Services
EPUB
MOBI
PDF
Monitor and Tune for Performance
EPUB
MOBI
PDF
Multidimensional Expressions (MDX) Reference
EPUB
MOBI
PDF
SQL Server Distributed Replay
EPUB
MOBI
PDF
Transact-SQL Data Definition Language (DDL) Reference
EPUB
MOBI
PDF
XQuery Language Reference
EPUB
MOBI
PDF
Extracting and Loading SharePoint Data in SQL Server Integration Services
EPUB
MOBI
PDF
Integration Services: Extending Packages with Scripting
EPUB
MOBI
PDF
Multidimensional Model Programming
EPUB
MOBI
PDF
Optimized Bulk Loading of Data into Oracle
EPUB
MOBI
PDF
Planning Disaster Recovery for Microsoft SQL Server Reporting Services in SharePoint Integrated Mode
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Reporting Services
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Writing Transact-SQL Statements
EPUB
MOBI
PDF
SQL Server Community FAQs Manual
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI
Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI
Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI
QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI
Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI
Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI
SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI
Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI
Master Data Services Capacity Guidelines
PDF
EPUB
MOBI
SQL Server 2012 Developer Training Kit Cmdlet Reference for App Controller in System Center 2012 SP1
EPUB
MOBI
PDF
Technical Documentation for System Center 2012 – Virtual Machine Manager
EPUB
MOBI
PDF
Upgrade Team Foundation Server 2012: the ultimate upgrade guide
EPUB
MOBI
PDF
Better Unit Testing with Microsoft Fakes
EPUB
MOBI
PDF
Dependency Injection with Unity
PDF
Developer’s Guide to Microsoft Enterprise Library (Second Edition)
PDF
Testing for Continuous Delivery with Visual Studio 2012
PDF
ASP.NET Multi-Tier Windows Azure Application Using Storage Tables, Queues, and Blobs
EPUB
MOBI
PDF
ASP.NET Web Deployment using Visual Studio
EPUB
MOBI
PDF
Developing Modern Mobile Web Apps
EPUB
MOBI
PDF
The Entity Framework 4.0 and ASP.NET Web Forms – Getting Started
EPUB
MOBI
PDF
Getting Started with the Entity Framework 4.1 using ASP.NET MVC
EPUB
MOBI
PDF
Project Silk: Client-Side Web Development for Modern Browsers
PDF
Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI
Windows Azure Prescriptive Guidance
PDF
EPUB
MOBI
Windows Azure Service Bus Reference
PDF
EPUB
MOBI
Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB
MOBI
Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI
Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI
Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI
Own Your Future
PDF
XPS
Developing an Advanced Windows Phone 7.5 App that Connects to the Cloud Developing Applications for the Cloud, 2nd Edition
Autoscaling Application Block and Transient Fault Handling Application Block Reference
EPUB
MOBI
PDF
Create Your First Application: Node.js and Windows Azure
EPUB
MOBI
PDF
Developing Multi-tenant Applications for the Cloud on Windows Azure (3rd Edition)
PDF
Drupal on Windows Azure
EPUB
MOBI
PDF
Exploring CQRS and Event Sourcing: A journey into high scalability, availability, and maintainability with Windows Azure
PDF
Migrating Data-Centric Applications to Windows Azure
EPUB
MOBI
PDF
Moving Applications to the Cloud on Windows Azure (3rd Edition)
PDF
Using Windows Azure Mobile Services to Cloud-Enable your iOS Apps
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable Your Windows Phone 8 Apps
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable your Windows Store Apps in C#
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable Your Windows Store Apps in JavaScript
EPUB
MOBI
PDF
Windows Azure and SQL Database Tutorials
EPUB
MOBI
PDF
Building Hybrid Applications in the Cloud on Windows Azure Building Elastic and Resilient Cloud Applications – Developer’s Guide to the Enterprise Library 5.0 Integration Pack for Windows Azure
PDF
EPUB
MOBI
Deployment guide for Duet Enterprise for Microsoft SharePoint and SAP Server 2.0 Preview Microsoft Dynamics GP 2010 Guides: Financials
Microsoft Dynamics CRM 2011 User’s Guide Dynamics CRM 2011 Developer Training Kit Microsoft Dynamics CRM 2011 Implementation Guide Digital Storytelling
Free Tools in the Classroom Windows Live Movie Maker in the Classroom Windows 7 in the Classroom Microsoft Office Web Apps Teaching Guide
Microsoft Office in the Classroom Developing Critical Thinking through Web Research Skills Bing in the Classroom A Guide to Claims-Based Identity and Access Control, Second Edition
PDF
Introducing Windows Server 2012
EPUB
MOBI
PDF
TCP/IP Fundamentals for Microsoft Windows
PDF
Understanding Microsoft Virtualization R2 Solutions
PDF
XPS
Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2008 R2
PDF
XPS
Lync for Mac 2011 Deployment Guide Microsoft Lync Server 2010 Resource Kit Tools
Microsoft Lync Server 2010 Resource Kit Microsoft Lync Server 2010 Security Guide Developing Applications for the Cloud – 2nd Edition Visual Studio LightSwitch Training Kit
“Own Your Space–Keep Yourself and Your Stuff Safe Online” Digital Book for Teens

Once again, thank you to all of you for sharing this information with others to let them know about these resources being made available to them from Microsoft, absolutely FREE! Please continue to share these with others so they too can have access to this information to help them as they travel down their path of learning and knowledge in the computer field. I’m sure I will be putting future collections of eBooks up here on the blog as I come across more and compile further lists, so be sure you are subscribed to the blog and following me online through my variety of social media entities, including through my Microsoft Info Partner Windows Phone mobile app that brings you the latest Microsoft information directly from our teams here at Microsoft. Also, if you’re heading to Worldwide Partner Conference this year, be sure to come up, introduce yourself (if we haven’t met before), or say Hi (if we have met) and join in on becoming part of the Fantastic People of WPC13 that I will be compiling this year.

Did you find this information helpful? If so, you may want to make sure you are utilizing all of the areas I share information online, such as:

Get the Microsoft Info Partner Mobile App and get access to the latest from all of those plus: product teams, MPN teams, Microsoft News and hundreds more resources here at Microsoft right on your phone:

image

Advertisements

Script insertion via a Page Viewer Web Part

What is a Page Viewer Web Part?

A PVWP allows you to embed in your page another Web Page. Technically, a PVWP doesn’t do much, it is just a wrapper for a html iframe element.

iframes have a bad reputation. One of the main reason is that people often confuse them with frames. An excerpt from the MDN page:

Using the <frame> element is not encouraged because of certain disadvantages such as performance problems and lack of accessibility for users with screen readers. Instead of the <frame> element, <iframe> may be preferred.

As a matter of fact, iframes are enjoying a surge in popularity in modern Web design. They serve as building blocks in modular pages (several SharePoint Web Parts rely on iframes), and are a key component of application pages (for example on Twitter, Facebook or with Disqus). I would expect them to become even more popular once the new iframe html5 attributes become widely available.

Note: besides linking to Web pages, the PVWP also has options to display folders or file content.

How is this similar to the CEWP?

As explained in my old post, a CEWP allows you to embed, via its content link property, Web content (html, stylesheets or scripts) in your page. A PVWP acts in a similar way, except that the linked file is a whole Web page, instead of a fragment stored in a text file.

But this means two different pages?

Right. With a CEWP, the code fragment becomes part of the host page. With a PVWP, the code remains in its own page. That said, it doesn’t mean that the two pages cannot communicate, within the boundaries allowed by the same origin policy. In particular, an iframe can access and modify its host page. In the basic example shown below, the code in the iframe accesses the parent body to change its background color.

ParentDocument

Any real life example to share?

Sure! In the past few months, I published in this blog several demos from my SPELL library. SPELL is built to work in dual mode: either “inline” for direct insertion within a page (CEWP, Master Page, etc.), or “app” for inclusion in an iframe. For example, the process navigation showcased in this blog post is inserted via a PVWP. Same for its sibling featuring a button navigation. Other solutions like the SPELL Tabs or mini-BI work exactly the same way.

Why use a PVWP rather than a CEWP?

That’s a good question. While other environments have a good case for iframed scripts, we SharePoint users can already rely on the CEWP to link to html, css and JavaScript. Still, I see a couple benefits when using a PVWP.

1/ Sandbox

Because the iframe loads another page, this provides a clear separation between the host page and the iframe content. The sandboxed environment avoids code conflicts. This can be for example useful:

  • for charting apps, to make sure that the styles of the main page don’t interfere with the styles of the chart itself.
  • for scripting: if your app requires a specific jQuery version, you can run it within the iframe, without having to worry about the main page running a different version.

2/ Standalone

One constraint with Web Parts is that they have to live in a page. Picture a SharePoint dashboard: you view it as a whole, with no easy option to isolate a specific chart. With a PVWP, the chart can be viewed either embedded in the dashboard or directly in its underlying page. This scenario is showcased in this post: with read only permissions on my site, you cannot build a SharePoint dashboard page, but you can still interact with the individual chart page.

Even better, standalone pages work great with SharePoint dialogs. Iframing is actually the technique SharePoint relies on with forms: when you open a new, display or edit form in a dialog, you are simply opening newform.aspx, dispform.aspx or editform.aspx in an iframe! Do I have a dialog example with SPELL? Thanks for asking :-) You’ll find it here. Working with standalone pages allows to pile up dialogs and create the drill-down effect.

3/ Asynchronous load

Because the host page and the iframe are two different pages, the browser can load them in parallel, so this “should” result in better performance. With a CEWP, the content becomes part of the host page and execution will follow the page flow.

4/ Links across site collections

The CEWP allows you to link to an external file, but only within a same site collection. An iframe doesn’t have such restrictions, so a single application page stored in SharePoint can be reused across site collections.

5/ Storage of parameters

This is a technique I use with the SPELL library – not really standard but let me explain it anyway.

Because the script running in the iframe can access its own url, this url becomes a place where you can store parameters. For example the URL for the SPELL Tabs will look like this:

Tabs.aspx#css.activeBackground=orange;css.inactiveBackground=blue;css.hoverBackground=lightblue

For cascading dropdowns, the url would be for example:

CascadingSelect.aspx#form.parentLabel=State;form.childLabel=City;source.listName=Locations;source.parentField.DisplayName=State

You might find the above urls intimidating, but if you look at SharePoint urls they actually work in a similar fashion. The point is: if you used a CEWP, you’d need to store one snippet of code for each cascading dropdown you implement. With the above method, one single page called CascadingSelect.aspx can be reused across all site collections!

Note:  In practice the SPELL library includes editors, the above paths are not built manually.

Of course, iframes also have some drawbacks. The asynchronous load complicates the relationship between the iframed content and the parent’s content. The sandbox means that if the same code is needed in both the host page and the iframe, locally you have to load it twice (or find a trick…). Both the CEWP and the PVWP have their place in SharePoint design!

Understanding and resolving failures in Windows Store apps

As Windows Store app builders, we’re sure you’re aware that apps can experience a variety of failures: hangs, crashes, unavailable services and resources, and any number of unexpected operating conditions. These failures impact your customers’ experience, and if left unaddressed they can even cause customers to stop using your app or move to a competitor’s product. What you might not be aware of is that Microsoft makes this data available to help you build a more stable, reliable app that your customers will love. This post gives you a brief introduction of the Windows Error Reporting (WER) telemetry and how it’s available in the Store dashboard.

In addition, we’ll share some of the “real world best practices” guidance that have emerged from WER telemetry including insights from Windows Store apps, particularly where many apps are failing due to the same coding and design issues. We hope that this content will inform you, as a Windows Store app developer, of some of the unexpected failures that might occur post-release, and will help you build better, more reliable apps.

Windows Error Reporting

Since Windows XP, Microsoft operating systems have provided a failure reporting mechanism called Windows Error Reporting (WER). When a user opts in to allow their system to send telemetry data back to Microsoft, WER sends back crash and hang reports, including those from Windows Store apps. A dedicated telemetry system processes the error reports, collects crash and hang dumps, builds failure curves and finds the highest-hitting issues. The MSDN article How WER Collects and Classifies Error Reports offers a high-level view. Additionally, a paper from Microsoft Research titled Debugging in the (Very) Large: Ten Years of Implementation and Experience provides very in-depth information on this process.

The telemetry from WER is used not only within Microsoft, it is also shared with many partners including IHVs (hardware vendors), ISVs (software vendors), and OEMs (system manufacturers), and it is used for direct outreach for the most severe failures. The portal at http://sysdev.microsoft.com provides WER telemetry to ISVs, IHVs and OEMs in the form of metrics and failure curves that show what the top issues are, and in hang and crash dumps that can be downloaded for debugging.

The Windows Store dashboard provides this information to Windows Store app developers, along with additional metrics on download and usage data, ratings and reviews, and financial information. The Reviewing app quality page on MSDN gives a wonderful overview of how you can use telemetry to understand and resolve app failures to improve app quality. Please note that you must enable telemetry collection for your account in order to receive this data. As a Windows Store app developer, you are encouraged to visit the dashboard and view the metrics and failure data available for your apps.

Common Failures

As might be expected, the broad range of WER telemetry gives Microsoft a unique perspective on the failures affecting apps. While the Store dashboard displays failures affecting published apps for a given developer account, Microsoft can see failures across all apps, including failures that are affecting many apps simultaneously. These typically show up in two forms: failures in platform and framework binaries (such as Windows.UI.Xaml.dll), and as crashes of specific types that occur across a large variety of apps.

Failures that affect multiple apps (we’ll call them “multi-app failures” for brevity) may not cause the most crashes for any specific app, but can be significant issues when viewed across all apps. Multi-app failures discovered through the WER telemetry reveal situations where caution is needed in app design. WER telemetry can be considered an augmentation to in-house testing, as it reveals problems that occur in a very diverse population with diverse environments.

To coincide with this post, the Channel 9 Defrag Tools show has aired a number of episodes on common problems in Windows Store apps. Each episode is 15-20 minutes long and applies a common coding mistake to a Win 8.1 app sample. Please use this Channel 9 link to find all current postings.

In addition, the NT Debugging blog has also posted a technically deep article on how to debug Windows Store crash dumps to get the error code and call stack of the issue. Please read Debugging a Windows 8.1 Store App Crash Dump for details on investigating the most common form of Windows Store app crashes.

Guidance on avoiding these failures represents best practice recommendations based on actual customer experience. Implementing the two recommendations below (try/catch and null pointers) will add considerable stability to any app. With any code change, the change must be done with care so that the effect is expected and the outcome is desirable – swallowing an exception without any indication may result in a confused user: “I tapped the button but nothing happened?!”.

Best Practice – try/catch blocks

One thing we frequently see through WER telemetry is when apps don’t handle exceptions appropriately via try/catch blocks. Lots of apps assume that a network call will succeed or some XML will parse. In the real world, these (normally successful) operations will fail at times, for unpredictable reasons. It’s good to assume that the size and diversity of the Windows ecosystem could cause edge cases in your code to be executed. To have a stable app, you have to not trust the network connectivity, data integrity, or the access level of the user.

Mitigation is easy. Add a try/catch block around any code that isn’t guaranteed to succeed. You can choose to do many things with the exception. Hide it, log it, or inform the user. Continue on or gracefully fail. Consume it, throw it again, or throw it as an inner exception of a new exception you make. If it is to be thrown again, you should make sure that it will be caught elsewhere.

This code snippet from the File Access sample in the Windows 8.1 SDK shows how a System.IO.FileNotFoundException exception is handled gracefully:

try
{
if (file != null)
{
IBuffer buffer = await FileIO.ReadBufferAsync(file);
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
string fileContent = dataReader.ReadString(buffer.Length);
// ...
}
}
}
catch (FileNotFoundException)
{
// File not found exception
}

Best Practice – null pointers

Check variables for null before using them as a pointer. Don’t assume that a function is being passed a valid object, and don’t assume functions you call return a valid object. These can be a follow-on effect of handling exceptions correctly. For example, a function might normally return an object, but if an error occurs it may return a null instead of allowing an exception to be thrown.

The adapted code snippet below shows how a simple if-statement can be used to avoid a function call that would result in an ArgumentNullException exception, and an object reference that would result in a NullReferenceException exception.

if (file != null)
{
IBuffer buffer = await FileIO.ReadBufferAsync(file);

string name = file.DisplayName;
}

Specific Failures

Using Best Practices helps avoid most problems and should be applied across your entire codebase. There are some specific issues that warrant attention, though, due to their prevalence or lack of awareness. Specifically, below we go over the incorrect handling of Navigation State (suspension), HTTP Requests and XML Parsing.

Windows.UI.Xaml.Controls.Frame.GetNavigationState

One of the components where we’ve identified a significant number of crashes is Windows.UI.Xaml.dll!Windows.UI.Xaml.Controls.Frame.GetNavigationState, which serializes the app’s frame navigation history (commonly at suspend). As documented on MSDN, serialization only supports four basic data types (string, char, numeric and GUID). In some cases, apps attempt to store more complex data, and this generates an exception when attempting to serialize the navigation state. Because this exception originates within a Microsoft platform component and not app code, the failures are not surfaced on the Windows Store dashboard and many developers are unaware that their apps are behaving incorrectly and are causing these crashes.

Two examples of the failing call stacks are shown below, showing where the failure is generated while preparing to be suspended. Note that the failure occurs when retrieving the accumulated navigation history; there is no opportunity to convert to supported types after retrieval.

Example 1

Windows_UI_Xaml_ni!Windows.UI.Xaml.Controls.Frame.GetNavigationState 
xxxxxxxx!xxxxx.xxxxxx.SuspensionManager.SaveFrameNavigationState
xxxxxxxx!xxxxx.xxxxxx.SuspensionManager+_SaveAsync_d__0.MoveNext
mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess
mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification
xxxxxxxx!xxxxx.App+_OnSuspending_d__a.MoveNext
mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore._ThrowAsync_b__0
system_runtime_windowsruntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.InvokeCore
mscorlib_ni!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw
system_runtime_windowsruntime_ni!System.Threading.WinRTSynchronizationContext+Invoker._InvokeCore_b__0
mscorlib_ni!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context
mscorlib_ni!System.Threading.ExecutionContext.RunInternal
mscorlib_ni!System.Threading.ExecutionContext.Run
mscorlib_ni!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem
mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch
mscorlib_ni!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback

Example 2

Windows_UI_Xaml_4920000!Windows.UI.Xaml.Controls.Frame.GetNavigationState()+0x1 
xx_xxxxx_xxxxxxx_xx!xx.xxxxx.Library.StateHelper+<SaveState>d__0.MoveNext()+0x164
mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)+0x5e
mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)+0x35
xx_xxxxxxxx_xxxxxxx_xx!xx.xxxxxxxx.xxxxxxx.App+<OnSuspending>d__6.MoveNext()+0xb1
mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__4(System.Object)+0x33
System_Runtime_WindowsRuntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.InvokeCore()+0x24
mscorlib_ni!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+0x17
System_Runtime_WindowsRuntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.<InvokeCore>b__0(System.Object)+0x28
mscorlib_ni!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object)+0x3e
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0xa7
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x16
mscorlib_ni!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+0x60
mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch()+0x10a
mscorlib_ni!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()+0x5

The recommended guidance for this scenario is to only use the supported data types as parameters when calling Frame.Navigate(TypeName, Object) or Frame.Navigate(TypeName, Object, NavigationTransitionInfo), or when directly adding a PageStackEntry to the BackStack or ForwardStack of a Frame. Note that more complex types can be used if Frame.GetNavigationState will never be called; please refer to the Dev Center documentation for additional details.

The code sample below demonstrates how the failure might be reproduced. This sample adds a page and an invalid parameter type to the navigation backstack, and will fail when Frame.GetNavigationState is called.

private void Button1Click(object sender, RoutedEventArgs e)
{
// Add a page to the Back History with a parameter that isn't basic
int[] array5 = new int[5];
var pse = new PageStackEntry(typeof(SDKTemplate.MainPage), array5, null);
this.MyFrame.BackStack.Add(pse);
}

private void Button2Click(object sender, RoutedEventArgs e)
{
// Simulate a GetNavigationState operation that would happen at Suspend
var str = this.MyFrame.GetNavigationState();
}

Additional resources:

System.Net.Http.HttpClientHandler.GetResponseCallback

Another example of a common failure scenario is when apps fail while making async HTTP calls via System.Net.Http.dll. The top-level error description returned is “An error occurred while sending the request”, our analysis indicates there are a wide variety of underlying causes. This is essentially a high-level “something went wrong” error that occurs when using asynchronous HTTP calls. These failures may be caused by transient network or DNS conditions; remote name resolution failure is one of the most common causes. This can be seen in crashes that are attempting to reach common URLs:

Exception type:  System.Net.WebException
Message: The remote name could not be resolved: 'www.contoso.com'

This code snippet from the HttpClient sample in the Windows 8.1 SDK shows how cancellation is handled (explicitly) and how all other exceptions are handled (generically), for an HTTP request:

{

Uri resourceAddress = new Uri(AddressField.Text);
HttpResponseMessage response = await
httpClient.GetAsync(resourceAddress).AsTask(cts.Token);

}
catch (TaskCanceledException)
{
rootPage.NotifyUser(“Request canceled.”, NotifyType.ErrorMessage);
}
catch (Exception ex)
{
rootPage.NotifyUser(“Error: ” + ex.Message, NotifyType.ErrorMessage);
}

When using a System.Net.Http.HttpClient object, it is common to see a System.Net.Http.HttpRequestException exception with a System.Net.WebException inner exception.

0:012> !pe 
Exception object: 0332240c
Exception type: System.Net.Http.HttpRequestException
Message: An error occurred while sending the request.
InnerException: System.Net.WebException, Use !PrintException 03321d8c to see more.
StackTrace (generated):
SP IP Function
05D8F128 6AEDCE66 mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)+0x5e
05D8F138 6AEDCDF9 mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)+0x35
05D8F144 6E7794C9 BackgroundTasks_ni!BackgroundTasks.TileUpdater+<Run>d__0.MoveNext()+0x3a9
05D8F8D8 6B66BC9F mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__1(System.Object)+0x33
05D8F8E0 6AE7CACA mscorlib_ni!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object)+0x3e
05D8F8E8 6AE92367 mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0xa7
05D8F954 6AE922A6 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x16
05D8F968 6AE9DD60 mscorlib_ni!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+0x60
05D8F97C 6AE9D509 mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch()+0x149
05D8F9CC 6AE9D3A5 mscorlib_ni!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()+0x5

StackTraceString: <none>
HResult: 80131500

0:012> !PrintException 03321d8c
Exception object: 03321d8c
Exception type: System.Net.WebException
Message: The remote name could not be resolved: 'www.contoso.com'
InnerException: <none>
StackTrace (generated):
SP IP Function
05D8F740 6AA281EF System_ni!System.Net.HttpWebRequest.EndGetResponse(System.IAsyncResult)+0x633017
05D8F754 55FDF131 System_Net_Http_ni!System.Net.Http.HttpClientHandler.GetResponseCallback(System.IAsyncResult)+0x41

This is a case where your app does not cause the error, but still needs to be ready to handle unanticipated error conditions. Async network calls can be expected to fail any number of ways and should always be wrapped in try/catch blocks. Your apps should protect themselves against transient DNS name resolution failures, network congestion, slow response times, server (and service) unavailability, and abrupt connection loss. These are rarely tested and caught during the development phase, as most developers will not have access to test environments that exhaustively mimic networking conditions, and corresponding user behavior. With defensive exception handling in place, your app can handle transient network conditions gracefully and wait and retry, or notify the user and let them decide whether to retry, navigate to another activity in the app, or exit.

Note that Windows 8.1 offers the new Windows.Web.Http namespace that allows you to modularize your HTTP networking code, including filters you write to manage network communication and error handling. This may allow you to separate your app and business logic from your network error handling logic, for easier network failure management. Refer to the HttpClient sample for examples of using filters.

Additional resources:

XML Parsing

When analyzing crash data specific to Windows Store apps, we’ve seen a high prevalence of CLR exception codes related to XML parsing (exceptions of type System.Xml.XmlException). Apps are encountering XML parsing failures that were not seen during app development or during certification testing. These failures are being caused by many factors, from badly formed ads and RSS feeds to corrupted XML to invalid dynamic content. At the time of this writing, System.Xml.XmlException is the second most popular cause of multi-app crashes in Windows 8.1 after System.NullReferenceException.

What is extremely important to note here is that WER telemetry frequently shows XML failures in content that is outside the control of your app. Apps that use RSS feeds or ads are particularly affected, as RSS feeds and ad services occasionally deliver content that is auto-generated or malformed, causing app crashes during parsing. Try/catch blocks around the XML parsing code would permit your app to handle unexpected content gracefully. In the same manner as the networking failures mentioned above, defensive coding is especially important when consuming content that does not come from a source you control.

Parsing errors are the most common cause of XML failures. These appear in the WER telemetry in a variety of ways, due to the prevalence of XML parsing code in various forms. Reasons for failures can include unexpected tokens, invalid root data, unclosed elements, and failed XML character decodes. For reference, you can review this list of XML parsing exception codes.

Two sample call stacks are shown below.

Example 1

0:016> !pe 
Exception object: 02d344ec
Exception type: System.Exception
Message: Undtagelse fra HRESULT: 0xC00CE50D <-- A semicolon character was expected
InnerException: <none>
StackTrace (generated):
SP IP Function
00000000 00000001 Windows_Data_ni!Windows.Data.Xml.Dom.XmlDocument.LoadXml(System.String)+0x2
0554F700 5CA58965 xxxxxxxxxxx_ni!xxxxxxxxxxx.xxxxxxxxxxxxxx.GetPermissions(Byte[])+0x75
0554F720 5CA6D1C0 xxxxxxxxxxx_ni!xxxxxxxxxxx.xxxx.AsyncWebRequest+<Start>d__1.MoveNext()+0x10c
0554F804 65C5BC63 mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(System.Object)+0x33
0554F80C 5A7D13D4 System_Runtime_WindowsRuntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.InvokeCore()+0x24
0997F884 65B61887 mscorlib_ni!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+0x17
0997F88C 5A7FE728 System_Runtime_WindowsRuntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.<InvokeCore>b__0(System.Object)+0x28
0997F890 6546CACA mscorlib_ni!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object)+0x3e
0997F898 65482367 mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0xa7
0997F904 654822A6 mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+0x16
0997F918 6548DD60 mscorlib_ni!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+0x60
0997F92C 6548D509 mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch()+0x149
0997F97C 6548D3A5 mscorlib_ni!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()+0x5

Example 2

Exception object: 025f62c0
Exception type: System.Xml.XmlException
Message: <Invalid Object>
InnerException: <none>
StackTrace (generated):
SP IP Function
04CFF3A0 6DEB4FCF System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.JsonEncodingStreamWrapper.ReadEncoding(Byte, Byte)+0x1d31b7
04CFF3B0 6DCE1DB7 System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.JsonEncodingStreamWrapper.ReadEncoding()+0x4b
04CFF3C4 6DCE1C36 System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.JsonEncodingStreamWrapper.InitForReading(System.IO.Stream, System.Text.Encoding)+0x4a
04CFF3F0 6DCE1BE4 System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.JsonEncodingStreamWrapper..ctor(System.IO.Stream, System.Text.Encoding, Boolean)+0x40
04CFF40C 6DCE1B7F System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.XmlJsonReader.SetInput(System.IO.Stream, System.Text.Encoding, System.Xml.XmlDictionaryReaderQuotas, System.Xml.OnXmlDictionaryReaderClose)+0x4f
04CFF42C 6DCE1B1C System_Runtime_Serialization_ni!System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(System.IO.Stream)+0x60
04CFF444 0BF242E6 xxxxxxxx!UNKNOWN+0x146
04CFF10C 723DD17A mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)+0x5e
04CFF11C 723DD115 mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)+0x35
04CFF128 0BF219FD xxxxxxxx!UNKNOWN+0x29d
04CFEE00 723DD17A mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)+0x5e
04CFEE10 723DD115 mscorlib_ni!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)+0x35
04CFEE1C 0BF204EC xxxxxxxx!UNKNOWN+0xbc
< ... >
04CFF564 72B5458F mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__4(System.Object)+0x33
04CFF56C 6E98F994 System_Runtime_WindowsRuntime_ni!System.Threading.WinRTSynchronizationContext+Invoker.InvokeCore()+0x24

StackTraceString: <none>
HResult: 80131940

Note: throws "invalid bytes", including two null unicode bytes (0x00 0x00)

A second form of XML failures shows up when dealing with XML as streams. Serializing to or from a stream is a common source of exceptions, particularly when translating to or from JSON. The exception codes can include any of the XML parsing failures seen earlier, plus serialization-specific failures like unexpected end-of-file and encoding issues.

The recommendation when using XML streams is to envision all of the things that can go wrong with streams – particularly remote streams – and practice defensive coding. For example, the underlying connection may be slow, or the network connection might terminate, or a shared FileStream object might be subject to unexpected stream position bugs.

The code sample below demonstrates a failure that can occur when reading from a FileStream, and reproduces a commonly seen call stack.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string fileName = @".\SerializeTest.xml";
DataContractSerializer ser = new DataContractSerializer(typeof(Person));

Person p1 = new Person("Cool", "Joe", 101);
FileStream writer = new FileStream(fileName, FileMode.Create);
ser.WriteObject(writer, p1);
writer.Close();

FileStream fs = File.OpenRead(fileName);

// Note that this reads the entire file and positions the stream at EOF
XmlReader reader = XmlReader.Create(fs);
reader.MoveToContent();
while (reader.Read())
{

}

// Throws an “unexpected end of file” exception
Person p2 = (Person)ser.ReadObject(fs);
fs.Close();
}

// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person : IExtensibleDataObject
{
[DataMember()]
public string FirstName;
[DataMember]
public string LastName;
[DataMember()]
public int ID;

public Person(string newfName, string newLName, int newID)
{
FirstName = newfName;
LastName = newLName;
ID = newID;
}

private ExtensionDataObject extensionData_Value;

public ExtensionDataObject ExtensionData
{
get
{
return extensionData_Value;
}
set
{
extensionData_Value = value;
}
}
}

}
}

Wrapping the stream call in a try/catch block will let the app handle the failure without crashing.

try
{
Person p2 = (Person)ser.ReadObject(fs);
...
}
catch (System.Xml.XmlException)
{
if (fs.Position == fs.Length) // at EOF
{
// Decide what to do
}
}
catch (Exception e)
{
// Decide what to do
}

Additional resources:

<

p>Wrap-Up

The Windows Error Reporting telemetry contains an amazing wealth of information on how things can go wrong, and – in a backwards sort of way – gives a good roadmap on how to build a robust, reliable Windows Store app. We hope that providing this information is useful to you, and helps trigger your thinking and understanding about how your apps behave in the wild. We look forward to presenting more insights in future posts.

The Exception Assistant in Visual Studio 2013

The Exception Assistant, which appears whenever a run-time exception occurs, shows the type of exception, troubleshooting tips, and corrective actions. The Exception Assistant can also be used to see the details of an exception object.

An exception is an object that inherits from the Exception class. An exception is thrown by code when a problem occurs, and it is passed up the stack until the application handles it or the program fails.

Note Note
The options available in dialog boxes, and the names and locations of menu commands you see, might differ from what is described in Help, depending on your active settings or edition. This Help page was written with General Development Settings in mind. To change your settings, choose Import and Export Settings on the Tools menu. For more information, see Customizing Development Settings.

The following table lists and describes an exception object’s properties. Depending on the type of exception, not all may appear.

Property Description
Data An IDictionary object that contains user-defined key/value pairs. The default is an empty collection.
FileName Name of the file causing the exception.
FusionLog Log file that describes why an assembly load failed.
HelpLink Link to the help file associated with the exception.
HResult Coded numerical value assigned to a specific exception.
InnerException Exception instance that caused the current exception. It is sometimes useful to catch an exception thrown in a helper routine and throw a new exception more indicative of the error, thereby providing more information. In such cases, the InnerException property is set to the original exception.
Message Message associated with the exception. This is displayed in the language specified by the CurrentUICulture property of the thread that throws the exception.
Source Name of the application or object that caused the exception. If Source is not set, the name of the assembly where the exception originated is returned.
StackTrace String representation of the method calls on the call stack at the time the current exception was thrown. The stack trace includes the source-file name and program line number if debugging information is available. StackTrace may not report as many method calls as expected, due to code transformations that occur during optimization. The stack trace is captured immediately before an exception is thrown.
TargetSite Method that throws the current exception. If the method that throws the exception is not available and the stack trace is not a null reference (Nothing in Visual Basic), TargetSite obtains the method from the stack trace. If the stack trace is a null reference, TargetSite also returns a null reference.

To find out more about an exception object

  • Click View Details in the Actions pane. A dialog box appears showing the properties of the exception.

The Exception Assistant dialog box appears when a run-time exception is thrown. The Exception Assistant displays the type of exception, provides additional information and links to troubleshooting tips, provides a way to search for additional help online, and allows the user to perform certain actions, such as viewing details of the exception.

To see a topic dealing with troubleshooting the type of exception you have encountered, click one of the tip messages displayed in the Troubleshooting Tips pane.

To perform actions associated with the exception, click one of the actions displayed in the action pane.

For information about how to enable or disable the Exception Assistant, see General, Debugging, Options Dialog Box.

Type of Exception
Displays the type of exception thrown.
Additional Information
Displays additional information about the exception.
Troubleshooting Tips
Displays links to troubleshooting tips that may help you discover the source of the exception.
Actions
Lists actions that can be performed, such as seeing more information about the exception object.
Get Help Online
Allows you to search for additional help online.

The ability to debug another process gives you extremely broad powers that you would not otherwise have, especially when debugging remotely. A malicious debugger could inflict widespread damage on the machine being debugged. Because of this, there are restrictions on who can do debugging. For more information, see Remote Debugging Permissions.

However, many developers do not realize that the security threat can also flow in the opposite direction. It is possible for malicious code in the debuggee process to jeopardize the security of the debugging machine: there are a number of security exploits that must be guarded against.

There is an implicit trust relationship between the code you are debugging, and the debugger. If you are willing to debug something, you should also be willing to run it. The bottom line is that you must be able to trust what you are debugging. If you cannot trust it, then you should not debug it, or you should debug it from a machine that you can afford to jeopardize, and in an isolated environment.In order to reduce the potential attack surface, debugging should be disabled on production machines. For the same reason, debugging should never be enabled indefinitely.

Here are some general recommendations that apply to all managed debugging.

  • Be careful when attaching to an untrusted user’s process: when you do so, you assume that it is trustworthy. When you attempt to attach to an untrusted user’s process, a security warning dialog box confirmation will appear asking whether you want to attach to the process. “Trusted users” include you, and a set of standard users commonly defined on machines that have the .NET Framework installed, such as aspnet, localsystem, networkservice, and localservice. For more information, see Security Warning: Attaching to a process owned by an untrusted user can be dangerous. If the following information looks suspicious or you are unsure, do not attach to this process.
  • Be careful when downloading a project off the Internet and loading it into Visual Studio. This is very risky to do even without debugging. When you do this, you are assuming that the project and the code that it contains are trustworthy.

For more information, see Debugging Managed Code.

Local debugging is generally safer than remote debugging. Remote debugging increases the total surface area that can be probed.The Visual Studio Remote Debugging Monitor (msvsmon.exe) is used in remote debugging, and there are several security recommendations for configuring it. The preferred way to configure the authentication mode is Windows Authentication, because No Authentication mode is insecure.

Error dialogWhen using Windows Authentication mode, be aware that granting an untrusted user permission to connect to msvsmon is dangerous, because the user is granted all your permissions on the computer..

Do not debug an unknown process on a remote machine: there are potential exploits that might affect the machine running the debugger, or that might compromise msvsmon.exe, the Visual Studio Remote Debugging Monitor. If you absolutely must debug an unknown process, try debugging locally, and use a firewall to keep any potential threats localized.

For more information, see Remote Debugging in Visual Studio.

It is safer to debug locally, but since you probably do not have Visual Studio installed on the web server, local debugging might not be practical. Generally, debugging Web services is done remotely, except during development, so the recommendations for remote debugging security also apply to Web services debugging. Here are some additional best practices. For more information, see Debugging XML Web Services.

  • Do not enable debugging on a Web server that has been compromised.
  • Make sure you know the Web server is secure before debugging it. If you are not sure it is secure, do not debug it.
  • Be especially careful if you are debugging a Web service that is exposed on the Internet.
Be aware of the trust status of external components that your program interacts with, especially if you did not write the code. Also be aware of components that Visual Studio or the debugger might use.
Two Visual Studio tools that require thinking about security are the following:

  • Source Server, which provides you with versions of source code from a source code repository. It is useful when you do not have the current version of a program’s source code. Security Warning: Debugger Must Execute Untrusted Command.
  • Symbol Server, which is used to supply the symbols needed to debug a crash during a system call.

See Specify Symbol (.pdb) and Source Files in the Visual Studio Debugger

 

Enhanced by Zemanta

New Update for Microsoft AppFabric!

Microsoft releases cumulative update (CU) packages for Windows Server AppFabric 1.1 from time to time.

Each cumulative update package contains all of the fixes that were released in previous update packages. At the time of this posting there are four cumulative update packages that have been released:

Cumulative update package 1 for Microsoft AppFabric 1.1 for Windows Server
Cumulative update package 2 for Microsoft AppFabric 1.1 for Windows Server
Cumulative update package 3 for Microsoft AppFabric 1.1 for Windows Server
Cumulative update package 4 for Microsoft AppFabric 1.1 for Windows Server

These are the AppFabric 1.1 cache dll versions Microsoft has released:

RTM: 1.0.4632 (29-Nov-2011)
CU1: 1.0.4639 (20-Feb-2012)
CU2: 1.0.4644 (29-May-12)
CU3: 1.0.4652.2 (27-Nov-2012)
CU4: 1.0.4653.2 (28-Mar-2013)

<

p>CU3 and later versions including CU4 require .NET 4.5 on cache servers as documented on the KBs. However .NET 4.5 is not a prerequisite on cache clients to use client binaries in CU3 or a later version.

You can search for AppFabric cumulative update packages at http://support.microsoft.com for the phrase (including the quotes): 

“cumulative update package” appfabric

Windows Server AppFabric Cache Administration Tool

This update adds improved PowerShell cmdlets for AppFabric cache management.

This update introduces new set of AppFabric Server PowerShell cmdlets to make it consistent with other Microsoft server products and keeps the older cmdlets enabled as aliases to make sure that existing scripts continue to function.

After you apply this update, when you open the AppFabric Server PowerShell prompt, PowerShell may prompt you for permissions to run a script if your existing Execution Policy prevents it. To use the AppFabric PowerShell cmdlets, you have to enable running of signed scripts.

Cache Clients and Local Cache (Windows Server AppFabric Caching)

This update fixes an issue where items in a local cache may not expire because of a defined policy.

Because of a race condition, some objects in a local cache may not expire as expected. Therefore, a client may potentially receive data that is not up to date.

GetCache() API for Windows Server AppFabric Cache

This update fixes an issue where the GetCache() method may fail with the “An item with the same key has already been added” System.ArgumentException.

You receive the following exception message when you call the GetCache() method:

System.ArgumentException: An item with the same key has already been added.

at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)

at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)

at Microsoft.ApplicationServer.Caching.RoutingClientDrmUtility.AddCacheDRM(String cacheName, DRM drm) in d:\bt\9383251\private\src\core\drm\DRMUtility.cs:line 39

at Microsoft.ApplicationServer.Caching.DataCacheFactory.CreateRoutingClient(String cacheName, NamedCacheConfiguration config, IClientProtocol protocol, CacheLookupTableTransfer initialLookupTable, SimpleSendReceiveModule sendRcvModule) in d:\bt\9383251\private\src\client\CacheFactory.cs:line 412

at Microsoft.ApplicationServer.Caching.DataCacheFactory.CreateNewCacheClient(DataCacheDeploymentMode mode, String cacheName, NamedCacheConfiguration config, IClientProtocol protocol, CacheLookupTableTransfer initialLookupTable, SimpleSendReceiveModule tempModule) in d:\bt\9383251\private\src\client\CacheFactory.cs:line 312

at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName) in d:\bt\9383251\private\src\client\CacheFactory.cs:line 234

Known issue with Cumulative Update for Microsoft AppFabric 1.1 for Windows Server

Important This update applies to the caching functionality of AppFabric 1.1 only. We recommend that you install the update only on servers that are running the AppFabric cache or that are using the AppFabric cache client.

Issue

After you install the update, the AppFabric Configuration Wizard incorrectly reports the status of the Persistence and Monitoring configuration as “Not configured.” Additionally, the user interface status is incorrect.

To verify that the services are running, follow these steps:

  1. Open the Powershell administration console.
  2. Run the Get-ASAppMonitoring –Root command to verify the configuration of the state.
  3. Run the Get-ASAppInstanceStore –Root command to verify the instance store connection strings.

This issue can safely be ignored as it does not affect the functionality of either AppFabric Hosting Services or the services that are hosted by AppFabric Hosting Services.

How to obtain Cumulative update package 1 for Microsoft AppFabric 1.1 for Windows Server

Cumulative update package information

The following file is available for download from the Microsoft Download Center:

Download

Download the cumulative update package now.
For more information about how to download Microsoft support files, click the following article number to view the article in the Microsoft Knowledge Base:

119591 How to obtain Microsoft support files from online services

Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.

Prerequisites

To apply this cumulative update package, you must have Microsoft AppFabric 1.1 for Windows Server installed.

Restart requirement

You may have to restart the computer after you apply this cumulative update package.

File information

The English version of this cumulative update package has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.

For all supported x86-based versions of Microsoft AppFabric 1.1 for Windows Server
File name File version File size Date Time Platform
distributedcacheadministration.psm1 Not applicable 13,573 20-Feb-2012 16:24 Not applicable
distributedcacheadministration.psd1 Not applicable 915 20-Feb-2012 16:24 Not applicable
distributedcacheconfiguration.psm1 Not applicable 11,490 20-Feb-2012 16:24 Not applicable
distributedcacheconfiguration.psd1 Not applicable 590 20-Feb-2012 16:24 Not applicable
microsoft.applicationserver.caching.configuration.dll-help.xml Not applicable 70,762 20-Feb-2012 16:24 Not applicable
microsoft.applicationserver.caching.managementps.dll-help.xml Not applicable 176,671 20-Feb-2012 16:24 Not applicable
setup.exe.config Not applicable 235 20-Feb-2012 16:24 Not applicable
Microsoft.applicationserver.caching.client.dll 1.0.4639.0 178,072 20-Feb-2012 16:24 x86
Microsoft.applicationserver.caching.configuration.dll 1.0.4639.0 92,072 20-Feb-2012 16:24 x86
Microsoft.applicationserver.caching.configuration.resources.dll 1.0.4639.0 16,832 20-Feb-2012 16:24 x86
Microsoft.applicationserver.caching.core.dll 1.0.4639.0 837,520 20-Feb-2012 16:24 x86
Microsoft.applicationserver.caching.managementps.dll 1.0.4639.0 83,880 20-Feb-2012 16:24 x86
Microsoft.applicationserver.caching.server.dll 1.0.4639.0 444,312 20-Feb-2012 16:24 x86
Microsoft.applicationserver.configuration.exe 1.1.2112.2 714,648 20-Feb-2012 16:24 x86
For all supported x64-based versions of Microsoft AppFabric 1.1 for Windows Server
File name File version File size Date Time Platform
distributedcacheadministration.psm1 Not applicable 13,573 20-Feb-2012 16:28 Not applicable
distributedcacheadministration.psd1 Not applicable 915 20-Feb-2012 16:28 Not applicable
distributedcacheconfiguration.psm1 Not applicable 11,490 20-Feb-2012 16:28 Not applicable
distributedcacheconfiguration.psd1 Not applicable 590 20-Feb-2012 16:28 Not applicable
microsoft.applicationserver.caching.configuration.dll-help.xml Not applicable 70,762 20-Feb-2012 16:28 Not applicable
microsoft.applicationserver.caching.managementps.dll-help.xml Not applicable 176,671 20-Feb-2012 16:28 Not applicable
setup.exe.config Not applicable 235 20-Feb-2012 16:28 Not applicable
Microsoft.applicationserver.caching.client.dll 1.0.4639.0 178,072 20-Feb-2012 16:28 x86
Microsoft.applicationserver.caching.configuration.dll 1.0.4639.0 92,072 20-Feb-2012 16:28 x86
Microsoft.applicationserver.caching.configuration.resources.dll 1.0.4639.0 16,832 20-Feb-2012 16:28 x86
Microsoft.applicationserver.caching.core.dll 1.0.4639.0 837,520 20-Feb-2012 16:28 x86
Microsoft.applicationserver.caching.managementps.dll 1.0.4639.0 83,880 20-Feb-2012 16:28 x86
Microsoft.applicationserver.caching.server.dll 1.0.4639.0 444,312 20-Feb-2012 16:28 x86
Microsoft.applicationserver.configuration.exe 1.1.211

The Case For Agile Over Waterfall

This article came about as the result of a recent trip I made to a customer. I was presenting on TFS and made the, oft repeated, statement that Agile is better than Waterfall. Now I have to admit that I have never really had anyone challenge me on this assumption since most of the people I know just accept this as truth.

On this particular day there were a couple of project managers in the audience and they were none too pleased about my assertion. For the rest of the hour, we went back and forth on the issue. Following are a few of exchanges to the best of my recollection:

 

Exchange 1

Project managers: “You can’t say that agile is better than waterfall, it simply isn’t true.”

Me: “I have twenty years of evidence backing up my claim and I have personally seen it work this way.”

 

Exchange 2

Project managers: “Well, we have government regulations we deal with and you just don’t understand what we do here.”

Me: “I have [another customer] that has to deal with HIPPA requirements and they use Agile so I don’t think your requirements are that strict, are they?”

 

Exchange 3

Project managers: “We don’t use pure Waterfall we use a modified version.”

Me: “So..you’ve already modified your methodology because it’s inadequate. Why not finish the job?”

 

 

Essentially the arguments went on from there but were just variations on these three exchanges. To be fair, I tried to explain that I believe Waterfall has it’s place in many, many areas just not in software development but this argument fell on deaf ears. So it got me to thinking: “Am I right?” I had looked at some evidence years ago and had proven it out myself on countless occasions but was that still the case all these years later? Did Agile methodologies still hold sway over Waterfall? Did the evidence prove it? To that end I have assembled evidence for myself and for anyone else who has to fight the Agile battle. Please feel free to add your own evidence (pro or con) in the comments.

 

Please note that I deal in empirical data. Period. I can find any number of people (including myself) who have had good/bad experiences with Waterfall and good/bad experiences with Agile. On the main, I’ve found Agile to be better in the situations I have dealt with but I have seen plenty of people swear to Waterfall the same way. To even the playing field I have to go to objective data as the measure rather than feelings. The data I found shows many data points but there are two that I think are vital for people to understand:

  1. Overall, Agile methodologies are better for software development projects than traditional project management (Waterfall).
  2. Even Agile projects fail; having a superior methodology is no substitute for a good team and solid project discipline.

 

Waterfall Over Agile

I looked for any empirical data that would show traditional project management (Waterfall) beating Agile methodologies for software development. After several hours I gave up. I don’t know if it exists but if it does the data showing Waterfall beating Agile is very hard to find.

 

Agile Over Waterfall

<

p>The exact opposite is true for Agile being better for software development than traditional project management. There were too many studies to include so i decided to focus on one of the key studies that would be most appealing to management. To that end, I found an excellent article written by Dr. David F. Rico, PMP, ACP, CSM entitled “The Business Value of Using Agile Project Management for New Products and Services” (http://davidfrico.com/rico-apm-roi.pdf). It is an extremely concise and well documented survey of data in support of Agile and is a “study of studies” that really summarizes the Agile impact. I suggest you read the entire article but below are the most compelling pieces of data showing improvement of Agile over traditional project management within several studies:

image

http://davidfrico.com/rico-apm-roi.pdf

 

 

In the same article Dr. Rico also mentions the 2008 Maryland study that “[…]developed a database with over 153 data points on the costs and benefits of agile project management from 72 studies.” [Rico, D. F. (2008). What is the ROI of agile vs. traditional methods? An analysis of extreme programming, testdriven development, pair programming, and scrum (using real options). TickIT International, 10(4), 9-18]:

image

http://davidfrico.com/rico-apm-roi.pdf

 

 

Additionally, in 2009 there was another study that examined the “[c]ost and benefit metrics, models, and measures were developed based on 52 data points from 32 studies.” [Rico, D. F., Sayani, H. H., & Sone, S. (2009). The business value of agile software methods: Maximizing ROI with just-in-time processes and documentation. Ft. Lauderdale, FL: J. Ross Publishing.]:

image

http://davidfrico.com/rico-apm-roi.pdf

 

 

Naturally there are many, many more articles on the benefits of Agile. One other one that springs to mind is Ben Linder’s article entitled, “Evidence of Success of Agile Projects”. (http://www.infoq.com/news/2012/11/success-agile-projects). Linders cites references to other studies that have shown Agile project success as well as guidance for implementation. Feel free to add you own favorite study in the comments section and, if you have a study that shows Waterfall beating Agile I will gladly add it to the main article for balance.

Brand new Web Part Available!! Script Box WebPart for SharePoint…

This Script Box WebPart (Not the OTB Script Editor WebPart) provides easy options to refer scripts and CSS in SharePoint 2013 and SharePoint 2010 Applications. Apart from using it as a WebPart, this can also be used as a delegate control to inject scripts and CSS into SharePoint Pages without editing the pages.

Why not OTB Script Editor WebPart?

The above would be the first question that might crop in mind while having a look at the title of this blog post. This SharePoint Frontier Script Box web part differs from OTB Script Editor in following aspects.

1. Provides option to inject Scripts and CSS without editing the Page

2. All scripts and CSS are controlled by a configuration list, which enables to manage assets across application at ease.

3. Script Box can also be added as WebPart to a page.

4. Binding script and CSS are based on reference keys rather than actual content. Actual content is stored in a SharePoint List and value provided in title column is used as the key to inject the actual content.

5. Allows tokens for site and site collection URL in script and CSS file path.

6. Once added to a Page, further changes to the list of scripts and CSS to be referred on that page can be done without editing that page.

Deployment and Configuration

1. Download the WSP solution from the bottom of the blog post and deploy it in your SharePoint environment.

2. Once deployed, this will add a Site Collection scoped Feature named “SharePoint Frontier Script Box WebPart” and a Site scoped feature named “SharePoint Frontier Script Box Delegate

3. Activation of “SharePoint Frontier Script Box WebPart” feature provisions a Web Part named “SCRIPT BOX”. This WebPart can be used in a page to inject scripts and CSS.

4. Activation of “SharePoint Frontier Script Box Delegate” creates a SharePoint List named “Script Box Params”. This list acts a reference repository and has reference to the actual content that has to be injected into the page

5. To add reference to scripts, open the “Site Box Params” list and click “Add new item” .

6. The below table explains the columns available in “Site Box Params” list and its usage

Sl.No Column Name Usage Example
1 Title Used as Key in WebPart based script reference. Does not have any impact on Header based rendering Global AssetsSite Assets
2 Target Decides the rendering type. Header / WebPart
3 Content Accepts reference to JS, CSS file, JS script block, CSS block. Also accepts [SITE_URL] and [SITE_COLLECTION_URL] as tokens in reference URLs. // <!–[CDATA[
javascript” src=”[SITE_COLLECTION_URL]/Style Library/js/sfs.core.js”>
// ]]>
4 IsActive If set as false, content associated with that key won’t be considered for injecting into the page Yes /No

clip_image002

Configuring WebPart based Script Injection

1. WebPart based rendering mode requires Site Collection scoped Feature named “SharePoint Frontier Script Box WebPart” to be activated.

2. Add a new item to the “Script Box Params” list (created on activation of feature) with target set to “WebPart” and set the value for title field as “Site Assets” and add a script or link element to content column(refer image above).

3. Edit the page which you would like to inject the script that you have referenced in “Script Box Params” list.

4. Add the WebPart named “Script Box” located under the category “SharePoint Frontier” to the page.

Select Webpart

5. Edit the Web Part and set the Script ID property to “Site Assets” (The value for Title column provided in Script Box Params List)

6. Enable “Refer Script From Root Site”, if you would like to re-use the “Script Box Params” list located in root site of the site collection rather than pointing to list available in current web.

clip_image003

Configuring Delegate based Script Injection

This method injects Scripts and CSS into page header via additionalpageheader delegate control. Any item added to the “Script Box Params” list in the current web with target type set to “Header” is injected into page header section. This method does not require the page to be edited to inject the content , as the script injection is performed via delegate control

Note: This mode uses delegate control to inject script into page header. So this option will not work in Office 365 and Sandbox based deployments as Sandbox solutions does not support delegate controls.

Result as seen in FireBug console of FireFox

This Script Box WebPart (Not the OTB Script Editor WebPart) provides easy options to refer scripts and CSS in SharePoint 2013 and SharePoint 2010 Applications. Apart from using it as a WebPart, this can also be used as a delegate control to inject scripts and CSS into SharePoint Pages without editing the pages.

Why not OTB Script Editor WebPart?

The above would be the first question that might crop in mind while having a look at the title of this blog post. This SharePoint Frontier Script Box web part differs from OTB Script Editor in following aspects.

1. Provides option to inject Scripts and CSS without editing the Page

2. All scripts and CSS are controlled by a configuration list, which enables to manage assets across application at ease.

3. Script Box can also be added as WebPart to a page.

4. Binding script and CSS are based on reference keys rather than actual content. Actual content is stored in a SharePoint List and value provided in title column is used as the key to inject the actual content.

5. Allows tokens for site and site collection URL in script and CSS file path.

6. Once added to a Page, further changes to the list of scripts and CSS to be referred on that page can be done without editing that page.

Deployment and Configuration

1. Download the WSP solution from the bottom of the blog post and deploy it in your SharePoint environment.

2. Once deployed, this will add a Site Collection scoped Feature named “SharePoint Frontier Script Box WebPart” and a Site scoped feature named “SharePoint Frontier Script Box Delegate

3. Activation of “SharePoint Frontier Script Box WebPart” feature provisions a Web Part named “SCRIPT BOX”. This WebPart can be used in a page to inject scripts and CSS.

4. Activation of “SharePoint Frontier Script Box Delegate” creates a SharePoint List named “Script Box Params”. This list acts a reference repository and has reference to the actual content that has to be injected into the page

5. To add reference to scripts, open the “Site Box Params” list and click “Add new item” .

6. The below table explains the columns available in “Site Box Params” list and its usage

Sl.No Column Name Usage Example
1 Title Used as Key in WebPart based script reference. Does not have any impact on Header based rendering Global AssetsSite Assets
2 Target Decides the rendering type. Header / WebPart
3 Content Accepts reference to JS, CSS file, JS script block, CSS block. Also accepts [SITE_URL] and [SITE_COLLECTION_URL] as tokens in reference URLs. // <!–[CDATA[
javascript” src=”[SITE_COLLECTION_URL]/Style Library/js/sfs.core.js”>
// ]]>
4 IsActive If set as false, content associated with that key won’t be considered for injecting into the page Yes /No

clip_image002

Configuring WebPart based Script Injection

1. WebPart based rendering mode requires Site Collection scoped Feature named “SharePoint Frontier Script Box WebPart” to be activated.

2. Add a new item to the “Script Box Params” list (created on activation of feature) with target set to “WebPart” and set the value for title field as “Site Assets” and add a script or link element to content column(refer image above).

3. Edit the page which you would like to inject the script that you have referenced in “Script Box Params” list.

4. Add the WebPart named “Script Box” located under the category “SharePoint Frontier” to the page.

Select Webpart

5. Edit the Web Part and set the Script ID property to “Site Assets” (The value for Title column provided in Script Box Params List)

6. Enable “Refer Script From Root Site”, if you would like to re-use the “Script Box Params” list located in root site of the site collection rather than pointing to list available in current web.

clip_image003

Configuring Delegate based Script Injection

This method injects Scripts and CSS into page header via additionalpageheader delegate control. Any item added to the “Script Box Params” list in the current web with target type set to “Header” is injected into page header section. This method does not require the page to be edited to inject the content , as the script injection is performed via delegate control

Note: This mode uses delegate control to inject script into page header. So this option will not work in Office 365 and Sandbox based deployments as Sandbox solutions does not support delegate controls.

Result as seen in FireBug console of FireFox

clip_image004

Visual Studio 2013 Update 2 CTP2 – New Features!!

Today, the Visual Studio team announced the release of CTP2 of Visual Studio 2013 Update 2 .  Our team added a few useful features and did some bug fixing in this update to improve the web development experience.  We will have future blogs to talk about some of the features in detail.

New SASS project item and editor

We added LESS in VS2013 RTM, and we now have a SASS project item and editor.  SASS editor features are comparable to LESS editor, include colorization, variable and Mixins IntelliSense, comment/uncomment, quick info, formatting, syntax validation, outlining, goto definition, color picker, tools option setting etc.

image

image

New JSON project item and editor

We have added a JSON project item and editor to Visual Studio.  Current JSON editor features include colorization, syntax validation, brace completion, outlining, tools option setting and more.

image

Create remote Azure resources option when creating a new Web project

We added a Windows Azure “Create remote resources” checkbox on the new web application dialog.  By choosing it, you will be able to integrate the experience of creating a new web application, setting up the Windows Azure publishing site for testing, and creating publishing profile in a few simple steps.

image

image

MVC/SPA Template changes

We integrated Microsoft.AspNet.Identity 2.0-alpha1 into the new project templates.  You can upgrade it to Microsoft.AspNet.Identity 2.0-beta1 to use two factor authentication. 

For the SPA template, we removed the complicated AJAX based authentication, it now uses the simpler authentication method used in the MVC template.

LESS editor improvements

We added features including nested media queries, named parameter support, support for selector interpolation, support for semicolons as parameter separators, goto definition for @import, goto definition of variables and mixins.

Knockout IntelliSense upgrade

We added a non-standard KnockOut syntax for VS intelliSense, “ko-vs-editor viewModel:” syntax.  It can be used to bind to multiple view models on a page using comments in the form:

Code Snippet
  1. <!– ko-vs-editor viewModel: <any javascript expression that evaluates to an object> –>
  2.  
  3. <!– /ko-vs-editor >

image

We also added support for nested ViewModel IntelliSense, so you may drill into deeply nested objects on the ViewModel. 

<div data-bind=”text: foo.bar.baz.etc” />

The IntelilSense displayed is the full IntelliSense of the JavaScript Object. 

image

New URL Picker in HTML, Razor, CSS, LESS and SASS pages

VS 2013 shipped with no URL picker outside of WebForm pages.  The new URL picker for HTML, Razor, CSS, LESS and SASS editors is a dialog-free, fluent typing picker that understands ‘..’ and filters file lists appropriately for img’s and links.

image

image

image

Browser Link New Features

BrowserLink now supports HTTPS connections and will list that in Dashboard with other connections as long as the certificate is trusted by browser.

ASP.NET MVC 5.1.1, ASP.NET Web API 2.1.1 and ASP.NET Web Pages 3.1.1 are included

We announced ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 in January.  We integrated that release with some minor bug fixes into VS 2013 Update 2 CTP2.

Known Problems

Web Essential 2013 is not compatible with the Update 2 CTP2. If you install Update 2 CTP2, after opening Visual Studio, you’ll get an error message “EditorExtensionsPackage” couldn’t be loaded.   We hope to have a new version of Web Essentials out soon to support this release.

Summary

<

p>We hope you can evaluate these new features and let us know about any bugs and suggestions.  For VS features, please use Connect to submit bugs, ASP.NET UserVoice to submit and vote for suggestions, and the ASP.NET Forums for Q&A.  For MVC/WebAPI/WebPages issues, please submit any issues you encounter and feature suggestions for future releases on our CodePlex site.

 

Loading SharePoint Web Parts Contents Asynchronously Using Update Panel and Ajax – Free Web Part Template

Download Asynchronous Web Part with Ajax Update Panel

Web parts that retrieve data from across the network without asynchronous processing, our web parts will have serious limitations when it comes to optimizing page response.

For achieving the optimization factor in page response you need to use the asynchronous processing support provided by the ASP.NET Framework.

For implementing asynchronous in our web parts, we have more than one way

1-      Using CallBackEventHandler interface.

2-      Using ASP.NET AJAX.

Here, we will implement asynchronous using update panel and AJAX. Firstly, our example is a web part connects to YAHOO! Finance web service for retrieving data about stock exchange.

Prerequisites

1-      Visual Studio 2010.

2-      SharePoint Server 2010.

Creating Stock exchange Web Part

As we said above our web part will connect to internet web service which will have limitations in page response so for avoiding this limitation we need to load

Here, for optimizing page response we want to load the entire page firstly then load all of the important parts on the page first and then load the slower loading part(s) later. While the page is loading, placeholders are displayed to indicate that additional content is coming. After the page loads, the content for the placeholders is retrieved and displayed asynchronously.

 Here, we  create two views, one for displaying loading process with an animated image (GIF) as previous screen shot and the second display the content of the web part as the following

Steps:-

1-      Create New Project with Visual Studio 2010.

2-      Select Visual Web Part project Template.

3-      Open user control file.

4-      Add to user control, Update panel from toolbox.

5-      Now, we create the first view which represents Loading Process

6-      Create the second view which represents content view, this view contains fields for each of Stock Symbol, Date, Index Value, and image for value.

7-      Add ASP timer control for doing the post back to start connecting to remote web service for retrieving the Stock Exchange value.

8-      In The ASP:Timer’s OnTick event — triggered 1ms after the page loads — triggers the routine to load Stock Exchange

This our web part logic

Full Code Shot:-

150 FREE Microsoft eBooks, covering Windows 7, Windows 8, Office 2010, Office 2013, Office 365, Office Web Apps, Windows Server 2012, Windows Phone 7, Windows Phone 8, SQL Server 2008, SQL Server 2012, SharePoint Server 2010, SharePoint Server 2013, Azure

FREE!

Now there’s a word that everyone can get excited about, right? Well, after looking at the results of the three “Free Microsoft eBooks” posts I have shared here this fiscal year (Microsoft’s fiscal year is July 1 – June 30), it is amazing to see the excitement that has come about from them and the incredible amount of downloads that have taken place to date!

Today, I am happy to share some fantastic news and some information I have been asked for that you said would be helpful for you:

Here’s the list of the Top 50 FREE Microsoft eBooks downloaded so far:

Windows 7 Power Users GuidePDF Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI
Programming Windows Phone 7
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2008 R2
PDF
XPS
Get started with SharePoint Server 2010
PDF
EPUB
MOBI
Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI
Understanding Microsoft Virtualization R2 Solutions
PDF
XPS
Microsoft Office 2010 First Look
PDF
XPS
Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS
Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS
Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB
Programming Windows Phone 7 (Special Excerpt 2)
PDF
Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI
Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI
Deploying Windows 7 Essential Guidance
PDF
Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI
Own Your Future
PDF
XPS
Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI
Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI
Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI
Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI
Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI
Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF
Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI
Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI
SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI
Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI
Master Data Services Capacity Guidelines
PDF
EPUB
MOBI
Configure Kerberos Authentication for SharePoint 2010 Products
DOCX
PDF
EPUB
MOBI
Deployment guide for Office 2013
EPUB
MOBI
PDF
SQL Server 2012 Developer Training KitPDF Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF
Developing Applications for the Cloud, 2nd EditionPDF Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS
Programming Windows 8 Apps 2nd Preview
PDF
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS
Welcome to Windows 7PDF Explore SharePoint 2013
EPUB
MOBI
PDF
Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI
Operations guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

5) The other thing I have been asked many times is, “Do you have one single post with all of the eBooks listed so we can go through them instead of bouncing between the three different posts?” The answer to that has been No to date; however, I figured that since I was pulling together all of the stats last night, I could pull together the books into a single list as well. As such, here they are, almost 150 completely FREE Microsoft eBooks for you to download and use: (NOTE: If you don’t see a list of links below the book image, it is because it is only available in one format. Just click on the image and your download will begin)

Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF
Programming Windows Phone 7
PDF
EPUB
MOBI
Programming Windows Phone 7 (Special Excerpt 2)
PDF
Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS
Windows 7 Power Users Guide Deploying Windows 7 Essential Guidance
PDF
Welcome to Windows 7 What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS
Administrator’s Guide for Microsoft Application Virtualization (App-V) 5.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft BitLocker Administration and Monitoring 1.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 7
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 8.0
EPUB
MOBI
PDF
Administrator’s Guide for Microsoft User Experience Virtualization (UE-V) 1.0
EPUB
MOBI
PDF
Developing an end-to-end Windows Store app using C++ and XAML: Hilo
PDF
Developing an end-to-end Windows Store app using JavaScript: Hilo
PDF
Prism for the Windows Runtime: Developing a Windows Store business app using C#, XAML, and Prism
PDF
Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI
Microsoft Office 2010 First Look
PDF
XPS
Deployment guide for Office 2013
EPUB
MOBI
PDF
Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF
Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS
Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI
Planning guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Deployment guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Deployment guide for Office 2013 Preview Office 2010 Developer Training Kit Office 365 Developer Training Kit Office 365 Guides for professionals and small businesses
Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS
Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI
Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI
Get started with SharePoint Server 2010
PDF
EPUB
MOBI
Explore SharePoint 2013
EPUB
MOBI
PDF
Deployment guide for SharePoint 2013
EPUB
MOBI
PDF
Test Lab Guide: eBook for SharePoint Server 2013 Intranet and Team Sites
EPUB
MOBI
PDF
DOC
Create a Balanced Scorecard (SharePoint Server 2010)
EPUB
MOBI
PDF
SharePoint Server for Business Intelligence
EPUB
MOBI
PDF
Deployment guide for SharePoint 2013 Preview Getting started with Microsoft SharePoint Foundation 2010 Technical reference for Microsoft SharePoint Server 2010
Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI
Remote BLOB storage for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI
Upgrading to SharePoint Server 2010
PDF
EPUB
MOBI
Getting Started with SharePoint Server 2010
PDF
DOC
XPS
EPUB
MOBI
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS
Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 2
PDF
DOC
XPS
Planning guide for server farms and environments for Microsoft SharePoint Server 2010
PDF
XPS
DOC
Capacity planning for Microsoft SharePoint Server 2010
PDF
XPS
DOC
5 Tips for a Smooth SSIS Upgrade to SQL Server 2012
EPUB
MOBI
PDF
A Hitchiker’s Guide to Microsoft StreamInsight Queries
EPUB
MOBI
PDF
Data Mining Extensions (DMX) Reference
EPUB
MOBI
PDF
Data Quality Services
EPUB
MOBI
PDF
High Availability Solutions
EPUB
MOBI
PDF
Master Data Services
EPUB
MOBI
PDF
Monitor and Tune for Performance
EPUB
MOBI
PDF
Multidimensional Expressions (MDX) Reference
EPUB
MOBI
PDF
SQL Server Distributed Replay
EPUB
MOBI
PDF
Transact-SQL Data Definition Language (DDL) Reference
EPUB
MOBI
PDF
XQuery Language Reference
EPUB
MOBI
PDF
Extracting and Loading SharePoint Data in SQL Server Integration Services
EPUB
MOBI
PDF
Integration Services: Extending Packages with Scripting
EPUB
MOBI
PDF
Multidimensional Model Programming
EPUB
MOBI
PDF
Optimized Bulk Loading of Data into Oracle
EPUB
MOBI
PDF
Planning Disaster Recovery for Microsoft SQL Server Reporting Services in SharePoint Integrated Mode
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Reporting Services
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Writing Transact-SQL Statements
EPUB
MOBI
PDF
SQL Server Community FAQs Manual
EPUB
MOBI
PDF
SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI
Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI
Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI
QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI
Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI
Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI
SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI
Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI
SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI
Master Data Services Capacity Guidelines
PDF
EPUB
MOBI
SQL Server 2012 Developer Training Kit Cmdlet Reference for App Controller in System Center 2012 SP1
EPUB
MOBI
PDF
Technical Documentation for System Center 2012 – Virtual Machine Manager
EPUB
MOBI
PDF
Upgrade Team Foundation Server 2012: the ultimate upgrade guide
EPUB
MOBI
PDF
Better Unit Testing with Microsoft Fakes
EPUB
MOBI
PDF
Dependency Injection with Unity
PDF
Developer’s Guide to Microsoft Enterprise Library (Second Edition)
PDF
Testing for Continuous Delivery with Visual Studio 2012
PDF
ASP.NET Multi-Tier Windows Azure Application Using Storage Tables, Queues, and Blobs
EPUB
MOBI
PDF
ASP.NET Web Deployment using Visual Studio
EPUB
MOBI
PDF
Developing Modern Mobile Web Apps
EPUB
MOBI
PDF
The Entity Framework 4.0 and ASP.NET Web Forms – Getting Started
EPUB
MOBI
PDF
Getting Started with the Entity Framework 4.1 using ASP.NET MVC
EPUB
MOBI
PDF
Project Silk: Client-Side Web Development for Modern Browsers
PDF
Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI
Windows Azure Prescriptive Guidance
PDF
EPUB
MOBI
Windows Azure Service Bus Reference
PDF
EPUB
MOBI
Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB
MOBI
Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI
Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI
Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI
Own Your Future
PDF
XPS
Developing an Advanced Windows Phone 7.5 App that Connects to the Cloud Developing Applications for the Cloud, 2nd Edition
Autoscaling Application Block and Transient Fault Handling Application Block Reference
EPUB
MOBI
PDF
Create Your First Application: Node.js and Windows Azure
EPUB
MOBI
PDF
Developing Multi-tenant Applications for the Cloud on Windows Azure (3rd Edition)
PDF
Drupal on Windows Azure
EPUB
MOBI
PDF
Exploring CQRS and Event Sourcing: A journey into high scalability, availability, and maintainability with Windows Azure
PDF
Migrating Data-Centric Applications to Windows Azure
EPUB
MOBI
PDF
Moving Applications to the Cloud on Windows Azure (3rd Edition)
PDF
Using Windows Azure Mobile Services to Cloud-Enable your iOS Apps
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable Your Windows Phone 8 Apps
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable your Windows Store Apps in C#
EPUB
MOBI
PDF
Using Windows Azure Mobile Services to Cloud-Enable Your Windows Store Apps in JavaScript
EPUB
MOBI
PDF
Windows Azure and SQL Database Tutorials
EPUB
MOBI
PDF
Building Hybrid Applications in the Cloud on Windows Azure Building Elastic and Resilient Cloud Applications – Developer’s Guide to the Enterprise Library 5.0 Integration Pack for Windows Azure
PDF
EPUB
MOBI
Deployment guide for Duet Enterprise for Microsoft SharePoint and SAP Server 2.0 Preview Microsoft Dynamics GP 2010 Guides: Financials
Microsoft Dynamics CRM 2011 User’s Guide Dynamics CRM 2011 Developer Training Kit Microsoft Dynamics CRM 2011 Implementation Guide Digital Storytelling
Free Tools in the Classroom Windows Live Movie Maker in the Classroom Windows 7 in the Classroom Microsoft Office Web Apps Teaching Guide
Microsoft Office in the Classroom Developing Critical Thinking through Web Research Skills Bing in the Classroom A Guide to Claims-Based Identity and Access Control, Second Edition
PDF
Introducing Windows Server 2012
EPUB
MOBI
PDF
TCP/IP Fundamentals for Microsoft Windows
PDF
Understanding Microsoft Virtualization R2 Solutions
PDF
XPS
Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI
Introducing Microsoft SQL Server 2008 R2
PDF
XPS
Lync for Mac 2011 Deployment Guide Microsoft Lync Server 2010 Resource Kit Tools
Microsoft Lync Server 2010 Resource Kit Microsoft Lync Server 2010 Security Guide Developing Applications for the Cloud – 2nd Edition Visual Studio LightSwitch Training Kit
“Own Your Space–Keep Yourself and Your Stuff Safe Online” Digital Book for Teens

Once again, thank you to all of you for sharing this information with others to let them know about these resources being made available to them from Microsoft, absolutely FREE! Please continue to share these with others so they too can have access to this information to help them as they travel down their path of learning and knowledge in the computer field. I’m sure I will be putting future collections of eBooks up here on the blog as I come across more and compile further lists, so be sure you are subscribed to the blog and following me online through my variety of social media entities, including through my Microsoft Info Partner Windows Phone mobile app that brings you the latest Microsoft information directly from our teams here at Microsoft. Also, if you’re heading to Worldwide Partner Conference this year, be sure to come up, introduce yourself (if we haven’t met before), or say Hi (if we have met) and join in on becoming part of the Fantastic People of WPC13 that I will be compiling this year.

Did you find this information helpful? If so, you may want to make sure you are utilizing all of the areas I share information online, such as:

Get the Microsoft Info Partner Mobile App and get access to the latest from all of those plus: product teams, MPN teams, Microsoft News and hundreds more resources here at Microsoft right on your phone:

Almost 150 FREE Microsoft eBooks, covering Windows 7, Windows 8, Office 2010, Office 2013, Office 365, Office Web Apps, Windows Server 2012, Windows Phone 7, Windows Phone 8, SQL Server 2008, SQL Server 2012, SharePoint Server 2010, SharePoint Server 2013,

FREE! Now there’s a word that everyone can get excited about, right? Well, after looking at the results of the three “Free Microsoft eBooks” posts I have shared here this fiscal year (Microsoft’s fiscal year is July 1 – June 30), it is amazing to see the excitement that has come about from them and the incredible amount of downloads that have taken place to date! Just last week, I put up the third post in the series of Free Microsoft eBooks giveaways this fiscal year and said that I wanted to give away 1,000,000 FREE downloads of the Microsoft eBooks. I’ll admit, some people thought I was crazy to put up a target as large as 1,000,000, but I had faith in my blog readers and social media followers to help spread the word and share the excitement about the offer.

Today, I am happy to share some fantastic news and some information I have been asked for that you said would be helpful for you:

1) I am happy to announce that we have reached the 1,000,000 FREE download mark for the Microsoft eBooks since my post went live last week! Thank you to all of you for helping spread the word and let others know about this offer.

2) I went back and looked at how we’re doing on the downloads of all of the eBooks from my three FREE Microsoft eBooks posts this fiscal year, and I am happy to share that we have now exceeded the 3,500,000 FREE downloads mark for the almost 150 Microsoft eBooks included in my posts since they went live! It only seemed fitting that we hit the 1,000,000 mark for last week’s post in the same 24 hour period that we exceeded the 3,500,000 mark all up for the giveaways. Again, thank you to all of you for sharing these offers this year!

3) I have been asked if once we hit the 1,000,000 FREE download mark if the offer to download the books would expire. The answer is, “No, please keep downloading the books and sharing these links with your peers, counterparts, and anyone else you think could benefit from them!”

4) Several people have asked me, “Do you have a list of the most popular eBooks being downloaded out of the ones you’ve shared?” Well, I hadn’t tallied up the list and shared anything prior to today; however, since I’ve received the ask enough times and was looking at the numbers last night, I thought I would share with you the top 50 FREE Microsoft eBooks in order, in terms of number of downloads to date since I posted about them, so you can see what they are (and make sure you have them if you don’t already). Now, something to keep in mind as you look at this list of the top 50 below, remember that two of my posts went live last July and the third one just went up last week. I call this out because the ones that have been posted since last July have obviously had more time to be downloaded, so the numbers will be skewed a little just based on that. An interesting thing I found while compiling this list of the top 50 though was, there are actually four of them that are from my post last week! That’s VERY impressive to see the download numbers grow that fast for these items in just over week to overcome 11 months worth of download time for the others. The four from last week that are flying up the charts are:

  • Microsoft Office 365 for professionals and small businesses: Help and How To
  • Deployment guide for Office 2013
  • Programming Windows 8 Apps with HTML, CSS, and JavaScript
  • Explore SharePoint 2013

So if you want to glean some insights into what’s hot right now and on top of people’s minds, it’s Office 365, Office 2013, Windows 8 (and app development for it), and SharePoint 2013. When you compare that list to the rest in the top 50, you see lots of interest in these topics, plus Windows Server, SQL Server, Microsoft Virtualization and Windows Phone, just to name a few. So, are you up to speed on these hot topics? If not, why not grab some FREE eBooks and get going?

Here’s the list of the Top 50 FREE Microsoft eBooks downloaded so far:

   

Windows 7 Power Users Guide

PDF

Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI

Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI

Programming Windows Phone 7
PDF
EPUB
MOBI

Introducing Microsoft SQL Server 2008 R2
PDF
XPS

Get started with SharePoint Server 2010
PDF
EPUB
MOBI

Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI

Understanding Microsoft Virtualization R2 Solutions
PDF
XPS

Microsoft Office 2010 First Look
PDF
XPS

Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS

Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS

Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB

Programming Windows Phone 7 (Special Excerpt 2)
PDF

Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI

SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI

Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI

SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI

Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI

Deploying Windows 7 Essential Guidance
PDF

Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI

Own Your Future
PDF
XPS

Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI

SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI

Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI

Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI

Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI

Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI

Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI

Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF

Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI

Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI

SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI

Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI

Master Data Services Capacity Guidelines
PDF
EPUB
MOBI

Configure Kerberos Authentication for SharePoint 2010 Products
DOCX
PDF
EPUB
MOBI

Deployment guide for Office 2013
EPUB
MOBI
PDF

SQL Server 2012 Developer Training Kit

PDF

Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF

Developing Applications for the Cloud, 2nd Edition

PDF

Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS

Programming Windows 8 Apps 2nd Preview
PDF

Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS

Welcome to Windows 7

PDF

Explore SharePoint 2013
EPUB
MOBI
PDF

Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI

Operations guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

5) The other thing I have been asked many times is, “Do you have one single post with all of the eBooks listed so we can go through them instead of bouncing between the three different posts?” The answer to that has been No to date; however, I figured that since I was pulling together all of the stats last night, I could pull together the books into a single list as well. As such, here they are, almost 150 completely FREE Microsoft eBooks for you to download and use: (NOTE: If you don’t see a list of links below the book image, it is because it is only available in one format. Just click on the image and your download will begin)

Programming Windows 8 Apps with HTML, CSS, and JavaScript
EPUB
MOBI
PDF

Programming Windows Phone 7
PDF
EPUB
MOBI

Programming Windows Phone 7 (Special Excerpt 2)
PDF

Moving to Microsoft Visual Studio 2010
VS2005 PDF
VS2005 XPS
VS2008 PDF
VS2008 XPS

Windows 7 Power Users Guide

Deploying Windows 7 Essential Guidance
PDF

Welcome to Windows 7

What You Can Do Before You Call Tech Support (Windows 7)
PDF
XPS

Administrator’s Guide for Microsoft Application Virtualization (App-V) 5.0
EPUB
MOBI
PDF

Administrator’s Guide for Microsoft BitLocker Administration and Monitoring 1.0
EPUB
MOBI
PDF

Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 7
EPUB
MOBI
PDF

Administrator’s Guide for Microsoft Diagnostics and Recovery Toolset (DaRT) 8.0
EPUB
MOBI
PDF

Administrator’s Guide for Microsoft User Experience Virtualization (UE-V) 1.0
EPUB
MOBI
PDF

Developing an end-to-end Windows Store app using C++ and XAML: Hilo
PDF

Developing an end-to-end Windows Store app using JavaScript: Hilo
PDF

Prism for the Windows Runtime: Developing a Windows Store business app using C#, XAML, and Prism
PDF

Office 365 – Connect and Collaborate virtually anywhere, anytime
PDF
EPUB
MOBI

Microsoft Office 2010 First Look
PDF
XPS

Deployment guide for Office 2013
EPUB
MOBI
PDF

Microsoft Office 365 for professionals and small businesses: Help and How To
EPUB
MOBI
PDF

Getting started with
Microsoft Office 2010 – For IT Professionals
PDF
MOBI
DOC
XPS

Security and Privacy for Microsoft Office 2010 Users
PDF
EPUB
MOBI

Planning guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

Deployment guide for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

Deployment guide for Office 2013 Preview

Office 2010 Developer Training Kit

Office 365 Developer Training Kit

Office 365 Guides for professionals and small businesses

Technical reference for Microsoft Office 2010 – For IT professionals
DOC
PDF
XPS

Business continuity management for SharePoint Server 2010
PDF
EPUB
MOBI

Deployment guide for SharePoint Server 2010
PDF
EPUB
MOBI

Get started with SharePoint Server 2010
PDF
EPUB
MOBI

Explore SharePoint 2013
EPUB
MOBI
PDF

Deployment guide for SharePoint 2013
EPUB
MOBI
PDF

Test Lab Guide: eBook for SharePoint Server 2013 Intranet and Team Sites
EPUB
MOBI
PDF
DOC

Create a Balanced Scorecard (SharePoint Server 2010)
EPUB
MOBI
PDF

SharePoint Server for Business Intelligence
EPUB
MOBI
PDF

Deployment guide for SharePoint 2013 Preview

Getting started with Microsoft SharePoint Foundation 2010

Technical reference for Microsoft SharePoint Server 2010

Governance guide for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

Profile synchronization guide for SharePoint Server 2010
PDF
EPUB
MOBI

Remote BLOB storage for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

Technical reference for Microsoft SharePoint Server 2010
PDF
EPUB
MOBI

Upgrading to SharePoint Server 2010
PDF
EPUB
MOBI

Getting Started with SharePoint Server 2010
PDF
DOC
XPS
EPUB
MOBI

Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 1
PDF
DOC
XPS

Planning guide for sites and solutions for Microsoft SharePoint Server 2010, Part 2
PDF
DOC
XPS

Planning guide for server farms and environments for Microsoft SharePoint Server 2010
PDF
XPS
DOC

Capacity planning for Microsoft SharePoint Server 2010
PDF
XPS
DOC

5 Tips for a Smooth SSIS Upgrade to SQL Server 2012
EPUB
MOBI
PDF

A Hitchiker’s Guide to Microsoft StreamInsight Queries
EPUB
MOBI
PDF

Data Mining Extensions (DMX) Reference
EPUB
MOBI
PDF

Data Quality Services
EPUB
MOBI
PDF

High Availability Solutions
EPUB
MOBI
PDF

Master Data Services
EPUB
MOBI
PDF

Monitor and Tune for Performance
EPUB
MOBI
PDF

Multidimensional Expressions (MDX) Reference
EPUB
MOBI
PDF

SQL Server Distributed Replay
EPUB
MOBI
PDF

Transact-SQL Data Definition Language (DDL) Reference
EPUB
MOBI
PDF

XQuery Language Reference
EPUB
MOBI
PDF

Extracting and Loading SharePoint Data in SQL Server Integration Services
EPUB
MOBI
PDF

Integration Services: Extending Packages with Scripting
EPUB
MOBI
PDF

Multidimensional Model Programming
EPUB
MOBI
PDF

Optimized Bulk Loading of Data into Oracle
EPUB
MOBI
PDF

Planning Disaster Recovery for Microsoft SQL Server Reporting Services in SharePoint Integrated Mode
EPUB
MOBI
PDF

SQL Server 2012 Tutorials: Reporting Services
EPUB
MOBI
PDF

SQL Server 2012 Tutorials: Writing Transact-SQL Statements
EPUB
MOBI
PDF

SQL Server Community FAQs Manual
EPUB
MOBI
PDF

SQL Server 2012 Tutorials: Analysis Services – Tabular Modeling
PDF
EPUB
MOBI

Microsoft SQL Server AlwaysOn Solutions Guide for High Availability and Disaster Recovery
PDF
EPUB
MOBI

Transact-SQL Data Manipulation Language (DML) Reference
PDF
EPUB
MOBI

QuickStart: Learn DAX Basics in 30 Minutes
PDF
EPUB
MOBI

SQL Server 2012 Tutorials: Analysis Services – Data Mining
PDF
EPUB
MOBI

Microsoft SQL Server Analysis Services Multidimensional Performance and Operations Guide
PDF
EPUB
MOBI

Data Analysis Expressions (DAX) Reference
PDF
EPUB
MOBI

SQL Server 2012 Upgrade Technical Guide
PDF
EPUB
MOBI

Backup and Restore of SQL Server Databases
PDF
EPUB
MOBI

SQL Server 2012 Tutorials: Analysis Services – Multidimensional Modeling
PDF
EPUB
MOBI

Master Data Services Capacity Guidelines
PDF
EPUB
MOBI

SQL Server 2012 Developer Training Kit

Cmdlet Reference for App Controller in System Center 2012 SP1
EPUB
MOBI
PDF

Technical Documentation for System Center 2012 – Virtual Machine Manager
EPUB
MOBI
PDF

Upgrade Team Foundation Server 2012: the ultimate upgrade guide
EPUB
MOBI
PDF

Better Unit Testing with Microsoft Fakes
EPUB
MOBI
PDF

Dependency Injection with Unity
PDF

Developer’s Guide to Microsoft Enterprise Library (Second Edition)
PDF

Testing for Continuous Delivery with Visual Studio 2012
PDF

ASP.NET Multi-Tier Windows Azure Application Using Storage Tables, Queues, and Blobs
EPUB
MOBI
PDF

ASP.NET Web Deployment using Visual Studio
EPUB
MOBI
PDF

Developing Modern Mobile Web Apps
EPUB
MOBI
PDF

The Entity Framework 4.0 and ASP.NET Web Forms – Getting Started
EPUB
MOBI
PDF

Getting Started with the Entity Framework 4.1 using ASP.NET MVC
EPUB
MOBI
PDF

Project Silk: Client-Side Web Development for Modern Browsers
PDF

Moving Applications to the Cloud, 2nd Edition
PDF
EPUB
MOBI

Windows Azure Prescriptive Guidance
PDF
EPUB
MOBI

Windows Azure Service Bus Reference
PDF
EPUB
MOBI

Intro to ASP.NET MVC 4 with Visual Studio (Beta)
PDF
EPUB
MOBI

Deploying an ASP.NET Web Application to a Hosting Provider using Visual Studio
PDF
EPUB
MOBI

Getting Started with ASP.NET 4.5 Web Forms (Beta)
PDF
EPUB
MOBI

Introducing ASP.NET Web Pages 2
PDF
EPUB
MOBI

Own Your Future
PDF
XPS

Developing an Advanced Windows Phone 7.5 App that Connects to the Cloud

Developing Applications for the Cloud, 2nd Edition

Autoscaling Application Block and Transient Fault Handling Application Block Reference
EPUB
MOBI
PDF

Create Your First Application: Node.js and Windows Azure
EPUB
MOBI
PDF

Developing Multi-tenant Applications for the Cloud on Windows Azure (3rd Edition)
PDF

Drupal on Windows Azure
EPUB
MOBI
PDF

Exploring CQRS and Event Sourcing: A journey into high scalability, availability, and maintainability with Windows Azure
PDF

Migrating Data-Centric Applications to Windows Azure
EPUB
MOBI
PDF

Moving Applications to the Cloud on Windows Azure (3rd Edition)
PDF

Using Windows Azure Mobile Services to Cloud-Enable your iOS Apps
EPUB
MOBI
PDF

Using Windows Azure Mobile Services to Cloud-Enable Your Windows Phone 8 Apps
EPUB
MOBI
PDF

Using Windows Azure Mobile Services to Cloud-Enable your Windows Store Apps in C#
EPUB
MOBI
PDF

Using Windows Azure Mobile Services to Cloud-Enable Your Windows Store Apps in JavaScript
EPUB
MOBI
PDF

Windows Azure and SQL Database Tutorials
EPUB
MOBI
PDF

Building Hybrid Applications in the Cloud on Windows Azure

Building Elastic and Resilient Cloud Applications – Developer’s Guide to the Enterprise Library 5.0 Integration Pack for Windows Azure
PDF
EPUB
MOBI

Deployment guide for Duet Enterprise for Microsoft SharePoint and SAP Server 2.0 Preview

Microsoft Dynamics GP 2010 Guides: Financials

Microsoft Dynamics CRM 2011 User’s Guide

Dynamics CRM 2011 Developer Training Kit

Microsoft Dynamics CRM 2011 Implementation Guide

Digital Storytelling

Free Tools in the Classroom

Windows Live Movie Maker in the Classroom

Windows 7 in the Classroom

Microsoft Office Web Apps Teaching Guide

Microsoft Office in the Classroom

Developing Critical Thinking through Web Research Skills

Bing in the Classroom

A Guide to Claims-Based Identity and Access Control, Second Edition
PDF

Introducing Windows Server 2012
EPUB
MOBI
PDF

TCP/IP Fundamentals for Microsoft Windows
PDF

Understanding Microsoft Virtualization R2 Solutions
PDF
XPS

Introducing Windows Server 2012 – RTM Edition!
PDF
EPUB
MOBI

Introducing Microsoft SQL Server 2012
PDF
EPUB
MOBI

Introducing Microsoft SQL Server 2008 R2
PDF
XPS

Lync for Mac 2011 Deployment Guide

Microsoft Lync Server 2010 Resource Kit Tools

Microsoft Lync Server 2010 Resource Kit

Microsoft Lync Server 2010 Security Guide

Developing Applications for the Cloud – 2nd Edition

Visual Studio LightSwitch Training Kit

“Own Your Space–Keep Yourself and Your Stuff Safe Online” Digital Book for Teens

Important annoucement from MS SharePoint team regarding Sandbox solutions

While developing sandboxed solutions that contain only declarative markup and JavaScript — which we call no-code sandboxed solutions (NCSS) — is still viable, we have deprecated the use of custom managed code within the sandboxed solution.

We have introduced the new SharePoint app model as a replacement to those scenarios that required the use of managed code. The app model decouples the SharePoint core product from the app runtime, and this enables much more flexibility and gives you the ability to run the code in the environment of your choice.

We realize that our customers have made investments in coded sandboxed solutions and we will phase them out responsibly. Existing coded sandboxed solutions will continue to work in on-premises SharePoint farms for the foreseeable future.

Given the dynamic nature of online services, we will determine support needs for coded sandboxed solutions in SharePoint Online based on customer demand. NCSSs continue to be supported. All future investments will go to making the new SharePoint app model richer and more powerful.

Accordingly, we recommend that all new development should use the new app model whenever possible. In scenarios where you have to develop a farm solution or coded sandboxed solution, we recommend that you design it so that it can easily evolve toward a more loosely coupled development model.

For more information about the app model written especially for experienced SharePoint developers, see Reimagine SharePoint Development.

Call to action: We want to make the app model great. Help us by identifying scenarios, APIs and feature gaps that make farm solutions or coded sandboxed solutions necessary today. Provide your suggestions and ideas in our UserVoice site.

iPhone SharePoint Apps Shootout

iPhone SharePoint Apps Shootout

 

As we know, Windows SharePoint Services 3.0 and SharePoint Server 2007 are not very mobile friendly, an increasing relevant functionality that will be vastly improved in the just launched SharePoint Foundation 2010 and SharePoint Server 2010. The following 6 iPhone apps come to the rescue with each one promising an iPhone friendly experience in accessing your corporate data stored in SharePoint sites. All but one of the apps use SharePoint web services, specifically lists.asmx, webs.asmx and search.asmx, to get data from SharePoint sites while iSharePhone provides its own server component to handle the communication. So how do they fare?

Features

  Attaché iShare iSharePhone ISP-Browser Moshare Sharetica
Seller LÛCRUM Spyk Software Webstate Petra Troegel Moprise Jacek Rutkowski
Launch Date 2009-06-05 2009-02-26 2009-07-19 2009-12-05 2010-03-23 2009-06-23
Launch Price $2.99 $9.99 Free/$4.99 $5.99 $1.99 $0.99
Current Price (2010-05-11) $0.99 Free Free/$4.99 $0.99 $1.99 $0.99
Version Tested 1.2 1.2.2 1.02 2.5 1.1 1.4
Windows SharePoint Services 3.0 Yes Yes Yes Yes Yes Yes
SharePoint Server 2007 Yes Yes Yes Yes Yes Yes
SharePoint Foundation 2010 Yes Yes No Yes Yes Yes
SharePoint Server 2010 Yes Yes No Yes Yes Yes
Require Server Software No No Yes No No No
SSL No Yes Yes Yes Yes Yes
Browse sub-sites No Yes Yes Yes No No
Browse lists & libraries Yes Yes Yes Yes Yes Yes
Edit & add list items No Yes No No No No
Read Documents Yes Yes Yes Yes Yes Yes
Upload documents No No No No No No
Offline documents viewing No No No No No Yes
Email documents No No Yes No Yes No
Multiple site urls Yes Yes No Yes Yes Yes
Search No Yes Yes No Yes No
Passcode locking No No No No No No

Set Up

Testing involves accessing an out-of-the-box SharePoint Collaboration Publishing Portal with mostly out-of-the-box contents using all the tested iPhone apps. The configurations are:

  1. iPhone 3GS on OS 3.1.3
  2. SharePoint Server 2007 SP2 on Windows Server 2008
  3. SharePoint Server 2010 Beta on Windows Server 2008 R2

Ratings Explained

Rating scores are graded from 1 to 5, with 1 being the poorest and 5 being the best.

  • Usability – How easy to use
  • Design – How pretty are the page design, composition elements, icons and graphics
  • Features – Functionality
  • Performance – Is it slow or fast? Does it crash? Bugs?
  • Value – Value for money

Attaché: SharePoint Client ($0.99 as of 2010-05-11)

attache01.gif attache02.gif attache03.gif attache04.gif attache05.gif attache06.gif

In Attaché, you set up your SharePoint sites in My Sites, giving each site its URL and login credential. SSL connection does not seem to be supported, at least not for the self-signed certificate I set up. There is no default site but as this is the landing page when the app opens, you can specify which site to browse by tapping a site entry.

The Lists page lists your default site’s lists and libraries together in one grouping. Not all lists and libraries are supported. Unsupported ones are not shown. There are no visual cues if there are sub-folders and items under each entry. Refresh button is also not available. For each list and library item in listing view, the title is shown. In the case of document item, a second line adds the document last modified date and time. For event item, a second line adds the event start and end date and time.

Tapping a document item opens up the document if the file format is readable by iPhone. Document properties are not available. When properties are available for a list item like event or contact, each property value is shown in one line with truncation. Landscape mode is available, giving the property value more room to show before truncation.

For contacts stored in SharePoint, you can add them to iPhone’s Address Book. You can also tap a contact’s phone number to make a call, or send an email to the listed address.

Ratings
Usability 2
Design 2
Features 1
Performance 3
Value 4
Verdict 12

iShare (Free as of 2010-05-11)

iShare01.gif iShare02.gif iShare03.gif iShare04.gif iShare05.gif iShare06.gif iShare07.gif

In iShare, you set up your SharePoint sites in Settings, giving each site its URL and login credential. If you have more than one site, you can specify which one to browse by tapping a site entry as the current site.

The Browse page lists your default site’s sub-sites, lists and libraries in separate groupings. For lists and libraries, an items count total is shown for each entry, adding the number of sub-folders and list or library items, followed by a next arrow. For each list and library item in listing view, the title is shown. In the case of document item, a second line adds the document size and the last modified date and time which strangely is always blank.

To read a document, tap the document title. The document will open up if the file format is readable by iPhone. Tapping the next icon of a list or document item opens up a detail page. Every property value is listed in full with no truncation.

Besides browsing, iShare can also add and edit list items. For lists, tapping the plus icon at the top right allows user to add a list item. When you are at the detail page, tapping the Edit button at the top right allows user to edit or delete the list item.

The Search page adds the ability to perform a full site search. Unfortunately the search results do not have paging and are apparently limited to around 40 matches in my test. If a match returns a document, tapping it will open up the document directly. If a match returns a site or a page, tapping it will open the site or page in browser mode.

Ratings
Usability 4
Design 4
Features 3
Performance 4
Value 5
Verdict 20

iSharePhone (Free/$4.99 as of 2010-05-11)

iSharePhone01.gif

iSharePhone02.gif iSharePhone03.gif iSharePhone04.gif iSharePhone05.gif iSharePhone06.gif

iSharePhone is the only app here that requires a server component to be installed. Each iPhone client license costs $4.99. The first one is included for free so that you can try out the server. This licensing model is quite rare in the iPhone apps world. It bypasses Apple’s cut in a normal sale or in-app purchase model.

Server installation is pretty straightforward. You specify a TCP and a SSL port for the server component to communicate, a SMTP server name or IP address for the emailing of documents, and the SharePoint URL. As such, the server component ties with a single site or site collection only. One thing to take note is to make sure those ports are open in the firewall. The installation creates an iSharePhone web site at the ports specified with custom IIS remote objects utilizing SharePoint API. An iSharePhone Manager is also installed. It allows configuration of ports and SMTP information and management and purchase of additional iPhone licenses.

You set up your one SharePoint site in Settings under User settings. You enter the login credentials (username without domain), your email address, the site’s URL, TCP port and toggle to use SSL.

The Portal page lists your site’s sub-sites at the top, follows by lists and libraries in one grouping. If there are sub-folders, list or library items under each entry, a next arrow is shown. For each list and library item in listing view, the title is shown. Unlike the other apps, there is no refresh icon when you are browsing the site.

Tapping the next icon of a list or document item opens up a detail page. Every property value is listed in full with no truncation. To read a document, tap the document title. The document will open up if the file format is readable by iPhone. To email a document, tap the email icon at the top right. Start typing the recipient’s name and matching results from your iPhone’s contact list will be listed below for your selection. Click Send and the document will be sent via the pre-configured SMTP server as an attachment.

The Search page adds the ability to perform a full site search. The search results do not have paging and are a bit different than what I would get using the site’s native search. I think there is some filtering performed as I noticed no form pages in the search results. If a match returns a document or a page, tapping it will open up the detail page for the item. If a match returns a site, tapping it will browse the site as if you are in the Portal page.

Ratings
Usability 4
Design 4
Features 3
Performance 3
Value 3
Verdict 17

ISP-Browser ($0.99 as of 2010-05-11)

isp-browser01.gif isp-browser02.gif isp-browser03.gif isp-browser04.gif isp-browser05.gif isp-browser06.gif

ISP-Browser has gone through some welcomed bug fixes in the latest release, an improvement over the previous crashy versions. To start, you set up your SharePoint sites in Settings, giving each site its URL and login credential. If you have more than one site, you can specify which one to browse by setting a site as default by first tapping a site entry. It then goes to an Edit site page where you would need to check the Default checkbox and the Save Data button, a procedure that is very PC like, not iPhone like. There is a Start screen option in Settings where you toggle between Browse and Favorites. If the option is set to Browse, the app will immediately switch to the Browse page to list the contents of your default site when it launches.

The Browse page lists your default site’s lists, libraries and sub-sites (new in V2.5) in separate groupings. For lists and libraries, an items count total is shown for each entry, adding the number of sub-folders and list or library items, follows by a next arrow. For each list and library item in listing view, the title is shown along with the last modified date and time follows by a next icon. In the case of document item, the document size is also shown.

Tapping a list or document item opens up the Properties page. Each property is listed in a one-liner. If the property value is too long to fit, it will be truncated follows by a next arrow. Although ISP-Browser has a landscape mode, the property value stays truncated at the same position. Tapping the next arrow opens up a full page showing the property value in its entirety. To read a document, tap the document icon at the top left. The document will open up if the file format is readable by iPhone. Event or calendar list is given a special treatment where you could navigate forward or backward easily through months by using the special navigation near the top.

At the top right of a list or library, there is a favorite button which can be used to save the current list or library as your favorites. Unfortunately only the name of a list or library is shown in the Favorites page. There is no way to tell which site a list or library belongs to. Deletion of favorites is done using the remove text link, away from the standard iPhone edit UI.

Ratings
Usability 3
Design 4
Features 2
Performance
Value 4
Verdict 16

Moshare ($1.99 as of 2010-05-11)

moshare01.gif moshare02.gif moshare03.gif moshare04.gif moshare05.gif moshare06.gif moshare07.gif moshare08.gif

Moshare is the most visually stunning app here. Icons are pretty and colors are appealing. You set up your SharePoint sites in Sites, giving each site its URL and login credential. If you have more than one site, you can specify which one to browse by setting a site as default during the set up.

The app lists your default site’s lists and libraries together in one grouping. Not all lists and libraries are supported. Unsupported ones are not shown. There is no refresh button. For each entry, the last modified date and time and an items total count is shown. The count adds the number of sub-folders and list or library items under each entry. For each list and library item in listing view, the title is shown. In the case of document item, a second line adds the document last modified date and time. In most listing views, entries can be sorted by item type, title, created date or modified date by tapping the sort buttons at the bottom of the screen.

Tapping a document item opens up the document if the file format is readable by iPhone. When a document is opened, there is an email icon and a link icon at the bottom of the screen. Clicking the email icon allows you to compose an email with the document included as an attachment. Clicking the link icon copies the document URL to iPhone’s clipboard. Document properties are not shown. When properties are available for a list item like event or contact, each property value is shown in full.

For contacts stored in SharePoint, you can add them to iPhone’s Address Book. You can also tap a contact’s phone number to make a call, or send an email to the listed address. Search is available but results seem to be limited to 20 matches.

Ratings
Usability 2
Design
Features 2
Performance 1
Value 2
Verdict 12

Sharetica ($0.99 as of 2010-05-11)

Sharetica01.gif Sharetica02.gif Sharetica03.gif Sharetica04.gif

You set up your SharePoint sites at Home, giving each site its URL and login credential. If begin to browse by tapping the site entry.

The Lists page lists your default site’s lists and libraries together in a single grouping, with each entry showing an items count and a next arrow. Sub-sites are not shown. The items count total is the sum of sub-folders and list or library items. Hidden lists are also shown which I find confusing. It will be better if there is an option to show or hide hidden lists. For each sub-folder, list and library item in listing view, the title is shown.

Tapping a list or document item opens up the Field Values page. Each property is listed in a one-liner. If the property value is too long to fit, it will be truncated. There is no way I know of to read the full property value other than rotating the iPhone to go to landscape mode where you would see more of the property value. For document item, tap Read Document at the top opens up the document if the file format is readable by iPhone.

Documents that are opened and read are automatically stored for offline viewing. They are listed under the section Cache – downloaded files (offline) at Home. There is no option to choose which document is to be stored for offline viewing though you can edit the list later.

Ratings
Usability 2
Design 3
Features 2
Performance 2
Value 4
Verdict 13

Conclusion

All 6 apps offer limited feature sets in its present state. For more advanced operations, SharePoint web services are not the easiest thing in the world to work with. One app bypasses this restriction and uses its own custom server component.

Price ranges from free to $4.99, a bargain if we consider the fact that SharePoint is an enterprise product and the non-free SharePoint Server costs upwards of tens of thousands of dollars. However my value rating has to take into account how iPhone apps are normally priced.

At the bottom of the ratings scale are Attache, Moshare and Sharetica. For Moshare, usability takes a second place to page design. Light green text on white are hard to read. The items count is too small. It usually takes me a few taps to bring down the top menu as the trigger region is again too small. I do very much like the ability to email a document as an attachment though. However response time is frustratingly slow when opening up document libraries. For Attaché and Sharetica, they are priced low but poor usability again mars these 2 apps. Sharetica is the only app that offers offline viewing of document though.

Neck and neck up the list are ISP-Browser and iSharePhone. While ISP-Browser has a bookmark feature called Favorites, iSharePhone allows emailing of documents, without having to download the documents first. However it is the only app that requires a custom server component. Most IT departments may be reluctant to install it in a production environment.

The winner of this shootout belongs to iShare. The app supports browsing of sub-sites, addition and editing of list items, and search. It has relatively good usability and is marked down from a normal price of $9.99 to free since February. So what are you waiting for? Download a copy and try it out.

New “Focus On…” Web Part Released!!

The “Focus On…” Web Part selects a random entry from the specified Sharepoint Library and displays a picture, a title and an         abstract of the selected person or item.

The Web Part can be used with Windows Sharepoint Services V3, MOSS 2007, Sharepoint 2010 and Sharepoint 2013.

Feauture of the day 2
You can configure the following web part properties:

  • the Sharepoint Library
  • the List fields corresponding to the picture, title, abstract and detail link
  • enable or suppress the “Details..” URL.
  • show a new entry every day or on every page refresh

This allows you to display random data contained in any Sharepoint List by specifying the desired Sharepoint List name and the desired list column names.

How to use :

Create a new Sharepoint Picture Library if you do not intend to use an existing Picture Library.
If you decide to create a new Sharepoint list to store the Spotlight entries, create a new Sharepoint Picture Library anywhere in the Sharepoint site collection (the web part is able to access any picture library within the site collection).
The list needs the following columns to hold the entries:
– Title
– Abstract
– optional Detail Link URL

Focus on 2

Configure the following relevant Web Part properties in the Web Part Editor “Miscellaneous” pane section as needed:

  • Site Name: Enter the name of the site that contains the Spotlight Picture Library:
    – leave this field empty if the Library is in the current site (eg. the Web Part is placed in the same site)
    – Enter a “/” character if the Library is contained in the top site
    – Enter a path if the Library is in a subsite of the current site (eg. in the form of “current site/subsite”)
  • List Name: Enter the desired Sharepoint Picture Library
  • View Name: Optionally enter the desired List View of the list specified above. A List View allows you to specify specific data filtering and sorting.
    Leave this field empty if you want to use the List default view.
  • Title Field Name: Enter the desired Library Column name that contains the titles (Default=”Title”)
  • Abstract Field Name: Enter the desired Library Column name that contains the abstracts (Default=”Abstract”)You can alternatively specify a “Field Template” by entering the desired Library fields (surrounded by curly braces). You can specify HTML tags and CSS styles to freely format the text.

Focus on 4

  • Example:
    <strong>{JobTitle}</strong>
    <br>{Description}

    5px; margin-top:5px; background-color:orange”>


    <strong>Schools:</strong><br>
    {Bio}
    </div>

    The above example assumes that the Sharepoint Library includes a “JobTitle”, a “Description” and a “Bio” column.

  • Details URL Field Name: (optional) Enter the desired Library Column name that contains the Detail page links (Default=”DetailURL”). Leave this field empty if you don’t want to provide a detail link.
    If you want to automatically link to the corresponding Sharepoint List Detail View page, enter the keyword “DetailView” into this field.
    If you want to automatically link to the corresponding user’s “MySite” page, enter the keyword “MySite” into this field.
  • Open Details Link in new window: opens the link in a new browser window.
  • Details Caption: allows to localize the “Details..” link displayed in the lower right part of the web part (if a “Details” link is specified).
  • Text Layout: specify the placing of the Text with respect to the Image:
    – Right
    – Wrap
    – Bottom
    – Left
    – WrapLeft
  • Image Height: specify the image height in pixels. Enter “0” if you want to use the default picture size.
  • Default User Image: (optional) specify a default user picture (if there is no user picture available) by entering a relative URL to the imageExample:
    /yoursite/yourPictureLibrary/yourDefaultUser.jpg
  • Title CSS Style: enter optional CSS styles to format the Title (default: bold)
  • Text CSS Style:  enter optional CSS styles to format the Body Text (default: none)
  • Background Color (optional):  To set the desired Web Part Background color, enter either a HTML color name (as eg. “yellow”) or a hexadecimal RGB color value (as eg. “#ffcc33”). Leave this field empty if you don’t want to use a specific background color.
  • Show new Entry: shows a new entry depending on the below setting:
    – always (a new entry is displayed on every page refresh)
    – every Day
    – every Week
    – every Month
    – top Entry (the most recently added entry unless a View is used with a specific custom sorting order)
  • Show specific Entry: optionally enter the List ID of the List Item to be displayed.
  • Nbr. of Items to show: optionally enter two ore more items to be displayed side by side:

Focus on 6

  • Center Web Part: horizontally centers the Web Part within the available space.

Focus on 5

Contact me now for this awesome Web Part!

What Strengthens and Weakens Our Integrity: The Power of Moral Reminders

What checks our behavior and prompts us to stop the slide? What determines how far we journey down the path of dishonesty before we decide to turn around?

Part of it is our desire to strike the balance we have talked about previously between wanting to benefit from a dishonest act and wanting to still be able to see ourselves as good people. Committing too many misdeeds can begin to compromise our positive self-image and prick our conscience, prompting us to beat a trail back to a place where we don’t feel like such a shyster.

Yet people seem to reach this tipping point at varying distances along the path of dishonesty, and you have probably let yourself slide for longer or shorter durations during different times in your life. So we are still left with the question of what may account for these variations.

The answer, at least partially, is moral reminders – checkpoints that help you remember your standards. The number and regularity of the moral reminders in your life can greatly determine whether you rarely step off the path of integrity, and quickly get back on track when you do, or you find yourself at the bottom of the pit of immorality, unsure of how you ever fell so far.

The Power of Moral Reminders

For his research on the nature of integrity, psychology professor Dan Ariely didn’t just want to find out what made people more likely to cheat, but also what worked to keep people honest.

To discover what might be an effective integrity booster, he returned once again to his tried and true matrix test and the condition that allowed for cheating. This time he divided the participants into two groups. Before they started the test, he had one group think of ten books they had read in high school and the other group think about the ten commandments. When the results were tallied after the test, the first group had demonstrated “the same typical but widespread cheating” that had been found in previous conditions of the experiment. But for the group that recalled the ten commandments before beginning their matrices, the rate of cheating was 0%.This, Ariely notes, “was despite the fact that no one in the group was able to recall all ten.” A simple reminder about morality right before being faced with the opportunity to cheat had effectively thwarted the temptation.

What’s interesting is that when Ariely conducted another experiment, this time having a group of self-declared atheists swear on a Bible before beginning the matrix test, they didn’t cheat at all either. Ariely concluded that moral reminders are effective even if the specific “moral codes aren’t a part of your personal belief system.”

He found similar results when he tested the effectiveness of moral reminders in a different way. This time he had students from MIT and Yale sign a statement before taking the matrix test that said: “I understand that this experiment falls under the guidelines of the MIT/Yale honor code.” The act of signing the statement also resulted in zero cheating, and this was true even though neither university actually has an honor code. What mattered was that the student had to undergo a small ritual that got their brain thinking about morality right before that moral sense was challenged.

As Ariely concluded from this line of his research, “recalling moral standards at the time of temptation can work wonders to decrease dishonest behavior and potentially prevent it altogether.”

Virtue Forgetfulness and the Needed Regularity of Moral Reminders

The problem with human nature is that we are all prone to what might be called “virtue forgetfulness.” Our principles and values – our vision of the men we want to be — do not stay at the forefront of our minds at all times, ever at the ready to sway our choices. Instead, our craniums are so busy processing our day-to-day issues and concerns that more philosophical data ends up stored in the reserve trenches rather than the frontlines. It is for this reason that moral reminders are so effective and necessary in our lives: they act as cues in our environment that summon thoughts about our values from the back of our minds to the front, where they can influence our behavior and be brought to bear on the temptations before us.

(For an in-depth explanation of both the philosophy and science behind this phenomenon, I highly recommend reading this post: Hold Fast: How Forgetfulness Torpedos Your Journey to Becoming the Man You Want to Be, and Remembrance Is the Antidote.)

It’s not enough to receive a moral reminder every now and again; regularity is key. Ariely saw this truth played out when he had students from Princeton participate in his matrix test. Unlike MIT and Yale, Princeton does have its own honor code. Freshman must sign it when they enroll, and they attend lectures and discussions about the code when they first arrive on campus. Wanting to find out if such ethics training would have a long-term effect on their behavior, Ariely had a group of Princeton students participate in a matrix test two weeks after completing their honor code orientation. But the students still cheated at the average rate. It was only when they were asked to sign the same pre-test honor pledge that the MIT and Yale students had, that their cheating also dropped to zero.

Thus we see that becoming a man of integrity is not like riding a bicycle; you don’t learn how to do it once, and then expect to ride that ethical conviction as an automatic behavior for the rest of your life. Instead, acting with integrity is something you have to decide to do over and over again, and the more moral reminders you have in your life that reinforce your commitment, and the more regularly you encounter those reminders, the easier it is to stay on track.

How to Establish Moral Reminders in Your Life

I think the fact that virtue forgetfulness is a universal trait is reflected in the fact that all the world’s religions, despite greatly varying doctrines, employ moral reminders to keep people on the straight and narrow. Prescriptions to pray multiple times a day and regularly study one’s scriptures are really calls to partake in regular moral reminders that ritually reinforce one’s faith and its code of behavior.

For believers of some religions, these moral reminders can be quite concrete and intimate, as Ariely demonstrates in retelling “a story in the Talmud about a religious man who becomes desperate for sex and goes to a prostitute”:

“His religion wouldn’t condone this, of course, but at the time he feels that he has more pressing needs. Once alone with the prostitute, he begins to undress. As he takes off his shirt, he sees his tzitzit, an undergarment with four pieces of knotted fringe. Seeing the tzitzit reminds him of the mitzvoth (religious obligations) and he quickly turns around and leaves the room without violating his religious standards.”

Moral reminders aren’t just for theists, however. Atheists will argue that they can be just as moral as any religious person, and I for one don’t disagree with that. Yet an atheist’s morality must be guarded, cultivated, and strengthened like anyone else’s.

There are plenty of ways to create secular moral reminders that can be effective for the integrity-seeking atheist, as well as serve as additional supplements for theists who already partake in traditional religious reinforcers like prayer, scripture study, and weekly worship. The simplest thing to do is to try to consciously recall your moral standards before you’re faced with a temptation, as the students who thought about the ten commandments did before the matrix test. But of course in real life we often don’t know when a temptation is coming, and in the heat of the moment, we may be incapable or unwilling to summon our principles to the forefront of our minds. For this reason, you should cultivate built-in moral reminders that you can encounter each day without much effort.

“Truth is much more forcibly impressed upon the mind when accompanied by illustration, either in incident, anecdote, example or in a drawing or picture. Where the mere statement of truth in the abstract may fail of results, the illustration comes to the aid of truth and impresses and fixes the thought upon the mind.” –Henry F. Kletzing, Traits of Character, 1899

First, I recommend hanging up wall art — especially by the door through which you leave for school or work — that reminds you of your standards and the man you want to be each day. Here are some examples we have hanging up in our home:

moralreminders2Clockwise from top: 1) Benjamin Franklin’s daily affirmation, 2) an illustration from a 19th century book on character, 3) a modern play on a popular WWII song that reminds me to live up to my grandfather’s values.

Second, consider creating a personal manifesto and reading it each and every day, as AoM reader Zach Sumner did. You might also shrink it down into a laminated card you can carry in your wallet or pocket notebook and review regularly.

Another idea is to wear a piece of jewelry that reminds you of your standards. This could be an item with religious symbolism or a watch your upstanding grandfather gave you. If you wear it every day though, you can start taking it for granted, so make it a point to touch, fiddle with it, and think about its meaning consciously each day.

Even something like a tattoo that you often see can serve as a moral reminder of who you want to be.

There are also some smaller, simple things you can do to try to stay on track. Keep post-it notes on your computer with some kind of phrase or saying that motivates you throughout the day. Use a photo of your spouse/loved one/family as the background on your phone, so that you’re always reminded of the reason you’re trying to be a man of virtue. Take a page out of Ben Franklin’s book and use a pocket notebook to record any indiscretions you may commit – the simple act of writing it down puts it more in the forefront of your brain moving forward. Be creative in this endeavor and find what works for you!

Employing moral reminders is especially important when you’re away from home; Ariely theorizes that we’re more likely to engage in dishonest behavior when we’re on a trip since we’re outside our day-to-day routine, away from the eyes of those who watch us, and the social rules aren’t as clear. For such reasons, while there aren’t any statistics on how often infidelity occurs on business trips and the like, the popular perception of it as a frequent occurrence is probably not too far off the mark. So if you want to stay true while jetting around the world, be sure to pack some moral reminders along with your luggage. Check in with your significant other frequently, put her picture on your nightstand in your hotel room, and don’t take off your wedding ring – doing so isn’t just a literal move to signal your availability, it’s a psychological impulse to rid yourself of a moral reminder that might deter you from following through on your desire to cheat.

Pressing the Reset Button

Moral reminders won’t force you to do the right thing. They’re just checkpoints where hopefully you’ll be prompted to stop and reflect on your values, giving you the strength to resist temptation. But you can also choose to blow right through them.

So what do you do if you’ve never instituted moral reminders for yourself, or have lately chosen to ignore yours, and you find yourself far enough down the road of dishonesty – having maybe even reached the what-the-hell point and really gone on a bender — that you’re unhappy with yourself and want to find your way back to the man you’d like to be?

Just as it’s not surprising that all religions promote moral reminders to their adherents, it’s also not surprising that all faiths offer opportunities for repentance or renewal.

Christians have the weekly Sabbath; Catholics, the sacrament of confession; Jews, Yom Kippur; and Muslims, Ramadan. These rituals allow people a chance to hit the reset button on their lives and begin again with a fresh start.

As with moral reminders, just because you’re not religious doesn’t mean you don’t need such reset rituals just as much as the next fallible human being. There are secular events that can be used as psychological turning points in the same way: birthdays, New Years, moving, break-ups, new jobs, and so on. And you can intentionally create your own regular times of renewal, like bi-annual camping trips where you take time to reflect, sort through mistakes you’ve made, and commit to doing better in the next six months. Create your own rituals like writing about your regrets, tossing them into the campfire, and watching them burn away.

Series Conclusion

<

p>We hope you have enjoyed and gotten something out of this series on integrity. Ariely’s research on the subject does not offer all of the answers to the nature of morality, but we felt that it was a fascinating jumping-off point for creating personal reflection and group discussion. I know I have experienced the former myself, and I have not been disappointed in the thoughtful nature of the latter in the comments.

One of the things I found most interesting about Ariely’s research was how closely his results mirrored the sheep/wolves/sheepdog paradigm articulated by Lt. Col. Dave Grossman. As we explored in our series on that subject, Grossman believes a very small percentage of the population are wolves, a very small percentage are sheepdogs, and the great majority of people are sheep.

What Ariely found in conducting his matrix test was that very few people cheated to the fullest extent possible. Likewise, very few people were strictly honest. Most people cheated…just by a little. Ariely reports that while they did lose money to the small number of big cheaters, they lost far more to the many people who were willing to each fudge a bit. Small lies, multiplied by lots of people, added up to a big impact.

While the media often focuses on the big problems of corruption in our time, and politicians debate how best to fix them with broad rules and regulations, the solution to establishing a more honest society may lie far closer to home. If each individual man committed to living a higher standard of integrity, if he strove not to compromise that integrity in even small ways, and set an example that inspired others to do likewise, our homes, neighborhoods, and nation would slowly become better places for all. Our world will never be perfect – either individually or societal – but why not do whatever you can, wherever you are, to make it a better place now and for those coming after us?

Duet Enterprise – Creating and Deploying a Mobile Adapter Class for Business Data Action Web Parts

Learn how to create a mobile adapter class to display mobile views for Business Data Action Web Parts.

In Microsoft SharePoint 2010, mobile views are available for both the Business Data Builder Web Part and the Business Data Item Web Part. In the Starter Services site of Duet Enterprise for Microsoft SharePoint and SAP, a mobile view is available for only the Business Data Item Web Part. You must define a mobile adapter class to make mobile views available for other Business Data Web Parts. This topic describes how to write a mobile adapter class for Business Data Action Web Parts.

The procedures in this section describe how to create and deploy a mobile adapter class for displaying Business Data Action Web Parts.

The following are the basic steps to create and deploy a mobile adapter class:

  1. Create a mobile adapter class for Business Data Action Web Parts.
  2. Edit the compat.browser file.
  3. Register your adapter as a safe control.

To create a mobile adapter class for Business Data Action Web Parts

  1. In Microsoft Visual Studio 2010, create a new class library project named DuetMobileCustomization. Add references to the System.Web assembly and Microsoft.SharePoint.dll assembly.
  2. Add a using statement for the Microsoft.SharePoint.WebPartPages namespace. Depending on the details of your adapter implementation, add using statements for other namespaces. Commonly, mobile adapters make calls to types in the System.Web.UI.MobileControls namespace, Microsoft.SharePoint namespace, and Microsoft.SharePoint.MobileControls namespace.
  3. Add a class named WebPartClassMobileAdapter, where WebPartClass is a placeholder for the name of the Web Part that you are adapting. For example, if you are adapting the BusinessDataActionsWebPart, name the adapter class BusinessDataActionsWebPartMobileAdapter. This class should inherit from the WebPartMobileAdapter class.
  4. Add a namespace named MyCompany.SharePoint.WebPartPages.MobileAdapters. (Replace MyCompany with your company’s name.)
  5. Copy the following code into the new BusinessDataActionsWebPartMobileAdapter class.
    Copy
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Security.Permissions;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI.MobileControls;
    
    using Microsoft.BusinessData.MetadataModel;
    using Microsoft.BusinessData.MetadataModel.Collections;
    using Microsoft.BusinessData.Runtime;
    
    using Microsoft.SharePoint.Portal.MobileControls;
    using Microsoft.SharePoint.MobileControls;
    using Microsoft.SharePoint.Utilities;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.SharePoint.WebPartPages;
    using Microsoft.SharePoint.Portal.WebControls;
    using Microsoft.Office.Server.Diagnostics;
    
    namespace Microsoft.SharePoint.WebPartPages
    {
        public class BusinessDataActionsWebPartMobileAdapter : WebPartMobileAdapter
        {
  6. Because the WebPartMobileAdapter.Control property cannot be overridden, you might have to create a custom version of it by hiding and replacing it. You can do this by declaring a new Control property in your derived class by using the new keyword, as shown in the following example.
    Copy
    protected new BusinessDataActionsWebPart Control
            {
    [Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.Demand, 
    ObjectModel = true)]
                get { return base.Control as BusinessDataActionsWebPart; }
            }

    For more information about how to create a custom version of WebPartMobileAdapter.Control and hiding and replacing it, and why you might have to do this, see the Control property.

  7. If the default implementation of the CreateControlsForSummaryView method of the WebPartMobileAdapter class is not appropriate for mobile access to the Web Part in your specific implementation, override it. An override should create any necessary child controls and add them to the Controls collection in the order in which they should appear on a mobile device. The display should contain at least a small icon and a title for the summary view on a mobile device. If those are the only display elements that that you must have, you do not have to override the CreateControlsForSummaryView method. The WebPartMobileAdapter class contains two helper methods you can use to create your display: CreateWebPartIcon() and CreateWebPartLabel().When you must display more information than what appears in the default summary view (for example, when your adapted Web Part has multiple child items that are the same type), you can add a count of the total number of children to the summary view by placing a Label control after the icon and title. The following code shows how to do this.
    Note Note
    This example assumes that the custom Web Part that you are adapting has a Count property of type String that returns the total number of child items.
    Copy
    protected override void CreateControlsForSummaryView()
            {
                this.CreateControlsForWebPartHeader();
                this.CreateControlsForBusinessDataActions();
            }
    
            private void CreateControlsForWebPartHeader()
            {
                Image iconImage = this.CreateWebPartIcon(WebPartIconLink.NoLink);
                iconImage.BreakAfter = false;
                this.Controls.Add(iconImage);
                this.Controls.Add(this.CreateWebPartLabel());
            }
    
            private void CreateControlsForBusinessDataActions()
            {
                try
                {
                    IList<string> result = this.Control.SelectedActions;
                    try
                    {
                        if (this.Control.BdcEntity != null)
                        {
                            IList<IAction> displayActions = GetActionsToDisplay(this.Control.BdcEntity);
                            result = new List<string>();
    
                            foreach (IAction action in displayActions)
                            {
                                Link l = new Link();
                                l.Text = action.Name;
    // This example does not create the Parameter value. 
    // Add logic to set the action of the parameter before storing this value in the Link Navigation URL.
                                l.NavigateUrl = action.Url;
                                this.Controls.Add(l);
                            }
                        }
                    }
                    catch (MetadataException)
                    {
                        // Metadata error. Just default to returning the Web Part's selected Actions.
                        result = this.Control.SelectedActions;
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
    private IList<IAction> GetActionsToDisplay(IEntity entity)
            {
                IList<IAction> result = new List<IAction>();
                INamedActionDictionary namedActionDictionary = entity.GetActions();
                if (namedActionDictionary.Count != 0)
                {
                    // First add all the currently selected actions.
                    foreach (string selectedActionName in this.Control.SelectedActions)
                    {
                        if (namedActionDictionary.ContainsKey(selectedActionName))
                        {
                            result.Add(namedActionDictionary[selectedActionName]);
                        }
                        // else
    
                    }
    
                    // Action may not be in the SelectedActions list,
                    // but the Web Part is configured to display new actions and
                    // this action is not one of the explicitly de-selected ones. Add it to UI.
                    if (this.Control.DisplayNewActions)
                    {
                        foreach (IAction action in namedActionDictionary.Values)
                        {
                            if (!result.Contains(action)
                                && !this.Control.DeselectedActions.Contains(action.Name))
                            {
    
                                result.Add(action);
                            }
                        }
                    }
                }
    
                return result;
            }
    
            public void cmd_Click(object sender, EventArgs e)
            {
                string CommandText = ((Command)sender).Text;
    
            }
  8. If the default implementation of CreateControlsForDetailView is not appropriate for mobile access to the Web Part in your specific implementation, override it. The default implementation renders an icon and title followed by a message that states that there is no detailed view for the Web Part. If you have overridden the CreateControlsForSummaryView method and do not want to provide a detailed view, override CreateControlsForDetailView and have it do nothing, as shown in the following example.
    Copy
    protected override void CreateControlsForDetailView()
            {
                // No Detail View
            }
  9. To change the icon that appears next to the Web Part title, override one or more of the following properties:
    • SummaryViewTitleIconUrl  The icon that appears next to the title when the Web Part is collapsed.
    • DetailViewTitleIconUrl  The icon that appears next to the title when the Web Part is expanded.
    • TitleIconUrl  The icon that appears next to the title when the mobile device does not support expand or collapse scripting.

    The code in the following example shows how to override the TitleIconUrl property. In this override, if the Web Part displays a list and the list has an icon of its own in its ImageUrl property, that icon is displayed.

    Copy
    protected override string TitleIconUrl
    {
        get
        { 
            SPContext context = SPContext.GetContext(HttpContext.Current);
    
            if (String.IsNullOrEmpty(context.List.ImageUrl))
            {
                return base.TitleIconUrl;
            }
            return context.List.ImageUrl;
        }
    }
  10. Compile the assembly, give it a strong name, and then deploy it either to the global assembly cache or to the \BIN folder of the Web application on every front-end web server in the farm. To deploy it to the global assembly cache, ensure that GlobalAssemblyCache is selected in the Assembly Deployment Target of the Properties pane of your class library project in Visual Studio 2010. This topic assumes that you are deploying to the global assembly cache.

To edit the compat.browser file

  1. In a text editor, open the compat.browser file that is located at \\Inetpub\wwwroot\wss\VirtualDirectories\port_number\App_Browsers\compat.browser, where port_number is the port of the web application. Scroll to the <browser> element that has the refID attribute value of default. This element will have a child element named <controlAdapters> that looks much like the code in the following example.
    Copy
    <controlAdapters>
      <adapter controlType="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
        adapterType="Microsoft.SharePoint.WebPartPages.XsltListViewWebPartMobileAdapter, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
      <adapter controlType="Microsoft.SharePoint.WebPartPages.ListViewWebPart, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
        adapterType="Microsoft.SharePoint.WebPartPages.ListViewWebPartMobileAdapter, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
      <adapter controlType="Microsoft.SharePoint.Applications.GroupBoard.WebPartPages.WhereaboutsWebPart, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
        <adapter controlType="Microsoft.SharePoint.Applications.GroupBoard.WebPartPages.WhereaboutsWebPart, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                         adapterType="Microsoft.SharePoint.Applications.GroupBoard.WebPartPages.WhereaboutsWebPartMobileAdapter, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
                <adapter controlType="Microsoft.SharePoint.WebPartPages.ImageWebPart, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                         adapterType="Microsoft.SharePoint.WebPartPages.ImageWebPartMobileAdapter, Microsoft.SharePoint, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
    </controlAdapters>
  2. Add an <adapter> element as a child of the <controlAdapters> element. This child element maps your adapter class to the custom Web Part that it adapts. Notice that both the controlType attribute and adapterType attribute are required. The value for both should be the fully qualified name of the class and the four-part name of the assembly. To obtain your adapter assembly’s public key token, in Visual Studio 2010 on the Tools menu, click Get Assembly Public Key. For another way to obtain the public key token, see How to: Create a Tool to Get the Public Key of an Assembly (http://msdn.microsoft.com/en-us/library/ee539398.aspx). For more information about this XML markup, see Browser Definition File Schema (browsers Element) (http://msdn.microsoft.com/en-us/ms228122.aspx). The following code shows one example of an <adapter> element.
    Copy
    <adapter controlType="Microsoft.SharePoint.Portal.WebControls.BusinessDataActionsWebPart, 
    Microsoft.SharePoint.Portal, 
    Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
    adapterType="Microsoft.SharePoint.WebPartPages.BusinessDataActionsWebPartMobileAdapter, MobileCustomization, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=<assemblyPublic Key>" />
    NoteNote
    To deploy your adapter class to a server farm, you must change the compat.browser file as described earlier on every front-end web server. Do not overwrite the existing compat.browser file with a compat.browser file of your own because this might cancel adapter mappings that are made by other Microsoft SharePoint 2010 solution providers. Consider deploying the adapter as part of a SharePoint 2010 Feature. In the FeatureActivated event handler, create a timer job that adds the required <adapter> element to the compat.browser file on every front-end web server. For detailed information about programmatically editing the compat.browser file on all servers by using a timer job, see How to: Run Code on All Web Servers (http://msdn.microsoft.com/en-us/library/ff464297.aspx).

To register your adapter as a safe control

  1. In your Visual Studio 2010 project, add an XML file named webconfig.CompanyName.xml, where CompanyName is the name of your company or another name that is not likely to be used by any other SharePoint Foundation 2010 solution providers.
    Tip Tip
    We recommend that you register your adapter by deploying it inside a SharePoint 2010 solution. The steps in this section are required only if your development computer is a single front-end web server. A SharePoint 2010 solution enables you to register controls as safe on all front-end web servers when your solution is deployed. For more information about using solution deployment to register controls as safe, see Solutions Overview (http://msdn.microsoft.com/en-us/library/aa543214.aspx), Manually Creating Solutions in SharePoint Foundation (http://msdn.microsoft.com/en-us/library/aa543741.aspx), and Solution Schema (http://msdn.microsoft.com/en-us/library/ms442108.aspx).
  2. Add an <action> element that follows the model in the example below to the file. The TypeName attribute of the <SafeControl> element can be the name of your adapter class, such as UserTasksWebPartMobileAdapter. If you have multiple adapter classes in the same namespace, you can use an asterisk (*) as the value of TypeName.
    Copy
    <action>
       <add path="configuration/SharePoint/SafeControls">
        <SafeControl
          Assembly=" MobileCustomization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<myPublicKeyToken>"
          Namespace="Microsoft.SharePoint.WebPartPages"
          TypeName="*"
          Safe="True"
          AllowRemoteDesigner="True"
        />
      </add>
    </action>
    Caution noteCaution
    Using an asterisk (*) as the value of TypeName makes every class in the namespace a safe control. If you have some classes in the assembly that should not be designated as safe, move them to a different assembly or avoid using the asterisk (*) value.

    For more information about the <SafeControl> element and web.config files, see How to: Create a Supplemental .config File (http://msdn.microsoft.com/en-us/library/ms439965.aspx) and Working with Web.config Files (http://msdn.microsoft.com/en-us/library/ms460914.aspx).

  3. Save the file. You must now copy it to the %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG folder on your development computer. The simplest way to do this on your development computer is to add the following lines to a post-build event command line or to a batch file script.
    Copy
    xcopy /y webconfig.MyCompany.xml "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG"
    stsadm –o copyappbincontent
    NoteNote
    This code assumes that you have followed the recommendations in How to: Add Tool Locations to the PATH Environment Variable (http://msdn.microsoft.com/en-us/library/ee537574.aspx).

    The copyappbincontent Stsadm.exe command performs the action defined by the <action> element in your Web configuration .xml file. In this case, it inserts the new <SafeControl> element of your adapter into the web.config file at the root of the web application. It first removes any existing <SafeControl> elements for the adapter. This lets you rerun the Stsadm command with every build without creating duplicate <SafeControl> elements.) For more information about Stsadm, see Stsadm command-line tool (http://msdn.microsoft.com/en-us/library/cc288981(office.12).aspx).

 

Enhanced by Zemanta

Access SkyDrive Pro using the SharePoint 2013 APIs

SkyDrive Pro, a personal cloud library for business, is a place where users can store files and documents, sync them with their devices, and share them with others. It comes as a part of SharePoint Server 2013 or SharePoint Online (Office 365). Essentially it’s a SharePoint Document Library under the covers, so you can access it just like any other document library in SharePoint 2013 using the SharePoint APIs. Whether you use the client-side object model (CSOM) or Representational State Transfer (REST)—it’s your choice. In this post, learn how to construct the REST URLs to access files and folders in SkyDrive Pro.

From a user’s perspective, to access your SkyDrive Pro library, you simply click SkyDrive in the Office 365 menu bar, as shown in Figure 1.

Figure 1. Office 365 menu bar
Figure 1. Office 365 menu bar

Or you can always navigate directly there using this URL pattern:
https://YourO365DomainHere-my.sharepoint.com/personal/
YourUserName_ YourO365DomainHere_onmicrosoft_com/.

But that’s from the end-user perspective. How do you access SkyDrive Pro as a developer? In this example, we will use REST.

Note: If your Office 365 site is set up to use a custom domain—for example, contoso.com—your MySite URL will be of the pattern, https://contoso-my.sharepoint.com/personal/YourUserName_ contoso_com/.

Start with the basics

  1. Sign in to your Office 365 SharePoint site, and navigate to your SkyDrive Pro library using one of the two methods mentioned above.
  2. Click the Shared with Everyone folder and upload a document. For this example, the document name is myDocument.docx.
  3. To use the REST API to view the information on the uploaded document, construct a URL with the following pattern:
    https://YourO365DomainHere-my.sharepoint.com/personal/
        YourUserName_YourO365DomainHere_onmicrosoft_com/_api/web/
    GetFileByServerRelativeUrl(‘/personal/YourUserName_YourO365DomainHere_onmicrosoft_com/
    Documents/Shared with Everyone/myDocument.docx’)
  4. Copy/paste it into your browser. The XML returned should look like this:
    Figure 2. Example of XML returned by the REST APIFigure 2. Example of XML returned by the REST API
  5. To download the document, append /$value to the URL. When prompted to save the file, name it myDocumentDownload.docx, and save it.

Work with documents and other files as “items”

  1. For definitive read/write guidance, see Working with lists and list items with REST on MSDN.
  2. To experiment, upload a couple of files to the root Documents folder in your SkyDrive Pro library. Now you can test out a few REST read calls in your signed-in browser.
  3. Using this URL pattern:
    https://YourO365DomainHere-my.sharepoint.com/personal/
        YourUserName_YourO365DomainHere_onmicrosoft_com/_api/web/
    Append lists/Documents/items/ to it. Here you will get all the items.

    1. To get the metadata for a particular item, modify items/ to items(n)/ where (n) is the specific item number you want to view.
    2. To see the metadata for the file, append file/ (for example, items(n)/file/)
    3. To download the file, append $value (for example, items(n)/file/$value)
  4. You can also use in place of the above pattern lists/GetByTitle(‘Documents’)/…, and the API will return the same results.

Work with folders and files

  1. Files are often nested in folders, and you may need to drill down into the folder structure; or you may want to represent the folder structure and files in a user interface (UI). Using the following REST calls, you can also work with folders and files in a more logical way than just the “items(n)sequential location as the pattern shown above. This is where getting folders by relative URL and subsequently enumerating all the files within a folder is really handy.
    For definitive read/write guidance, see Working with folders and files with REST on MSDN.
  2. Assume the SkyDrive file structure shown in Figure 3, where you have both folders and documents at the same level.
    Figure 3. SkyDrive file structure with folders and documents at the same level
    Figure 3. SkyDrive file structure with folders and documents at the same level
  3. To retrieve all the folders, you will use GetFolderByServerRelativeUrl with the following URL pattern:
    https://YourO365DomainHere-my.sharepoint.com/personal/
    YourUserName_YourO365DomainHere_onmicrosoft_com/_api/web/
    To this URL, append GetFolderByServerRelativeUrl(‘/personal/YourUserName_YourO365DomainHere_onmicrosoft_com/Documents’)/folders/.
    All the folders will be returned. You can then subsequently use the ServerRelativeURL property for each folder to continue to “walk down” each folder until you reach its end node.

    Figure 4. ServerRelativeUrl property of a folderFigure 4. ServerRelativeUrl property of a folder
  4. Likewise, if you want to return metadata about all the files in a folder, simply replace folders/ with files/, and all the files will be enumerated.
    Figure 5. ServerRelativeUrl property of a file
    Figure 5. ServerRelativeUrl property of a file

    Then, if you want to retrieve the file, use the GetFileByServerRelativeUrl URL pattern, described in the first section above, with /$value appended to the URL.

The above URL patterns show how to construct the REST calls for use in the browser for simplicity. However, you can readily implement these URL patterns in your code.

For example, if you are developing an app for SharePoint, the app can call into a user’s MySite site collection and access their SkyDrive Pro documents using REST or CSOM.

The REST call to get to the file would be:
https://YourO365DomainHere-my.sharepoint.com/personal/
YourUserName_YourO365DomainHere_onmicrosoft_com/_api/web/
GetFileByServerRelativeUrl(‘/personal/YourUserName_YourO365DomainHere_onmicrosoft_com/
Documents/Shared%20with%20Everyone/myDocument.docx’)/$value

To programmatically get the SkyDrive Pro URL for the signed-in user, you can make a call to the user Profile service:
https://YourO365DomainHere-my.sharepoint.com/_api/
SP.UserProfiles.PeopleManager/GetMyProperties/personalURL/

Remember, your app for SharePoint needs to request the right set of permissions in the app manifest to access SkyDrive Pro content—for example, AllSites.Read—and if using the User Profile service: Social.Read. When you request a token from Access Control Service (ACS), make sure you have the right audience. In order to call SkyDrive Pro, you need a token whose target audience is https://YourO365DomainHere-my.sharepoint.com/. Also remember to encode all the query parameters in the URL.

This post does not detail these calls for CSOM, but the CSOM equivalents are available: see the CSOM, JSOM, and REST API Index. Other valuable resources are the articles on how to complete basic operations using CSOM and JSOM, and getting started with SharePoint 2013 REST.

Lastly, for sample code, download the Apps for SharePoint sample pack, which provides examples across C#, REST, and JavaScript. It contains useful samples, including:

Enjoy!

SharePoint 2013 Online Search Administrator – An update from SharePoint 2010

Search functionality in SharePoint 2013 includes several enhancements, custom content processing and a new framework for presenting search result types. SharePoint Server 2013 presents a new search architecture that includes substantial changes and additions to the search components and databases. Also, there have been significant enhancements made to the Keyword Query Language (KQL).

Some of the features and functionalities have been depreciated from the previous version of SharePoint 2013. There has been a more search user interface improvement which brings the user more interactive with search results. For example, users can rest the pointer over a search result to see the content preview in the hover panel to the right of the result.

Now you can see Office 365 SharePoint 2013 and its admin features of Search Service Application. It’s a breakthrough advancing; nearly all the new features listed here are missed in Office 365 – SharePoint 2010. The following screen capture shows the SharePoint central administrator view for the Search section.

Manage all aspects of the Search experience for your end users improving the relevancy of your results per your content and metadata.

Search helps users quickly return to important sites and documents by remembering what they have previously searched and clicked. The results of previously searched and clicked items are displayed as query suggestions at the top of the results page.

In addition to the default manner in which search results are differentiated, site collection administrators and site owners can create and use result types to customize how results are displayed for important documents. A result type is a rule that identifies a type of result and a way to display it.

Manage Search Schema

Managed properties are used to restrict search results, and present the content of the properties in search results. Crawled properties are automatically extracted from crawled content. All the changes to properties will take effect only after the next full crawl.

Under the search schema section, administrator can:

  • View, create, or modify Managed Properties and map crawled properties to managed properties
  • View or modify Crawled Properties, or to view crawled properties in a particular category
  • View or modify Categories, or view crawled properties in a particular category.

While creating a new managed property, the ‘Mappings to crawled properties’ is one of the key attributes for the configuration set in our new property.

Manage Search Dictionaries

  Taxonomy Term Store  
People Search Dictionaries System
Department Company Exclusions Hashtags
Job Title Company Inclusions Keywords
Location Query Spelling Exclusions Orphaned terms
  Query Spelling Includings  

Manage Authoritative Pages

Search in SharePoint 2013 will analyze the collection of authoritative and non-authoritative pages to determine the ranking of search results. The authoritative sites are of two kinds:

  • Authoritative Site Pages
  • Non-authoritative Site Pages

Authoritative site pages are the links, which administrator authorized to be the most relevant information. There can be multiple authoritative pages in each environment. There is an option for specifying second and third-level authorities for search ranking. Non-authoritative site pages are the content from certain sites can be ranked lower than the rest of the content in the site.

Query Suggestion Settings

SharePoint Search comprises various features that you can leverage for building productivity solutions. One of the interesting and useful competencies are Query Suggestions. The query suggestions are administrated by two options as follows:

  • Always Suggest Phrases
  • Never Suggest Phrases

Manage Result Sources

Result Sources are used to frame the search results and confederate queries to external sources, such as internet search engines, etc. Once the result source are defined, we can configure search web parts and query rule actions to use the result source.

How the Result Source is managed? A SharePoint Online administrator of SharePoint Online Tenant can manage result sources for all site collections and sites reside under the same tenant. A site collection administrator or a site owner can manage result sources for a site collection or a site, respectively.

SharePoint 2013 provides 16 pre-defined result sources. The pre-configured default result source is Local SharePoint Results. We can state a different result source as the default as per our requirement.

While creating a new Result Source, there is Protocol and Query transform are the two important parameters which tells the Result Source what to do in the SharePoint.

Protocol – Local SharePoint for results from the index of this Search Service. OpenSearch 1.0/1.1 for results from a search engine that uses that protocol. Exchange for results from an exchange source. Remote SharePoint for results from the index of a search service hosted in another farm.

Query Transform – Change incoming queries to use this new query text instead. Include the incoming query in the new text by using the query variable “{searchTerms}“.

Use this to scope results. For example, to only return OneNote items, set the new text to “{searchTerms} fileextension=one“. Then, an incoming query “sharepoint” becomes “sharepoint fileextension=one“. Launch the Query Builder for additional options.

Manage Query Rules

Query rules are to conditionally stimulate the search results and show hunks of supplementary results based on the rules created in the SharePoint. In a query rule, you can specify conditions and correlated actions without any help of code. The user with Site Collection, Site owner permission level can create and manage the query rules.

Manage Query Client Types

Query Client Types are one of the new search features in SharePoint 2013. Client Type identifies an application where a search query is sent from. Applications are prioritized by tiers. Top tier has the highest priority. When resource limit is reached, query throttling becomes ON, and search system will process the queries from top tier to bottom tier.

System Client Types are available out-of-the box, and cannot be deleted. We can add a new custom Client Type by clicking on New Client Type.

Remove Search Results

To remove data from the search results, type the URLs which needed to remove from it. All the URLs listed in the textbox will be removed from search results immediately, once after the Remove Now button is clicked.

View Usage Reports

Here the administrator will be able to see the usage reports and search related report, example Query Rules usage by day, Top Queries by Day, etc.

Search Center Settings

In this setting, the default search system will be mapped. Usually the Enterprise Search Center site that has been created for search entire SharePoint sites in the organization.

Export Search Configuration

Create a file that includes all customized query rules, result sources, result types, ranking models and site search settings but not any that shipped with SharePoint, in the current tenant that can be imported to other tenants.

Import Search Configuration

If you have a search configuration you’d like to import, browse for it below. Settings imported from the file will be created and activated as part of the site. You can modify any of the settings after import.

Crawl Log Permissions

Grant users read access to crawl log information for this tenant.

Search Client Object Model

SharePoint 2013 Search includes a client object model (CSOM) that enables access to most of the Query object model functionality for online, on-premises, and mobile development. You can use the Search CSOM to create client applications that run on a machine that does not have SharePoint 2013 installed to return SharePoint 2013 Preview search results.

The Search CSOM includes a Microsoft .NET Framework managed client object model and JavaScript object model, and it is built on SharePoint 2013. First, client code accesses the SharePoint CSOM. Then, client code accesses the Search CSOM.

NOTE: Custom search solutions in SharePoint Server 2013 do not support SQL syntax. Search in SharePoint 2013 supports FQL syntax and KQL syntax for custom search solutions.

We can configure crawled and managed properties. Configure Result Sources which were Federated Result / Scopes in SharePoint Search 2010.

Introduction to Business Connectivity Services (BCS)

<

p>BCS has the ability to connect and query the data sources and returns the results to the user through an external list, or app for SharePoint, or Office 2013. The Microsoft Office 2013 and SharePoint 2013 include Microsoft Business Connectivity Services (BCS).

The SharePoint 2013 and the Office 2013 suites include Microsoft Business Connectivity Services. With Business Connectivity Services, you can use SharePoint 2013 and Office 2013 clients as an interface into data that doesn’t live in SharePoint 2013 itself. It does this by making a connection to the data source, running a query, and returning the results. Business Connectivity Services returns the results to the user through an external list, or app for SharePoint, or Office 2013 where you can perform different operations against them, such as Create, Read, Update, Delete, and Query (CRUDQ). Business Connectivity Services can access external data sources through Open Data (OData), Windows Communication Foundation (WCF) endpoints, web services, cloud-based services, and .NET assemblies, or through custom connectors.

Business Connectivity Services can access external data sources through Open Data (OData), Windows Communication Foundation (WCF) endpoints, web services, cloud-based services, and .NET assemblies, or through custom connectors. The Open Data Protocol is known as OData. It is an open web protocol for querying and updating data.

Business Connectivity Services uses SharePoint 2013 and Office 2013 as a client interface for data which doesn’t reside SharePoint 2013 environment.

The following screen capture is the BCS features and configuration options available under the SharePoint Administration Center in the Office 365.

Access SAP Business Data From Silverlight 4 Clients Using WCF RIA Services And LINQ to SAP

The introduction of Microsoft’s WCF RIA Services for Silverlight 4 simplified very much the development process of N-tier business applications using Silverlight and ASP.NET. By using this new technology, we can also easily access and integrate SAP business data in Silverlight clients.

This article shows how to provide a SAP domain service as web service that will be consumed by a Silverlight client. The sample application will allow the user to query customer data. The service uses LINQ to SAP from Theobald Software to connect to a SAP R/3 system.

Project Setup

The first step in setting up a new Silverlight 4 project with WCF RIA Services is to create a solution using the Visual Studio template Silverlight Navigation Application:

Screenshot-01.png - Click to enlarge image

Visual Studio 2010 then asks you to create an additional web application, which hosts the Silverlight application. It’s important to select the checkbox Enable WCF RIA Services (see screenshot below):

SAP2Silverlight/Screenshot-02.png

After clicking the Ok button, Visual Studio generates a solution with two projects, one Silverlight 4 project and one ASP.NET project. In the next section, we will create the SAP data access layer using the LINQ to SAP designer.

LINQ to SAP

The LINQ to SAP provider and its Visual Studio 2010 designer offers a very handy way to design SAP interfaces visually. The designer will generate the code for the SAP data access layer automatically, similar to LINQ to SQL. The LINQ provider is part of the .NET library ERPConnect.net from Theobald Software. The company offers a demo version for download on its homepage.

The next step is to create the needed LINQ to SAP file by opening the Add New Item dialog:

Screenshot-03.png - Click to enlarge image

LINQ to SAP is internally called LINQ to ERP.

Clicking the Add button will create a new ERP file and opens the LINQ designer. Now, drag the Function object from the toolbox and drop it onto the designer surface. If you have not entered the SAP connection data so far, you are now asked to do so:

Screenshot-04.png - Click to enlarge image

Enter the connection data for your SAP R/3 system and then click the Ok button. Next, search for and select the SAP function module named SD_RFC_CUSTOMER_GET. The function module provides a list of customer data.

The RFC Function modules dialog opens and lets you define the necessary parameters:

SAP2Silverlight/Screenshot-05.png

In the above function dialog, change the method name to GetCustomers and mark the Pass checkbox for the NAME1 parameter in the Exports tab. Also set the variable name to namePattern. On the Tables tab, mark the Return checkbox for the table parameter CUSTOMER_T and set the table and structure name to CustomerTable and CustomerRow:

SAP2Silverlight/Screenshot-06.png

After clicking the Ok button and saving the ERP file, the LINQ designer will generate a SAPContext class which contains a method called GetCustomers with an input parameter named namePattern. This method executes a search for SAP customer data allowing the user to enter a wildcard pattern. The method returns a table of customer data:

SAP2Silverlight/Screenshot-07.png

On the LINQ designer level (click on the free part of the LINQ designer surface) property, Create Object Outside Of Context Class must be set to True:

Screenshot-08.png - Click to enlarge image

Now, we finally add a Customer class which we use in our SAP domain service later on. This class and its values will be transmitted to the Silverlight client by the WCF RIA Services. It’s important to set the Key attribute on the identifier fields for WCF RIA Services, otherwise the project will not compile:

Screenshot-09.png - Click to enlarge image

That’s it! We now have our SAP data access layer ready to use and can start adding the domain service in the next section.

SAP Domain Service

The next step is to add the SAP domain service to our web project. A domain service is a specialized WCF service and is one of the core constructs of WCF RIA Services. The service exposes operations that can be called from the client generated code. On the client side, we use the domain context to access the domain service on the server side.

Add a new Domain Service Class and name it SAPService:

Screenshot-10.png - Click to enlarge image

In the upcoming dialog, create an empty domain service class by just clicking the Ok button:

SAP2Silverlight/Screenshot-11.png

Next, we add the service operation GetCustomers to the SAP service with a name pattern parameter. The operation then returns a list of Customer objects. The Query attribute limits the result set to 200 entries.

The operation uses the visually designed SAP data access logic to retrieve the SAP customer data. First of all, an instance of the SAPContext class will be created using a connection string (see sample in code). For more details regarding the SAP connection string, see the ERPConnect.net manual.

The LINQ to SAP context class contains the GetCustomers method which we will call using the given namePattern parameter. Next, the operation creates an instance of the Customer class for each customer record returned by SAP.

The license code for the ERPConnect.net library is set in the constructor of our domain service class.

Screenshot-12.png - Click to enlarge image

That’s all we need on the server side.

In the next section, we will implement the Silverlight client.

Silverlight Client

The implementation of the client side is straightforward. The home view contains a DataGrid control to display the list of customer data as well as a search area with TextBox and Button controls to allow users to enter name search pattern.

The click event handler of the load button, called OnLoadButtonClick, will execute the SAP service. The boilerplate code to access the web service was generated by WCF RIA Services in the subfolder Generated_Code in the Silverlight project.

First of all, an instance of the SAPContext will be created. Then, we load the query GetCustomersQuery and execute the service operation on the server side using WCF RIA Services. If the domain service returns an error, the callback anonymous method will mark the error as handled and display the error message.

If the execution of the service operation succeeded, the result set gets displayed in the DataGrid control.

Screenshot-13.png - Click to enlarge image

The next screenshot shows the final result:

Screenshot-14.png - Click to enlarge image

That’s it.

Summary

<

p>This article has shown how easily SAP customer data can be integrated within Silverlight clients using tools like WCF RIA Services and LINQ to SAP. It is quite simple to extend the SAP service to integrate all kinds of operations.

Microsoft Is Offering OneDrive Cloud Storage For Microsoft, iOS and Android Devices

Microsoft on Wednesday officially announced the global availability of its rebranded cloud storage service OneDrive.

Microsoft originally called the service SkyDrive but was forced to rebrand after British Sky Broadcasting sued and won a trademark lawsuit over use of the name.

OneDrive features some changes, including automatic camera backup for Android and the ability to share and view videos just as easily as photos. However, the biggest improvement is that now people can simultaneously access and edit files stored in OneDrive. The feature brings it into line with Google Drive and Apple’s iCloud. It will also automatically encode your uploaded videos and automatically stream in the optimum resolution for the bandwidth and device accessing it.

The company has also added new ways for you to earn more storage – on top of the 7 GB it is already give you for free. Microsoft is offering users who refer friends up to 5 GB (in 500 MB increments) for each friend who accepts an invitation to OneDrive, and will even give you 3 GB just for using the camera backup feature. There’s even a new monthly payment plan.

Existing SkyDrive users access the OneDrive they will find that many things are exactly as they left them. They can still log in to access web app versions of Word, Excel and PowerPoint for on-the-fly document editing.

OneDrive is built into the latest versions of Windows, Windows Phone, Office and Xbox. For everyone else, accessing SkyDrive will automatically reroute a smartphone or tablet to OneDrive landing page instead.

To celebrate the official launch of OneDrive, Microsoft will give 100,000 people 100 GB of free storage for one year.Image

AutoSPInstallerGUI – Great new tool with GUI for automated SharePoint Installation

http://autospinstallergui.codeplex.com/

Project Description
Automated SharePoint 2010/2013 PowerShell-based installation script – Now with user-friendly GUI!!

Image

Introducing AutoSPInstaller v3 with numerous enhancements including:

  • Granular SQL server assignment and aliasing for (almost) every service/web app (for control freaks)
  • Centralized, remote installation to all farm servers
  • Ability to specify any XML input file, by passing it as an argument to AutoSPInstallerLaunch.bat
  • Several tweaks & fixes

AutoSPInstaller now works reliably with SharePoint 2013, and of course SharePoint 2010 including Service Pack 1 (and SP2) for SP2010! It takes advantage of some of the cmdlet updates in SharePoint 2010 SP1, while remaining backward-compatible with non-SP1 deployments.

Newer versions often include updates to the input file XML schema, so make sure you compare any of your existing XML files to the newest AutoSPInstallerInput.XML. See below for highlights of changes in v3.0.x.

This project consists of PowerShell scripts, an XML input file, and a standard windows batch file (to kick off the process) which together provide a quick and near-unattended installation and initial configuration (Service Apps, My Sites) of Microsoft SharePoint Server 2010/2013. Works on Windows 2008 (though I hardly test on that OS these days), 2008 R2 and Windows 2012 (x64 only of course).

Perfect for repeated Virtual Machine-based installs/tear-downs, etc., but also great for production installs where you want to guarantee consistency and minimize data entry glitches. The immediate value is for installing and configuring the first/only server in a farm, but also supports using either server-specific input files or a single, all-encompassing input file for running the script on all farm servers (with parameters – e.g. for the service apps – set according to your desired topology).

“But doesn’t SharePoint 2010 have a nice wizard now that does all this for me??” – Yes, and it’s a huge improvement over what was available in MOSS 2007. However if you’ve ever seen the ‘DBA nightmare’ left behind on your SQL server after the Farm Configuration Wizard has completed (GUID’ed databases with inconsistent naming, etc.):

…then you’ll see the value in having consistently-named but automatically-created databases:

DatabaseList-Clean

The scripts (Franken-scripts, really…) leverage previously-available resources (as PowerShell has now taken its place as the automation platform for SharePoint) such as: Zach Rosenfield’s blog, Jos Verlinde’s script for creating a Farm, Gary Lapointe’s Enterprise Search script functions and other miscellaneous tidbits in the wild.

The scripted process will:

  • Re-launch itself in an elevated process to deal with User Access Control
  • Check whether the target server is running Windows 2008 or 2008 R2
  • Prompt you to enter all most (in progress) service accounts, passwords and the farm passphrase, unless you opt to just specify them in the AutoSPInstallerInput.xml
  • Validate connectivity and permissions to your SQL instance/alias
  • Validate the farm passphrase (for complexity), as well as the service account/password combinations specified in the input XML file
  • Automatically download and install platform-specific pre-requisites (e.g. IIS, .Net Framework) using the SP2010 Prerequisiteinstaller.exe. You can also pre-download all the prerequisites/hotfixes using this script, then specify <OfflineInstall>true</OfflineInstall> in your AutoSPInstallerInput.xml instead of having Prerequisiteinstaller try to download fixes at script runtime.
  • Optionally disable some unnecessary Windows services, CRL checking and the dreaded IE Enhanced Security Configuration
  • Install the SP2010 binaries using an (optionally, server-specific) config.xml for input
  • Optionally install the Office Web Applications (OWA) binaries using config-OWA.xml for input
  • Create the Farm (Config & Central Admin content databases, Central Admin site, help collections, etc.)
  • Optionally configure and start many SharePoint services and service applications; currently the script can provision:
    • User Profile Service Application
    • User Profile Synchronization Service
    • Metadata Service Application
    • SharePoint Foundation User Code Service
    • State Service Application
    • Usage and Health Service Application
    • PowerPivot Service Application (removed due to complexity/misunderstandings around order of installation etc.)
    • Secure Store Service
    • Enterprise Search Service Application
    • Web Analytics Service Application
    • Outgoing Email
    • Business Data Connectivity Service Application
    • Excel Service Application
    • Access Service Application
    • PerformancePoint Service Application
    • Visio Graphics Service Application
    • Word Automation (Conversion) Service Application
    • The Office Web Applications service apps:
      • PowerPoint Service Application
      • Word Viewing Service Application
      • Excel Service Application (if not already provisioned by virtue of having an Enterprise license)
  • Create the main Portal web app and site collection (will try to provision and/or assign a certificate, too – all you need is an https://-based URL in the input XML)
  • Create/configure your My Sites web app and site collection (will also try to provision and/or assign a certificate if you have an https://-based URL in the Input XML)
  • Configure paths and options for both IIS and SharePoint (ULS) logging according to your preferences
  • (NEW) Discover other target servers in your farm (based on values in AutoSPInstallerInput.xml) and remote into each of them to perform the installation process (if <RemoteInstall> is true)
  • Configure PDF indexing and icon display within SharePoint – effectively resolving what many consider to be a long-standing omission in the product in just a few seconds
  • Optionally install ForeFront Protection 2010 for SharePoint if the binaries are found in the correct path (see below)
  • Launch IE to display Central Administration, Portal and My Sites, and view the results of your hard work (just in time for your return from lunch)
  • Log all activity to a file on the current user’s desktop, and pop open the log file for review when finished.

There are several input parameters to define in the input XML file (which illustrates how much stuff you really have to plan & gather during a regular SharePoint install). However this is a one-time-per-install effort, and the trade-off includes hours saved and better spent elsewhere (see lunch above) and an avoidance of the risks involved (typos, missed settings etc.) during manual installations.

New in v3:

  • Centralized, remote install of every SharePoint server in your farm using PowerShell remoting
  • Support for parallel binary installations, whether remote install is enabled or not (useful for speeding up multi-server farm installs)
  • Ability to specify a different SQL server for each web application and service application, plus support for creating an alias for each (except Search, currently)
  • Screen output and log both now display the elapsed time to install SharePoint and Office Web App binaries
  • Specify an arbitrary XML input file by passing the XML file name as an argument, or just dragging it onto AutoSPInstallerLaunch.bat

The full v3 change log can be found within the CodePlex source code changesets for the project. Also, see my post at NothingButSharePoint.com that provides an overview of the new features & fixes.

New in v2.5:
The ability to use a single AutoSPInstallerInput.XML file for your entire farm, and simply include the names of servers (comma-delimited) on which you want particular service instances or service applications installed. This works by using the Provision=”” and Start=”” attributes; for example, to provision the managed metadata service on your 2 app servers, you would specify:

<ManagedMetadataServiceApp Provision=”SPAPPSRV1, SPAPPSRV2″

Further, the old way of specifying <ManagedMetadataServiceApp Provision=”true”… still works, if you want to continue using a different XML input file for each server.

See the release notes associated with the original 2.5 changeset here for a more complete list of changes.

New in v2:

  • MAJOR code and XML schema refactoring effort by Andrew Woodward of 21apps to enable (among other things) easier editing and extending via a custom functions script file.
  • Both the launch batch file and the User Profile Service App creation (as farm account) self-elevate so no more need to right-click, Run as Administrator to successfully run AutoSPInstaller on a server with User Access Control (UAC) enabled!
  • Enterprise Search now properly sets both the service account and the crawl (content access) account
  • Much better multi-server farm support. Services can be tweaked to start on the servers you wish, and service applications won’t be erroneously re-created on subsequent servers, etc.
  • Portal super user and super reader accounts can now be configured per best practices
  • Overall the install experience and results are more in line with community best practices; as always, this is a community-inspired and driven effort!

<

p>In addition to the scripts, you should create an installation source (local or shared) containing the entire extracted contents of the SP201x install package. The zip package will by default create most of this folder structure when you extract it. When you’re done, your folder structure should look something like this (Note: updated for v3):

\SP\AutoSPInstaller\AutoSPInstallerLaunch.bat
\SP\AutoSPInstaller\AutoSPInstallerInput.xml
\SP\AutoSPInstaller\AutoSPInstallerMain.ps1
\SP\AutoSPInstaller\AutoSPInstallerFunctions.ps1
\SP\AutoSPInstaller\AutoSPInstallerFunctionsCustom.ps1
\SP\AutoSPInstaller\AutoSPInstallerConfigureRemoteTarget.ps1
\SP\AutoSPInstaller\config.xml
\SP\201x\SharePoint\<installation files & folders>
\SP\201x\SharePoint\PreRequisiteInstallerFiles\
\SP\201x\SharePoint\Updates\ (extract Service Pack + Cumulative Updates here. NOTE not all updates support slipstreaming!)
\SP\2013\ProjectServer\ (optional; copy/extract the contents of the Project Server 2013 DVD/ISO here)
\SP\2013\ProjectServer\Updates (optional, for slipstreaming Service Packs and Public/Cumulative Updates. NOTE not all updates support slipstreaming!)

\SP\201x\LanguagePacks\xx-xx\
(optional)
\SP\201x\LanguagePacks\xx-xx\Updates\ (optional; extract Language Pack Service Pack / Cumulative Updates here)
OR
\SP\201x\LanguagePacks\<ServerLanguagePack_XX-XX.exe> (optional)
\SP\2010\OfficeWebApps\ (optional; only required/supported with SP2010)
\SP\2010\PDF\ (optional; only required/supported with SP2010)
\SP\2010\ForeFront\<ForeFront Protection 2010 for SharePoint install files> (optional, only required/supported with SP2010)

Note that x in the paths above is a 0 or a 3 depending on whether you’re installing SP2010 or SP2013. Spaces in the path to AutoSPInstallerLaunch.bat will cause the script to blow up, so avoid them.

How to: Set up an app catalog on SharePoint and SharePoint Online

An app catalog is a document library on SharePoint where manifest files for task pane and content apps can be published. An administrator uploads a manifest to the app catalog. When an app catalog is registered as a trusted catalog (through group policy or through File > Options > Trust Center > Trust Center Settings > Trusted App Catalogs in Word, Excel, PowerPoint, or Project) users can insert the app from the insertion UI in an Office client application.

There can be one app catalog for apps for Office per SharePoint web application. To setup the app catalog for a web application, follow the steps below:

To setup an app catalog for a web application

  1. Browse to the Central Administration Site (Start > Programs > Microsoft SharePoint 2013 Products > SharePoint 2013 Central Administration)

  2. In the left task pane, click the Apps link.

  3. At the bottom of the page, click the Manage App Catalog link under the App Management group.

  4. Make sure you have the right web application selected in the Web Application Selector.

  5. Specify the primary site collection administrator and the list of Readers.

  6. Click OK. This should create the Marketplace Host site collection that will host the app catalog document library.

  7. Click the App Catalog link to browse to the app catalog document library.

 

Applies to:  apps for Office | Office 2013 | Office 365 | Excel Web App | Project Professional 2013 | Excel 2013 | Word 2013 | SharePoint Server 2013 | PowerPoint 2013 

Use the following steps to upload the manifest for your task pane or content app to an apps for Office catalog on SharePoint. To set up an app catalog, see How to: Set up an app catalog on SharePoint

To publish to an app catalog

  1. Browse to the app catalog.

  2. Click the Click to add new item link.

  3. Click Browse, and then specify the manifest to upload.

After you upload app manifests to the apps for Office catalog, users can manually configure their installations of Word, Excel, PowerPoint, or Project using File > Options > Trust Center > Trust Center Settings > Trusted App Catalogs to specify the URL of the parent SharePoint site collection of this app catalog. For example, if the URL of the apps for Office catalog is in this form:

https:// domain /sites/ AppCatalogSiteCollection /AgaveCatalog

…users should specify just the URL of the parent site collection, like this:

https:// domain /sites/ AppCatalogSiteCollection

After specifying the app catalog URL, you must close and reopen the Office application before the app catalog will be available in the Apps for Office dialog box.

Alternatively, an administrator can specify an app for Office catalog on SharePoint by using group policy as described in the Using Group Policy to manage how users can install and use apps for Office section of the “Overview of apps for Office 2013” topic in the Office 2013 Resource Kit.

After doing so, content and task pane apps in this catalog are available from the Apps for Office dialog box by choosing Apps for Office on the Insert tab, and then choosing MY ORGANIZATION as shown in Figure 1.

Figure 1. The Apps for Office dialog box

Insert App for Office dialog box

If an app catalog is already set up for a SharePoint web application, you can find it using the following steps.

To find an app catalog

  1. Open the SharePoint Central Administration main page.

  2. Select Apps

  3. Select Manage App Catalog.

  4. Click the link provided, and then click Apps for Office on the left navigation bar.

Microsoft officially launches OneDrive!!

Not too long ago, Microsoft confirmed they are rebranding the SkyDrive and it will be known as OneDrive. Recently, the Redmond-based company took the wraps off of their new service, and it’s now available for the general public. For those of you who don’t know, it’s still the same as Skydrive and gives users the ability to store their files in the cloud and access them from any device, anywhere.

If you’re wondering about the files that were saved on SkyDrive, fret not as they are moved to the new cloud storage service, all you need to do is login with your SkyDrive account on OneDrive, and Voila! your files are there.

The new service comes with enticing new features as well. On signing up on the new service, users get 7GB extra storage space for free. It doesn’t end here, on referring your friends and other people, you can get an additional 5GB of storage space for every friend that registers on OneDrive. Other features include automatic camera backup for Android and you also get an extra 3GB for it, ability to share and view videos, and much more.

The service has dedicated applications for all major platforms that are currently available in the market, including Windows, Windows Phone, Xbox, iOS and Android, which makes sure you can have seamless access to the service any time.Image

New Tool available – VS Auto Unit Test Generator

The VS Auto Unit Test Generator helps to increase developer productivity by decreasing the setup work involved in creating new unit tests. It takes away the routine test creation tasks allowing a developer to focus on the highest value, writing the test itself.

VS Auto Unit Test Generator provides the ability to generate and configure a test project, test class, and test stub to enable you to get to write your test sooner. It provides a set of configuration options that allow you to tailor the generation to match your naming and organization schemes. It is also fully configurable to support MSTest, XUnit, and NUnit so that you can choose the framework that is most suitable in your environment.

Project Principles

The team embraced the following principles when they designed and developed the extension:

  • Achieves a moderate amount of restoration of Visual Studio 2010 feature functionality.
  • Replaces and does not resurrect the old command.
  • Supports .NET MS-Test, NUnit and XUnit Test Frameworks and generation of VB/C# test code.
  • Presents a “reference implementation” of how to do this for a particular test framework.
  • Provides a basic infrastructure and an extension point.
  • It focuses on project and reference management and not on code generation.

<

p> 

Once installed, you will find the extension under Extensions and Updates in the Tools menu.

Right-click in your method to select Generate Unit Test.

This generates a test project and a test class—if needed—then adds the references, the namespace, and the test methods.

 

Cloud Tasks – New Office365 & Cloud App developed – Available now!

Cloud Tasks App is a task management app that lets user efficiently manage all his active tasks in the Cloud.

Most of the organizations now uses both Microsoft Dynamics CRM and Microsoft SharePoint. They are looking for solutions that integrate these two technologies.

And with Microsoft Office 365, Microsoft Dynamics CRM Online and SharePoint Online pair together which results in cloud productivity. 

Cloud Tasks App is one such cloud based solution that lets the Office 365 users that are active users of CRM solution as well as SharePoint portal in same office 365 subscription, effectively manage their tasks.

Both Microsoft Dynamics CRM and Microsoft SharePoint uses concept of Tasks, however there is no single interface wherein the end users can manage all their tasks. User has to go to CRM or to SharePoint portal and click on individual Tasks to get the details and work on it. 

Cloud Tasks App is a SharePoint 2013 App that provides user efficient way of managing all his tasks at a single place.

Cloud Tasks App aggregates all the active tasks (in both CRM and SharePoint portal) and presents it in an easy to use Calendar interface. This gives user a clear pictorial view of the approaching deadlines, which would be difficult if he has to get details of his tasks separately in CRM solution and SharePoint portal. 

By providing a single intuitive interface and facility to perform various actions on the tasks, Cloud Tasks App helps user to plan and organize his tasks efficiently and increases his productivity.

User profile and Task manager Client side SharePoint App – New App Available!

NEW SHAREPOINT APP AVAILABLE!!

This new SharePoint App make use of the  Client Object Model (CSOM) in SharePoint 2013 to search and retrieve user profile information and organize tasks.

This App displays tasks that are due in the next week.

The tasks are displayed for the current user and optionally for the user’s direct reports.

Organizational relationships are retrieved from the current user’s profile, and tasks are retrieved using enterprise search.

Key components

The APP consists of a SharePoint-hosted app using the client object model (CSOM).

The clientside.peoplemanager.js library contains the functions that retrieve profile and task information. The clientside.viewmodel.js library contains the functions to request data and bind it to the user interface.

 

Troubleshooting

The search queries will not function correctly unless you set up the appropriate managed properties.

Ensure that you have performed a full crawl before testing the app.

Ensure that you have defined some tasks to be due within the next week.

Create an Outlook Solution Using Duet Enterprise Outlook Application Designer

This topic shows you how to create a solution in Microsoft Outlook 2010 that displays the contact details of a sales contact in a task pane when the contact is displayed in the Outlook 2010 Outlook Inspector Window.

clip_image002_thumb

The solution also shows how to include an action for the contact external content type that opens the collaboration external list for the customer to which the sales contact is related, and an action that displays a message.

Use the following steps to create the solution for displaying sales contact information in Outlook 2010 (steps that are marked as optional are included for completeness):

  1. Build task panes (optional).
  2. Build actions (optional).
  3. Design the Outlook 2010 solution.
  4. Localize the solution.
  5. Customize the solution (optional).
  6. Package and deploy the Outlook 2010 solution.

Microsoft Business Connectivity Services (BCS) provides two external data parts, a Rich List Web Part and an Microsoft InfoPath 2010 Web Part. The Rich List Web Part shows a list of entries from an external system. The InfoPath 2010 Web Part can show any InfoPath 2010 form (even forms with code-behind the form). You can display either of these external data Web Parts or any custom external data part in a task pane. By using Duet Enterprise, you can easily add task panes to your Outlook 2010 solution.

For our example, we will create a contact details form that contains information about the contact, including name, address, email information, and phone numbers.

For detailed instructions on how to create the task panes, see How to: Customize External List Forms Using Microsoft InfoPath(http://msdn.microsoft.com/en-us/library/ee554886.aspx) and Step 7 (Optional): Show External Data Parts in Outlook Task Pane (Layout.xml)(http://msdn.microsoft.com/en-us/library/ff394561.aspx).

Creating the Task Pane Layout File

After you have created the external data parts you want to display in a task pane, the next step is to create a layout file. This XML file defines the controls that are displayed in the task pane, which external content types they should be populated with, and any other custom properties that the control exposes. This is the file that you will upload in the Business Connectivity ServicesSolution Galleries and associate with an external list when designing an Outlook 2010 solution.

There are three ways to build a task pane:

  • Use built-in OBParts.
  • Create custom OBParts by using Visual Studio 2010.
  • Create the layout file manually as described in the following procedure.

To create the task pane layout file

  1. Create an XML file that follows the layout definition described in Sample Duet Enterprise XML Snippet: Layout Definition .
    Note Note
    The Duet Enterprise layout schema consists of the Business Connectivity Services layout schema and some extra metadata.
  2. If you are creating the XML file in Visual Studio, attach the Duet Enterprise Layout Schema and the BCS Layout schema.For more information about layout definitions, see the following resources:

    The following is an example of an XML file that follows the Duet Enterprise layout schema

    <?xml version="1.0" encoding="utf-8" ?>
    <Layout xmlns="http://schemas/oba/2010/Layout"
            Name="ContactDetails"
            Version="1.0.0.0">
              <EntityDependencies>
                <Entity Name="Contact"
                  Namespace="SAP.Office.DuetEnterprise.Account" 
                  Version="1.0.0.0" IsPrimary="true" />
              </EntityDependencies>
        <Container ContainerType="Stack" 
      xmlns="http://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout" 
      xmlns:loc="http://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
    <Children>
        <OBPart PartType="Custom" 
            QualifiedTypeName="ContactDetails.Taskpane, AssemblyName, 
            Version=14.0.0.0, Culture=neutral, PublicKeyToken=PublicKeyToken"
            DataSourceName="Context"
            Text="Contact"
            Description="Customer contact">
            <CustomProperties />
            <ActionNames />
         </OBPart>
      </Children>
    </Container>
    </Layout>
    NoteNote
    The values for AssemblyName and PublicKeyToken are placeholders that you have to replace.

    The layout in this example has only a single custom Web Part. Your solution can include more custom Web Parts, Rich List Web Parts, or InfoPath Web Parts, if these are required.

  3. Save the file with a .xml extension (for example, ContactDetails.xml).

Create Custom OBParts Using Visual Studio

You can create custom Web Parts that are based on Windows Forms by using Visual Studio 2010. You can use the form designer to design the custom form and also add code to your form.

To create a custom OBPart

  1. Start Visual Studio 2010 by using the Run as Administrator option.
  2. In Visual Studio 2010, on the File menu, click New, and then select New Project.In the New Project dialog box, expand the Visual C# node, expand the Windows node, and then select Empty Project.
  3. Name the project Contact Details, and then click OK.
  4. In Solution Explorer, right-click the solution, and then point to Add Reference.Add references to the following assemblies (which are installed with Microsoft Office 2010):
    • Microsoft.BusinessData.dll
    • Microsoft.Office.BusinessApplication.RuntimeUi.dll
  5. In Solution Explorer, right-click the solution, point to Add, and then click Windows Form.
  6. In the Add New Item dialog box, expand the Visual C# Items node, select Windows Form, and then click Add.
  7. Design the form. Add fields such as name, customer, and job description.
  8. After you have designed the form, right-click the form in Solution Explorer, and then click View Code.Add the following using directives.
    using Microsoft.Office.BusinessApplications.Runtime.UI;
    using Microsoft.BusinessData.Runtime;
  9. Change the base class from Form to WinFormsOBPartBase.Now you can override the methods of the base class and also add other methods you may need.
  10. Override the OnDataSourceChanged method, which is called when the DataSource property is changed so that you can update your Web Part with the new data.The following code provides an example of an overriden OnDataSourceChanged.
    namespace ContactDetails
    {
        public partial class Taskpane : WinFormsOBPartBase
        {
            public Taskpane()
            {
                InitializeComponent();
            }
    
            protected override void 
            OnDataSourceChanged(Microsoft.Office.BusinessApplications.
            Model.DataSourceChangedEventArgs args)
            {
                base.OnDataSourceChanged(args);
    
                IEntityInstance contactInstance = this.DataSource as IEntityInstance;
                entityInstanceReference = contactInstance;
    
                try
                {
                    this.txtFirstName.Text = contactInstance["GivenName"].ToString();
                    this.txtLastName.Text = contactInstance["FamilyName"].ToString();
                    this.txtJobFunctionCode.Text = contactInstance["JobFunctionCode"].ToString();
                    this.txtJobFunction.Text = contactInstance["JobFunction"].ToString();
                    this.txtCustomerCode.Text = contactInstance["CustomerIdDisp"].ToString();
                    this.txtCustomerTitle.Text = contactInstance["CustomerIdDisp"].ToString();
                }
                catch(Exception excep)
                {
                    MessageBox.Show(excep.ToString(), "OBPLoad");
                }
            }
            private IEntityInstance entityInstanceReference = null;
    
        }
    }
  11. Change the Visual Studio 2010 project output type from Windows Application to Class Library.
  12. On the Build tab, ensure the target framework is NET Framework 3.5 and the target platform is Any CPU.
  13. On the Signing tab, ensure that the assembly is signed.
  14. Save all files and build the project.The custom Web Part is ready to be used in the Outlook 2010 task pane.
  15. Insert the following XML snippet into a task pane layout file.
    <OBPart PartType="Custom" 
            QualifiedTypeName="ContactDetails.Taskpane, $AssemblyName$, 
            Version=14.0.0.0, Culture=neutral, 
            PublicKeyToken=$PublicKeyToken$"
            DataSourceName="Context"
            Text="Contact"
            Description="Customer contact">
            <CustomProperties />
            <ActionNames />
    </OBPart>

There are two types of actions: URL actions and code method actions. You can open a URL in the browser window by using URL actions. Code method actions can be used to run code and enable advanced scenarios by using the Business Data Connectivity (BDC) service object model.

Both URL actions and code method actions can have parameters passed to them. A parameter can be either a constant parameter or an expression parameter. A constant parameter is a constant value that is passed to the action during run time. When you are using Duet Enterprise, the value can be set while designing the Outlook 2010 solution. Expression parameters refer to a field on the external content type. The value passed to the action by the runtime is the value of that field for the external data item in whose context the action is invoked.

Actions are displayed to the user via the ribbon. For example, the View SAP actions button would appear on the Duet Enterprise tab of the ribbon.

Creating a Code Method Action

After building the code-behind assembly, you can create an XML action file for your code action. This file defines the metadata for the action. URL actions need only this action file. This is the file you will upload to the Business Connectivity ServicesSolution Galleries. You will also associate this file with an external list when you design an Outlook 2010 solution.

To create the class library project

  1. Start Visual Studio 2010 by using the Run as Administrator option.
  2. On the File menu, click New, and then click Project.
  3. In the New Project dialog box, expand the Visual C# node. In the Templates pane, click Class Library.
  4. Name the solution Greetings, and then click OK.

To create the code behind assembly for the code method action

  1. If you need access to the Business Connectivity Services object model, add references to the Business Connectivity Services assemblies: Microsoft.SharePoint and Microsoft.BusinessData.
  2. Write the code that you want to run when the action is invoked.The following is a simple code method action that displays a greeting message in a message box.
    namespace Greetings
    {
        /// <summary>
    
        /// The action definition passes in FirstName and LastName for the selected person instance.
        /// </summary>
        public class Greetings
        {
            /// <summary>
            /// The zeroth parameter dafaults to OfficeContext.
            /// First parameter is constant type and a welcome string such as "Hello" or "Hi".
            /// Second and third are expression types and are FirstName and LastName respectively.
            /// </summary>
            /// <param name="actionParams"></param>
            public void SayGreetings(params object[] actionParams)
            {
                string message = null;
                try
                {
                    message = String.Format("{0} {1} {2}!",
                        actionParams[1], actionParams[3], actionParams[2]);
                }
                catch (Exception exception)
                {
                    message = exception.Message;
                }
                MessageBox.Show(message, "GreetingsAction2");
            }
        }
    }
  3. Save the project and build it. This assembly can now be used with the metadata as a code method action.

To create the code method XML action file

  1. Create an XML file for the code action. For an XML snippet showing a sample code action, see Sample Duet Enterprise XML Snippet: Code Action .
  2. If you are creating the XML file in Visual Studio 2010, attach the Duet Enterprise Layout Schema. This will give you IntelliSense functionality, and also help you create valid entries.For an XML snippet that shows a sample XML layout, see Sample Duet Enterprise XML Snippet: Layout Definition .
  3. Create a CodeMethodAction element with details of the SayGreetings method that you created in the previous step. Also provide the parameters required by that method.The following XML snippet shows how the file might look after editing.
    <?xml version="1.0" encoding="utf-8" ?> 
    <Action xmlns="http://schemas/oba/2010/Action" Name="Greetings" Version="1.0.0.0">
    <CodeMethodAction  MethodType="Custom"
     Name="SayGreetings"
     QualifiedTypeName="Greetings.Greetings, AssemblyName, Version=14.0.0.0, Culture=neutral, PublicKeyToken=PublicKeyToken"
     MethodName="SayGreetings">
      <Parameters>
            <ConstantParameter Name="GreetingsString" Value="Greetings" ValueType="System.String"/>
            <ExpressionParameter Name = "FirstName" Expression="GivenName" ValueType="System.String"/>
         <ExpressionParameter Name = "LastName" Expression="FamilyName" ValueType="System.String"/>
      </Parameters>
    </CodeMethodAction>
    </Action>
    NoteNote
    The values for AssemblyName and PublicKeyToken are placeholders that you will need to replace.
  4. Save the file with a .xml extension.

Creating the URL Action

The URL actions will enable the user to open a URL in the browser window.

In this procedure you will create a URL action file named CollabOn.xml.

To create a URL action

  1. Create an XML file according to the Duet Enterprise Action schema. For an example of a file that follows this schema see, Sample Duet Enterprise XML Snippet: Code Action .
  2. If you are creating the XML file in Visual Studio 2010, attach the Duet Enterprise Action schema. This will give you IntelliSense functionality, and also help you create valid entries.There should be a URLAction element with details of the URL top open, and the parameters expected.

    The following example shows how the file might look after editing.

    <Action xmlns="http://schemas/oba/2010/Action" 
            Name="OpenCustomerExternal List" 
            Version="1.0.0.0">
      <EntityDependencies>
     <Entity Name="Contact" Namespace= "SAP.Office.DuetEnterprise.Account" Version="1.0.0.0" IsPrimary="true" />
      </EntityDependencies>
      <UrlAction Name="OpenExternal List" 
          Url="http://MyServer/_layouts/OBA/CollabSiteRedirect.aspx?
          CustomerId={0}&EntityName=Account&
          EntityNamespace=SAP.Office.DuetEnterprise.Account&
          LobsystemInstance=Account">
       <Parameters>
         <ExpressionParameter Name="Param1" Expression="CustomerId" ValueType="System.String" />
       </Parameters>
     </UrlAction>
    </Action>
  3. Save the file with a .xml extension.

After you have created the building blocks (task panes, actions, and supporting assemblies), you can design the Outlook solution by using the Duet EnterpriseOutlook Application Designer. The Outlook 2010 Application Designer lets you work with one or more external lists while offline in Outlook You can also associate task panes and actions with these external lists. The task panes and actions can be reused for multiple solutions. Select the site collection where you want to develop the solution and follow the steps described in the following sections.

Enabling Libraries in the Site Collection

Before you can enable libraries in the site collection, you have to upload the building block files to the site collection. Later in the process, you create a package of building block files to download to Outlook 2010. Then, you enable the libraries on the site collection that stores these building block files.

To enable libraries on the site collection

  1. On the Site Actions menu, click Site Settings.
  2. Under Site Collection Administration, click Site collection features.
    Note Note
    If the Site collection features option does not appear, then click Go to top level settings under Site Collection Administration. The Site Collection Features option will now appear.
  3. On the Features page, in the Business Connectivity ServicesSolution Galleries, click Activate.

Upload the Building Block Files to the Site Collection

You are now ready to upload the source files to the site collection, starting with the assembly files. The following procedure describes how to upload the building block files to the site collection.

To upload the building block files to the site collection

  1. Click Site Collection Administration on the breadcrumb navigation at the top of the page.
  2. On the Site Settings page, under BCS Solution Galleries, click Application Assemblies.
  3. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the DLL file, and then click OK.
    Note Note
    Duet Enterprise will not allow you to upload DLL files directly, so ensure that you have renamed *.dll to *.dll.deploy.
  4. On the Site Actions menu, click Site Settings.
  5. On the Site Settings page, under BCS Solution Galleries, click Task Panes.
  6. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the task pane file (for example, ContactDetails.xml), and then click OK.
  7. On the Site Actions menu, click Site Settings.
  8. On the Site Settings page, under BCS Solution Galleries, click Business data actions.
  9. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the action file (for example, CollabOnAction.xml), and then click OK.
    Note Note
    Ensure that after each building block is uploaded, the Error Message field is marked as OK. Only building blocks with this status can be used later. If the error status displays any message other than OK, you should resolve any associated problems. The most common cause of error messages is badly formed XML.

A Business Connectivity Services solution is a package of downloadable files that enable specific functionality. In this case, the Business Connectivity Services solution contains a collection of files that together enable elements of a Duet Enterprise external list to function offline. It includes external lists, Business Connectivity Services solution task panes, and BCS Data Actions.When you create a Business Connectivity Services solution, the resulting objects are named Business Connectivity Services solution artifacts.

Business Connectivity Services solution artifacts are the files that are required in an Outlook 2010 solution. These include files such as the BCS Client Runtime, OIR.config file, ribbon file, and resource files. The layout files are generated from the task pane building blocks. The action files do not need to be copied, because the metadata that they contain is integrated into the OIR.config file. The supporting assemblies are also copied to the Business Connectivity Services solution artifacts folder in the site.

Overview: Building the BCS Solution that Displays Sales Contact Data in Outlook 2010

Use the following steps to build the Business Connectivity Services solution that displays sales contact data in Outlook 2010.

  1. Create the external lists that you want to take offline in Outlook 2010.
  2. Configure a setting that will make the external list available offline in Outlook 2010.
  3. Add the Business Connectivity Services solution task pane files for the external list.
  4. Add the Business Data action files for the external list.
  5. Generate the Business Connectivity Services solution artifacts.

To create the external lists

  1. Create a Site in the site collection where you have uploaded the building blocks.
  2. Navigate to this site.
  3. Under Site Actions, click More Options.
  4. From the list of installed items, select External List.
  5. In the resulting page, provide a name and select the desired external content type.Optionally, repeat the previous steps to create another external list.

To configure an external list for offline availability

  1. Navigate to the site in the site collection where you have uploaded the building blocks.
  2. On the Site Actions menu, click Site Settings.
  3. On the Site Settings page, under Site Actions, click Manage site features.
  4. On the Features page, locate the BCS Solution Design Feature, and then click Activate.
  5. Click Site Settings on the breadcrumb navigation at the top of the page.
  6. On the Site Settings page, under Duet Enterprise Administration, click Outlook Application Designer.
  7. On the Outlook Application Designer page, under External Lists, click the external list you want to use offline.
  8. On the Outlook settings page, under List Settings, click Outlook Client Settings.
  9. In the Edit Outlook settings for this external list dialog box, select the Offline this external list to Outlook check box and Auto generate Outlook forms check box, and then click OK.Optionally, repeat the previous steps to configure another external list. You are ready to add the task pane files for the external list.

To add the business data task pane files for the external list

  1. On the Outlook settings page, under Task Panes, click Add from Business Data Task Panes Gallery.
  2. In the Add task pane dialog box that opens, in Select a task pane, choose a task pane from the available task panes.
    Note Note
    If you do not see any task panes listed, it might mean that your task pane contains an error. Resolve the error to proceed.
  3. In Display properties, type a display name and a tool tip for the task pane. A tool tip is the text that appears when you hover over the task pane in Outlook 2010.
  4. In Default task pane, click Make this the default task pane if you want to make the selected task pane the default task pane.
  5. Click OK.Optionally, repeat the previous steps to add more task panes. You are now ready to add the action files for the external list.

To add the business data action files for the external list

  1. On the Outlook settings page, under Business Data actions, click Add from Business Data Actions Gallery.
  2. In the Add business data actions dialog box that opens, in Select a business data action, select an action from the available actions.
    Note Note
    If you do not see any actions listed, it might mean that your action contains an error. Resolve the error to proceed.
  3. In Display properties, type a display name and a tool tip for the action. The tool tip text appears when you hover over the task pane in Outlook 2010.
  4. Click OK.
  5. In Map business data action parameters, select a field from the list of entity fields.
  6. You can also type in values for constant parameters.
  7. Click OK.Optionally, repeat the previous steps to add more action files.

To generate the BCS solution artifacts

  1. On the Outlook settings page, click Back to the Outlook Application Designer page.
  2. Click Generate BCS Solution Artifacts.
  3. Click OK when you get a message that the operation succeeded.

After you have added a task pane or an action, you have the option to edit the settings for that item from the Outlook 2010 Settings page. If you click on the task pane or action name, a page opens where you can edit all the settings you entered while adding the item. If you edit these settings, you will have to follow the steps in the previous procedure again and follow all subsequent steps for the changes to be reflected in the Outlook Solution.

Deleting the Business Data Task Panes or Business Data Actions

After you add a task pane or an action, you have the option to delete that item from the Outlook 2010 Settings page. If you click on the task pane or action name, a page opens where you can delete the item. You will have to follow the steps in Generate the BCS Solution Artifacts again, and follow all subsequent steps for the changes to be reflected in the Outlook solution.

Note Note
Deleting the item will not remove it from the Building Block Gallery. It removes only the association of the item with this external list.

The process of preparing your solution so it can be used in other locales is known as localization. Localization consists of translating resources to a specific language. For more information, see Globalizing and Localizing Applications(http://msdn.microsoft.com/en-us/library/1021kkz0.aspx).

You should include a neutral resource file (one that is not associated with any locale) in your solution if there is a chance that your solution will be downloaded on a client that uses a language other than the ones supported by the resource files that are included in the solution. For more information, seeLocalizing SharePoint Solutions (http://msdn.microsoft.com/en-us/library/ee696750.aspx).

You create some of the files required for the Outlook 2010 solution by following the steps in Generate the BCS Solution Artifacts. These files can be found in the BCS Solution Artifacts document library. You can see that by default the ribbon and resource files have been generated only for the en-us locale. For other locales, you will have to create the ribbon and resource files and then upload them to this document library. The steps in the following procedure create these files for the Japanese (ja-jp) locale.

To localize for other locales

  1. Under Site Actions, click View All Site Content.Under Document Libraries, click BCS Solution Artifacts.
  2. Download the ribbon files named *Ribbon.en-US.xml.
  3. Download the resource file named Resources.en-US.resx.
  4. For each *Ribbon.en-US.xml file, create a corresponding *Ribbon.ja-JP.xmlfile that replaces the English strings for labels and screen tips with the corresponding localized strings.
  5. Create a Resources.ja-JP.resx file that is identical to Resources.en-US.resx.You can then localize the following strings:
    • Folder Display Name in Outlook (replace the English string with a corresponding localized string)
    • Solution Display Name in Outlook (replace the English string with corresponding localized string)
    • (replace the file name of the English ribbon with the file name of the corresponding localized ribbon)
  6. Upload Resources.ja-JP.resx and *Ribbon.ja-JP.xml to the BCS Solution Artifacts document Library.Repeat these steps to localize to other languages as you want.

At this point, you can optionally customize the Outlook solution by editing the solution manifest file, named OIR.config. Some of the scenarios which cannot be created by using Duet EnterpriseOutlook Application Designer can be created in this way. You can also customize the ribbon and improve its appearance and behavior (look and feel).

We recommend that you skip these customizations in the initial development of your solution. First, create the solution with only the actions and task panes.When the basic functionality works as you expect, extend the solution with one or more of the customizations described in the following sections as needed.

Customizing the Solution Manifest File (OIR.config )

The solution manifest file (OIR.config) is the main file that the Business Connectivity Services client runtime uses to configure your intermediate declarative Outlook solution.

To create a custom view definition in Outlook

  1. Customize the view that is shown for a folder containing external data.Business Connectivity Services provides a command to save the customized view as an Outlook View Definition (.ovd) file, so that it is available to users who install the declarative solution.For detailed steps, see Step 6 (Optional): Create Custom Outlook View Definitions (*.ovd) (http://msdn.microsoft.com/en-us/library/ee819848.aspx).

    After you have created the .ovd file, you must update the OIR.config file that contains the details about the view definition.

  2. Add a FolderViewDefinition child element to the Views element in the OIR.config file.The following example shows how the Views element might appear after you edit it.
    <Views>
      <FolderViewDefinition Name="ContactView" 
                            ViewName="ContactView" 
                            ViewType="TableView" 
                            IsDefault="true" 
                            ViewFileName="ContactView.ovd" />
    </Views>
  3. Upload the Outlook View Definition (*.ovd) files to the BCS Solution Artifacts document library. This will ensure that these files are included in the ClickOnce package that is generated.

To customize Outlook form regions

  1. You can create customized Outlook form regions that show external data by designing new form regions in Outlook.For detailed steps about how to create an Outlook form region (*.ofs) file and a form region manifest (FormRegionManifest.xml) file, see Step 5 (Optional): Create the Outlook Form Region (*.ofs) and Form Region Manifest (FormRegionManifest.xml) (http://msdn.microsoft.com/en-us/library/ee819887(v=office.14).aspx).
  2. After you create the .ofs and .xml files, you have to update the OIR.config file with the details of the custom form region. Add a FormRegion child element to the FormRegions element in the OIR.config file.The code in the following example shows how the FormRegions element might appear.
    <FormRegions xsl:type="Declarative:DeclarativeFormRegions">
                  FormRegion Name="Contact" InternalName="ContactForm" 
                  FormFileName="formRegionContact.ofs" 
                  ManifestFileName="formRegionContact.manifest.xml" />
    </FormRegions>
  3. Upload the Outlook form region (*.ofs) files and form region manifest files to the BCS Solution Artifacts document library. Doing so ensures these files are included in the ClickOnce package.

Customizing the Ribbon

You can use Visual Studio to customize the ribbon. You do not need to edit the OIR.config file to customize the ribbon.

To customize the ribbon

  1. Download the OutlookContact_Ribbon.en-US.xml from the BCS Solution Artifacts document library.
  2. Customize the OutlookContact_Ribbon.en-US.xml file, then reupload the file.Make sure to use this customized ribbon as the template for creating localized versions of the ribbon.

For detailed instructions, see the following resources:

After you generate the Business Connectivity Services Solution Artifact, you or other users with the necessary permissions can generate the Business Connectivity Services solution and download the solution in Outlook 2010. The Business Connectivity Services solution has to be generated on the production environment from which you want users to download the solution.

Moving Artifacts to the Production Environment

Move the artifacts to the production environment by doing the following:

  1. Save the site as a template.
  2. Upload the solution to the production environment.
  3. Create a new site in the production environment.

To save the site as a template

  1. On the Site Settings page, under Site Actions, click Save site as template.
  2. Provide the file name, template name and template description as you want.Select the Include Content check box, and then click OK.
  3. Go to the Site Settings page of the top-level site, and under Galleries, click Solutions. Click the template to download the solution package (.wsp) file.

To upload the solution to the production environment

  1. Go to the Site Settings page of the top-level site in the production environment where you want to deploy the Outlook 2010 solution.Under Galleries, click Solutions. Click Upload Solution, and then browse to the solution package (.wsp) file saved in the previous step.
  2. After the template is visible in the Solutions Gallery, click it and select Activate on the ribbon.

To create a new site in the production environment

  1. Create a site in the site collection where you have uploaded your solution, and from the Custom category ,choose the template that you have activated.
    Note Note
    All of the site collection features activated in the development environment where this template was created must be activated in the site collection on the production environment also. If this is not what you want, deactivate the feature in the development site before saving it as a template.
  2. This site will have the BCS Solution Artifacts document library, and you can proceed with generation of the Business Connectivity Services solution.

Generating the BCS Solution for Displaying Sales Contact Data

The procedure in this section describes how to generate the Business Connectivity Services solution for displaying sales contact data so that you can download it and use it in Outlook 2010.

To generate the BCS solution for displaying sales contact data

  1. On the Site Actions menu, click Generate BCS solution.
  2. On the Generate BCS Solution page, in the Certificate category, select a certificate, and then click OK.
    Note Note
    If the OK button is not available, the farm administrator has not uploaded the necessary certificates to the Trusted Publishers and Trusted Root Certification Authorities stores in the farm. Contact your server administrator for further assistance.
  3. Click OK on the webpage to confirm that the operation succeeded. Duet Enterprise opens the All Documents page, where you can download the solution in Outlook 2010.
  4. In the All Documents page, you can also manage permissions for the solution. This means you can add users who can download the solution in Outlook 2010, or even remove users.

Downloading the BCS Solution in Outlook 2010

The procedure in this section describes how to download the Business Connectivity Services solution that you have created so that you can use it in Outlook 2010.

To download the solution in Outlook 2010

  1. On the Site Actions menu, click Download BCS Solution, and then click Allow.
  2. In the Microsoft Office Customization Installer dialog box, click Close.The solution now opens automatically in Outlook 2010.

Create an Outlook Solution Using Duet Enterprise Outlook Application Designer

Duet

 

This topic shows you how to create a solution in Microsoft Outlook 2010 that displays the contact details of a sales contact in a task pane when the contact is displayed in the Outlook 2010 Outlook Inspector Window.

The solution also shows how to include an action for the contact external content type that opens the collaboration external list for the customer to which the sales contact is related, and an action that displays a message.

Use the following steps to create the solution for displaying sales contact information in Outlook 2010 (steps that are marked as optional are included for completeness):

  1. Build task panes (optional).
  2. Build actions (optional).
  3. Design the Outlook 2010 solution.
  4. Localize the solution.
  5. Customize the solution (optional).
  6. Package and deploy the Outlook 2010 solution.

Microsoft Business Connectivity Services (BCS) provides two external data parts, a Rich List Web Part and an Microsoft InfoPath 2010 Web Part. The Rich List Web Part shows a list of entries from an external system. The InfoPath 2010 Web Part can show any InfoPath 2010 form (even forms with code-behind the form). You can display either of these external data Web Parts or any custom external data part in a task pane. By using Duet Enterprise, you can easily add task panes to your Outlook 2010 solution.

For our example, we will create a contact details form that contains information about the contact, including name, address, email information, and phone numbers.

Creating the Task Pane Layout File 

After you have created the external data parts you want to display in a task pane, the next step is to create a layout file. This XML file defines the controls that are displayed in the task pane, which external content types they should be populated with, and any other custom properties that the control exposes. This is the file that you will upload in the Business Connectivity ServicesSolution Galleries and associate with an external list when designing an Outlook 2010 solution.

There are three ways to build a task pane:

  • Use built-in OBParts.
  • Create custom OBParts by using Visual Studio 2010.
  • Create the layout file manually as described in the following procedure.

To create the task pane layout file

  1. Create an XML file that follows the layout definition described in Sample Duet Enterprise XML Snippet: Layout Definition .
    Note Note
    The Duet Enterprise layout schema consists of the Business Connectivity Services layout schema and some extra metadata.
  2. If you are creating the XML file in Visual Studio, attach the Duet Enterprise Layout Schema and the BCS Layout schema.

    For more information about layout definitions, see the following resources:

    The following is an example of an XML file that follows the Duet Enterprise layout schema

    <?xml version="1.0" encoding="utf-8" ?>
    <Layout xmlns="http://schemas/oba/2010/Layout"
            Name="ContactDetails"
            Version="1.0.0.0">
              <EntityDependencies>
                <Entity Name="Contact"
                  Namespace="SAP.Office.DuetEnterprise.Account" 
                  Version="1.0.0.0" IsPrimary="true" />
              </EntityDependencies>
        <Container ContainerType="Stack" 
      xmlns="http://schemas.microsoft.com/office/2009/05/BusinessApplications/Layout" 
      xmlns:loc="http://schemas.microsoft.com/office/2009/05/BusinessApplications/Localization">
    <Children>
        <OBPart PartType="Custom" 
            QualifiedTypeName="ContactDetails.Taskpane, AssemblyName, 
            Version=14.0.0.0, Culture=neutral, PublicKeyToken=PublicKeyToken"
            DataSourceName="Context"
            Text="Contact"
            Description="Customer contact">
            <CustomProperties />
            <ActionNames />
         </OBPart>
      </Children>
    </Container>
    </Layout>
    NoteNote
    The values for AssemblyName and PublicKeyToken are placeholders that you have to replace.

    The layout in this example has only a single custom Web Part. Your solution can include more custom Web Parts, Rich List Web Parts, or InfoPath Web Parts, if these are required.

  3. Save the file with a .xml extension (for example, ContactDetails.xml).

Create Custom OBParts Using Visual Studio

You can create custom Web Parts that are based on Windows Forms by using Visual Studio 2010. You can use the form designer to design the custom form and also add code to your form.

To create a custom OBPart

  1. Start Visual Studio 2010 by using the Run as Administrator option.
  2. In Visual Studio 2010, on the File menu, click New, and then select New Project.

    In the New Project dialog box, expand the Visual C# node, expand the Windows node, and then select Empty Project.

  3. Name the project Contact Details, and then click OK.
  4. In Solution Explorer, right-click the solution, and then point to Add Reference.

    Add references to the following assemblies (which are installed with Microsoft Office 2010):

    • Microsoft.BusinessData.dll
    • Microsoft.Office.BusinessApplication.RuntimeUi.dll
  5. In Solution Explorer, right-click the solution, point to Add, and then click Windows Form.
  6. In the Add New Item dialog box, expand the Visual C# Items node, select Windows Form, and then click Add.
  7. Design the form. Add fields such as name, customer, and job description.
  8. After you have designed the form, right-click the form in Solution Explorer, and then click View Code.

    Add the following using directives.

    using Microsoft.Office.BusinessApplications.Runtime.UI;
    using Microsoft.BusinessData.Runtime;
  9. Change the base class from Form to WinFormsOBPartBase.

    Now you can override the methods of the base class and also add other methods you may need.

  10. Override the OnDataSourceChanged method, which is called when the DataSource property is changed so that you can update your Web Part with the new data.

    The following code provides an example of an overriden OnDataSourceChanged.

    namespace ContactDetails
    {
        public partial class Taskpane : WinFormsOBPartBase
        {
            public Taskpane()
            {
                InitializeComponent();
            }
    
            protected override void 
            OnDataSourceChanged(Microsoft.Office.BusinessApplications.
            Model.DataSourceChangedEventArgs args)
            {
                base.OnDataSourceChanged(args);
    
                IEntityInstance contactInstance = this.DataSource as IEntityInstance;
                entityInstanceReference = contactInstance;
    
                try
                {
                    this.txtFirstName.Text = contactInstance["GivenName"].ToString();
                    this.txtLastName.Text = contactInstance["FamilyName"].ToString();
                    this.txtJobFunctionCode.Text = contactInstance["JobFunctionCode"].ToString();
                    this.txtJobFunction.Text = contactInstance["JobFunction"].ToString();
                    this.txtCustomerCode.Text = contactInstance["CustomerIdDisp"].ToString();
                    this.txtCustomerTitle.Text = contactInstance["CustomerIdDisp"].ToString();
                }
                catch(Exception excep)
                {
                    MessageBox.Show(excep.ToString(), "OBPLoad");
                }
            }
            private IEntityInstance entityInstanceReference = null;
    
        }
    }
  11. Change the Visual Studio 2010 project output type from Windows Application to Class Library.
  12. On the Build tab, ensure the target framework is NET Framework 3.5 and the target platform is Any CPU.
  13. On the Signing tab, ensure that the assembly is signed.
  14. Save all files and build the project.

    The custom Web Part is ready to be used in the Outlook 2010 task pane.

  15. Insert the following XML snippet into a task pane layout file.
    <OBPart PartType="Custom" 
            QualifiedTypeName="ContactDetails.Taskpane, $AssemblyName$, 
            Version=14.0.0.0, Culture=neutral, 
            PublicKeyToken=$PublicKeyToken$"
            DataSourceName="Context"
            Text="Contact"
            Description="Customer contact">
            <CustomProperties />
            <ActionNames />
    </OBPart>

There are two types of actions: URL actions and code method actions. You can open a URL in the browser window by using URL actions. Code method actions can be used to run code and enable advanced scenarios by using the Business Data Connectivity (BDC) service object model.

Both URL actions and code method actions can have parameters passed to them. A parameter can be either a constant parameter or an expression parameter. A constant parameter is a constant value that is passed to the action during run time. When you are using Duet Enterprise, the value can be set while designing the Outlook 2010 solution. Expression parameters refer to a field on the external content type. The value passed to the action by the runtime is the value of that field for the external data item in whose context the action is invoked.

Actions are displayed to the user via the ribbon. For example, the View SAP actions button would appear on the Duet Enterprise tab of the ribbon.

Creating a Code Method Action

After building the code-behind assembly, you can create an XML action file for your code action. This file defines the metadata for the action. URL actions need only this action file. This is the file you will upload to the Business Connectivity ServicesSolution Galleries. You will also associate this file with an external list when you design an Outlook 2010 solution.

To create the class library project

  1. Start Visual Studio 2010 by using the Run as Administrator option.
  2. On the File menu, click New, and then click Project.
  3. In the New Project dialog box, expand the Visual C# node. In the Templates pane, click Class Library.
  4. Name the solution Greetings, and then click OK.

To create the code behind assembly for the code method action

  1. If you need access to the Business Connectivity Services object model, add references to the Business Connectivity Services assemblies: Microsoft.SharePoint and Microsoft.BusinessData.
  2. Write the code that you want to run when the action is invoked.

    The following is a simple code method action that displays a greeting message in a message box.

    namespace Greetings
    {
        /// <summary>
    
        /// The action definition passes in FirstName and LastName for the selected person instance.
        /// </summary>
        public class Greetings
        {
            /// <summary>
            /// The zeroth parameter dafaults to OfficeContext.
            /// First parameter is constant type and a welcome string such as "Hello" or "Hi".
            /// Second and third are expression types and are FirstName and LastName respectively.
            /// </summary>
            /// <param name="actionParams"></param>
            public void SayGreetings(params object[] actionParams)
            {
                string message = null;
                try
                {
                    message = String.Format("{0} {1} {2}!",
                        actionParams[1], actionParams[3], actionParams[2]);
                }
                catch (Exception exception)
                {
                    message = exception.Message;
                }
                MessageBox.Show(message, "GreetingsAction2");
            }
        }
    }
  3. Save the project and build it. This assembly can now be used with the metadata as a code method action.

To create the code method XML action file

  1. Create an XML file for the code action. For an XML snippet showing a sample code action, see Sample Duet Enterprise XML Snippet: Code Action .
  2. If you are creating the XML file in Visual Studio 2010, attach the Duet Enterprise Layout Schema. This will give you IntelliSense functionality, and also help you create valid entries.

    For an XML snippet that shows a sample XML layout, see Sample Duet Enterprise XML Snippet: Layout Definition .

  3. Create a CodeMethodAction element with details of the SayGreetings method that you created in the previous step. Also provide the parameters required by that method.

    The following XML snippet shows how the file might look after editing.

    <?xml version="1.0" encoding="utf-8" ?> 
    <Action xmlns="http://schemas/oba/2010/Action" Name="Greetings" Version="1.0.0.0">
    <CodeMethodAction  MethodType="Custom"
     Name="SayGreetings"
     QualifiedTypeName="Greetings.Greetings, AssemblyName, Version=14.0.0.0, Culture=neutral, PublicKeyToken=PublicKeyToken"
     MethodName="SayGreetings">
      <Parameters>
            <ConstantParameter Name="GreetingsString" Value="Greetings" ValueType="System.String"/>
            <ExpressionParameter Name = "FirstName" Expression="GivenName" ValueType="System.String"/>
         <ExpressionParameter Name = "LastName" Expression="FamilyName" ValueType="System.String"/>
      </Parameters>
    </CodeMethodAction>
    </Action>
    NoteNote
    The values for AssemblyName and PublicKeyToken are placeholders that you will need to replace.
  4. Save the file with a .xml extension.

Creating the URL Action

The URL actions will enable the user to open a URL in the browser window.

In this procedure you will create a URL action file named CollabOn.xml.

To create a URL action

  1. Create an XML file according to the Duet Enterprise Action schema. For an example of a file that follows this schema see, Sample Duet Enterprise XML Snippet: Code Action .
  2. If you are creating the XML file in Visual Studio 2010, attach the Duet Enterprise Action schema. This will give you IntelliSense functionality, and also help you create valid entries.

    There should be a URLAction element with details of the URL top open, and the parameters expected.

    The following example shows how the file might look after editing.

    <Action xmlns="http://schemas/oba/2010/Action" 
            Name="OpenCustomerExternal List" 
            Version="1.0.0.0">
      <EntityDependencies>
     <Entity Name="Contact" Namespace= "SAP.Office.DuetEnterprise.Account" Version="1.0.0.0" IsPrimary="true" />
      </EntityDependencies>
      <UrlAction Name="OpenExternal List" 
          Url="http://MyServer/_layouts/OBA/CollabSiteRedirect.aspx?
          CustomerId={0}&EntityName=Account&
          EntityNamespace=SAP.Office.DuetEnterprise.Account&
          LobsystemInstance=Account">
       <Parameters>
         <ExpressionParameter Name="Param1" Expression="CustomerId" ValueType="System.String" />
       </Parameters>
     </UrlAction>
    </Action>
  3. Save the file with a .xml extension.

After you have created the building blocks (task panes, actions, and supporting assemblies), you can design the Outlook solution by using the Duet EnterpriseOutlook Application Designer. The Outlook 2010 Application Designer lets you work with one or more external lists while offline in Outlook You can also associate task panes and actions with these external lists. The task panes and actions can be reused for multiple solutions. Select the site collection where you want to develop the solution and follow the steps described in the following sections.

Enabling Libraries in the Site Collection

Before you can enable libraries in the site collection, you have to upload the building block files to the site collection. Later in the process, you create a package of building block files to download to Outlook 2010. Then, you enable the libraries on the site collection that stores these building block files.

To enable libraries on the site collection

  1. On the Site Actions menu, click Site Settings.
  2. Under Site Collection Administration, click Site collection features.
    Note Note
    If the Site collection features option does not appear, then click Go to top level settings under Site Collection Administration. The Site Collection Features option will now appear.
  3. On the Features page, in the Business Connectivity ServicesSolution Galleries, click Activate.

Upload the Building Block Files to the Site Collection

You are now ready to upload the source files to the site collection, starting with the assembly files. The following procedure describes how to upload the building block files to the site collection.

To upload the building block files to the site collection

  1. Click Site Collection Administration on the breadcrumb navigation at the top of the page.
  2. On the Site Settings page, under BCS Solution Galleries, click Application Assemblies.
  3. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the DLL file, and then click OK.
    Note Note
    Duet Enterprise will not allow you to upload DLL files directly, so ensure that you have renamed *.dll to *.dll.deploy.
  4. On the Site Actions menu, click Site Settings.
  5. On the Site Settings page, under BCS Solution Galleries, click Task Panes.
  6. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the task pane file (for example, ContactDetails.xml), and then click OK.
  7. On the Site Actions menu, click Site Settings.
  8. On the Site Settings page, under BCS Solution Galleries, click Business data actions.
  9. On the All Documents page, click Add document. Then, in the Upload Document window, click Browse to navigate to the action file (for example, CollabOnAction.xml), and then click OK.
    Note Note
    Ensure that after each building block is uploaded, the Error Message field is marked as OK. Only building blocks with this status can be used later. If the error status displays any message other than OK, you should resolve any associated problems. The most common cause of error messages is badly formed XML.

A Business Connectivity Services solution is a package of downloadable files that enable specific functionality. In this case, the Business Connectivity Services solution contains a collection of files that together enable elements of a Duet Enterprise external list to function offline. It includes external lists, Business Connectivity Services solution task panes, and BCS Data Actions.When you create a Business Connectivity Services solution, the resulting objects are named Business Connectivity Services solution artifacts.

Business Connectivity Services solution artifacts are the files that are required in an Outlook 2010 solution. These include files such as the BCS Client Runtime, OIR.config file, ribbon file, and resource files. The layout files are generated from the task pane building blocks. The action files do not need to be copied, because the metadata that they contain is integrated into the OIR.config file. The supporting assemblies are also copied to the Business Connectivity Services solution artifacts folder in the site.

Overview: Building the BCS Solution that Displays Sales Contact Data in Outlook 2010

Use the following steps to build the Business Connectivity Services solution that displays sales contact data in Outlook 2010.

  1. Create the external lists that you want to take offline in Outlook 2010.
  2. Configure a setting that will make the external list available offline in Outlook 2010.
  3. Add the Business Connectivity Services solution task pane files for the external list.
  4. Add the Business Data action files for the external list.
  5. Generate the Business Connectivity Services solution artifacts.

To create the external lists

  1. Create a Site in the site collection where you have uploaded the building blocks.
  2. Navigate to this site.
  3. Under Site Actions, click More Options.
  4. From the list of installed items, select External List.
  5. In the resulting page, provide a name and select the desired external content type.

    Optionally, repeat the previous steps to create another external list.

To configure an external list for offline availability

  1. Navigate to the site in the site collection where you have uploaded the building blocks.
  2. On the Site Actions menu, click Site Settings.
  3. On the Site Settings page, under Site Actions, click Manage site features.
  4. On the Features page, locate the BCS Solution Design Feature, and then click Activate.
  5. Click Site Settings on the breadcrumb navigation at the top of the page.
  6. On the Site Settings page, under Duet Enterprise Administration, click Outlook Application Designer.
  7. On the Outlook Application Designer page, under External Lists, click the external list you want to use offline.
  8. On the Outlook settings page, under List Settings, click Outlook Client Settings.
  9. In the Edit Outlook settings for this external list dialog box, select the Offline this external list to Outlook check box and Auto generate Outlook forms check box, and then click OK.

    Optionally, repeat the previous steps to configure another external list. You are ready to add the task pane files for the external list.

To add the business data task pane files for the external list

  1. On the Outlook settings page, under Task Panes, click Add from Business Data Task Panes Gallery.
  2. In the Add task pane dialog box that opens, in Select a task pane, choose a task pane from the available task panes.
    Note Note
    If you do not see any task panes listed, it might mean that your task pane contains an error. Resolve the error to proceed.
  3. In Display properties, type a display name and a tool tip for the task pane. A tool tip is the text that appears when you hover over the task pane in Outlook 2010.
  4. In Default task pane, click Make this the default task pane if you want to make the selected task pane the default task pane.
  5. Click OK.

    Optionally, repeat the previous steps to add more task panes. You are now ready to add the action files for the external list.

To add the business data action files for the external list

  1. On the Outlook settings page, under Business Data actions, click Add from Business Data Actions Gallery.
  2. In the Add business data actions dialog box that opens, in Select a business data action, select an action from the available actions.
    Note Note
    If you do not see any actions listed, it might mean that your action contains an error. Resolve the error to proceed.
  3. In Display properties, type a display name and a tool tip for the action. The tool tip text appears when you hover over the task pane in Outlook 2010.
  4. Click OK.
  5. In Map business data action parameters, select a field from the list of entity fields.
  6. You can also type in values for constant parameters.
  7. Click OK.

    Optionally, repeat the previous steps to add more action files.

To generate the BCS solution artifacts

  1. On the Outlook settings page, click Back to the Outlook Application Designer page.
  2. Click Generate BCS Solution Artifacts.
  3. Click OK when you get a message that the operation succeeded.

After you have added a task pane or an action, you have the option to edit the settings for that item from the Outlook 2010 Settings page. If you click on the task pane or action name, a page opens where you can edit all the settings you entered while adding the item. If you edit these settings, you will have to follow the steps in the previous procedure again and follow all subsequent steps for the changes to be reflected in the Outlook Solution.

Deleting the Business Data Task Panes or Business Data Actions

After you add a task pane or an action, you have the option to delete that item from the Outlook 2010 Settings page. If you click on the task pane or action name, a page opens where you can delete the item. You will have to follow the steps in Generate the BCS Solution Artifacts again, and follow all subsequent steps for the changes to be reflected in the Outlook solution.

Note Note
Deleting the item will not remove it from the Building Block Gallery. It removes only the association of the item with this external list.

The process of preparing your solution so it can be used in other locales is known as localization. Localization consists of translating resources to a specific language. For more information, see Globalizing and Localizing Applications(http://msdn.microsoft.com/en-us/library/1021kkz0.aspx).

You should include a neutral resource file (one that is not associated with any locale) in your solution if there is a chance that your solution will be downloaded on a client that uses a language other than the ones supported by the resource files that are included in the solution. For more information, seeLocalizing SharePoint Solutions (http://msdn.microsoft.com/en-us/library/ee696750.aspx).

You create some of the files required for the Outlook 2010 solution by following the steps in Generate the BCS Solution Artifacts. These files can be found in the BCS Solution Artifacts document library. You can see that by default the ribbon and resource files have been generated only for the en-us locale. For other locales, you will have to create the ribbon and resource files and then upload them to this document library. The steps in the following procedure create these files for the Japanese (ja-jp) locale.

To localize for other locales

  1. Under Site Actions, click View All Site Content.

    Under Document Libraries, click BCS Solution Artifacts.

  2. Download the ribbon files named *Ribbon.en-US.xml.
  3. Download the resource file named Resources.en-US.resx.
  4. For each *Ribbon.en-US.xml file, create a corresponding *Ribbon.ja-JP.xmlfile that replaces the English strings for labels and screen tips with the corresponding localized strings.
  5. Create a Resources.ja-JP.resx file that is identical to Resources.en-US.resx.You can then localize the following strings:
    • Folder Display Name in Outlook (replace the English string with a corresponding localized string)
    • Solution Display Name in Outlook (replace the English string with corresponding localized string)
    • (replace the file name of the English ribbon with the file name of the corresponding localized ribbon)
  6. Upload Resources.ja-JP.resx and *Ribbon.ja-JP.xml to the BCS Solution Artifacts document Library.Repeat these steps to localize to other languages as you want.

At this point, you can optionally customize the Outlook solution by editing the solution manifest file, named OIR.config. Some of the scenarios which cannot be created by using Duet EnterpriseOutlook Application Designer can be created in this way. You can also customize the ribbon and improve its appearance and behavior (look and feel).

We recommend that you skip these customizations in the initial development of your solution. First, create the solution with only the actions and task panes.When the basic functionality works as you expect, extend the solution with one or more of the customizations described in the following sections as needed.

Customizing the Solution Manifest File (OIR.config )

The solution manifest file (OIR.config) is the main file that the Business Connectivity Services client runtime uses to configure your intermediate declarative Outlook solution.

To create a custom view definition in Outlook

  1. Customize the view that is shown for a folder containing external data.Business Connectivity Services provides a command to save the customized view as an Outlook View Definition (.ovd) file, so that it is available to users who install the declarative solution.

    For detailed steps, see Step 6 (Optional): Create Custom Outlook View Definitions (*.ovd) (http://msdn.microsoft.com/en-us/library/ee819848.aspx).

    After you have created the .ovd file, you must update the OIR.config file that contains the details about the view definition.

  2. Add a FolderViewDefinition child element to the Views element in the OIR.config file.

    The following example shows how the Views element might appear after you edit it.

    <Views>
      <FolderViewDefinition Name="ContactView" 
                            ViewName="ContactView" 
                            ViewType="TableView" 
                            IsDefault="true" 
                            ViewFileName="ContactView.ovd" />
    </Views>
  3. Upload the Outlook View Definition (*.ovd) files to the BCS Solution Artifacts document library. This will ensure that these files are included in the ClickOnce package that is generated.

To customize Outlook form regions

  1. You can create customized Outlook form regions that show external data by designing new form regions in Outlook.

    For detailed steps about how to create an Outlook form region (*.ofs) file and a form region manifest (FormRegionManifest.xml) file, see Step 5 (Optional): Create the Outlook Form Region (*.ofs) and Form Region Manifest (FormRegionManifest.xml) (http://msdn.microsoft.com/en-us/library/ee819887(v=office.14).aspx).

  2. After you create the .ofs and .xml files, you have to update the OIR.config file with the details of the custom form region. Add a FormRegion child element to the FormRegions element in the OIR.config file.

    The code in the following example shows how the FormRegions element might appear.

    <FormRegions xsl:type="Declarative:DeclarativeFormRegions">
                  FormRegion Name="Contact" InternalName="ContactForm" 
                  FormFileName="formRegionContact.ofs" 
                  ManifestFileName="formRegionContact.manifest.xml" />
    </FormRegions>
  3. Upload the Outlook form region (*.ofs) files and form region manifest files to the BCS Solution Artifacts document library. Doing so ensures these files are included in the ClickOnce package.

Customizing the Ribbon

You can use Visual Studio to customize the ribbon. You do not need to edit the OIR.config file to customize the ribbon.

To customize the ribbon

  1. Download the OutlookContact_Ribbon.en-US.xml from the BCS Solution Artifacts document library.
  2. Customize the OutlookContact_Ribbon.en-US.xml file, then reupload the file.

    Make sure to use this customized ribbon as the template for creating localized versions of the ribbon.

For detailed instructions, see the following resources:

After you generate the Business Connectivity Services Solution Artifact, you or other users with the necessary permissions can generate the Business Connectivity Services solution and download the solution in Outlook 2010. The Business Connectivity Services solution has to be generated on the production environment from which you want users to download the solution.

Moving Artifacts to the Production Environment

Move the artifacts to the production environment by doing the following:

  1. Save the site as a template.
  2. Upload the solution to the production environment.
  3. Create a new site in the production environment.

To save the site as a template

  1. On the Site Settings page, under Site Actions, click Save site as template.
  2. Provide the file name, template name and template description as you want.Select the Include Content check box, and then click OK.
  3. Go to the Site Settings page of the top-level site, and under Galleries, click Solutions. Click the template to download the solution package (.wsp) file.

To upload the solution to the production environment

  1. Go to the Site Settings page of the top-level site in the production environment where you want to deploy the Outlook 2010 solution.

    Under Galleries, click Solutions. Click Upload Solution, and then browse to the solution package (.wsp) file saved in the previous step.

  2. After the template is visible in the Solutions Gallery, click it and select Activate on the ribbon.

To create a new site in the production environment

  1. Create a site in the site collection where you have uploaded your solution, and from the Custom category ,choose the template that you have activated.
    Note Note
    All of the site collection features activated in the development environment where this template was created must be activated in the site collection on the production environment also. If this is not what you want, deactivate the feature in the development site before saving it as a template.
  2. This site will have the BCS Solution Artifacts document library, and you can proceed with generation of the Business Connectivity Services solution.

Generating the BCS Solution for Displaying Sales Contact Data

The procedure in this section describes how to generate the Business Connectivity Services solution for displaying sales contact data so that you can download it and use it in Outlook 2010.

To generate the BCS solution for displaying sales contact data

  1. On the Site Actions menu, click Generate BCS solution.
  2. On the Generate BCS Solution page, in the Certificate category, select a certificate, and then click OK.
    Note Note
    If the OK button is not available, the farm administrator has not uploaded the necessary certificates to the Trusted Publishers and Trusted Root Certification Authorities stores in the farm. Contact your server administrator for further assistance.
  3. Click OK on the webpage to confirm that the operation succeeded. Duet Enterprise opens the All Documents page, where you can download the solution in Outlook 2010.
  4. In the All Documents page, you can also manage permissions for the solution. This means you can add users who can download the solution in Outlook 2010, or even remove users.

Downloading the BCS Solution in Outlook 2010

The procedure in this section describes how to download the Business Connectivity Services solution that you have created so that you can use it in Outlook 2010.

To download the solution in Outlook 2010

  1. On the Site Actions menu, click Download BCS Solution, and then click Allow.
  2. In the Microsoft Office Customization Installer dialog box, click Close.

    The solution now opens automatically in Outlook 2010 

Creating users in the Authentication system

Introduction

In this blog post, I will give you an overview on how to create users in WAP and have them sign in. As you might already know, the Authentication and Authorization processes are separated into their own entities making the stack flexible enough to plug in your own custom Authentication system (eg. AD FS).

In an Express installation, the authentication is performed at the Admin and Tenant Authentication Sites (where the users enter their credentials) and the authorization is performed at the Service Management API layer. Hence, information about a user needs to be added at both these locations for users to be able to both sign in and get access to their subscriptions.

This blog will give you information on how to create a user in the Tenant Authentication Site and in the Service Management API layer.

Note: If you have other Identity Providers plugged into your system, you should create users appropriately in that system apart from creating the user in the Service Management API layer. The section on creating users in the Tenant Authentication site will not apply to you.

If you have a custom Identity Provider plugged into your WAP stack, you should follow the appropriate steps to add the user into that identity system. This section is applicable only if you use the out-of-the-box Tenant Authentication Site.

The Tenant Authentication Site uses an out-of-the-box ASP.NET Membership Provider to provide identities. Therefore, you can use the standard ASP.NET Membership APIs to create users in the database. You can find more info on Membership Provider here:  http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.aspx

The information required by the ASP.NET Membership API is specified in the App.Config. This includes specifying the Connection String to the Membership Database and some information that describes the configuration of the ASP.Net Membership Provider. Replace the Connection String in the code below to point to your database and use the appropriate authentication method.

   1: 
   2:   
   3:   
   4: 
   5: 
   6:   
   7:     
   8:       
   9:       applicationName="/" 
  19:            passwordCompatMode="Framework40"
  20:            connectionStringName="WapMembershipDatabase"
  21:            passwordFormat="Hashed" />
  22:     
  23:

Note: If you have been using the Preview version of the Windows Azure Pack, you have to update your user creation logic to use SHA-256 encryption for your password hashes (specified by the ‘hashAlgorithmType’ value in the App.Config.

Once this is done you have to call the CreateUser() method to create the user in the Membership Database. Note that I am specifying the email address as the username as expected by the ASP.Net Membership Provider.

   1: Membership.CreateUser(emailAddress, password, emailAddress);

Creating users in the Service Management API

This is the second step that enables authorization of the user. Windows Azure Pack provides you with PowerShell cmdlets that facilitate user creation in the API layer. That apart, you can also use the Admin APIClient interfaces that are available as a part of the Sample code found at http://www.microsoft.com/en-us/download/details.aspx?id=41146

Both the methods involve getting an Identity token for the Administrator, and posting a create user call to the Service Management API layer.

PowerShell

You can use the Get-MgmtSvcToken token to get the token from the Windows Authentication Site. If you are using other identity Providers, you must obtain the token appropriately.

   1: $token = Get-MgmtSvcToken -Type 'Windows' -AuthenticationSite 'https://myenvironment:30072' -ClientRealm 'http://azureservices/AdminSite'

Once you have the identity token, you can use the Add-MgmtSvcUser cmdlet to create a Tenant user.

   1: Add-MgmtSvcUser  -AdminUri 'https://myenvironment:30004' -Token $token -Name 'user@address.com' -email 'user@address.com' -State 'Active'

Note: If you are using this snippet in a test environment with self-signed certificates, don’t forget to use the –DisableCertificateValidation parameter.you shouldn’t need this in production environments that have certificates from a trusted  CA

The Admin API Client Sample provides you with an easy interface to perform all the Admin actions for the Windows Azure Pack. As mentioned above, you can download the API Client from the Windows Azure Pack: Service Management API Samples page. The following example will use a method found as a part of the API Client solution. Apart from using the API Client, you can also make a raw Http call directly to the API layer using the reference at How to Create a Windows Azure Pack Tenant User .

Use the App.Config file to specify the application settings (Alternatively, you can specify these within the main method).

   1: 
   2:   windowsAuthEndpoint" value="https://myenvironment:30072" />
   3:   
   4:   
   5:   
   6:   
   7:

Read the values from the App.Config and use the snippet below to create a user in the API layer.

Note: The TokenIssuer.GetWindowsAuthToken() method is present in the API Clients solution that can be downloaded from the Windows Azure Pack: Service Management API Samples page.

   1: string windowsAuthEndpoint = ConfigurationManager.AppSettings["windowsAuthEndpoint"];
   2: string adminDomainName = ConfigurationManager.AppSettings["adminDomainName"];
   3: string adminUsername = ConfigurationManager.AppSettings["adminUsername"];
   4: string adminPassword = ConfigurationManager.AppSettings["adminPassword"];
   5: string adminApiEndpoint = ConfigurationManager.AppSettings["adminApiEndpoint"];
   6: string username;
   7: string password;
   8: var token = TokenIssuer.GetWindowsAuthToken(windowsAuthEndpoint, adminDomainName, adminUsername, adminPassword);
   9: using (var myAdminClient = new AdminManagementClient(new Uri(adminApiEndpoint), token))
  10: {
  11:    var userInfo = new User()
  12:    {
  13:         Name = emailAddress,
  14:         Email = emailAddress,
  15:         State = UserState.Active,
  16:     };
  17:     return myAdminClient.CreateUserAsync(userInfo).Result;
  18: }

In Summary, Creation of users in WAP involves two steps:

  1. Creating users in the Authentication system – requires username, password and other information required to identify the user
  2. Creating users in the Service Management API layer – requires the username that will be provided by the Authentication system

You can download the sample at http://go.microsoft.com/fwlink/?LinkId=324039