Thursday 20 November 2014

Enhanced collaboration with Yammer Document Conversation


Document conversation feature in Office Online allows to embed Yammer conversations about a document into Office Online apps like Word online and Excel online. This provides a simple and easy way to collaborate on documents that are stored in SharePoint Online document library or in One Drive for business.

To make use of document conversation Office 365 administrator has to make Yammer as the default social network in Office 365 settings. Once this is done, starting a document conversation is straight forward.  When a file that is stored in SharePoint Online or One Driver for business is opened in a browser, the document is displayed on the left and a contextual Yammer conversation pane is shown on the right. The Yammer conversation pane can be expanded and you can post a message to your coworkers or a group.




 Document conversation can also be started from SharePoint Online document libraries or One Drive libraries by clicking the Post link in document callout  hover view.


When a message with link to the file is posted in Yammer, the message will be displayed with an icon clicking on which will open the file from the online location with the Yammer conversation pane.

The cool document conversation feature works not only for office documents but with other common file types like PDF, MP4, GIF etc.

By allowing to have real time conversation from within the documents themselves the Document Conversation feature will enhance employee collaboration and engagement.

Thursday 16 October 2014

SharePoint 2013 custom BCS Connector


SharePoint 2013 provides out of the box BCS connectors for Database, WCF, .Net and OData sources. If you need to connect to other form of data like a XML file or a file system then a custom BCS Connector has to be developed.

This blog post will explain the steps involved in creating a Custom BCS connector for SharePoint 2013 that connects to a XML file source. The steps involved  are
Developing Custom Connector Assembly
Creating the BCS model
Deploying the assembly and model
Creating external lists using custom connector

Developing Custom Connector Assembly
The customer connector assembly should have a class that implements the ISystemUtility interface from in Microsoft.BusinessData assembly. ISystemUtility interface provides functionality to execute operations against the external system. ExecuteStatic  method is the most important method within the interface where  we will be implementing CRUD actions for the custom connector.

The first parameter in ExecuStatic method is of type ImethodInstance and has a property called MethodInstanceType which indicates the type of method that is being called against the external content.  Finder MethodInstanceType  corresponds to retrieving  all items and SpecificFinder corresponds to retrieving a particular item.

The third parameter is an object array that has items that can be used with MethodInstanceType. The last item in the array is reserved for the return parameter.

Below is the execute static method for XML connector

public void ExecuteStatic(IMethodInstance mi,
            ILobSystemInstance si,
            object[] args,
            IExecutionContext context)
        {
              
           switch (mi.MethodInstanceType)
            {
                    //Single product view
               case MethodInstanceType.SpecificFinder:
                    int id = (int)args[0];
                    args[1] = GetProduct(id);
                    break;
                    //Product Listing
                case MethodInstanceType.Finder:
                    args[args.Length - 1] = GetProducts();
                     break;    
            }

        }
GetProducts method has the logic for retrieving all products from the XML file and GetProduct method has the logic for retrieving a particular product within the XML file. Sign the custom connector assembly with a strong name and generate the dll.

Creating the BCS model
The BCS model file can be created using a XML editor or using Visual Studio. The BCS model XML file has the below elements

LOB System
LOB System Instance
Entities

The Lob System element has the SystemUtilityTypeName property where we specify the fully qualified name of our custom connector assembly. Below is an example snippet of LOB System element
      <Properties>
        <Property Type="System.String" Name="SystemUtilityTypeName">
XMLFileConnectorG.Connector, XMLFileConnectorG, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c36ccc14bfdf0d2
</Property>
      </Properties>

LObSystemInstance elements is where we can specify properties that can be used in custom connector assembly code. For example we can add a property to take the path of external XML source data file
<LobSystemInstances>
        <LobSystemInstance Name="ItemsData">
          <Properties>
            <Property Name="xmlfilepath" Type="System.String">c:\testfolder\products.xml</Property>
         </Properties>
        </LobSystemInstance>
      </LobSystemInstances>

Entity element section is where the identifier, fields and methods of our external content type is defined. Below is the snippet for an entity by name item with Finder and Specific Finder methods
<Entity Name="Item" EstimatedInstanceCount="1000" Version="1.0.0.0" Namespace="XMLFileConnectorG">
          <Identifiers>
            <Identifier Name="Id" TypeName="System.Int32" />
          </Identifiers>
          <Methods>
            <Method Name="ItemFind">
              <Parameters>
                <Parameter Name="id" Direction="In">
                  <TypeDescriptor Name="id" TypeName="System.Int32" IdentifierName="Id" />
                </Parameter>
                <Parameter Name="Item" Direction="Return">
                  <TypeDescriptor Name="Item" TypeName="Microsoft.BusinessData.Runtime.DynamicType">
                    <TypeDescriptors>
                      <TypeDescriptor Name="Id" TypeName="System.Int32" IdentifierName="Id" />
                      <TypeDescriptor Name="Title" TypeName="System.String"/>
                     <TypeDescriptor Name="Category" TypeName="System.String"/>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Type="SpecificFinder"
                                Name="ItemSpecificFinder"
                                Default="true"
                                ReturnTypeDescriptorLevel="0"
                                ReturnParameterName="Item">
                </MethodInstance>
              </MethodInstances>
            </Method>
            <Method Name="ItemDataFinder">
              <Parameters>
                <Parameter Name="Items" Direction="Return">
                  <TypeDescriptor TypeName="Microsoft.BusinessData.Runtime.DynamicType[]" IsCollection="true" Name="Items">
                    <TypeDescriptors>
                      <TypeDescriptor Name="Item" TypeName="Microsoft.BusinessData.Runtime.DynamicType">
                        <TypeDescriptors>
                          <TypeDescriptor Name="Id" TypeName="System.String" IdentifierName="Id" />
                          <TypeDescriptor Name="Title" TypeName="System.String"/>
                          <TypeDescriptor Name="Category" TypeName="System.String"/>
                          </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Type="Finder"
                                Name="ItemFinder"
                                Default="true"
                                ReturnTypeDescriptorLevel="0"
                                ReturnParameterName="Items">
                </MethodInstance>
              </MethodInstances>
            </Method>
          </Methods>
        </Entity>

Deploying the assembly and model
The custom BCS connector assembly has to be installed to Global Assembly cache on the SharePoint 2013 server and the BCS Connector model has to be imported before we can create content type from our model.

The custom connector assembly can be installed on the SharePoint server by using gacutil utility or by just dragging and dropping the assembly file to C:\windows\assemby folder.

To import the BCS model to SharePoint 2013 copy the BCS model file has to be copied to a location in SharePoint 2013 server and below steps have to be performed
1.       Logon to SharePoint 2013 central administration site

2.       Select Manage service application under Application Management

3.       Click BCS service application

4.       Click the Edit tab and click Import on BDC models ribbon

5.       In the Import BDC model page select the BCS your model file

6.       In File Type, select model option.

7.       In Advanced Settings, check Localized names, Properties, and Permissions check boxes.

8.       Click Import button.

The BCS model will be imported and the page will display all available models as shown below

 

 Clicking the model will show the external content types available in it.


 Clicking on the external content type will show details about the content type


Creating external lists using custom connector
Once we have installed the assembly and imported the BCS model, we can create external lists from the external content type by performing the below steps

1.       Navigate to the SharePoint site where the external site has to be created

2.       Click on Settings Icon from top left and click View Site Content menu

3.       On the Site Contents page click Add and app icon

4.       On the Your Apps page search for external list and click on External List from the result

5.       On the Add External List pop up give a name for the external list and select the external content type that was imported.

6.       External list will be created and content from the XML file will be populated