Tuesday, February 12, 2013

Social Business and Mobility: How can mobility contribute to social business?

This is an article also published by the same author at:
http://www.uniqueworld.net/blog/mobility-contribute-social-business/


Two of the hottest trends right now are social business and mobility.

When people talk about social business, most often the first thing that springs to mind is: How do you create a tool that reaps the same benefits as Facebook, Google+ and Twitter?

In terms of mobility, the issue becomes: How can mobility contribute to the benefits of social business?

When you look at the statistics for Facebook, there is a rapidly growing trend for users to access via mobile. In fact, in 2012, of the 845 million Facebook users, 425 million are mobile users. That is 50.3%!




But just how big is this trend? According to a prediction by Morgan Stanley in April 2010, the number of mobile users will surpass desktop users in 2014. With an explosion in enabling technologies from Apple (iPads, iPhones), Google (Android OS), and Microsoft (Windows 8, Windows Phone 8), I can only see even greater acceleration in the adoption of mobile technologies.

These consumer trends will have an impact on how we work in the enterprise. The question is HOW will it impact the enterprise?

This YouTube presentation provides an eye-cathing overview of the growth in mobile phones to the end of 2012.





I should now explain what I mean by social business and mobility.

Social Business?

Social Business is all about revolutionising how companies operate and bringing value to all employees, customers, partners, suppliers and stakeholders. It is about bringing together, connecting and engaging both internal and external individuals of an organisation to form an ecosystem. It requires an organisation to implement strategies, processes and tools to achieve the level of engagement from all parties in order to optimise the value that is generated.

Mobility?

No, I do not mean traveling on a motorised scooter! I’m actually referring to mobility in terms of accessing information from various portable devices at any time.

So how does mobility assist in social business?

Many of us have already adopted mobile technology like smart phones and tablets outside of work, and have got used to accessing cool apps that allow us to do things such as reading about our friend’s cat or their unusual interests. But when we take these devices to work and expect to do the same, we find we access can’t access information in the same way on mobile devices at work.

The main benefit of mobility for organisations is it accelerates adoption and provides agility, bringing additional value to existing applications and information. Mobility also comes with other benefits:


  • Agility: Mobile devices (Smart Phones and Tablets) enable individuals to stay connected any time, wherever they are.
  • Additional access channels (Mobile access): Mobile devices offer a convenient alternative for individuals to connect.
  • Ease of access: Mobile devices are always on, and mobile applications are lightweight, easy to use.
  • Low cost: Mobile applications are relatively easy and quick to develop.
  • Sensor packed: Mobile devices contain many built-in capabilities that desktops do not always have (geolocation sensors, gyroscopes, cameras, microphones, NFC, and more). These added capabilities can come in handy for an organisation.

Mobility however comes with some risks in areas such as:


  • Security: Mobile devices are unfortunately easier to lose, vulnerable to hacking and viruses. They contain so many apps (and information with it) that can be accessed without a password, they suddenly becomes a risk in the eyes of the IT department.
  • IT governance: Because of the security risks involved, IT departments want to introduce policies to control the security on mobile devices. Fortunately, mobile platforms are acknowledging the need for governance and introducing features to help in this regard.
  • Privacy: This is a difficult one. Mobile devices by nature are designed to be used anywhere. When sensitive information is viewed in public areas, will this pose an issue to your organisation? However, if your organisation’s social tools are opened up to people outside the organisation, does it still pose such a threat?

With each benefit it brings, mobility introduces risks, but many can be mitigated with appropriate measures.

So, who are the main players that offer mobility for the enterprise?

Currently in the market there are a number of social tools available for the enterprise. Most social mobile apps extend access to enable users to join communities, micro blog, view activity streams, and more. The point here is all these apps aim to increase engagement with more ease.

The main players in the mobile social space are:

  • NewsGator

  • Jive

  • Telligent

  • Yammer

Newsgator Mobile App


Jive iPad Add

Telligent

Yammer


What can we do with social business and mobility?

Besides these pre-baked mobile apps, your organisation may need to extend other social applications as mobile apps (crowdsourcing or mining information from social responses, etc).

Regardless of what mobile apps are available or possible, it is important not to get lost in the hype and excitement. It is important to understand how it will assist your organisation to achieve its strategic goals.

Ask the business:
  • What is the purpose?
  • How will it bring value?
  • What are your goals?

    • Improve communication?
    • Improve engagement?
    • Improve efficiency?
    • Improve access?
    • Improve productivity?
    • Increase lead generation?
    • Reduce communication costs?

  • Who is the audience?

    • Customers?
    • Sales people?
    • Executives?
    • Ground staff?

  • What is the business trying to achieve through social business?

    • Is it to empower your mobile workforce with access to the tacit knowledge?
    • Is it to make it easier to find the right matter expert?

  • How can mobile access help contribute to these goals?
  • What are the common daily processes and tasks?
  • How do people currently use their mobile devices for work?

  • I’d advise organisations not to get mobility tools for the sake of having the latest and greatest. Rather, they should focus on the purpose and role of mobile access in social business. Think how mobility can help deliver benefits to the organisation, then then think how mobility can contribute to social business.





    Monday, October 29, 2012

    Windows 8 - Where did my Hibernation option go? How to get the Hibernation option back in Windows 8.

    So you've upgraded to Windows 8, all is good until you try to hibernate your Windows 8 PC. By default the hibernation option is disabled.





    To get the Hibernation option back, follow these steps:

    1. Open up File Explorer.


    2. Click Computer (from the left) and then click "Open Control Panel" from the Computer ribbon.


    3. Open "Power Options" from the "Control Panel Items" window.


    4. Click "Choose what the power buttons do" option from the left.


    5. Click "Change settings that are currently unavailable" option from the left (if it appears).


    4. Tick the check box adjacent to "Hibernate" and click "Save Changes".


    Your power menu options should now look like this:





    Friday, May 11, 2012

    SharePoint 2010: Using the SharePoint Client Model to populate a jQuery AutoComplete box

    Intro

    It's been a while since I did some coding - I've been playing more of a Business Consulting role, but sometimes still get to have some fun :)


    My favourite thing about jQuery, is the jQuery UI Toolkit. Amongst it is an Autocomplete menu control as described here - http://jqueryui.com/demos/autocomplete/. You can download the tool kit, and even style it using the themeroller. 






    The ingredients include:
    1. Getting jQuery to run on a SharePoint Page/Custom Web Part
    2. Getting the HTML and jQuery working
    3. Getting the SharePoint Client Object Model (OM) working
    4. Getting the jQuery Autocomplete to work together with the SP Client OM.


    Benefits

    Why should we use this approach? If you have a need for an autocomplete menu, and need it to be loaded on the fly whilst typing, then this may most likely be your solution!

    Getting Started

    To start, there are a couple of options:
    A. Create a HTML file and save the code on this page into this file. Upload the file into the Site Assets library, and on any web part zone in SharePoint, add a Content Editor web part. In the web part properties, add a Content Link to this html file. I find this approach to be quickest whilst developing.



    B. Directly place the HTML+jQuery code into a Content Editor web part using the "Edit HTML Source" option from the Ribbon (SP will tend to change your HTML for you in this option)
    C. Write a custom web part to render this HTML+jQuery, including features that deploys delegate controls to register <link> lines to the jQuery library, etc. (Production quality)



    1. Running JQuery on a SharePoint Page

    I've tried to add jQuery on a SharePoint page so many times, however the jQuery just doesn't run at times. What do we do?


    The trick is to have the JavaScript initiation code inside the following code block:



    <script type="text/javascript">
        JSRequest.EnsureSetup();
        $(document).ready(function () {
            ExecuteOrDelayUntilScriptLoaded(EntryPointFunction, "SP.js");
        });
    </script>



    This block will allow any scripts (EntryPointFunction in the example aboveto run after any SharePoint JavaScript.


    2. JQuery AutoComplete Menu

    This is an awesome control - The code required includes the  jQuery, and the HTML:


    <script type="text/javascript">
    $("#tags").autocomplete({ source: dataSourceArray });
    </script>


    <input type="text" id="tags" />


    There are many options to setting up this autocomplete control, however it's all documented in the jQueryUI link above, so I'll skip through that.



    3. SharePoint Client OM Script to query list data

    And below, is the JQuery to get the SharePoint Client OM to query data from the list "Data". It returns the values from the "Title" field where the title contains "Test". Notice the CAML query on the line query.set_viewXml. 

    When the query values are returned from the call after ctx.executeQueryAsync, the getDataWithQuerySuccess function will run - this is where our fun starts.

    There's a while loop which helps us build up an array of Titles. If you need multiple dimensions (which the autocomplete box will support), you can use this instead:

     availableTags.push(
    label: listEnumerator.get_current().get_item("Title"), 
    id: listEnumerator.get_current().get_item("ID") 
    });

    But you will need to change the jQuery to handle this. Anyhow the Code will now look like this:

    <script type="text/javascript">
        JSRequest.EnsureSetup();
        $(document).ready(function () {
            ExecuteOrDelayUntilScriptLoaded(loadData, "SP.js");
        });

        function loadData() {
            var selectedItems;
            filterData();
        }

        function filterData() {
            var ctx = new SP.ClientContext.get_current();
            var lst = ctx.get_web().get_lists().getByTitle('Data');
            var query = new SP.CamlQuery();
            query.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>Test</Value></Contains></Where></Query></View>");
            selectedItems = lst.getItems(query);
            ctx.load(selectedItems);
            ctx.executeQueryAsync(getDataWithQuerySuccess, getDatasWithQueryFailure);
        }

        function getDataWithQuerySuccess(sender, args) {
            var availableTags = new Array();
            var listEnumerator = selectedItems.getEnumerator();
            while (listEnumerator.moveNext()) {
                availableTags.push(listEnumerator.get_current().get_item("Title"));
            }
        }
        
        function getDatasWithQueryFailure(sender, args) {
        /*Error Logic here*/
        }
    </script>


    4. JQuery AutoComplete Menu with SP Client OM Script


    The last step is to combine the SP Client OM code with the jQuery AutoComplete Menu. I've included the whole piece with the styles, and script references as well below:



    <link href="/_layouts/SPSix/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="stylesheet" />
    <script src="/_layouts/SPSix/js/jquery-1.7.2.min.js"></script>
    <script src="/_layouts/SPSix/js/jquery-ui-1.8.20.custom.min.js"></script>
    <style type="text/css">
        .inputwarning
        {
            border: 1px solid #F75D59;
            padding: 2px;
        }
        .ui-autocomplete
        {
            max-height: 200px;
            overflow-y: auto; /* prevent horizontal scrollbar */
            overflow-x: hidden; /* add padding to account for vertical scrollbar */
            padding-right: 20px;
        }
        /* IE 6 doesn't support max-height
    * we use height instead, but this forces the menu to always be this tall
    */
        * html .ui-autocomplete
        {
            height: 200px;
        }
    </style>
    <script type="text/javascript">
        JSRequest.EnsureSetup();
        $(document).ready(function () {
            ExecuteOrDelayUntilScriptLoaded(loadData, "SP.js");
        });


        function loadData() {
            var selectedItems;
            $('#tags').keyup(function (event) {
                filterData();
            });
        }


        function filterData() {
            var ctx = new SP.ClientContext.get_current();
            var lst = ctx.get_web().get_lists().getByTitle('Data');
            var query = new SP.CamlQuery();
            query.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>" + $('#tags').val() + "</Value></Contains></Where></Query></View>");
            selectedItems = lst.getItems(query);
            ctx.load(selectedItems);
            ctx.executeQueryAsync(getDataWithQuerySuccess, getDatasWithQueryFailure);
        }


        function getDataWithQuerySuccess(sender, args) {
            var availableTags = new Array();
            var listEnumerator = selectedItems.getEnumerator();
            while (listEnumerator.moveNext()) {
                availableTags.push(listEnumerator.get_current().get_item("Title"));
            }
            $("#tags").autocomplete({ source: availableTags });
        }
        
        function getDatasWithQueryFailure(sender, args) {
        /*Error Logic here*/
        }
    </script>
    <span>Enter Keywords: </span><input type="text" id="tags" />



    5. Now what?


    What's next? Using the AutoComplete Menu Select event, you can add additional functionality when the user selects the autocomplete box. Some examples of how I've used this:



    • As a replacement of default SharePoint drop downs that only support a begins with type ahead.
    • As a filter for custom web parts that require special query strings or parameters.
    • And more... Share your ideas with me below!

    Basically the options are endless!

    Have fun!






    Thursday, October 27, 2011

    SharePoint 2010: Tip of the Day - Finding what level of SharePoint 2010 is installed?

    This is a quick tip bought to by SharePoint Six!

    Tip 1: To quickly find out the build level of SharePoint 2010 using Powershell, use the following commands:
    $farm = Get-SPFarm
    $farm.BuildVersion


    Tip 2: For a list of build numbers, go to Joe's blog: http://blogs.technet.com/b/sharepointjoe/archive/2011/02/01/sp2010-sharepoint-2010-build-level-and-version-numbers.aspx

    Tip 3: For the latest patches, go to this site: http://technet.microsoft.com/en-us/sharepoint/ff800847.aspx

    Tuesday, August 02, 2011

    SharePoint: I'm presenting at SharePoint Saturday Sydney 2011

    I'm so excited! I'm presenting at SharePoint Saturday Sydney 2011!



    I'll be discussing about "Applying Content Type Hubs and Managed Metadata To Improve Document Management in the real world". Hope to see you all there on the day for a fruitful session!

    The abstract for the session is below:
    "SharePoint 2010 offers a suite of new and enhanced capabilities, which if utilised effectively in select business scenarios can bring enormous value to organisations. Document Management is one area where SharePoint 2010 offers many new features and benefits. This session covers two new document management capabilities: The Content Type Hub and Managed Metadata. Douglas will walk through the anatomy of Content Type Hubs and Managed Metadata, recommended approaches, constraints and how to best work around these constraints. A number of typical document management scenarios will be used throughout the session to demonstrate the concepts and keep it real. If time permits, he will also share some C# code snippets which support the scenarios described."
    For more information:
    http://www.sharepointsaturday.org/sydney/Pages/meetings.aspx

    Thursday, April 14, 2011

    SharePoint 2010: PSConfiguration issues with GetUserPropertyFromAD call

    Problem
    As I was installing SharePoint 2010 at client site, I came across an error I've never seen previously. During the SharePoint 2010 "Configuration Wizard Step 3 - creating configuration database",  the operation failed.


    Symptoms
    The error in the Configuration Wizard was:
    Failed to create the configuration database.
    An exception of type System.Collections.Generic.KeyNotFoundException was thrown. Additional exception information: The given key was not present in the dictionary.
    System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
    at System.ThrowHelper.ThrowKeyNotFoundException()
    at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
    Matching Error in the installation logs was:

    04/14/2011 10:51:06  9  ERR                    Task configdb has failed with an unknown exception
    04/14/2011 10:51:06  9  ERR                    Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.   at System.ThrowHelper.ThrowKeyNotFoundException()   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)   at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)
       at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username)   at Microsoft.SharePoint.Administration.SPManagedAccount.Update()   at Microsoft.SharePoint.Administration.SPProcessIdentity.Update()   at Microsoft.SharePoint.Administration.SPApplicationPool.Update()   at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, SPProcessAccount processAccount, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)   at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, IdentityType identityType, String applicationPoolUsername, SecureString applicationPoolPassword, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)   at Microsoft.SharePoint.Administration.SPAdministrationWebApplication.CreateDefaultInstance(SqlConnectionStringBuilder administrationContentDatabase, SPWebService adminService, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.CreateAdministrationWebService(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.CreateBasicServices(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)   at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword, SecureString masterPassphrase)   at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, String farmUser, SecureString farmPassword, SecureString masterPassphrase)   at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()   at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()   at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask()

    The cure 
    I checked the permissions for the SharePoint installation account on the MS SQL Database - it seemed to already have the correct security roles assigned (dbcreator and securityadmin).


    I then noticed this line in the error logs: "Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD"


    It's now apparent that psconfig is failing when trying to read a User Property from Active Directory. It turned out the domain had been setup so that domain accounts do not have access to read AD Properties. I simply gave the "Setup Administrator" and "Farm Account" accounts read permissions.

    Friday, July 16, 2010

    SharePoint 2010 - SharePoint 2010 just got quicker. The latest patch is doing it’s job!

    I’m running Windows 7 on a Dell Latitude E4300 4GB RAM with SharePoint Server 2010 installed for development and demo purposes. In the beginning SharePoint was running with an acceptable performance, but sometimes there would be a little wait here and there.

    A few days ago Microsoft released an update for SharePoint Foundations 2010, which it claimed would improve stability and performance.

    Guess what? After it was installed, I browsed my SharePoint sites using Chrome – man, it was lightning fast! Was it Chrome? Don’t think so. Same quick response in Internet Explorer 8! The performance is noticeably MUCH quicker. Great job guys!

    This is the patch I installed:
    Update for Office SharePoint Foundations 2010 (KB2032588)

    “Microsoft has released an update for Office SharePoint Foundation 2010, 64-bit Edition. This update provides the latest fixes to Microsoft WSS 2010, 64-bit Edition. Additionally, this update contains stability and performance improvements.”

    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=f6f1d567-a21f-4770-80ba-f7d6e05f11aa

    Wednesday, June 09, 2010

    SQL Versions – Tip of the day

    I was installing SharePoint 2010 – wait, what about the pre-requisites?
    - SQL 2005 SP3 with Cumulative update package 3
    - OR SQL 2008 SP1 with Cumulative update package 2

    So what version have we got? Here’s the tip of the day (for me and to you to share), run this SQL Query to find out:

    SELECT serverproperty('productversion'),
           serverproperty('productlevel'),
           serverproperty('edition') 


    This should give you information to determine the version number, the release level (RTM or Service Pack), and the edition (Express, Standard or Enterprise).

    For convenience, I’ve added the version numbers required for SharePoint 2010:
    - SQL 2005 SP3  - 2005.90.4035
    - SQL 2008 SP1 – 2007.100.2531.0


    For more version numbers go to http://support.microsoft.com/kb/321185.

    Referenced from this Microsoft KB http://support.microsoft.com/kb/321185

    Wednesday, May 12, 2010

    From Developer to Architect?

    For a few years now, I’ve been coding on .NET, SharePoint, and the like. I went to University and learnt about Object Orientation. I hardly noticed nor appreciated the many OOP concepts that I’ve unconsciously applied to my coding/solution design. Dare I say it, I think this may describe many developers with around 2-4 years of coding experience up their belts.

    I recently started reading a few articles online and came to realisation of the extent to the level of OOP concepts that have actually been applied. It made more sense why some of solutions worked better than others (of which include both .NET and SharePoint solutions).

    Like many others, I’ve just had the time to understand and learn how to use API’s and/or how to ‘structure’ code to get the job done in the least amount of time with the best quality (least amount of bugs), but never to understand some software architecture concepts. Take my tip, re-learn the concepts that reflect what you already know – a design pattern.

    Here are the links I have referred to:

    Thursday, March 11, 2010

    Microsoft SharePoint Server 2010 – Certifications?

    I just read an official note that there will be new four SharePoint 2010 certifications – and they are not specific to either SharePoint Foundation 4 or SharePoint Server 2010.

    These exams are:

    • 70-667: TS: Microsoft SharePoint 2010, Configuring
    • 70-668: PRO: Microsoft SharePoint 2010, Administrator
    • 70-573: TS: Microsoft SharePoint 2010, Application Development
    • 70-576: PRO: Designing and Developing Microsoft SharePoint 2010 Applications

    According to this blog post, the exams are expected to be available in June/July timeframe. More details here.