Personalizar vistas de entidad

Las vistas de entidad 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 de entidad son registros SavedQuery que se pueden crear mediante programación. También puede definirlas como XML e importarlas a Dynamics 365 for Customer Engagement con una solución no administrada.

Una vista de entidad 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 entidad y consultas que realizan agregación. Más información: Entidad UserQuery (vista guardada)

También puede usar la herramienta personalización de Dynamics 365 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 atributo SavedQuery.QueryType. Tenga en cuenta que hay otros valores válidos para el atributo QueryType que no se muestran aquí porque esta entidad también se usa para almacenar los filtros y plantillas de Office Outlook. Para obtener más información, consulte Plantillas y filtros de Outlook y sin conexión.

Cuando las vistas se definen para una entidad específica, el atributo SavedQuery.ReturnedTypeCode devuelve el nombre lógico de la entidad.

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 el campo 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 el campo de búsqueda.

Tareas de vista

Puesto que las vistas son registros SavedQuery, puede crearlas, actualizarlas, recuperarlas, eliminarlas y desactivarlas. Además puede editar criterios de filtro o configurar el orden, editar columnas o establecer una vista como vista predeterminada.

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 entidad.

  • SavedQuery.FetchXml: Consulte Usar FetchXML para crear una consulta.

  • 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 entidad de 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>";
    
                        SavedQuery 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 = _serviceProxy.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 la vista se actualice, 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 entidad de oportunidad:



        QueryExpression 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)_serviceProxy.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 entidad de 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)_serviceProxy.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)
};
_serviceProxy.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 atributo SavedQuery.FetchXml. Para obtener más información, consulte Crear consultas con FetchXML.

Propina

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

Editar columnas

Las columnas que desea mostrar en las vistas se pueden obtener de la entidad o las entidades 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 de Dynamics 365 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

Esta característica se introdujo con la actualización de diciembre de 2016 para Dynamics 365 (en línea y local). 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 atributos 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 un atributo (columna) en una definición de vista en el cliente web de Dynamics 365 para especificar el nombre del recurso 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 por CRM, vea Habilitar idiomas adicionales e Instalar o actualizar paquetes de idiomas para Microsoft Dynamics 365 Customer Engagement. 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 de conjunto de opciones de atributo, 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 del atributo. 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) del atributo 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 calificación Muy interesado, Símbolo de calificación Algo interesado y Botón de calificación No interesado) en su instancia de Dynamics 365 con los nombres siguientes 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.

Vea también

Ejemplo: trabajar con vistas
Crear consultas con FetchXML
Ampliar el modelo de los metadatos para Microsoft Dynamics 365 Customer Engagement
Personalizar formularios de entidad en Microsoft Dynamics 365 Customer Engagement
Personalizar conjuntos de opciones globales en Microsoft Dynamics 365 Customer Engagement
Personalizar Dynamics 365 Customer Engagement