Wednesday, September 16, 2009

Come see the lovely Anne Marie in Bye Bye Birdie!

Hey Everybody,

Just wanted to let you know that my wonderful Wife, Anne Marie, is going to be performing in Bye Bye Birdie with the Arlington Players. She has a lead role in the production as the character of Rosie Alvarez and has several major song and dance numbers. I would love if you could all make it out. Performance dates and ticket information is below.

Bye Bye Birdie
Performance dates: September 18, 19, 20(m), 25, 26, 27(m), October 2 & 3, 2009
Click here to purchase your tickets online.

Wednesday, September 9, 2009

CRM Asynchronous Process Failure Settings

One of the things I do when setting up a CRM 4.0 server is modify the Recovery settings of the Asynch process. This process tends to have a lot of difficulty recovering if it loses the connection to SQL.

Figure 1


By default the service is set to Restart only on the first failure and the restart time is set to occur after 1 minute (Figure 1). The problem is that it typicaly takes a SQL server longer than one minute to reboot. In order to better ensure that you don't need to restart the service manually I typicaly change the Second failure to Restart the Service and set the Restart service after setting to something between 3 and 5 minutes (Figure 2).


Figure 2


By tweeking these setting you can help reduce the strain on your support folks by not always having to do a manual restart of this service every time they want to install patches on the SQL box.  Also your users won't be sitting there wondering why their workflows are not kicking off.

Tuesday, September 1, 2009

Copy data between rows in the same table

So here was my issue. I needed to copy some <binary data> from one row in a table to another row. I tried using the SQL Server Managment Studio but it does not allow you to copy and past binary information. Instead I used a UPDATE... FROM SQL statement.

Here is an example:

UPDATE LoadTestRun
SET LoadTest = b. LoadTest
FROM LoadTestRun, LoadTestRun b
WHERE LoadTestRun.LoadTestRunID = 4 AND b.LoadTestRunID = 1  

Here is the generic format:

UPDATE table
SET field = b.field
FROM table, table b
WHERE table.PirmaryKeyID = "Copy To ID" AND b.PrimaryKeyID = "Copy From ID"  

Creating a Visual Studio 2008 Results Repository

Learned a very important lesson. If you don't set up a results repository database before running a load test in Visual Studio you won't be able to pull up your reports later.

In this example only one machine was being used for load testing and SQL Express was installed as part of Visual Studio.

To create the results repository database in SQL Express follow the instructions below. If you want additional information or want to know how to create the database in SQL Standard check out Microsoft's instructions at http://msdn.microsoft.com/en-us/library/ms182600.aspx

-Open a command prompt by going to Start -> Run and type in CMD and hit Enter

-Type: cd n:\Program Files\Microsoft Visual Studio 9\Common7\IDE

-Type: SQLCMD /S localhost\sqlexpress /i loadtestresultsrepository.sql

Moving a secondary site collection to a root site collection

I was recently tasked with migrating a secondary site collection to a new SharePoint server and making it the primary site collection.

Here is an example of what a URL looks for for a secondary site collection. http://www.example.com/sites/collection

Here is an example of what a URL looks like for a root site collection: http://www.example.com/

You will notices that secondary site collection are placed by default under /sites/

Completing the Migration:

1. Run a backup of the site collection on the original server using STSADM. Here is the command line I used:

stsadm -o backup -filename "c:\backups\backup.bak" -url http://www.example.com/sites/collection 

2. Copy the backup file to the new server where a new SharePoint instance is created and contains a new root site collection.

3. Run a restore of the site collection on the new server using STSADM. Here is the command line I used.

stsadm -o restore -filename "c:\restores\backup.bak" -url http://www.example.com -overwrite 

Note: you have to use the overwrite parameter since you are restoring over the blank site collection created when SharePoint was set up.

4. Set up the search crawl rules in the Shared Service Provider to Include the new url.

Issue 1:

After the site was migrated I started clicking on things to see what would happen. Thing seemed fine until I clicked on a navigation heading. Highlighted in red below is an example of what I mean by "navigation heading."


For some reason all the navigation heading links still wanted to put /sites/collection/ into the url. I have a lot of sites and really didn't want to hand punch the fixes for all of these links so I created a SQL script to go out and change them. Below is the SQL I used. NOTE: Manipulating SharePoint databases can be bad. Also it's not supported by Microsoft, so if you do it, make a backup... please.

/*
Author: Rick Wilson
Date: 8/27/08
Description: This script was used to update a MOSS 2007 primary site collection that was restored from a secondary level site collection (/sites/collection) backup. For some reason the Headings in the site navigation still wanted to use the '/sites/collection' part of the link. This script finds where that old link is being used and removes that section of it. 

How to Reuse:
-Update MOSS_Content MJMOSS to reflect the name of your content database
-Update the number 17 in the STUFF command to reflect the number of characters you want to remove from the URL in my cast there were 17 character is '/sites/collection'
-Update the '/sites/collection' after the LIKE operator to reflect the part of the url you want to remove. Make sure the keep the %% characters or the LIKE won't work.

*/

USE MOSS_Content_MJMOSS
UPDATE [NavNodes] 
SET [Url] = STUFF([Url],1,17, '') 
WHERE [Url] LIKE '%/sites/collection%' 

Issue 2:

The sites that were created for this collection used the default SharePoint template. The only modification to the sites was the logo in the upper left hand corner which is set under the site settings. There were about 45 sites that had been created and again I wasn't feeling like manually changing the link for every site. Here is the SQL I wrote the change the logo for me.

/*

Author: Rick Wilson
Date: 8/28/08Description: This script was used to update the Site Logo on SharePoint sites.

How to Reuse:
-Update MOSS_Content MJMOSS to reflect the name of your content database.
-Update the url after SET to the new url you have for your logo.
-Update the url after the WHERE operator to the old site logo that was being used.
*/

USE MOSS_Content_MJMOSS
UPDATE [Webs]
SET [SiteLogoURL] = 'http://www.example.com/PublishingImages/YJP.jpg'
WHERE [SiteLogoURL] = 'http://www.oldurl.com/sites/collection/PublishingImages/YJP.jpg' 

Changing the MOSS Service Account.... ughhhhh

Bad Idea... Changing the password of the SharePoint service account used to set up and run everything SharePoint. If you have done this read the next paragraph before touching your keyboard again.

Worse Idea... Trying to change the password back to what it was, but when confronted with domain password policies that do not allow you to change the password to one you have used recently you delete the user. Then you go in and recreate the user and assign him the old password. IMPORTANT: If you go into the Active Directory Users and Computers under the Administrator tools and you are a domain administrator you can reset the password of any user to whatever you want. Domain policies be damned. So if you have not deleted the service account yet just change the password in the way I just described. Then reset your sharepoint machine and be thankful that you don't have to read the rest of this article.

Now lets say you decided to do these two things..... ughhhh. Why doesn't recreating the user in Active Directory and setting it to the old password work. Because each user account is given it's own Security Identifier also called a SID. The SID is unique every time you create a user. That means even though you created the user with the same name the SID is going to be new. Think of it like looking at identical twins, sure they may look exactly the same from far away but get close enough and you start to find some diferences. Why is that important???? Because SharePoint, SQL, and just about every other Microsoft server software identifies users by their SID and not their user name. This is especially true for SharePoint.

Here is how to fix your problems:

-Create a new active directory user. call the user something differenct than what you called you original SharePoint service account. In your naming also try to change it to something that won't confuse you as to which one is the new and which was is the old users.

Example: If you original SharePoint service account was call MOSSService call the new one something like SharePointService

-Add your new user into the Local Administrators security group on the box that is hosting SharePoint.

-Add your new user into the Local Administrators security group on the box that is hosting SQL.

-Open the SQL Server Management Studio and add in your new user as a login. Then assign the following SQL roles to that user: securityadmin, dbcreator

-Now go to the linked KB article and follow the insructions. Make sure that you substitube the new SharePoint service account information for the DomainName\UserName and password fields. http://support.microsoft.com/kb/934838

Still Having Trouble?

In my specific instance of this happening I still received the "Unknown Error" message from SharePoint when trying to access the site. So here is what I had to do inaddition to everything above.

-Log into the SharePoint machine using your new service account.

-Hope you have a recent STSADM backup of the site.

-Complete an STSADM restore of the site.

stsadm -o restore -url https://www.something.com -file C:\Temp\Backup.bak -overwrite 

-Run the following command you ran previously in the KB article:

stsadm -o updatefarmcredentials -userlogin DomainName\UserName -password NewPassword 

-Reset IIS by typing this into the command promp:

iisreset /noforce 

-Run a second command that you ran previously in the KB article:

stsadm -o updateaccountpassword -userlogin DomainName\UserName -password NewPassword -noadmin 

-Open the IIS (Internet Information Services) utility from the Administrator tools and ensure that all the Application Pools have the correct user assigned. In this case our new user was called SharePointService. If you still see the old user there change the application pool.

-Reset IIS by typing this into the command promp:

iisreset /noforce 

If all else fails get in contact with me and expect to pay a lot of money to fix it.

Register Bamboo Calendar Web Part

I recently downloaded the Bamboo Calendar Plus Web Part v2.5. I ran the setup file and installed both the Calendar Plus Web Part and the Bamboo License Manager v2.7. Here are the issues I ran into:

Firstly, you will need to be connected to the internet to get the registration program to correctly activate the web part. Otherwise you will have to activate by e-mail or phone.

Secondly, the Calendar web part .dll is not located in the GAC so I had to go out and search for it. The .dll was located in <System Drive>:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin\Bamboo.CalendarViewExtended.dll. In my case my VirtualDirectory was 80 but for others this may be different. Also if you installed the web part into multiple web application you will also need to activate the product by located the .dll under the other VirtualDirectories folders.

Then after selecting the .ddl file in the License Manager I entered the product code. I accidently entered an incorrect product code. Then came the BLUE SCREEN OF DEATH from Windows Server 2003. I don't know about you but that is scary.

After my server restarted I then ran the License Manger again... this time using the correct product code. I was then able to activate the .dll file located in the multiple web application I installed it in.

Get SPUser Information for the Document Creator

While working on creating a SharePoint 2007 event handler I needed to get the login name for the creator of the document I was trying to update. This is the code I snagged from a blog article which worked.

SPSite oSite = new SPSite("Your site URL");
SPList oList = oSite.OpenWeb().Lists["Your list name"];
SPListItem oItem = oList.GetItemById("Item ID");
string userValue = oItem["Created By"].ToString();
int index = userValue.Index Of(';');
int id = Int32.Parse(userValue.Substring(0, index));
SPUser itemCreator = oSite.OpenWeb().SiteUsers.GetByID(id);  

After using that information I could then call:

itemCreator.LoginName.ToString()  

Which produces the users login name in the following format "DOMAIN\User".

Grouping Articles By Month

After creating a blog site I wanted to show a webpart that grouped the posts by month. To accomplish this I added a calculated field to my Posts list and used the following formula:

 =TEXT(Published,"yyyy - ")&TEXT(Published,"mm")&TEXT(Published," (mmmm")&TEXT(Published," yyyy)")

 


 
 
 
 
 
 
   
 



 
 
 
 
 
 
 
 
 
 
 


You can substitute Published for any other date field within your Posts list. When calculated it displays the date in the following format "2007 - 05 (May 2007)"

After completing the calculated field I added a new Posts webpart to the page. I then modified it to the show the "All Posts" view. Then I modified that view to group by the calculated field I created.

Note: It is important to change the view of the webpart to from "" to "All Items" after you add the webpart. Otherwise when you uncollapse the grouping the titles and other text will have the same formatting as the blog posts. This means your titles will show up HUGE.

Tool to embed HTML object directly into SharePoint content

Check out this cool Rick Text Editor add-in that will allow you to embed html such as YouTube and Flash videos. Finally something on codeplex that works!


http://www.codeplex.com/erte

After installing the tool you will now have a new button on your rich text editor.






Click it and you will get a pop-up window into which you can enter your code.