Specializations

Sunday, March 31, 2013

Export Outlook items to an Outlook Data File (.pst)


Export Outlook items to an Outlook Data File (.pst)

Information in Microsoft Outlook 2010 can be exported to an Outlook Data File (.pst). This provides a way transfer Outlook 2010 items to another computer or to make a backup.
Folder properties such as permissions and views are not preserved when you export to an Outlook Data File (.pst). Only the content itself is exported.
  1. Click the File tab.
  2. Click Options.
  3. Click Advanced.
Advanced command in the Outlook Options dialog box
  1. Under Export, click Export.
Export command in the Backstage view
 Note    The Import and Export Wizard can also be opened by clicking the File tab, clicking Open, and then clicking Import.
  1. Click Export to a file, and then click Next.
  2. Click Outlook Data File (.pst), and then click Next.
  3. Select the account — a top level folder — that you want to export. This enables exporting all mail, calendar, contacts, tasks, and notes if available for that account.
 Note    Only information for one account can be exported information at a time.
Make sure that the Include subfolders check box is selected.
  1. Click Next.
  2. Click Browse to select where you want to save the Outlook Data File (.pst) and to enter a file name. Click OK to continue.
 Note    If you have previously used the export feature, the previous folder location and file name appear. Make sure that you change the file name if you want to create a new file instead of using the existing file.
  1. If you are exporting to an existing Outlook Data File (.pst), under Options, specify what to do when exporting items that already exist in the file.
  2. Click Finish.
The export begins immediately unless a new Outlook Data File (.pst) is created or the export is to an existing file that is password protected.
  • If you are creating a new Outlook Data File (.pst), an optional password can help protect the file. When the Create Outlook Data File dialog box appears, enter the password in the Password and Verify Password boxes, and then click OK. In the Outlook Data File Password dialog box, enter the password, and then click OK.
  • If you are exporting to an existing Outlook Data File (.pst) that is password protected, in the Outlook Data File Password dialog box, enter the password, and then click OK.
If you want to export items for multiple accounts, repeat these steps for each account.
 Tip    To import information from an Outlook Data File (.pst), see Import Outlook items from an Outlook Data File (.pst).

Friday, March 29, 2013

jQuery Mobile basics


Getting Started with jQuery Mobile

jQuery Mobile provides a set of touch-friendly UI widgets and an AJAX-powered navigation system to support animated page transitions. Building your first jQuery Mobile page is easy. Here's how:

Create a basic page template

Pop open your favorite text editor, paste in the page template below, save and open in a browser. You are now a mobile developer!
Here's what's in the template. In the head, a meta viewport tag sets the screen width to the pixel width of the device and references to jQuery, jQuery Mobile and the mobile theme stylesheet from the CDN add all the styles and scripts. jQuery Mobile 1.2 (1.2.0) works with versions of jQuery core from 1.7.0 to 1.8.2.
In the body, a div with a data-role of page is the wrapper used to delineate a page, and the header bar (data-role="header") and content region (data-role="content") are added inside to create a basic page (these are both optional). These data- attributes are HTML5 attributes used throughout jQuery Mobile to transform basic markup into an enhanced and styled widget.

<!DOCTYPE html> 
<html> 
<head> 
 <title>My Page</title> 
 <meta name="viewport" content="width=device-width, initial-scale=1"> 
 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
 <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
 <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
</head> 
<body> 

<div data-role="page">

 <div data-role="header">
  <h1>My Title</h1>
 </div><!-- /header -->

 <div data-role="content"> 
  <p>Hello world</p>  
 </div><!-- /content -->

</div><!-- /page -->

</body>
</html>

Add your content

Inside your content container, you can add any standard HTML elements - headings, lists, paragraphs, etc. You can write your own custom styles to create custom layouts by adding an additional stylesheet to the head after the jQuery Mobile stylesheet.

Make a listview

jQuery Mobile includes a diverse set of common listviews that are coded as lists with a data-role="listview"added. Here is a simple linked list that has a role of listview. We're going to make this look like an inset module by adding a data-inset="true" and add a dynamic search filter with the data-filter="true" attributes.

<ul data-role="listview" data-inset="true" data-filter="true">
 <li><a href="#">Acura</a></li>
 <li><a href="#">Audi</a></li>
 <li><a href="#">BMW</a></li>
 <li><a href="#">Cadillac</a></li>
 <li><a href="#">Ferrari</a></li>
</ul>

Add a slider

The framework contains a full set of form elements that automatically are enhanced into touch-friendly styled widgets. Here's a slider made with the new HTML5 input type of range, no data-role needed. Be sure to wrap these in a formelement and always properly associate a label to every form element.

<form>
   <label for="slider-0">Input slider:</label>
   <input type="range" name="slider" id="slider-0" value="25" min="0" max="100"  />
</form>

Make a button

There are a few ways to make buttons, but lets turn a link into a button so it's easy to click. Just start with a link and add adata-role="button" attribute to it. You can add an icon with the data-icon attribute and optionally set its position with the data-iconpos attribute.

<a href="#" data-role="button" data-icon="star">Star button</a>
Star button 

Play with theme swatches

jQuery Mobile has a robust theme framework that supports up to 26 sets of toolbar, content and button colors, called a "swatch". Just add a data-theme="e" attribute to any of the widgets on this page: page, header, list, input for the slider, or button to turn it yellow. Try different swatch letters in default theme from a-e to mix and match swatches.
Cool party trick: add the theme swatch to the page and see how all the widgets inside the content will automatically inherit the theme (headers and footers don't inherit, they default to swatch "a").
<a href="#" data-role="button" data-icon="star" data-theme="a">Button</a>data-theme="a" data-theme="b" data-theme="c" data-theme="d" data-theme="e" 
When you're ready to build a custom theme, use ThemeRoller to drag and drop, then download a custom theme.


button models


<a href="#" data-role="button" data-icon="star">Star button</a>

<a href="#" data-role="button" data-icon="star">Star button</a>
<a href="#" data-role="button" data-icon="home">home button</a>
<a href="#" data-role="button" data-icon="delete">delete button</a>
<a href="#" data-role="button" data-icon="plus">plus button</a>
<a href="#" data-role="button" data-icon="arrow-u">up arrow button</a>
<a href="#" data-role="button" data-icon="arrow-d">down arrow button</a>
<a href="#" data-role="button" data-icon="arrow-r">right arrow button</a>
<a href="#" data-role="button" data-icon="arrow-l">left arrow button</a>
<a href="#" data-role="button" data-icon="check">check button</a>
<a href="#" data-role="button" data-icon="gear">gear button</a>
<a href="#" data-role="button" data-icon="grid">grid button</a>
<a href="#" data-role="button" data-icon="custom">custom button</a>
<a href="#" data-role="button" data-icon="minus">minus button</a>
<a href="#" data-role="button" data-icon="plus">plus button</a>
<a href="#" data-role="button" data-icon="refresh">refresh button</a>
<a href="#" data-role="button" data-icon="forward">forward button</a>
<a href="#" data-role="button" data-icon="back">back button</a>
<a href="#" data-role="button" data-icon="alert">alert button</a>
<a href="#" data-role="button" data-icon="info">info button</a>
<a href="#" data-role="button" data-icon="search">search button</a>

Windows Communication Foundation (WCF) Support for Duplex Service


What is a Duplex Service?

A service is an application which will reside at a single place say a server and can be consumed by multiple client applications. In a normal scenario what happens is the client will send the request, wait for the response and once the response is fetched the client will proceed with its further execution. In other words the client will be waiting until the server sends back the response; this is because the service is not capable of posting a response on its own. To solve such issues the duplex service comes into play. Duplex services are ones which are able to perform a client call back, so that the client doesn't have to wait for the response, it can simply post a request and continue with its further execution. In simple words it constitutes a dual communication between the client and the server, which is client to server and server to client.

Windows Communication Foundation (WCF) Support for Duplex Service

WCF provides the support for creating a duplex service. It allows the clients to perform asynchronous calls to the WCF services and in turn the WCF service can make a callback to the client and provide the result.
All the extra stuff that needs to be done for a duplex WCF service is shown below:
  1. Create a Callback contract along with the regular WCF service contract.
  2. Have a handler class implementing the callback contract on the client.
  3. The instance of the callback handler class should be passed through the constructor of the proxy class.
  4. Once the operations are complete make sure the callback method is invoked by the service and the result is ready to be given to the client.
The above points may be a little perplexing, but in the later part of this article we will create a duplexWCF service which should be a clarifier.

Things to Watch Out For

While developing a WCF duplex service I could think of a couple of important things to pay special attention to:
  1. It only can work with the InstanceContextMode.PerSession mode.
  2. The binding used should support both PerSession mode and also dual messaging.
  3. The client configuration should define the ClientBaseAddress attribute in the binding element.

Demo Application

Now let us create a demo application which will constitute a WCF based duplex service and a Windows application client consuming it. The basic idea would be to pass an institution name from the client to the service, the result string would be formatted based on the given input data from the client request and the formatted result string will be passed to the client through a callback which would then be displayed in a message box.
  1. Create a blank solution and name it as WcfDuplexServiceDemoSolution.
  2. Add a new WCF service application to the solution.
  3. Add a new Windows application to the solution.

Developing a WCF Duplex Service

Let us now go and develop the WCF duplex service. Firstly create a callback contract namedIDuplexCallback. Below is the code:
  1. namespace DuplexWcfService
  2. {
  3.    public interface IDuplexCallback
  4.    {
  5.        [OperationContract(IsOneWay = true)]
  6.        void DuplexCallbackFunction(string requestString);
  7.    }
  8. }
  9. Note that the operation contracts in the WCF service are marked as OneWay.
  10. Now create a regular WCF contract named as IDuplexService as shown below
  11. namespace DuplexWcfService
  12. {
  13.    [ServiceContract(SessionMode=SessionMode.Required, CallbackContract=typeof(IDuplexCallback))]
  14.    public interface IDuplexService
  15.    {
  16.  
  17.        [OperationContract(IsOneWay = true)]
  18.        void FormatString(string institution);
  19.    }
  20. }
In the above code note that the SessionMode.Required and the callback contract type are provided in the ServiceContract attribute. Add a .svc file named DuplexService.svc. Go to the code behind the DuplexService.svc which is DuplexService.svc.cs. Implement the WCF contract as shown below:
  1. namespace DuplexWcfService
  2. {
  3.    [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
  4.    public class DuplexService : IDuplexService
  5.    {
  6.        IDuplexCallback _callback;
  7.        string _requestString = String.Empty;
  8.  
  9.        public DuplexService()
  10.        {
  11.            _callback = OperationContext.Current.GetCallbackChannel<IDuplexCallback>();    
  12.        }
  13.  
  14.        public void FormatString(string institution)
  15.        {
  16.            //Make the thread to sleep for 10 seconds
  17.            Thread.Sleep(10000);
  18.            //Format the input data
  19.            _requestString = string.Format("Welcome to {0}", institution);
  20.            //Pass the string to the client through the call back function
  21.            _callback.DuplexCallbackFunction(_requestString);
  22.        }
  23.    }
  24. }
Here is the configuration entry for the servicemodel element in web.config.
  1. <system.serviceModel>
  2. <services>
  3. <service behaviorConfiguration="DuplexWcfService.Service1Behavior" name="DuplexWcfService.DuplexService">
  4. <endpoint address="http://localhost:52775/DuplexService.svc" binding="wsDualHttpBinding" contract="DuplexWcfService.IDuplexService">
  5. </endpoint>
  6. </service>
  7. </services>
  8. <behaviors>
  9. <serviceBehaviors>
  10. <behavior name="DuplexWcfService.Service1Behavior">
  11. <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
  12. <serviceMetadata httpGetEnabled="true" />
  13. <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
  14. <serviceDebug includeExceptionDetailInFaults="true" />
  15. </behavior>
  16. </serviceBehaviors>
  17. </behaviors>
  18. </system.serviceModel>
The binding used is wsDualHttpBinding which supports both per session and dual messaging.