Tuesday, March 04, 2008

Installing Language Packs for Office SharePoint Server 2007

Language packs enables Administrators of sites and site collections to create sites and site collections using different languages other than the install language. The language packs needs to be installed on all the web front-end servers in a farm. My suggestion would be to install the language packs on all the servers on the farm. So that if you need to convert an application server into a web front end server, you can do it with minimum effort.
Language packs are available for the following languages:
· Arabic
· Bulgarian
· Catalan
· Chinese (Simplified)
· Chinese (Traditional)
· Croatian
· Czech
· Danish
· Dutch
· English
· Estonian
· Finnish
· French
· German
· Greek
· Hebrew
· Hindi
· Hungarian
· Italian
· Japanese
· Korean
· Latvian
· Lithuanian
· Norwegian (BokmÃ¥l)
· Polish
· Portuguese (Brazil)
· Portuguese (Portugal)
· Romanian
· Russian
· Serbian (Latin)
· Slovak
· Slovenian
· Spanish
· Swedish
· Thai
· Turkish
· Ukrainian
Before you install language packs on your front-end Web servers, you must do the following:
· Install the necessary language files on your front-end Web servers.
· Install Office SharePoint Server 2007 on each of your front-end Web servers.
· Run the SharePoint Products and Technologies Configuration Wizard on each of your front-end Web servers.
Most language files are installed by default on the Microsoft Windows Server 2003 operating system. However, you must install supplemental language files for East Asian languages and languages that use complex script or require right-to-left orientations. Below are the steps to install the supplemental language support.

Installing Supplemental language support
Supplemental language support for complex script and right-to-left languages needs to be installed if you are installing the language pack for the following languages:
· Arabic
· Armenian
· Georgian
· Hebrew
· Indic
· Thai
· Vietnamese
Supplemental language support for East Asian languages needs to be installed if you are installing the language pack for the following languages:
· Chinese
· Japanese
· Korean
Following are the procedures to install supplemental language support on Windows 2003 server for
· Complex script and right-to-left languages
· East Asian languages

1. Go to Control Panel from the Start menu
2. Double click on Regional and Language Options in the control panel

3. Select the Languages tab in the Regional and Language Options window


4. Under Supplemental language support, Select the appropriate check boxes against :
· Install files for complex script and right-to-left languages
· Install files for East Asian languages

5. Click the OK button.
You will be prompted to insert the Windows 2003 install CD.
After installing the files, restart the server when prompted.


Downloading and installing the language pack
You download the language packs using the following URLs
http://www.microsoft.com/downloads/details.aspx?familyid=318D8562-58BD-4329-B1F6-F1941A38BC7F&displaylang=en (SharePoint Server 2007 x64 bit)
http://www.microsoft.com/downloads/details.aspx?familyid=2447426b-8689-4768-bff0-cbb511599a45&displaylang=en&tm (SharePoint Server 2007 x32 bit)

In the download page select the appropriate language from the drop-down and click on the change button. After the page refreshes, click on the Download button to get the language pack.
Once the download is complete use a tool like ISOBuster to extract the contents. Once extracted, click on setup.exe to install the language pack after accepting the license agreement.
After completing the language pack setup you must rerun the SharePoint Products and Technologies Configuration wizard using the default settings. If you do not run the SharePoint Products and Technologies Configuration Wizard after you install a language pack, the language pack will not be installed properly.


Once the download is complete use a tool like ISOBuster to extract the contents. Once extracted, click on setup.exe to install the language pack after accepting the license agreement.After completing the language pack setup you must rerun the SharePoint Products and Technologies Configuration wizard using the default settings. If you do not run the SharePoint Products and Technologies Configuration Wizard after you install a language pack, the language pack will not be installed properly.

Creating a Site collection using the installed language pack
1. In Central Administration click on Create Site Collection link in the Application Management tab.In the create site collection page go to Template Selection section and select a language from the drop-down.



3. Once you select the language, the template names and description in the Template selection section will be displayed in the selected language. Select the template to use for the site collection and click ok.


4. The new site collection will be rendered using the selected language.

Friday, February 29, 2008

How to Enumerate the Shared Service Providers using SharePoint Object Model.

SharePoint Object Model does not expose the SharedResourceProviders collection as a public property. It is a non-public member of the ServerFarm object.

This said, we can still access the SharedResourceProviders property using the magic of "reflection". Below is the code to enumerate the Shared service propviders.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.Office.Server;

namespace Velavan.EnumSSPs
{
class Program
{
static void Main(string[] args)
{
EnumSharedServiceProviders();
}

private static void EnumSharedServiceProviders()
{
//Get the default server context
ServerContext sc = ServerContext.Default;

//Use reflection to get the m_ServerFarm Property
object serverFarm = sc.GetType().GetField("m_ServerFarm", BindingFlags.Instance BindingFlags.NonPublic).GetValue(sc);

//Use reflection to get the ShareResourceProviders collection
object sharedResourceProviders = serverFarm.GetType().GetProperty("SharedResourceProviders").GetValue(serverFarm, null);

//Enumerate all Shared Service providers
foreach (object sharedResourceProvider in sharedResourceProviders as IEnumerable)
{
Console.WriteLine("SSP - " +
sharedResourceProvider.GetType().GetProperty("Name").GetValue(sharedResourceProvider, null) as string);
}
}
}
}


make sure you add the references to
Microsoft.Office.Server.dll and
Microsoft.SharePoint.dll

Friday, June 15, 2007

Conversion from ASP.NET 1.1 to ASP.NET 2.0

ERROR
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS

Solution
Remove web.config from the backup folder created by Visual Studio.

Changing the Configuration database server in MOSS 2007

To change the configration database server in MOSS 2007 do the following
1. Shutdown the servers in the farm
2. Copy all the configuration database to the new database server
3. Turn on the servers and execute stsadm -o renameserver -olservername -newservername
4. You should reboot the server
5. Execute these steps on all the servers in the farm

Thursday, March 30, 2006

Parsing HTML.

In my recent project, I had a requirement to parse HTML documents. I was debating between using the web browser control which gives the HTML as a DOM and HttpWebRequest where I had to do all the parsing. A quick search on google took me to Html Agility Pack.

This is a HTML parser that allows you to parse "out of the web" HTML files and creates a DOM. This supports plain XPATH or XSLT.

Difference between Directory.GetFiles and windows explorer sorting numeric files.

The .NET Sytem.IO.Directory.GetFiles class returns the files sorted in alphabetic order whereas Windows Explorer sorts them in numeric order. For e.g








In Directory.GetFiles In Explorer
04.html 1.html
040.html 3.html
05.html 04.html
1.html 05.html
10.html 10.html
3.html 040.html

If you have access to the source then you can pass the string array returned from Directory.GetFiles to Array's Sort(Array, IComparer) method to sort it in numeric order.

If you do not have access to the source then you can modify the registry as below for explorer to sort using the alphabetic order. Restart explorer for the changes to take effect.

For current user:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

For the System:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

Value Name: NoStrCmpLogical
Type: REG_DWORD
Value:1

Disclaimer: Modifying the registry can cause serious problems that may require you to reinstall your operating system. Use the information provided at your own risk.

Tuesday, November 22, 2005

Hidden MessageBox and VSTO

When trying to display a Message box from VSTO code, the message box is some times hidden in the background. MessageBox's Show method takes a "owner" parameter of type IWin32Window, this makes the Message box to be displayed in front of the IWin32Window passed. Below is a code snippet from gotdotnet site to get the IWin32Window of the foreground window.


// Stephen Toub
// stoub@microsoft.com
//
// ActiveWindow.cs v1.0.0
// 8/28/02
//
// Implements IWin32Window where Handle returns the handle of the system's foreground window.
// Can be used with MessageBox to display the box in front of the active window, such as:
// MessageBox.Show(ActiveWindow.Active, "Hello, World!");
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Toub.Windows.Forms
{
/// Used to get an IWin32Window for the active window.
public class ActiveWindow : IWin32Window
{
#region Private Members
/// Static instance to use for factory pattern.
private static ActiveWindow _window = new ActiveWindow();
#endregion
#region Construction
/// Prevent external instantiation.
private ActiveWindow() {}
#endregion
#region Public Properties
/// Gets an IWin32Window for the active window.
public static IWin32Window Active { get { return _window; } }
#endregion
#region Private Functions
/// Finds the frontmost window using the Win32 API.
[DllImport("user32.dll")]
private static extern int GetForegroundWindow();
/// Gets a handle to the active window.
System.IntPtr IWin32Window.Handle
{
get { return new System.IntPtr(GetForegroundWindow()); }
}
#endregion
}
}

Tuesday, November 08, 2005

How to Retrieve XML data from MS Word form fields using VSTO.

MS word has this cool feature where you can attach an XML schema to the document and tag the form fields with XML elements in the schema. When you save the document as XML, the form field values are stored as XML data. Unfortunately saving XML data does not work with Check box and Drop down form fields. So, if you need to save the data from Check box and Drop down form fields you have to walk through all the XML nodes and retrive the data. Below is a C# code snippet to walk through the XML nodes and write it as XML.


private string BuildWordDocumentXmlData(XMLNode xmlNode)
{
object oRef = 1;
object missing = Missing.Value;
Range range;
StringBuilder xmlString = new StringBuilder();
xmlString.Append("");
if(!xmlNode.HasChildNodes)
{
xmlString.Append("<" + xmlNode.BaseName + ">");
range = xmlNode.Range;
if (range.FormFields.Count > 0)
{
FormField formField = range.FormFields.get_Item(ref oRef);
if (formField.Type == WdFieldType.wdFieldFormCheckBox)
{
if (formField.Result.CompareTo("1") == 0)
{
xmlString.Append("true");
}
else
{
xmlString.Append("false");
}
}
else if (formField.Type == WdFieldType.wdFieldFormTextInput)
{
if (formField.Result != null)
{
xmlString.Append(formField.Result);
}
}
}
else
{
xmlString.Append(xmlNode.Text);
}
xmlString.Append("");
}
else
{
string returnString;
xmlString.Append("<" + xmlNode.BaseName + ">\n");
foreach(XMLNode childXmlNode in xmlNode.ChildNodes)
{
returnString = BuildWordDocumentXmlData(childXmlNode);
xmlString.Append(returnString + "\n");
}
xmlString.Append("");
}
return xmlString.ToString();
}
public void SaveWordDocumentXmlData(string xmlFileName)
{
Application.ScreenUpdating = false;
string xml;
try
{
xml = BuildWordDocumentXmlData(ActiveDocument.XMLNodes[1]);
using (StreamWriter sw = new StreamWriter(xmlFileName))
{
sw.Write(xml);
}
}
catch(Exception exp)
{
Trace.WriteLine(exp.ToString());
}
Application.ScreenUpdating = true;
}

Friday, October 21, 2005

My 1st blog on Blogger.

This is my first blog here.