Thursday, May 26, 2011

Create a TFS Field that contains Assigned Date

The default TFS workitems does not have a field that records last “Assigned To” date. You can easily create a new field to record this date

Start by creating a new Field Definition

AssignedToDateField_Create

Create a new rule of type WHENCHANGED

SNAGHTML8f39e02

Select Field System.AssignedTo

WhenChanged

Create a new rule of type SERVERDEFAULT

SNAGHTML8f5a976

Select from “clock”

SNAGHTML8f63fbc

The field Assigned Date is now created and will be updated when the workitem is assigned or re-assigned.

If you prefer to modify the XML directly here is the snippet:

 <FIELD name="Assigned Date" refname="NTS.AssignedDate" type="DateTime" reportable="dimension">
        <WHENCHANGED field="System.AssignedTo">
          <SERVERDEFAULT from="clock" />
        </WHENCHANGED>
      </FIELD
>

Tuesday, May 10, 2011

Workflow - Use url when creating a link in workflow steps

This may be obvious, but if you choose text instead of url in a link that you create in SharePoint Designer you can get an invalid link since the text version also includes the title

Ex: “http://mysite.mydom.com, Link Title”

In my case a link already existed in a SharePoint ListItem as a valid URL. But when added as a link in a mail the url got the trailing comma and title. Which in turn gave the webserver an invalid parameter.

The link that should have been:

…/wi.aspx?pcguid=d6d9eacb-0d67-4b19-ad62-626ab5cc1cf0&id=916

became

…/wi.aspx?pcguid=d6d9eacb-0d67-4b19-ad62-626ab5cc1cf0&id=916,%20Click%20to%20open%20the%20WorkItem%20in%20TFS

and the TFS Web did not like ID’s with comma and text…

Url

Friday, May 6, 2011

Remember to modify default.aspx after enabling “Wiki Page Home Page”

When enabling this feature you are modifying the default homepage of your site. The homepage will go from …/Default.aspx to …/SitePages/Home.aspx

When users have added bookmarks using the default.aspx homepage the users will still use your old homepage.

Quickfix edit the default.aspx file using SharePoint Designer and make a redirect to the new page. Or just add a Content editor and insert a script or descriptive text to update bookmarks

Monday, April 18, 2011

Unable to restore Oracle VirtualBox virtual machine

Note: The same issue also occurs when VirtualBox is upgraded to version 4.0.6 r71416. when you try to start any virtual machine

Failed to open a session for the virtual machine <your machine> Implementation of the USB 2.0 controller not found!
Because the USB 2.0 controller state is part of the saved VM state, the VM cannot be started. To fix this problem, either install the 'Oracle VM VirtualBox Extension Pack' or disable USB 2.0 support in the VM settings (VERR_NOT_FOUND).
Unknown error creating VM (VERR_NOT_FOUND).

Today this message appeared when resuming the development machine.. Oracle VirtualBox v4.04

VirtualBox_Error

Especially interesting because the server was paused during a windows update (Not normally something that I do, but my host ran out of resources)

This is a verified bug, and can be easily fixed!

Locate your machine xml files (In windows they are stored in C:\Users\<your username>\.VirtualBox\Machines\<your machine>

STOP VirtualBox Manager

Open the file and locate the line:

 <USBController enabled="true" enabledEhci="false"/>


Set enabledEhci to false



Start VirtualBox Manager, and resume the virtual machine.



VirtualBox_Error_Fixed



See VirtualBox.org for more information (Ticket #8182)

Wednesday, March 9, 2011

Keep Dropdown items attributes during async. postback

If you add custom attributes to ListItems such as color etc. the attributes are lost when a partial postback occurs. The attributes are not kept in ViewState.

Dropdown

One solution is to re-apply the styles when a partial postback occurs:

if (Page.IsPostBack)
{
    

if (ScriptManager.GetCurrent(this
.Page).IsInAsyncPostBack)
     {
        
foreach (ListItem Item in
Drp_Tasks.Items)
         {
            
if (Item.Value.Contains("WSS Task"
))
                 Item.Attributes.Add(
"Style", "color:blue"
);
            
else if (Item.Value.Contains("Timesheet Task"
))
                 Item.Attributes.Add(
"Style", "color:green");
         }
     } }


Another solution is to create a new ListItem class that keeps the attributes in ViewState.

Thursday, March 3, 2011

CAML Query and User Groups – Membership

While creating a Timesheet webpart I needed to list a users tasks in a task list. The tip from Martin Hatch gave the basics. and the query executed fine in U2U CAML Query Builder (2007 version works fine for 2010)

<Where>
  <Or>
    <Eq>
      <FieldRef Name='AssignedTo' />
      <Value Type='UserMulti'>User Display Name</Value>
    </Eq>
    <Membership Type='CurrentUserGroups'>
      <FieldRef Name='AssignedTo' />
    </Membership>
  </Or>
</Where>


This query will return users in groups, and multiple users specified in the field:


Users and Groups


Note:



The Membership attribute checks current user, so do not run the query with elevated rights (SPSecurity.RunWithElevatedPrivileges(…)



Unless you assign tasks to your application pool the query will not return items based on group assignments

Wednesday, January 26, 2011

SPFieldUser is not persistent during postback

If you are using a custom listform and refering to a field of type SPFieldUser. The field tend to loose the content (users) during postback. Some times not easily detected because it will keep the viewstate sometimes.

This has been seen on versions 2007 and 2010.

The fix is relatively simple, by putting the contents into the viewstate in code.

Example:

In the listform.aspx

<SharePoint:FormField runat="server" id="Fld_Present" ControlMode="Edit" FieldName="Present" />

Snippets from codebehind

protected FormField Fld_Present; // Define the field in codebehind

// Define a private String for holding the value during postbacks

 

private String Present

{

    get

    {

        object obj = ViewState["Present"];

        return (obj == null) ? String.Empty : (String)obj;

    }

    set

    {

        ViewState["Present"] = value;

    }

}

 

protected override void CreateChildControls()

        {

            base.CreateChildControls();

 

            if (Fld_Attendees.Value.ToString() != "")

                this.Attendees = Fld_Attendees.Value.ToString();

            else

                Fld_Attendees.Value = new SPFieldUserValueCollection(SPContext.Current.Web, this.Attendees);

 

To keep values when the user field is edited, also add some code before postbacks that is defined in codebehind:

 

if (Fld_Attendees.Value.ToString() != "")

                    this.Attendees = Fld_Attendees.Value.ToString();

 

Thursday, January 20, 2011

Convert ListItem ID to UniqueID

This is just one way of getting from the ListItem ID (Not Index) to the GUID UniqueID

In SharePoint 2010 you can use SPList.GetItemByIdSelectedFields(…) or SPList.GetItemByIdAllFields(…)

Example:

GetItemByIdSelectedFields(Int32.Parse(this.ListItemID), new string[] { "UniqueId" });

If you don’t have 2010 you can always retrieve the ListItem with a CAML Query…