Wednesday, January 11, 2012

Properties or AllProperties of SPWeb / SPWebApplication

Properties and Properties Bag may be differently if you are working on SharePoint. Especially for to update and remove data from their collection.



If you want to add

webApp.Properties.Add(p1);

That means you just add a propery to Web Application's properties and SPWeb's properties bag. However, if you remove this key out properties list, like following the code:

webApp.Properties.Remove(p1);

That means you just remove p1 out from SPWeb's properties bag, and in Web Application's properties is still existed. So, at the next time, you will never add or after sucessfull adding, nothing is added into SPWeb.

So, the best practice is always update or remove from both properties to be sured the system works correctly.


Add Properties


web.AllowUnsafeUpdates = true;


//Add property if not exist

if (web.AllProperties[strPropertyKey] == null)
{
       web.AllProperties.Add(strPropertyKey, strPropertyValue);
}




if (web.Properties[strPropertyKey] == null)
{
       web.Properties.Add(strPropertyKey, strPropertyValue);
}



web.Update();
web.Properties.Update();
web.AllowUnsafeUpdates = false;

Update properties



web.AllowUnsafeUpdates = true;


web.AllProperties[strPropertyKey] =  strPropertyValue;


web.Properties[strPropertyKey] = strPropertyValue;



web.Update();
web.Properties.Update();
web.AllowUnsafeUpdates = false;

Delete Properties


web.AllowUnsafeUpdates = true;


web.Properties.Remove(strPropertyKey);


web.AllProperties[strPropertyKey] =  null;


web.Update();
web.Properties.Update();
web.AllowUnsafeUpdates = false;

Hope this help.

Tuesday, January 3, 2012

How to delete a site with all sub-sites

SharePoint does not allow user delete the site which has many sub-sites existed. That means if there are many sub-sites are still working, and user try to delete the parent site, the error will throw exception. Here is the piece code to help delete the parent site with long operation.



private void DeleteAllWebs()
        {
            SPLongOperation.Begin(delegate(SPLongOperation longOperation)
            {
                try
                {

                    int lCID = base.Web.Locale.LCID;
                    uint language = base.Web.Language;
                    int uIVersion = base.Web.UIVersion;

                    string layouts = Utilities.DetermineLayoutsUrl(base.Web.ParentWeb, this.Context, false, false);

                    this.DeleteWeb(base.Web);

                    string queryString = string.Concat(new string[]
   {
   "c=",
   lCID.ToString(CultureInfo.InvariantCulture),
   "&ui=",
   language.ToString(CultureInfo.InvariantCulture),
   "&uiv=",
   uIVersion.ToString(CultureInfo.InvariantCulture)
   });
                    longOperation.End(layouts + "webdeleted.aspx", SPRedirectFlags.UseSource, this.Context, queryString);


                }
                catch (Exception ex)
                {
                    logger.Error("DeleteCommunity", ex);
                    throw ex;
                }
            }
            );
        }

        protected void DeleteWeb(SPWeb web)
        {
            if (web.Webs.Count > 0)
            {
                foreach (SPWeb subweb in web.Webs)
                {
                    try
                    {
                        DeleteWeb(subweb);
                    }
                    finally
                    {
                        if (subweb != null)
                            subweb.Dispose();
                    }
                }
            }
            if (web.Exists)
                web.Delete();
        }


Hope this help!

Tuesday, December 20, 2011

Synchronous between 2 site collections to make a backup data

There was many ways to create a backup for your site collection from content-database. For the others purpose, you will find out the best solutions for you situation, and in this sort topic, I will show you how to create a backup content of site collection in disaster case or crashing data.

Content Deployment Path is a part of tool using in SharePoint Server 2010 to sync data from source site collection to destination collection. Source and destination site don't need to be in the same farm server, they may work on other farm but between 2 farms must have a connection. That means you have to have an account can access to destination site collection.

There are a lot of jobs created and sometime it make your system to be slow down or not responding, however it actually only happens for the very first time running.



One more thing need to be warned, that is, if you are performing on crossing server farm, you should take a time to manage security between the farms because SharePoint requires transfering data by secure socket network, if so, you must go to the Central Administration to reconfig Content Deployment Settings to do:
- Enable listening between the sever farms by setting Accept incoming content deployment jobs
- Select Do not require encryption option if you didn't work on SSL administration

After create an Content Deployment Path, you will see the item in the list, and create a job to perform action.



Conclusion: you can monitor the deployment jobs in Central Administration section, and manage all jobs in the setting page. Note: please don't set the schedule too short to avoid the conflict data between 2 jobs in the same path.

Friday, December 16, 2011

Series solutions on document management for officer - Part 3

At the previous posted, I recommended 2 solutions for officer employees. SharePoint 2010 OOTB has not supported enough components to work on documents especially about document management and collaboration. Security is also an important thing and could not separate from content management actions. If there are many actions on the same document at the same time, it would be conflicted when user perform saving execution. Collaboration is the best solutions to solve this problem and for now Microsoft had released a lot of components for collaboration such as Office Web, SharePoint Online (Office 365),... However, another scenarios often has been used frequently in office that is to share some documents (items) in the same department or another departments.



This topic will reduce (save ) your time when you work on document/content management. I produce this component to help you share (items) your documents, it allows:
- Share item(s) to one or many people with specific permission, the permission list is taken from SharePoint permission level.
- Privately item(s) from another users, except for System Account and Site Collection Admin.
- Inherit from parent.

Limitation for free this component:
- Cannot share item(s) for many people with many permissions. For example, if you need to add some people /groups with FullControl and Contributor for this item.
- Cannot get the permission editing for item which are the same permission items.
- Only support SharePoint 2010

Download here

Tuesday, November 29, 2011

Series solutions on document management for officer - Part 2

In the previous post, I just reserved a piece of package of document management for officer. In the daily tasks, I think it's very useful if there is any robot functioning to perform our tasks. It's like a command in SQL and executes many times, sometime it makes us feel uncomfortable or tired with a boring jobs. That's why I think it's really useful for office, especially some people work in Acc Dept and HR Dept.

In this topic, I introduce a new feature in a series of small tool for officer. That's download a multiple files from document library or picture library.

SharePoint OOTB has supported already a feature named Download a copy in Copies category of Ribbon. However, to get a copy of file, user can perform by right-click on the file name and select Save file as from context menu of Internet Explorer. Of course with SharePoint, user has a lot of methods to download a copy of file, but the question is how to get many files and folder into a package? There is only way to do that is to go through every item and download, then using compressed function has supported by windows to zip all in one.



There are some limitation of free version:
- Not supported compressing all sub-folders.
- Not supported other zip type, just using "zip".

There are features of this tool:
- Allow compressing files and folders in the same level.
- Supported for SharePoint Foundation and Office Server.

It's available to download here.
(... to be continued )

Thursday, November 24, 2011

Series solutions on document management for officer - Part 1

SharePoint is a portal with the strength functionalities for collaboration and content management. There are a lot of new features to improve the activities of user and support the useful tools for almost kind of user who are using SharePoint 2010. That's perfect! However, Microsoft is always only build a framework and background technology for all their product and their partners will build a product as component or build a solutions to help IT Pros or IT Manager build up a service for their business. So, there are many companies only support the solutions or consult the customer by SharePoint administration expert. I've also consulted for some companies and build the solutions for a part of or whole their departments. The best things I have after finish every contract is how to fullfill the requirment while SharePoint features are not enough to reach all situations.

Luckyly, I am a developer. This is the only one advantage and I have to think about it. if I have a budget I just only buy some widgets or components from 3rd party and select the best product to match the requirements. I think this is not difficult but the most imprtant thing is how to mantain the product id there is many many products from another company and developer like me can not handle! In this series, I will show all you guys see some my opinions to solve a little taks but it's actually useful for IT managers, especially end-users.

This is a first topic to talk about requires' Officer, that is how to move a lot of document to another site. The limitation for free here are:

- Not support move multiple items, that mean these documents (files) still are in original list. They are not deleted after copy to new location.
- Not support overwrite method. If this feature is enable, the file is copied to the destination list will not overwrite instead of adding subfix "-(copy)"
- Not support copy the folders, it's avaible upon request.
- Not support cross-site, that means moving these files to another server farm.
- Not support sending to multiple sites

Here are the list of features in free version:
- Copy multilple items to onother location.
- All file types are supported.
- Support for both Foundation and Office Server
- Not need to install or activate Document Set feature.



Note: at the destination URL, please enter the short path, not including SitePage/Default.aspx or default.aspx

Trial version is available here. Download here. Hope this help.

Wednesday, November 23, 2011

How to get distinct value from splistitemcollection

In many cases, we need to get the distinct data like SQL or even only get the separately data. it will be complicated if we are working on SharePoint 2010 because of performance. There are at least 2 scenarios we have:

  • Max throttling 
  • Performance with large list
Now, i also have a small code to get the data for distinct:


SPListItemCollection collection = list.Items;
DataView view = new DataView(collection.GetDataTable());
DataTable result = view.ToTable(true, "[Column Name"]);


By using DataView and DataTable we can get the distinct value from list, but if it's a large list you only get Max Throtting items in a collection, others will be missing. The most important thing is this way is easy to use.

IEnumerable enumerable = list.Items.Cast<SPListItem>().Select(itm => itm["Column Name"]).Distinct();

Or you can use Linq to select the distinct value, this way will not be recommend because of performance but it will return exactly data if the maximum return records were not exceeded the Max Throttling.

It's up to you to choose any way, but hope this help.

Sunday, November 20, 2011

SharePoint and SQL intergrations event

We've announced our next exclusive live chat on Facebook! Join Jesse Shiah, CEO of AgilePoint, and Gideon Bibliowicz, Senior Product Manager - Enterprise Lead for Microsoft SharePoint of Microsoft SharePoint, on December 1st at 11am to ask them questions about SharePoint and SQL integration. Any technical questions you have are fair game. Don't miss your chance to go right to the experts and learn how SharePoint and SQL benefits businesses of any size. RSVP on the event page:

http://www.facebook.com/events/179333768823652/

Sunday, November 13, 2011

Format DateTime in SharePoint 2010 based on XSLT 1.0

If you were bored with the date time formatted showed in the list by SharePoint and you think it should be changed to how it's easy to view it. The difficulties come from a lot of problems especially XSLT in SharePoint 2010, it was never upgraded from SharePoint 2002, still using version 1.0 until now. That's the bad thing I had when I was working on SharePoint.

Of course, there are many options for you developing on SharePoint product, I mean you can use ContentQuery Web Part to correct the date time format like FaceBook or Google Plus:

However, to do that, now you just follow up this instruction to customize your xslt and see how it shows on the page.

Click here to download the library.

1) Copy the content of file after downloaded, paste it into the file named "thread.xsl" in folder 14/Template/Layouts/Xsl

2) Go to the line for template called "StatusBar" (<xsl:template name="StatusBar">) and remove all the code for Modified date time. Or replace by:

<xsl:call-template name="Bamboo_FormatDateTime">
    <xsl:with-param name="theDate" select="$thisNode/@Modified."/>
    <xsl:with-param name="theDateFormat" select="$thisNode/@Modified"/>
</xsl:call-template>

3) Save and reset IIS

Note: 
- You can put the code anywhere if you want to show the time stamp more friendly.
- Just StatusBar column has defined "Modified." field in the schema, it's original value of Modified column. So, if you do not find out the value of "Modified." that means, in the schema file, the field did not create a reference to original value Modified.
- You also don't care about the LCID of site or user locate, because the value of "Modified." always return the value in 1033 regional and the format function based on this column to show friendly.

Unlock uploading file in SharePoint 2010

By default, SharePoint locked the uploading file with some extensions, these extensions may cause the damage your server and user will take advantage of uploading to send a script, virus and even the code executable and control your server from remoting. So, SharePoint has been locked by default to be sure your server to be protected safety.

You will get an error if you try to upload the file with restrictive high level:


However, in some case, you need to unlock to upload the file for internal process, or only in local. It's very simple by remove the extension out the locked list.


Go to Central Administration -> Web Application, on the Ribbon click on Blocked File Types, the remove the extension necessary. This is only effected on each Web Application. To be more safely, put it back the blocked list after finished the uploading, only open if it is really necessary.