Compartir vía


Personalizar vistas

Las vistas son consultas guardadas especiales que recuperan datos mediante un filtro específico. También contienen información sobre cómo se deben mostrar los datos de la vista en la aplicación. Las vistas son registros SavedQuery que se pueden crear mediante programación. También puede definirlas como XML, e importarlas con una solución no administrada.

Una vista SavedQuery es diferente de una UserQuery. Una consulta de usuario, llamada una vista guardada en la aplicación, es propiedad de un usuario individual, se puede asignar y compartir con otros usuarios, y pueden verla otros usuarios en función de sus privilegios de acceso. Esto es adecuado para consultas usadas frecuentemente que abarcan tipos de tabla y consultas que realizan agregación. Más información: Consultas guardadas

También puede usar la herramienta de personalización para personalizar vistas. Más información: Creación y edición de vistas

Tipos de vistas

La siguiente tabla muestra los cinco tipos de vistas que son compatibles para la personalización. El código de tipo de una vista se almacenan en el parámetro SavedQuery.QueryType.

Cuando las vistas se definen para una tabla específica, el parámetro SavedQuery.ReturnedTypeCode devuelve el nombre lógico de la tabla.

Tipo de vista Código de tipo Descripción
Pública 0 - Repeticiones: muchas
- Acciones: crear, actualizar, eliminar
- Comentarios: puede establecer una de estas vistas como la vista pública predeterminada estableciendo SavedQuery.IsDefault en true.
Búsqueda avanzada 1 - Repeticiones: 1
- Acciones: solo actualizar.
- Comentarios: de forma predeterminada, esta vista aparece cuando los resultados se muestran en Búsqueda avanzada.
Asociadas 2 - Repeticiones: 1
- Acciones: solo actualizar.
- Comentarios: de forma predeterminada, esta vista se muestra cuando aparece una cuadrícula de registros relacionados en el panel de navegación de un registro.
Búsqueda rápida 4 - Repeticiones: 1
- Acciones: solo actualizar.
- Comentarios: esta vista define las columnas en las que se buscará cuando un usuario busque registros mediante la columna de búsqueda de una vista de lista.
Búsqueda 64 - Repeticiones: 1
- Acciones: solo actualizar.
- Comentarios: esta es la vista predeterminada que se usará para buscar un registro cuando no se haya configurado ninguna otra vista para la columna de búsqueda.

Crear vistas

Para crear una vista pública, especifique las propiedades siguientes:

  • SavedQuery.Name: identificador único de la vista guardada.

  • SavedQuery.ReturnedTypeCode: coincide con el nombre lógico de la tabla.

  • SavedQuery.FetchXml: Vea Consultar datos mediante FetchXml.

  • SavedQuery.LayoutXml: Vea el elemento layoutxml en el esquema de archivo de soluciones de personalización para los elementos válidos.

  • SavedQuery.QueryType: debe ser siempre cero (0).

    El siguiente ejemplo crea una vista pública nueva para la oportunidad:

    System.String layoutXml =
    @"<grid name='resultset' object='3' jump='name' select='1' 
      preview='1' icon='1'>
      <row name='result' id='opportunityid'>
      <cell name='name' width='150' /> 
      <cell name='customerid' width='150' /> 
      <cell name='estimatedclosedate' width='150' /> 
      <cell name='estimatedvalue' width='150' /> 
      <cell name='closeprobability' width='150' /> 
      <cell name='opportunityratingcode' width='150' /> 
      <cell name='opportunitycustomeridcontactcontactid.emailaddress1' 
          width='150' disableSorting='1' /> 
      </row>
    </grid>";
    
    System.String fetchXml =
    @"<fetch version='1.0' output-format='xml-platform' 
      mapping='logical' distinct='false'>
      <entity name='opportunity'>
      <order attribute='estimatedvalue' descending='false' /> 
      <filter type='and'>
          <condition attribute='statecode' operator='eq' 
          value='0' /> 
      </filter>
      <attribute name='name' /> 
      <attribute name='estimatedvalue' /> 
      <attribute name='estimatedclosedate' /> 
      <attribute name='customerid' /> 
      <attribute name='opportunityratingcode' /> 
      <attribute name='closeprobability' /> 
      <link-entity alias='opportunitycustomeridcontactcontactid' 
          name='contact' from='contactid' to='customerid' 
          link-type='outer' visible='false'>
          <attribute name='emailaddress1' /> 
      </link-entity>
      <attribute name='opportunityid' /> 
      </entity>
    </fetch>";
    
    var sq = new SavedQuery
      {
        Name = "A New Custom Public View",
        Description = "A Saved Query created in code",
        ReturnedTypeCode = "opportunity",
        FetchXml = fetchXml,
        LayoutXml = layoutXml,
        QueryType = 0
      };                  
    _customViewId = service.Create(sq);
    Console.WriteLine("A new view with the name {0} was created.", sq.Name);
    

Actualizar vistas

Si la propiedad administrada SavedQuery.IsCustomizable permite que se actualice la vista, puede usar el método IOrganizationService.Update o el mensaje UpdateRequest para actualizar la vista.

Eliminar vistas

Debe eliminar solo las consultas guardadas que ha creado. Un componente de la solución o parte de la aplicación puede depender de una consulta guardada específica. Si hubiera consultas que no desea que aparezcan en la aplicación, debe desactivarlas.

Recuperar vistas

Use RetrieveMultipleRequest o IOrganizationService.RetrieveMultiple para recuperar registros de consulta guardados.

El siguiente ejemplo recupera todas las vistas públicas para la oportunidad:

var mySavedQuery = new QueryExpression
       {
           ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery"),
           EntityName = SavedQuery.EntityLogicalName,
           Criteria = new FilterExpression
           {
               Conditions =
{
   new ConditionExpression
   {
       AttributeName = "querytype",
       Operator = ConditionOperator.Equal,
       Values = {0}
   },
   new ConditionExpression
   {
       AttributeName = "returnedtypecode",
       Operator = ConditionOperator.Equal,
       Values = {Opportunity.EntityTypeCode}
   }
}
           }
       };
       RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };

       RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)service.Execute(retrieveSavedQueriesRequest);

       DataCollection<Entity> savedQueries = retrieveSavedQueriesResponse.EntityCollection.Entities;

       //Display the Retrieved views
       foreach (Entity ent in savedQueries)
       {
           SavedQuery rsq = (SavedQuery)ent;
           Console.WriteLine("{0} : {1} : {2} : {3} : {4} : {5},", rsq.SavedQueryId, rsq.Name, rsq.QueryType, rsq.IsDefault, rsq.ReturnedTypeCode, rsq.IsQuickFindQuery);
       }

Desactivar vistas

Si no desea que una vista pública aparezca en la aplicación, puede desactivarla. No puede desactivar una vista pública que se establece como la vista predeterminada. El siguiente ejemplo deshabilita la vista Oportunidades cerradas del año fiscal actual para la oportunidad:

System.String SavedQueryName = "Closed Opportunities in Current Fiscal Year";
QueryExpression ClosedOpportunitiesViewQuery = new QueryExpression
{
   ColumnSet = new ColumnSet("savedqueryid", "statecode", "statuscode"),
   EntityName = SavedQuery.EntityLogicalName,
   Criteria = new FilterExpression
   {
       Conditions =
       {
           new ConditionExpression
           {
               AttributeName = "querytype",
               Operator = ConditionOperator.Equal,
               Values = {0}
           },
           new ConditionExpression
           {
               AttributeName = "returnedtypecode",
               Operator = ConditionOperator.Equal,
               Values = {Opportunity.EntityTypeCode}
           },
                           new ConditionExpression
           {
               AttributeName = "name",
               Operator = ConditionOperator.Equal,
               Values = {SavedQueryName}
           }
       }
   }
};

RetrieveMultipleRequest retrieveOpportuntiesViewRequest = new RetrieveMultipleRequest { Query = ClosedOpportunitiesViewQuery };

RetrieveMultipleResponse retrieveOpportuntiesViewResponse = (RetrieveMultipleResponse)service.Execute(retrieveOpportuntiesViewRequest);

SavedQuery OpportunityView = (SavedQuery)retrieveOpportuntiesViewResponse.EntityCollection.Entities[0];
_viewOriginalState = (SavedQueryState)OpportunityView.StateCode;
_viewOriginalStatus = OpportunityView.StatusCode;


SetStateRequest ssreq = new SetStateRequest
{
   EntityMoniker = new EntityReference(SavedQuery.EntityLogicalName, (Guid)OpportunityView.SavedQueryId),
   State = new OptionSetValue((int)SavedQueryState.Inactive),
   Status = new OptionSetValue(2)
};
service.Execute(ssreq);

Nota

El estado de la vista, activo o inactivo, no se incluye con la vista cuando se agrega a una solución. Por lo tanto, cuando la solución se importa a una organización de destino, el estado se establecerá en activo de forma predeterminada.

Editar los criterios de filtro o configurar la ordenación

Para modificar el filtro o editar cómo se ordenan los datos, debe establecer el parámetro SavedQuery.FetchXml. Más información: Consultar datos mediante FetchXML.

Sugerencia

Si no está familiarizado con FetchXML los siguientes mensajes se pueden utilizar para convertir entre QueryExpression y FetchXML:QueryExpressionToFetchXmlRequest and FetchXmlToQueryExpressionRequest.

Editar columnas

Las columnas que desea mostrar en las vistas se pueden obtener de la tabla o las tablas relacionadas. Para obtener más información sobre cómo especificar las columnas para mostrar, vea el elemento layoutxml en el esquema de archivo de soluciones de personalización.

Agregar iconos personalizados con información sobre herramientas para una columna

Puede agregar un icono personalizado con texto de información sobre herramientas en una columna según el valor de la columna; también puede especificar el texto de información sobre herramientas localizado. Esto puede realizarse agregando iconos personalizados como recursos web de imagen en su instancia y luego usar un recurso web de JavaScript para agregar código JavaScript para que una columna muestre los iconos según el valor de la columna.

Nota

Agregar iconos personalizados con información sobre herramientas se admite únicamente para cuadrículas de sólo lectura; esta característica no es compatible con las cuadrículas editables. Para obtener más información acerca de las cuadrículas editables, consulte Usar cuadrículas editables.

Dos parámetros nuevos, imageproviderwebresource y imageproviderfunctionname, se agregan al elemento cell del layoutxml de la consulta guardada que le permite especificar el nombre de un recurso web y un nombre de función JavaScript para mostrar iconos personalizados y texto de información sobre herramientas para una columna. El código JavaScript se ejecuta cuando se carga la página.

También puede usar los nuevos campos Recurso web y Nombre de función en la página Propiedades de columna mientras modifica la propiedad de una columna en una definición de vista para especificar el nombre del recurso web y el nombre de función de JavaScript.

El código de ejemplo siguiente demuestra cómo puede especificar mediante programación un recurso web y un nombre de función JavaScript para agregar iconos personalizados e información sobre herramientas para la columna opportunityratingcode en layoutxml:

System.String layoutXml =  
@"<grid name='resultset' object='3' jump='name' select='1'  
  preview='1' icon='1'>  
  <row name='result' id='opportunityid'>  
    <cell name='name' width='150' />  
    <cell name='customerid' width='150' />  
    <cell name='estimatedclosedate' width='150' />  
    <cell name='estimatedvalue' width='150' />  
    <cell name='closeprobability' width='150' />  
    <cell name='opportunityratingcode' width='150' imageproviderwebresource='new_SampleWebResource'  
          imageproviderfunctionname='displayIconTooltip' />  
    <cell name='opportunitycustomeridcontactcontactid.emailaddress1'  
        width='150' disableSorting='1' />  
  </row>  
</grid>";  

La función JavaScript para mostrar iconos personalizados e informaciones sobre herramientas espera los dos argumentos siguientes: el objeto de fila completo especificado en layoutxml y el Id. de configuración regional del usuario que llama (LCID). El parámetro LCID permite especificar el texto de información sobre herramientas para el icono en varios idiomas. Para obtener más información sobre los idiomas admitidos, consulte Habilitar idiomas adicionales e Instalación o actualización de paquetes de idioma. Para ver una lista de valores de Id. de configuración regional (LCID) que puede usar en el código, consulte Id. de configuración regional asignados por Microsoft.

Suponiendo que muy probablemente agregará iconos personalizados para un tipo opción de columna, ya que tiene un conjunto limitado de opciones predefinidas, asegúrese de que usa el valor entero de las opciones en lugar de etiqueta para evitar romper el código debido a cambios en la cadena de etiqueta localizada. Además, en la función JavaScript, especifique únicamente el nombre de un recurso web de imagen que desee usar como icono para un valor de la columna. La imagen debe ser de tamaño 16x16 píxeles; las imágenes más grandes automáticamente se reducirán proporcionalmente al tamaño 16x16 píxeles.

El siguiente código de ejemplo muestra iconos e informaciones sobre herramientas distintos basándose en uno de los valores (1: Muy interesado, 2: Algo interesado, 3: No interesado) de la columna opportunityratingcode (Rating). El código de ejemplo también muestra cómo mostrar texto de información sobre herramientas localizado. Para que este ejemplo funcione, debe crear tres recursos web de imagen cada uno con imágenes de 16 x 16 (botón de clasificación Muy interesado, símbolo de clasificación Algo interesadoy botón de clasificación No interesado) en su instancia con los siguientes nombres respectivamente: new_Hot, new_Warm y new_Cold.

function displayIconTooltip(rowData, userLCID) {      
    var str = JSON.parse(rowData);  
    var coldata = str.opportunityratingcode_Value;  
    var imgName = "";  
    var tooltip = "";  
    switch (coldata) {  
        case 1:  
            imgName = "new_Hot";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Hot";  
                    break;  
                default:  
                    tooltip = "Opportunity is Hot";  
                    break;  
            }  
            break;  
        case 2:  
            imgName = "new_Warm";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Warm";  
                    break;  
                default:  
                    tooltip = "Opportunity is Warm";  
                    break;  
            }  
            break;  
        case 3:  
            imgName = "new_Cold";  
            switch (userLCID) {  
                case 1036:  
                    tooltip = "French: Opportunity is Cold";  
                    break;  
                default:  
                    tooltip = "Opportunity is Cold";  
                    break;  
            }  
            break;  
        default:  
            imgName = "";  
            tooltip = "";  
            break;  
    }  
    var resultarray = [imgName, tooltip];  
    return resultarray;  
}  

Esto muestra los valores de la columna Rating con los iconos adecuados según el valor, y el texto de información sobre herramientas del icono cuando mantiene el mouse sobre los iconos.

Iconos personalizados que se muestran para una columna en una vista.

Establecer como predeterminada

Solo se puede configurar una vista pública activa como la vista predeterminada. Para establecer una vista como predeterminada, establezca la propiedad IsDefault en true.

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).