Sharepoint–Valores Default, Query Strings, …

Olá a todos.

O post de hoje é sobre Sharepoint (Wss 3.0 ou Moss 2007).
Que desenvolvedor nunca se deparou com este desafio? Preencher campos num formulário de cadastro de item em uma lista com valores obtidos por QueryString? (página NEWFORM.ASPX)

Felizmente, encontrei um post no blog do time de Sharepoint Designer. A idéia é fazer um parse no URL, captura os valores e passar para os campos.

Aqui está tudo explicadinho:

Using Javascript to Manipulate a List Form Field
http://blogs.msdn.com/b/sharepointdesigner/archive/2007/06/13/using-javascript-to-manipulate-a-list-form-field.aspx

Resumo:

  • A rotina principal é "getTagFromIdentifier": ela localiza o HTML gerado por um controle Sharepoint (FormField, p.e.)
  • A função "fillDefaultValues" analisa o URL, obtém o QueryString e define o valor padrão dos campos
  • Finalmente, vinculamos a rotina ao evento Page_Load do corpo (BODY)

Tudo junto agora:

<script type="text/javascript">

// 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>>"]);
}

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;
}

</script>
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s