Personalización de vistas en aplicaciones controladas por modelos

Personalice las vistas en aplicaciones controladas por modelos mediante programación para controlar qué datos recuperan los usuarios y cómo la aplicación la muestra. Las vistas son SavedQuery registros que usan filtros específicos y configuraciones de visualización. Puede crearlos en el código o definirlos como XML e importarlos con una solución no administrada.

Una vista SavedQuery es diferente de una UserQuery. Una consulta de usuario, denominada Vista guardada en aplicaciones controladas por modelos, es propiedad de un usuario individual, se puede asignar y compartir con otros usuarios, y puede ser vista por otros usuarios en función de los privilegios de acceso de la consulta. Este tipo de vista es adecuado para las consultas usadas con frecuencia que abarcan tipos de tabla y consultas que realizan agregaciones. Para obtener más información, consulte Consultas guardadas.

También puede usar la herramienta de personalización para personalizar vistas. Para obtener más información, vea Crear y editar vistas.

Tipos de vistas

En la tabla siguiente se enumeran los cinco tipos de vistas que puede personalizar. El código de tipo de una vista se almacenan en el parámetro SavedQuery.QueryType.

Al definir vistas para una tabla específica, el SavedQuery.ReturnedTypeCode parámetro 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: establezca una de estas vistas como 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 que se buscan cuando un usuario busca registros mediante la columna de búsqueda en una vista de lista.
Búsqueda 64 - Repeticiones: 1
- Acciones: solo actualizar.
- Comentarios: esta es la vista predeterminada que se usa para buscar un registro cuando no hay ninguna otra vista configurada para la columna de búsqueda.

Administración de vistas como componentes de la solución

Las vistas son componentes de la solución. Al crear, actualizar o eliminar componentes de solución, se aplica el cambio a la solución que los contiene. Si no especifica explícitamente una solución, los cambios se establecen en la solución preferida de quien ejecute el código. Si esa persona no tiene una solución preferida, los cambios van a una de las soluciones predeterminadas.

Como desarrollador, use el SolutionUniqueName parámetro opcional para asociar explícitamente estos cambios de datos a una solución no administrada específica.

Crear vistas

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

Propiedad Descripción
Name Identificador único de la consulta guardada.
ReturnedTypeCode Coincide con el nombre lógico de la tabla.
FetchXml Edite criterios de filtro o configure la ordenación. Consulte Consulta de datos mediante FetchXml.
LayoutXml Consulte el layoutxml elemento del esquema de archivo de soluciones de personalización para los elementos válidos.
QueryType Siempre debe ser cero (0).

En el ejemplo siguiente se crea una nueva vista pública para la tabla Oportunidad:

En este ejemplo se usa el método IOrganizationService.Execute con la clase CreateRequest y el SolutionUniqueName parámetro opcional.

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

var request = new CreateRequest
{
   Target = sq
};
request["SolutionUniqueName"] = "< Your Solution Unique Name >";

var response = (CreateResponse)service.Execute(request);
_customViewId = response.id;
Console.WriteLine("A new view with the name {0} was created.", sq.Name);

Más información sobre el SDK de Dataverse para .NET

Actualizar vistas

Si la IsCustomizable propiedad administrada permite actualizar la vista, use el mensaje de clase UpdateRequest para actualizar la vista. Actualice siempre las vistas en el contexto de una solución. Use el SolutionUniqueName parámetro opcional para asociar el cambio a una vista con una solución.

Para obtener un ejemplo de actualización, consulte Desactivar vistas.

Eliminar vistas

Solo debe eliminar las consultas guardadas que creó. Un componente de solución o parte de la aplicación puede depender de una consulta guardada específica. Si hay consultas que no desea que aparezcan en la aplicación, desactivelas. Elimine siempre las vistas en el contexto de una solución. Use el SolutionUniqueName parámetro opcional para asociar la eliminación de una vista a una solución.

Recuperar vistas

En los ejemplos siguientes se recuperan todas las vistas públicas de la tabla Oportunidad:

En este ejemplo se usa una clase RetrieveMultipleRequest con el método IOrganizationService.Execute para recuperar los registros de consulta guardados.

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

Más información sobre el SDK de Dataverse para .NET

Desactivar vistas

Si no desea que aparezca una vista pública en la aplicación, desactivela. No se puede desactivar una vista pública establecida como vista predeterminada.

La desactivación es una operación de actualización. Actualice siempre las vistas en el contexto de una solución. Use el SolutionUniqueName parámetro opcional para asociar el cambio a una vista con una solución.

En el ejemplo siguiente se desactiva la vista Oportunidades cerradas en el año fiscal actual para la tabla Oportunidad:

En este ejemplo se usa el método IOrganizationService.Execute con la clase UpdateRequest y el SolutionUniqueName parámetro opcional.

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

var updateRequest = new UpdateRequest
{
  Target = new SavedQuery
  {
    Id = OpportunityView.Id,
    StateCode = new OptionSetValue(1), // Inactive
    StatusCode = new OptionSetValue(2) // Inactive
  }
};
updateRequest["SolutionUniqueName"] = "< Your Solution Unique Name >";

service.Execute(updateRequest);

Más información sobre el SDK de Dataverse para .NET

Nota

Estado de vista: active o inactive no se incluye con la vista al agregarla a una solución. Por lo tanto, al importar la solución en una organización de destino, el estado se establece en activo de forma predeterminada.

Editar columnas

Puede seleccionar columnas para mostrarlas en las vistas 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.

Adición de iconos personalizados y información sobre herramientas para ver columnas

Puede agregar un icono personalizado con texto de información sobre herramientas para mostrarlo en una columna en función del valor de la columna. También puede especificar texto de información sobre herramientas localizado. Agregue los iconos personalizados como recursos web de imagen en la instancia y, a continuación, use un recurso web de JavaScript para agregar código JavaScript para una columna para mostrar los iconos en función del valor de la columna.

Nota

Puede agregar iconos personalizados con información sobre herramientas solo a las cuadrículas de solo lectura. Esta característica no se admite para cuadrículas editables. Para obtener más información acerca de las cuadrículas editables, consulte Usar cuadrículas editables.

Se agregan dos nuevos parámetros, imageproviderwebresource y imageproviderfunctionname, al cell elemento del layoutxml de savedquery. Estos parámetros permiten especificar el nombre de un recurso web y un nombre de función de 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 muestra cómo puede especificar mediante programación un recurso web y un nombre de función de JavaScript para agregar iconos personalizados y información sobre herramientas para la opportunityratingcode columna en 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 Opciones regionales y de idioma para su entorno. 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 agregue iconos personalizados para un tipo de opción de columna porque tiene un conjunto limitado de opciones predefinidas, use el valor entero de las opciones en lugar de la etiqueta para evitar interrumpir el código debido a cambios en la cadena de etiqueta localizada. En la función de JavaScript, especifique solo el nombre de un recurso web de imagen que desea usar como icono para un valor de la columna. La imagen debe ser de 16 x 16 píxeles. Las imágenes más grandes se reducen verticalmente automáticamente a 16 x 16 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 16 x 16 imágenes ( , y ) en la instancia con los siguientes nombres, respectivamente: new_Hot, new_Warmy new_Cold.

function displayIconTooltip(rowData, userLCID) {
  var str = JSON.parse(rowData);
  var coldata = str.opportunityratingcode_Value;
  var imgName = "";
  var tooltip = "";
  switch (parseInt(coldata, 10)) {
    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.

Captura de pantalla de los iconos personalizados que se muestran en la columna Clasificación de una vista.

Establecer una vista pública como vista predeterminada

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

Herramientas de la comunidad

Hay varias herramientas de la comunidad que usan estas API para administrar vistas:

Nota

Estas herramientas de la comunidad no son un producto de Dataverse y Microsoft no proporciona compatibilidad con las herramientas de la comunidad. Si tiene alguna pregunta sobre una herramienta, póngase en contacto con el publicador. Más información: Herramientas de la comunidad