lunes, 28 de enero de 2013

Workflow en Project Server 2010 ¿Valores predeterminados en campos de empresa en una PDP?

Cuando trabajamos con PDPs en Project Server 2010, no es sencillo establecer un valor predeterminado para un campo de empresa de tipo obligatorio. Si bien la configuración de campos de empresa permite establecer valores predeterminados, estos funcionan en forma correcta en Project Pro, pero no en la forma esperada dentro de PWA.
Es por ello que en este breve artículo vamos a explicar como manejar los valores predeterminados utilizando un poco de JavaScript. El enfoque de trabajo es el siguiente:

  • Utilizar JavaScript para configurar el valor predeterminado de los campos, sólo si se trata de la PDP usada en una creación de proyecto.
  • Utilizar JavaScript para ocultar dichos campos.
Separaremos el código en dos archivos:
  • Un archivo con el contenido de la CEWP que se insertará en la PDP, debajo de los campos de empresa. .
  • Un archivo de constantes con los guids y demás valores de cada campo.

El código del archivo de contantes

/* Valor predeterminado para el campo Stage en la PDP Request */

STAGE_ID = "ctl00_m_g_80e4b936_45c6_442d_b8de_a93ac30efea1_ctl00_pfp_Repeater_ctl06_idCF_976b5670-7e3b-407d-ad53-1d0343fc3f0c";
STAGE_GUID = "966707bd-8f55-4f0e-97d1-8c94256c55a3";
STAGE_TEXTO = "Planned";

/* Valor predeterminado para el campo Program en la PDP Request */

PROGRAM_ID = "ctl00_m_g_80e4b936_45c6_442d_b8de_a93ac30efea1_ctl00_pfp_Repeater_ctl08_idCF_38852eb9-5126-4fb2-b1ef-45e6edfeb116";
PROGRAM_GUID = "d74da6ee-48ce-491a-ad6e-416da8c99ab2";
PROGRAM_TEXTO = "Yes";

El código de la CEWP 

<script src="/PWA/Internal/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="/PWA/Internal/constantes_workflow.js" type="text/javascript"></script>

<script type="text/javascript">

 $(document).ready(function() { 

     predeterminar_campo (STAGE_ID, STAGE_GUID, STAGE_TEXTO);
     predeterminar_campo (PROGRAM_ID, PROGRAM_GUID, PROGRAM_TEXTO);

   });


function predeterminar_campo ( id_campo, guid_valor, texto_valor ) {

     if ( workflow_url_param ( "NewProject" ) == "yes" ) {
    
         // Valor del campo
         $('#'+id_campo).attr("value",texto_valor);

         // ID del valor del campo
        $('#'+id_campo).attr("LTValue",guid_valor);
     
         }

     // Oculto la fila de la tabla que contiene el campo
    $('#'+id_campo).parent().parent().parent().parent().parent().parent().css("display","none");

}

function workflow_url_param ( name ){  
 name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
 var regexS = "[\\?&]"+name+"=([^&#]*)"; 
 var regex = new RegExp( regexS ); 
 var results = regex.exec( window.location.href ); 
 if( results == null ) 
   return "";
  else 
   return results[1];
}

</script>

Opción 2

Una segunda opción que he probado y me ha dado buenos (mejores) resultados consiste en buscar el atributo title en lugar del id. Los cambios con:

En el archivo de constantes:


STAGE_ID = "Stage";


En la CEWP:


$('input[title="'+id_campo+'"]').attr("value",texto_valor);
$('input[title="'+id_campo+'"]').attr("LTValue",guid_valor);
$('input[title="'+id_campo+'"]').parent().parent().parent().parent().parent().parent().css("display","none");


Conclusión

Esta ha sido una forma de resolver el inconveniente de los valores predeterminados en las PDPs de flujos de trabajo en Project Server 2010, utilizando código de cliente JavaScript. Espero les haya resultado útil.

0 comentarios:

Publicar un comentario en la entrada