Wednesday, January 2, 2013

BS WP Blog Reader at MS App Store


BS WordPress Blog Reader App is published into Microsoft App Store and available at -
Pls feel free to add it in your site and provide me your feedback so that I can try and incorporate your suggestions in subsequent release.

I identified some enhancements to this App -
  1. Blog Subscription - A SP List for holding blog URLs. User can manage list for Add/Update/Delete Blog URL. All URL added in subscription list will be available in the UI (drop-down list).
  2. Freshly Pressed WordPress Blogs - A new page for displaying all newly pressed WP Blogs. User will get a subscribe option/button. Once user click on subscribe button, URL of the blog will be automatically added in to subscription list.
  3. Help - A new page for providing help administering and using BS WordPress Blog Reader App
  4. Preview - A new page for preview of BS WordPress Blog Reader App.

At present I'm working on these enhancements(hoping to complete in a weeks time.)

Tuesday, December 4, 2012

SharePoint 2013 App - BS Word Press Reader App


BS Word Press Blog Reader App is simple yet powerful App which enable you to connect any WordPress blog. You just need to provide the blog URL and click 'Get', bingo..

This App displays 'Blog Title', 'Blog Excerpt' and images associated with the blog (at present max 5 images are displayed).
This App uses JSON call for fetching data from Word Press so display is pretty fast almost real time.
This App is a Client Web Part which can be added to any SharePoint page with a Web Part Zone. When you add this App this will by default connect to my Word Press Site (WoodClix). You can type any blog address in the URL space and connect to any blog.

Imp -
Blog URL Format: woodclix.wordpress.com (provide URL in this format)
(Another example - en.blog.wordpress.com)

Limitation -
Currently Word Press REST API only support 5 images.
As of now App will fetch only 20 blog post 



Friday, August 26, 2011

Taxonomy

What is taxonomy?
A taxonomy is a set of concepts organized into a hierarchical structure covering a topical domain. You could think of it as a structured vocabulary. For example, in biology, a commonly used taxonomy is that to describe all plants and animals.
Generally, the categories are arranged in parent-child structure that takes the focus from broadest to most narrow. Again, to use the example of biology, the Plant and Animal taxonomy starts out at the highest level of Kingdom, and continues down through Phylum, Class, Order, Family, Genus until finally reaching the lowest level of Species. Each category may have its own set of synonyms to account for different ways of expressing the same concept.

What are taxonomies used for?
A taxonomy can help make a large body of knowledge more understandable by providing an organization for the knowledge.   
Taxonomies make it easier to interact with a large amount of information. If your business needs to make information more findable, then you may want to consider taxonomy. This could range from a website with a business database search, an e-commerce website, or internal company documents.

What benefits does having a SharePoint Site Taxonomy provide?
From the end user perspective, it gives us a starting point for information architecture and - more specifically - navigation. Consider the following SharePoint Site taxonomy:

Using the site taxonomy above, it becomes much easier to imagine a navigation system for a corporate
intranet.
From an IT perspective, the taxonomy drives much more than how sites and navigation are presented to the end user. The taxonomy provides a consistent framework for making decisions about sites and how they should be provisioned and governed. Rather than treating every site as a custom entity, asking questions that allow for the classification of a site can enable IT staff to easily make decisions regarding the configuration of that site. Some pertinent questions might include:

1. How long does the site need to exist (is it permanent, short-term, or long-term)?
2. What kind of and how much content is expected for the site?
3. Who should have access to the site?
4. Who will be able to create and edit content for the site?
5. What is the purpose of the site?

The answers to these (and other questions) can help IT staff classify the site. The taxonomy can be
applied to a standard set of properties within the organization such as:
  • Disk space quota
  • Default look and feel
  • URL Path
  • Backup schedule
  • SLA
  • Content Types
For each classification in the taxonomy, these properties are pre-defined easing the burden of site
provisioning and, eventually, allowing for it to be automated.The taxonomy provides much more than a common set of terms, it provides a foundation upon which future decisions are made. It provides a scalable hierarchy that allows a SharePoint deployment to grow in an organized, predictable, and understandable manner.

Wednesday, July 7, 2010

Audit Capability at Document Level

I was looking for a tool with below capabilities:
1.) Granular audit capabilities (Document level)
2.) Generate Audit usage reports
3.) Who viewed what?
and found Syntergy Auditing tool is good tool and it has all the above capabilities. I would love to know if there are any better tools available in the market.

Sunday, June 14, 2009

SharePoint Favorites : CaptureLinksV1.1

Guys, finally I'm ready with my CaptureLinksV1.1. For those who are newcomer to this post, I'll say this CaptureLinks - SharePoint utility is really doing good.And in just 15 days I have a good managed database of my Internet Favorites & that also managed in the SharePoint List.
So now as promissed I have done some significant changes in my current release like 'Setting' option and categorization of Internet Favorites (using different SharePoint List at run time). You can get your new version of CaptureLinks at below Url:

  • Download: CaptureLinksV1.1

    Happy SharePointing Cheers!!!
  • Monday, June 1, 2009

    Capture Links 1.0: Portable Internet Favorites

    Capture Links 1.0: Portable Internet Favorites

     

    I have been travelling across the globe since last four years; every time I move from one location to another I was able to carry all my data except my internet favorite links which are more important to me than the huge backup.

    I have been playing with SharePoint quite a while so I thought I can develop something in SharePoint to fulfill my purpose and this purpose seems to become easy by using the SharePoint Links List.

    As I was developing "Capture Links" I found, other than storing my links at central location this tool turned out to be fulfilling many other purposes also like:

    • My Internet Favorite Links are no more tied up with one machine.
    • I can share my links with my friends, colleges and team mates. So I need not to send them URLs on e-mail and messenger window.
    • All my links are searchable from SharePoint search engine. So I can easily get hold of them.
    • My Internet Favorite is very good for me but that contains only those topics which I like most. Using "Capture Links" we can create a collaborative List where all members can add their useful links too and without any extra effort we can create a knowledge base.
    • We can use SharePoint alerts to keep track of our knowledgebase list.

    How it Works: From Internet Explorer select a line of text which is relevant to the page description, now right-click and select "Capture Link" from the Internet Explorer context menu.


    (Your 90% work is done at this point). This will launch the Capture Links Application filled with all selected data:


     

    Now enter the URL of your site and Click Connect button. This will populate all the links list present in that particular site, select any Links List and click Save.


     

    Here you go; your link has been added successfully. Check in your SharePoint Links List you will find a new entry as you have added right now.

  • Download: CaptureLinksV1.0

    Happy SharePointing Cheers!!!
  • Monday, May 4, 2009

    Dashboards in MOSS using VisiFire Charts:

    Dashboards: An upcoming face of MOSS Business Intelligence

    When we think about some jazzy dashboards for any Business Management Solution or Project Management site, Silverlight turns out to be a maximum hit area. I also entered in this magic world after the quest of some jazzy dashboard solution, and found 'VisiFire' is the name of this arena. VisiFire is an open source self contained charting solution built with Silverlight. If you haven't seen VisiFire before, it's worth checking out, their gallery page shows a number of really slick animated charts that are dead simple to use with XML data (without writing any Silverlight code).

    I'm not going to do any great thing here as you may get couple of example to walk you through for implementation point of view. So, why I'm writing this blog? Good question!! Well the answer is I'll be taking a scenario where we can twist the XML of these graph as per our need. So it will make more desirable and with this tweak you can show any information in the form of super jazzy Silverlight charts. Let's kick off

    1. Download the latest version of VisiFire package from here: http://visifire.com/download_silverlight_charts.php
    2. We will use the out of the box Task List, created in the SharePoint Site.
      (Make sure you have some data in this Task List.)
    3. Create a page in SharePoint that will hold a Data View Web Part. You can use SharePoint Designer for this, with a Web Part Zone selected, from the top menu click Data View > Insert Data View. From the Data Source Library in the right hand task pane select your list and click Show Data. Then select both the Title and Status fields and add them to the Data View. After adding the Data View Web Part just make sure you do not have selected any paging option. Select display all items.

    4. Unzip the VisiFire package that you downloaded and grab "Visifire2.js" and "SL.Visifire.Charts.xap" and add them to the same location as the page you just created in your SharePoint site. (In my example I have uploaded them in my Shared Document Library )

    5. Now here it comes where we will be doing the actual stuff. It's now time to Modify the XSLT.

      I always use visual studio for this.  (See here for an important note about intellisense that will help you a lot).

      I create an empty project add two new files (replacing the words "Original" and "New" as appropriate):

    • Original.xslt
    • New.xslt
    1. In Original.xslt, Search and replace the first xsl:template:

      <xsl:template
      match="/">

      <xsl:call-template
      name="dvt_1"/>

      </xsl:template>

      With this XSLT:

    <xsl:template
    match="/"
    xmlns:x="http://www.w3.org/2001/XMLSchema"
    xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
    xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
    xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
    xmlns:SharePoint="Microsoft.SharePoint.WebControls">

    <!-- Load the chart tools -->

    <script
    type="text/javascript"
    src="Visifire2.js"></script>

    <!-- Create the JavaScript variable that holds the data to plot. -->

    <!-- Note the xsl:for-each statement which loops over all the -->

    <!-- list items and creates the necessary DataPoint entries -->

    <!-- in the Chart XML. -->


     

    <xsl:text
    disable-output-escaping="yes"><![CDATA[

    <script type="text/javascript">

    var xmlString =

    ' <vc:Chart xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts"'

    + ' Width="350" Height="300" Theme="Theme2" View3D="True" BorderBrush="Gray" BorderThickness="0" Watermark="False" >'

    + ' <vc:Chart.Titles><vc:Title Text="Task Status"/></vc:Chart.Titles>'

    + ' <vc:Chart.Series>'

    + ' <vc:DataSeries RenderAs="Pie" LabelLineThickness="0.5" ShowInLegend="True" Bevel="False">'

    + ' <vc:DataSeries.DataPoints>'

    ]]></xsl:text>


     

    <!—Here we will query the Status field -->

    <!—and display the consolidated Status values in Pie Chart. -->

    <xsl:text
    disable-output-escaping="yes">

    <![CDATA[ + ' <vc:DataPoint AxisXLabel="Completed]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" YValue="]]></xsl:text>

    <xsl:value-of
    select="count(/dsQueryResponse/Rows/Row[normalize-space(@Status) = 'Completed'])"/>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" LabelText="Completed]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" Exploded="False]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA["/>']]></xsl:text>

    <xsl:text
    disable-output-escaping="yes">

    <![CDATA[ + ' <vc:DataPoint AxisXLabel="Not Started]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" YValue="]]></xsl:text>

    <xsl:value-of
    select="count(/dsQueryResponse/Rows/Row[normalize-space(@Status) = 'Not Started'])"/>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" LabelText="Not Started]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" Exploded="False]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA["/>']]></xsl:text>


     

    <xsl:text
    disable-output-escaping="yes">

    <![CDATA[ + ' <vc:DataPoint AxisXLabel="In Progress]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" YValue="]]></xsl:text>

    <xsl:value-of
    select="count(/dsQueryResponse/Rows/Row[normalize-space(@Status) = 'In Progress'])"/>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" LabelText="In Progress]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" Exploded="False]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA["/>']]></xsl:text>


     

    <xsl:text
    disable-output-escaping="yes">

    <![CDATA[ + ' <vc:DataPoint AxisXLabel="Waiting on someone else]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" YValue="]]></xsl:text>

    <xsl:value-of
    select="count(/dsQueryResponse/Rows/Row[normalize-space(@Status) = 'Waiting on someone else'])"/>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" LabelText="Waiting others]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA[" Exploded="False]]></xsl:text>

    <xsl:text
    disable-output-escaping="yes"><![CDATA["/>']]></xsl:text>


     

    <xsl:text
    disable-output-escaping="yes">

    <![CDATA[

    + ' </vc:DataSeries.DataPoints>'

    + ' </vc:DataSeries>'

    + ' </vc:Chart.Series>'

    + ' </vc:Chart>';

    </script>

    ]]></xsl:text>

    <!-- Create the div to hold the chart and then run -->

    <!-- the JavaScript code to actually show the chart. -->

    <div
    id="TaskPieChart">

    <script
    language="javascript"
    type="text/javascript">

    var pTaskChart = new Visifire2(&quot;SL.Visifire.Charts.xap&quot;,350,300);

    pTaskChart.setDataXml(xmlString);

    pTaskChart.render(&quot;TaskPieChart&quot;);

    </script>

    </div>

    </xsl:template>


    1. Save the file and refresh the page in a browser and you should see a pie chart come to life animated. If you make any mistakes the VisiFire widget is kind enough to give you a line number and position where it blew up, so that can be a help in tracking down typos in the notoriously picky XSLT.

      From here you can check out the other charts and other options via the VisiFire documentation which btw is really easy to read.


    Concluding Thoughts:

    I love this graphing concept, but I hate the fact that I have to go in and do so much hand-coding.  I've given a little thought to whether it can be generalized and I'm optimistic, but I'm also a little fearful that there may be a brick wall somewhere along the path that won't offer any work-around.  If anyone has some good ideas on this, please make a note in the comments or email me.

    Field Name Gotcha's:

    There are at least two things to look out for with your field names.

    First, a field name with a space has to be escaped in the XSL.  This will probably be an issue here:

            <xsl:variable name="totalCompleted" 
    select="count(/dsQueryResponse/Rows/Row[normalize-space(@Status) = 'Completed'])" />

    If your "Status" column is actually named "Status Code" then you need to reference it as "Status_x0020_Code":

    Second, and I'm a little fuzzy on this, but you also need to be on the alert for field name changes.  If you name your field "Status Code" and then later on, rename it to "AFE Status", the "internal name" does not change.  The internal name will still be "Status Code" and must be referenced as "Status_x0020_Code".