Dynamsoft Source Control Software–Quick Review

Recently Dynamsoft has reached out all its user with a competition for writing about its Soure control software. I would like to share my views based on my close to 2 years experience with it. These view I share is real one not because to attract or to bind Dynamsoft anyway to attain the prize. Being said reason to write a review is because there is a competition I should agree. Below is based on my true experience after using it for almost 2 years.

I work for a young company Toolagen specializing in SharePoint related technologies and we wanted to have a Source Control that would require almost no maintenance pain from our Side. Dynamsoft was right option we felt, I came to know about Dynamsoft from my Director. And it was good and I didn’t had any resistance in using it after couple of usage. They have two versions one is hosted and other is standalone version. We use the Hosted Version,It has been close to 2 years since we started using this Tool and We are very happy about the Way it works. Right from Integration of Visual Studio, Almost no Downtime, Never had an Instance where Client Crashed, Excellent support, You have a Free Account , best candidate for storing your Hobby Projects in a safe place, and it is pretty cheap in cost compared to what it offers.

Thanks Dynamsoft and Expecting same Service forever.

Sitefinity 4.0 Webinar

Yeah your read it right Sitefinity its not SharePoint. I am using telerik control both Classic & Latest ASP.NET Ajax quite sometime now, telerik has rich set of controls in their stack especially I love the Client API each of the Controls support. In recent past I got a chance to work on a CMS product by telerik called Sitefinity, it a very good CMS, easy to use and learn. I was closing following up for next next version of it because it has lots of Promising features built with it. If you are interested in know what's there in box, Attend the Webinar, you can Register Here. I am going to watch it.

LINQ to SQL or LINQ to Entities – Answer is

Yeah recently I was presented with this Question, I didn't have Idea on Initially but you will love the answer, the Answer is IT DEPENDS !!!!!

Both share many similarities and which one you wanted to choose depends on your need that moment. I came across this Nice article.

Duplicate SharePoint Lists

    Today I came across an Issue where every list I create based on a particular Custom Template was displayed as two in the SharePoint UI and while querying through Object Model.

    It was strange because content, Name, URL etc of the list is exact same. There was no issue while working with this list Add/Edit/Delete & view items worked very fine. It affected while fetching Lists for creating a custom WebPart, because Tasks that was fetched from these list were displayed twice.

 

    When I click on each of the list, each takes me to different view, this was my first clue. After an attempt to delete one of the View to see what happens I came to know that both the View are set as default and I was not able to delete either of them. But using the ViewEdit.aspx it is not possible to set two Views as default, because setting a view to default view will reset earlier default view to false. So the issues traced back to Schema.xml. In List Template Schema we have Tags to define Views for the List. And one attribute of that View Tag is called DefaultView.

 

    This attribute was set to TRUE for two views. Setting one of them back to FALSE, solved the issue but only for the new lists, existing list were behaving the same way. I wrote a command line utility will get two views and set one of them to false.

SPList oList = oWeb.Lists["TheList"]; 

SPView spView=oList.Views["X"];                   spView.DefaultView = false;

spView.Update();

                                       //Just setting the View X to be non Default didnt work I

             //had to set the other to true forcibly

                  spView = oList.Views["Y"];

                   spView.DefaultView = true;

                   spView.Update();

As noted in the comment just setting the view X to false didn't work, I had to set the other view to true forcibly. I tried to peek through SPView.Update() code but it was obfuscated. Things that we do in SharePoint using Templates (XML) are just passed in, and any small mistake like this will have major impact as well. So be cautious while working on Templates.

Viewing Site Storage Allocation Details

After long long break blogging again. Today I came across a question "how do I know the space used each of the Items in the Site Collection. On a Quick search I was not able find this info, after few mins of search I ran into this link. It shows the complete Information in a Real nice UI. Just to preserve the links in my Site, I am taking note of the reference links.

  • Configure the Quota Limit for the Site Collection. Refer this
  • Open the Site Collection and View Site Settings->Site Collection

    Administrator->Storage Space Allocation.

SharePoint 2010 – Resources

It has been a while since I blogged, I got held up with an important movements in my Life. And back to the topic , recently Microsoft had a public talk in its SharePoint Conference 2009 about the product Microsoft SharePoint 2010, that has created so much of expectation in the field. Unlike MOSS 2007 this release of SharePoint has lots of information right from the day one. I just wanted to share with you the following links that will help you to get started

Prior to the conference Jeff had a three part article posted in the SharePoint Team Blog that gave a complete history of SharePoint, its definitely a must read articles to understand how SharePoint has reached a state of how it is now.

You need to go through the items in the same order as Listed.

 

At last I am going to upgrade my Desktop to 64 bit, so I will share my experience about the process in the following blog posts.

New Release

Yes, on eighteenth October of two thousand nine, my wife and me blessed with a baby girl. We had named her Diya. Last two weeks was very though as they both had few complication after birth, and by god grace it all went well now. So not to mention now I have an added responsibility.Definitely it is a different feeling to be a dad. Here is how she looks.

diya

Diya I know some day you will read this Post and I wanted to let you know that as always I  love you so much.

Join Two Array – Zipping

Last week I had a requirement where I need to Join two array,there was no relation that I could use to  join LINQ.

Int32[] iArrayOne = {12,34,45,89};

String[] sArrayTwo= { “Value1”,”value2”,”value3”,”Value4”}

Later which I posted a question in SO,in fact it was not possible directly in LINQ.Eric has written a Post that solves my requirement. Yes the operation is termed as Zipping. Until .NET 4.0 we need to use the below snippet to achieve it and starting 4.0 we will have that function as part of the .NET.

public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>
(this IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
if (first == null) throw new ArgumentNullException("first");
if (second == null) throw new ArgumentNullException("second");
if (resultSelector == null) throw new ArgumentNullException("resultSelector");
return ZipIterator(first, second, resultSelector);
}

private static IEnumerable<TResult> ZipIterator<TFirst, TSecond, TResult>
(IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using (IEnumerator<TFirst> e1 = first.GetEnumerator())
using (IEnumerator<TSecond> e2 = second.GetEnumerator())
while (e1.MoveNext() && e2.MoveNext())
yield return resultSelector(e1.Current, e2.Current);
}
Zipping operation is defined as 
var qry = from row in iArrayOne.Zip(sArrayTwo, (temp1, temp2) => 
new { ArrayObject1 = temp1, ArrayObject2 = temp2 })
Tags : ,

SharePoint Getting Started

Few weeks back I saw a question in the Stackoverflow. The question was How to start learning SharePoint. Well at first it seem simple, I couldn't get an answer straight away. I did a Google but no luck all links I landed up was about some SharePoint books. The user who posted the question specifically mentioned that he doesn't want go through books to get the hold of it. Well I am of the same kind I hate going through 500+ pages books. Finally I answer the question on how I learnt SharePoint. Below is my answer for the question.

First step is to get created with a SharePoint site, from your System admin.

If you are the one who need to kick start the SharePoint. Then follow the steps and for each of the steps you can find ample number of links using Google

  1. Install SharePoint and Configure it.
  2. Create a Site Collection
  3. Go to the Site and in the Right Corner you will find a Menu called Site Settings
  4. Select that and play around with each and every options out there.
  5. Most of the options can be understood by the Name
  6. If you struck up some where come to SO or Start over again.
  7. Make sure that you always ask the question why this behaves this way & why this implemented this way.
  8. Try creating pages Same Site Settings Menu has option to create page.
  9. There is some thing called Web Part which is actually a Pluggable component UI/ functionally which can be customized as per the user needs.
  10. Try using those web parts (Lost of Out of the Box)
  11. Later move in to Web Part development,create your own, deploy it
  12. Start using the Microsoft.SharePoint.dll to access the SharePoint site using you custom code.

To give you a brief description.

Microsoft Office SharePoint Server 2007 is an integrated suite of server capabilities that can help improve organizational effectiveness by providing comprehensive content management and enterprise search, accelerating shared business processes, and facilitating information-sharing across boundaries for better business insight. Additionally, this collaboration and content management server provides IT professionals and developers with the platform and tools they need for server administration, application extensibility, and interoperability.

  1. I call it as Application development platform
  2. For anything you wanted to do there will be a option directly / indirectly in SharePoint
  3. Basically it is a Web Application built on top of ASP.NET 2.0
  4. Main entry point to it is an Web Application (Central Administration Site) you get this once you install SharePoint.
  5. This is where you can Create Web Application (Nothing but a Site in the IIS & Content DB)
  6. Yes you read it right Database,SharePoint stores all its content in Database
  7. Web Application is directly not usable (Its like empty DB and Empty IIS site) you need to have some content to be display to the user.
  8. Then Site collection comes, it give content to the User.You need to at least create Site collection under Web Application (Through Central Admin).
  9. While Creating Site Collection you will be provided with a Site Template (Template is nothing but a Blue print sort of thing that will dictate what your site will look like and what it have) there are template For Project Management,Bug Tracking (has options to track Bug, kind of basic infrastructure that will be needed in any Bug Tracking system).
  10. Next level is Sub site, under site collection you can have Site( here too you have an option to select the template), and under that Site you can have another Sub Site so on.
  11. And there is another important thing in SharePoint called List, its a similar to Table in SQL server but not exactly same (because list content are internally stored in SQL Tables), and List contains Fields (Similar to Column in Table). You can use them to store your custom data. While creating the list also you will have Templates (Say for example to Represent a Announcement you have a template, this will have all the fields that are needed to represent announcement)
  12. And you have a Option to Create your own List Structure as well.
  13. There is a special kind of List in SharePoint called Document Library which can store documents.
  14. One final thing Security, managing Security is out of the Box. You can control who has access to you Site and what they can Access (Only Announcement , only Published documents) and what they can do with the item (Edit/Read-only/Delete) etc.
  15. You can create fine grained permission as you wish.

Welcome to THE SHAREPOINT WORLD

.NET 4.0 – Part 1

You should be aware that .Net 4.0 is currently in CTP and I am currently in process of exploring the new features in .Net 4.0. Channel9 have a good series of videos that will help you to get started. This is where I started my journey towards .Net 4.0. I would like to share all the learning I had from the above videos and additions to that I would like to share few items that I noticed during my learning. Altogether you will find information about .Net 4.0, ASP.NET Visual Studio 2010. How well it integrates with SharePoint & more. To practice this you will need a CTP version of Visual Studio 2010 and .Net FX 4.0. You can download it from this location. Also be sure to follow these steps before you open the Visual Studio 2010 because it comes with a hardcoded value of 1 Jan 09 as expire date.

[Update: June 21,2009 : .Net 4.0 and Visual Studio 2010 Beta 1 is now available, please refer to the post for more information.]

This article will host Table of Links for the all Upcoming posts.

ASP.NET 4.0
ClientID (this)
EnableViewStage & ViewStateMode(Refering Dino's Post)
C# 4.0
Named and Optional Parameters
Visual Studio 2010
Snippets option for ASP.NET and HTML code 

One feature that has everyone's attention when it comes to ASP.NET 4.0 is ClientID. Till now we had the ClientID as the getter and renders the id based on the naming container, from 4.0 we will be able to decide how the client ID is render to the browser. Each of the server control in the ASP.NET 4.0 has three new Properties that decide how the client Id is rendered.

  1. ClientID                 -    ID that we wish to give to the server control when rendered to                                               the browser.
  2. ClientIDMode        -    Mode that decides how the client ID is generated.Can            anyone of the following value
  • Inherit         -    Gets the mode that is set to the parent.
  • Predictable    -    Gives us an option to predict the ClientID that is goingto get rendered. (In the case of data bound control it generates a auto increment number
  • Legacy        -    No change works as like the previous version and thisis the default value.
  • Static        -    Static value that we set will render as it is.

      3. RowClientIDSuffix    -    Sometimes when we use the Predictable option for ClientIDMode we might need to have a different pattern of the value as the suffix rather than having auto increment. In such a case we can provide a Comma Separated Value of Data Fields (Off course this option is available for the data bound controls) so the client Id will have the value of the Data field appended to the suffix.

Let's see an Example of the above. I have a User Control (ClientIDUserControl.ascx) with a Label inside that, which is used in the page. You can see my project structure in the screen shot.

ClientIDMode:: Legacy : In the below picture you will see the even though I set the client ID of the Label control it renders client ID based on the naming container, because by default the ClientIDMode is Legacy, I didn't specified the ClientIDMode attribute so it defaults to Legacy.

ClientIDMode:: Static : In the below picture you will see that both the client ID and ClientIDMode (Static) is set hence the client ID that is rendered to the client is same as the one we set in the Code.

ClientIDMode:: Inherit : In the below picture you will see that client id that was rendered is based on the Naming container because for the Label I set the ClientIDMode as Inherit. Because of this label check its parent (in this case it's the User Control) for the ClientIDMode and as it doesn't have one it goes to the Page and checks for the ClientIDMode, as page as well doesn't have one, it further goes to the web config and check for the ClientIDMode and as it doesn't have one it by defaults to the Legacy mode. You can also set the ClientIDMode property at the page or the WebApplication level.Refer to the notes section at the end of the article.

ClientIDMode:: Predictable : In the below picture you will see that ClientIDMode is set to Predictable and ClientID is set to "deleteEmployee" and as a result it renders the client id as a AutoIncremented value "DeleteEmployee_0" and soon. When setting the Predictable make sure that Parent control also has the ClientIDMode value set. Refer notes section in the end of the article.

ClientIDMode:Predictable and RowClientIDSuffix:

    When using the Predicatble option there is another tweak we can perform that is to generate our own predictable ID rather than using the auto incremented value of (0,1,2 …).In the below picture I have used RowClientIDSuffix to ID and Company, hence the rendered element has the ID in the format DeleteEmployee_[ID]_[Company]

Notes:

  1. While using the ClientIDMode="Predictable" you need to set the ClientIDMode property in the parent control as well else the ClientID generated by the client control will not have the predictable value, it will default to Naming container method of generating the ID. In the above case I have set the ClientIDMode of the GridView to Static and the CheckBox which is the child control to Predictable.
  2. In addition to the setting the ClientIDMode to the each and every control you can set this value at the Page Level or at the Application level (Web.Config).When there is no explicitly set ClientIDMode to any of the control it will get the value from the page or Web.Config level if one is set else it default to the legacy mode. 
Mode ID ClientID Suffix Client ID At the Browser
Legacy/Nothing Set A C - [ParentNamingContanierID]_A
Static A C - C
Predictable A C - C_0,C_1
Predictable A C ID C_[ID],C_[IDNext]