Thursday, April 4, 2013

PowerShell script to add work email to the list fields for the author

The Author (Created By) field is actually an lookup field to the hidden User Information list.

If you need to add the work email of the Author (Created By field) user to a specific list it can be done by adding a dependent lookup field for the Author field:
$site = get-spsite "site url here";
$list = $site.RootWeb.Lists["list name"];

$createdByEmailGuid = $web.Fields.AddDependentLookup("Work e-mail", [Microsoft.SharePoint.SPBuiltInFieldId]::Author);
$createdByEmail = $web.Fields.GetFieldByInternalName($createdByEmailGuid);
$createdByEmail.Description = "Work e-mail address of the Author.";
$createdByEmail.LookupField = $web.Fields[[Microsoft.SharePoint.SPBuiltInFieldId]::EMail].InternalName;
$createdByEmail.Update();
$web.Update();

$list.Fields.Add($createdByEmail);
$list.Update();
If additional fields are needed the same method can be applied. Here is a list of fields that can be added from the User Information list:

- Work e-mail
- Mobile phone
- About me
- Picture
- Department
- Title
- SIP Address
- First name
- Last name
- Work phone
- User name
- Web site
- Ask Me About
- Office


SharePoint 2010 retrieving lookup values using ECMAScript

Script to retrieve single and multiple value lookup fields values using SharePoint 2010 Client Object Model for JavaScript (ECMAScript):


var listName = "list name here";
var listItemId = 23; // id here

function retrieveLookupValues() {
    var clientContext = new SP.ClientContext.get_current();
    var oList = clientContext.get_web().get_lists().getByTitle(listName);
    var selectedItems = SP.ListOperation.Selection.getSelectedItems();
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml("< View >< Query >< Where >< Eq >< FieldRef Name='ID' / >< Value Type='Counter'>" + listItemId + "< /Value>< /Eq>< /Where>< /Query>< RowLimit>100< /RowLimit>< /View>");
    this.collListItem = oList.getItems(camlQuery);
    clientContext.load(collListItem, 'Include(CustomSingelLookupFld, CustomMultilLookupFld)');
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {
 var listInfo = "";
    var listItemEnumerator = collListItem.getEnumerator();

    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        // get single value LookupField:
        var oCustomSingelLookupFld = oListItem.get_item("CustomSingelLookupFld");
  listInfo += "oCustomSingelLookupFld.Value = " + oCustomSingelLookupFld.get_lookupValue() + " \t oCustomSingelLookupFld.Id = " + oCustomSingelLookupFld.get_lookupId();
  // get multiple value LookupField:
        var oCustomMultilLookupFld = oListItem.get_item("CustomMultilLookupFld");
  for(var ix = 0; ix < oCustomMultilLookupFld.length; ix++){
   listInfo += "oCustomSingelLookupFld[" + ix + "].Value = " + oCustomMultilLookupFld[ix].get_lookupValue() + " \t oCustomSingelLookupFld[" + ix + "].Id = " + oCustomMultilLookupFld[ix].get_lookupId();
  }
    }
 alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message());
}