WebCast: Integrating Project Server 2003 and SPS 2003

On Tuesday, May 3, 2005 at 10:00AM Pacific time there will be web cast on integrating Project Server 2003 and SPS 2003.


This Support WebCast presents the integration points between Microsoft Project Server 2003 and Microsoft SharePoint Portal Server 2003. The WebCast reviews the integration between Project Server 2003 and SharePoint technologies as they are installed the first time. The session also discusses several extensibility scenarios. These include indexing and searching across all Project Server Web sites and using the Project 2003 Web parts in a portal page”


For more information go to:


http://support.microsoft.com/default.aspx?kbid=896711

Automatically running a program after creating a site

For those who have jumped into the mysteries of creating site templates without SharePoint, here is a little tip to execute code after the user created a site based on the template.  I used this trick to automatically grant anonymous access to a site that used a public facing template.


Inside the <Configuration> element in ONET.XML (located in the XML folder for your template definition), add a new element called <ExecuteUrl>.  Within this element add an attribue called “Url” that defines the URL that is called following instantiation of the site definition.   Granted this will usually point to an ASPX page but if  the page is blank and you call code in the Page_Load event then you can perform the processing you need.   Just remember to redirect back to the home page of your site when you are finished.  I used:


SPWeb thisWeb = SPControl.GetContextWeb(Context);
Response.Redirect (thisWeb.Url);


Here is what my <Configuration> element looks like (more or less).  The ExecuteUrl element is in red.


<Configuration ID=”1″ Name=”Public”>
<Lists>
<List Title=”Shared Documents” Url=”Shared Documents” QuickLaunchUrl=”Shared Documents/Forms/AllItems.aspx” Type=”101″/>

<List Title=”List Template Gallery” Type=”114″ Url=”_catalogs/lt” RootWebOnly=”TRUE”/>
</Lists>
<Modules>
<Module Name=”Public”/>
<Module Name=”WebPartPopulation”/>
</Modules>
<ExecuteUrl Url=”_layouts/1033/EnableAnon.aspx”/>
</Configuration>


 

Careful changing the SharePoint Administrator Group Account

If you change the SharePoint Administrator Group Account and the account you use to crawl the default content sources is not part of this group, your crawls will fail with an Access Denied error.    When you change the Group Account you do not get any error messages but if you have changed this account and then change your Default Content Access Account you will get an error if the new account is not part of this group.

Changing the way Add Users works in a WSS Site

If you have both SPS and WSS you may have noticed that when you add users in a SPS area you can do lookups into AD while in a WSS Site you have to use your address book (which in my opinion is less than useful).   However, if you have both SPS and WSS installed you can modify WSS so that you can do AD lookups also.


First, make a copy of AclInv.aspx located in the


C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\LAYOUTS\1033


folder (make changes to the directory as needed).  Then make the changes listed below:


1) Inside the <SCRIPT language=”JavaScript”> tag towards the top of the file add:


var L_ADLookup_TXT = “Select Users and Groups”;


2) After the last <script> … </script> block add:


<script language=”javascript”>
 function UpdatePickerSelection(LabelSelectedUserID, rv) {
 
 if (rv != null && 3 == rv.length && 1 == rv[2])
 {
  var lbSelectedUser = document.all.item(LabelSelectedUserID);


  var fReplace = false;


  if(rv[0] != null && rv[0].length > 0)
  { 
   if (fReplace)
   {
    lbSelectedUser.innerText = rv[0]; 
   }
   else
   {
    text = lbSelectedUser.innerText;
    if (text == L_DefaultEditText_TXT)
    {
     text=””;
    }
    if (text.length>0)
    {
     lastCharacter = text.charAt(text.length – 1);
     if (lastCharacter != ‘,’ && lastCharacter != ‘;’)
     {
      text += ‘,’;
     }
    }


    lbSelectedUser.innerText = text + rv[0];
   }
  }
  else
  {
   if (fReplace)
   {
    lbSelectedUser.innerText = ”;
   }
  }
 }
}


function UserPickerPopupDialog(args, sDialogUrl, sFeatures)
{
 var rv = window.showModalDialog(sDialogUrl, args, sFeatures);
 if (rv != null && 3 == rv.length && 1 == rv[2])
 {
  document.all.item(‘users_AccountNames’).value = rv[0];
  document.all.item(‘users_SIDs’).value = rv[1];
  document.all.item(‘users_Change_’).value = ‘Changed’;
 }
 return rv;
}


function UserPickerPopup_users()
{
 var sPopupUrl = ‘\/_layouts\/1033\/UserPicker.aspx?NameFormat=NT4&SelectionMode=True&&AccountType=User%2cSecGroup&TitleLocId=CategorySecurityAdd_NewRoleMembers_PeoplePicker_Title_Text&DescriptionLocId=CategorySecurityAdd_NewRoleMembers_PeoplePicker_Description_Text’;
 var sDialogUrl = ‘\/_layouts\/1033\/PickerContainer.aspx?TitleLocId=CategorySecurityAdd_NewRoleMembers_PeoplePicker_Title_Text’;
 var sSelectedUser = document.all.item(‘users_AccountNames’).value;
 var sFeatures=’resizable: yes; status: no; scroll: no; help: no; dialogWidth : 536pt; dialogHeight : 395pt;’;
 var args = new Array(sSelectedUser, sPopupUrl);
 var rv=UserPickerPopupDialog(args, sDialogUrl, sFeatures);
 return rv;             

</script>


3) Look for these lines     


  <script language=JavaScript>


  if (browseris.ie4up && browseris.win32)       


Before the <script> line add the following lines:


   <input type=”hidden” name=”users_AccountNames” value=”” />
 <input type=”hidden” name=”users_SIDs” value=”” />
 <input type=”hidden” name=”users_Change_” value=”” />


4) Finally replace the line


  document.write(“<input type=button value=’” + L_AddressBook_TXT + “‘ id=’AddrBookID’ onclick=’javascript:AddrBook()’><br>”);  


 with


  document.write(“<input type=button value=’” + L_ADLookup_TXT + “‘ id=’AddrBookID’ onclick=\”var rv=UserPickerPopup_users(); UpdatePickerSelection(‘users’, rv); return false;\”><br>”);


 


Save the file, restart IIS, and you should be good to go!

Weirdest SharePoint error I have seen

We ran into the case this morning where SPS would not load (gives an error about a web part error) but WSS would.   Turns out what you need to do is open web.config, copy the text and save it into a new text file which you then use to overwrite the original web.config!!!!    Thanks to Mike Linster for pointing this one out to me

Online web part gallery and performance

If you are not already aware, the Online Web Part Gallery (one of the choices when you browse for new web parts) is a huge performance hit.   On a system that I am currently working on, the Browse selection page would take almost 30 seconds to come up with the gallery enabled.   When I deactivated the gallery, it took less than 2!


To turn off the Online web part gallery, start the SharePoint Central Administration page, select “configure virtual server settings”, select your virtual server, select “Manage security settings for Web Part Pages” and then select “Disable” under the Online Web Part Gallery section.