Intelliem Community
Home of the Windows Administration Resource Kit
Work SMART with Intelliem

Prepopulating Fields in SharePoint List Pages

See http://blogs.msdn.com/sharepointdesigner/archive/2007/06/13/using-javascript-to-manipulate-a-list-form-field.aspx

The code I’ve assembled over time:

<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<script type="text/javascript">

// http://blogs.msdn.com/sharepointdesigner/archive/2007/06/13/using-javascript-to-manipulate-a-list-form-field.aspx

// This javascript sets the default value of a lookup field identified
// by <<FIELD DISPLAY NAME>> to the value stored in the querysting variable
// identified by <<QUERYSTRING VARIABLE NAME>>

// Customize this javascript by replacing <<FIELD DISPLAY NAME>> and
// <<QUERYSTRING VARIABLE NAME>> with appropriate values.
// Then just paste it into NewForm.aspx inside PlaceHolderMain

_spBodyOnLoadFunctionNames.push("fillDefaultValues");

function fillDefaultValues() {
  var qs = location.search.substring(1, location.search.length);
  var args = qs.split("&");
  var vals = new Object();
  for (var i=0; i < args.length; i++) {
    var nameVal = args[i].split("=");
    var temp = unescape(nameVal[1]).split('+');
    nameVal[1] = temp.join(' ');
    vals[nameVal[0]] = nameVal[1];
  } 
  //setLookupFromFieldName("<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);
  setLookupFromFieldName("Test",vals["ID"]);
  fillPeoplePickerWithCurrentUser("Discovered_x0020_By");
}
function setLookupFromFieldName(fieldName, value) {
  if (value == undefined) return;
  var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);
// if theSelect is null, it means that the target list has more than
// 20 items, and the Lookup is being rendered with an input element
  if (theSelect == null) {
    var theInput = getTagFromIdentifierAndTitle("input","",fieldName);
    ShowDropdown(theInput.id); //this function is provided by SharePoint
    var opt=document.getElementById(theInput.opt);
    setSelectedOption(opt, value);
    OptLoseFocus(opt); //this function is provided by SharePoint
  } else {
    setSelectedOption(theSelect, value);
  }
}
function setSelectedOption(select, value) {
  var opts = select.options;
  var l = opts.length;
  if (select == null) return;
  for (var i=0; i < l; i++) {
    if (opts[i].value == value) {
      select.selectedIndex = i;
      return true;
    }
  }
  return false;
}
function getTagFromIdentifierAndTitle(tagName, identifier, title) {
  var len = identifier.length;
  var tags = document.getElementsByTagName(tagName);
  for (var i=0; i < tags.length; i++) {
    var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
     return tags[i];
    }
  }
  return null;
}

function setChoiceFromFieldName(fieldName, value) {
if (value == undefined) return;
var theSelect = getTagFromIdentifierAndTitle("select","DropDownChoice",fieldName);
setSelectedOption_ByText(theSelect, value);
}

function setDateFromFieldName(fieldName, value) {
if (value == undefined) return;
var theInput = getTagFromIdentifierAndTitle("input","DateTimeFieldDate",fieldName);
theInput.value=value
}

// heres the mod that was posted earlier by lyndon
// for lookup controls and choice controls to filter by the text values

function setSelectedOption_ByText(select, value) {
var opts = select.options;
var l = opts.length;
if (select == null) return;
for (var i=0; i < l; i++) {
   if (opts[i].innerText == value) {
     select.selectedIndex = i;
     return true;
   }
}
return false;
}

// PEOPLE PICKER ROUTINES
// http://blogs.vbcity.com/skullcrusher/archive/2008/04/10/9024.aspx

function fillPeoplePickerWithCurrentUser(pickerName)
  {
  //get the current user from the welcome menu
  var currentUser = getCurrentUser();

  //check to see that we've got it
  if(currentUser != null)
  {
  //get the people pickers input div
  var pp = getPickerInputElement(pickerName);
  //set it to the current user if we've found it
  if(pp != null)
    pp.innerHTML = currentUser;
  }
}

function getCurrentUser()
{
  var tags = document.getElementsByTagName('a');
  for (var i=0; i < tags.length; i++)
  {
    if(tags[i].innerText.substr(0,7) == 'Welcome')
    {
      return tags[i].innerText.substr(8,tags[i].innerText.length);
    }
  }
}

function getPickerInputElement(fieldsInternalName)
{
  var result  = "";
  var divs = document.getElementsByTagName("DIV");
  for(var i=0; i < divs.length ; i++)
  {
    if(divs[i].id=="WebPartWPQ2")
    {
      var tds = divs[i].getElementsByTagName("TD");
      for(var j=0; j < tds.length; j++)
      {
        var cellHTML = tds[j].innerHTML;
        if(cellHTML.indexOf('FieldInternalName="' + fieldsInternalName + '"') >= 0)
        {
          var innerDivs = tds[j].getElementsByTagName("DIV");
          for(var k=0; k < innerDivs .length; k++)
          {
            if(innerDivs[k].id.indexOf("UserField_upLevelDiv") > 0)
            {
              result = innerDivs[k];
              break;
            }
          }
        }
      }
    }
  }
  return result;
}

</script>


Posted Oct 21 2008, 01:05 AM by danholme
Powered by Community Server (Non-Commercial Edition), by Telligent Systems