Compartir a través de


Estadísticas y estado de búsqueda de Dataverse

La búsqueda de Dataverse proporciona dos operaciones que puede utilizar para recuperar datos sobre las estructuras de datos utilizadas para respaldar la búsqueda y comprobar si la búsqueda está habilitada.

Estadísticas

Es posible que necesite conocer el tamaño de la estructura de datos que se devuelve para ayudarle a optimizar mejor su consulta o los resultados de la consulta y administrar el tamaño de su base de datos para administrar los costes.

Las estadísticas de búsqueda proporcionan información sobre:

  • Tamaño de almacenamiento en bytes
  • Tamaño de almacenamiento en megabytes
  • Número de documentos

Ejemplos de estadísticas

Los ejemplos siguientes muestran cómo usar la API statistics.

Este ejemplo es de la muestra de SDK para operaciones de búsqueda de .NET en GitHub.

/// <summary>
/// Demonstrate statistics API
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <returns></returns>
static void OutputSearchStatistics(IOrganizationService service)
{
   Console.WriteLine("OutputSearchStatistics START\n");

   var searchstatisticsResponse = (searchstatisticsResponse)service.Execute(new searchstatisticsRequest());

   JObject ResponseObj = (JObject)JsonConvert.DeserializeObject(value: searchstatisticsResponse.response);

   SearchStatisticsResult results = ResponseObj["value"].ToObject<SearchStatisticsResult>();

   Console.WriteLine($"\tStorageSizeInBytes: {results.StorageSizeInByte}");
   Console.WriteLine($"\tStorageSizeInMb: {results.StorageSizeInMb}");
   Console.WriteLine($"\tDocumentCount: {results.DocumentCount}");

   Console.WriteLine("\nOutputSearchStatistics END");
}

Salida

Cuando invoca el método OutputSearchStatistics con una instancia autenticada de la clase ServiceClient:

OutputSearchStatistics(service: serviceClient);

El resultado deberá ser ahora similar a esto:

OutputSearchStatistics START

        StorageSizeInBytes: 1341090
        StorageSizeInMb: 1
        DocumentCount: 1309

OutputSearchStatistics END

Clases de apoyo

El método OutputSearchStatistics depende de las siguientes clases de soporte para enviar la solicitud y procesar el resultado:

Clases searchstatisticsRequest y searchstatisticsResponse

Estas clases se generan usando el comando Power Platform CLI pac modelbuilder build como se describe en Generar clases enlazadas anticipadamente para el SDK para .NET.

Clase SearchStatisticsResult

Se usa para deserializar la propiedad searchstatisticsResponse.response.value.

class SearchStatisticsResult
{

   /// <summary>
   /// The storage size in Bytes
   /// </summary>
   [JsonProperty(PropertyName = "storagesizeinbytes")]
   public long StorageSizeInByte { get; set; }


   /// <summary>
   /// The storage size in Megabytes
   /// </summary>
   [JsonProperty(PropertyName = "storagesizeinmb")]
   public long StorageSizeInMb { get; set; }

   /// <summary>
   /// The document count
   /// </summary>
   [JsonProperty(PropertyName = "documentcount")]
   public long DocumentCount { get; set; }
}

Status

Utilice el estado de búsqueda para saber:

  • Si la búsqueda está habilitada.
  • Qué tablas y columnas están habilitadas para la búsqueda.

Tipos de respuesta de estado

La operación de estado devuelve datos utilizando los siguientes tipos:

searchstatusResponse.response.value

La propiedad searchstatusResponse.response tiene una propiedad de value con las siguientes propiedades:

Name Type Description
entitystatusresults EntityStatusInfo[] Contiene información sobre el estado de las tablas habilitadas para la búsqueda.
manytomanyrelationshipsyncstatus ManyToManyRelationshipSyncStatus[] Contiene información sobre el estado de sincronización de la relaciones de varios a varios.
status Estado de ejecución Indica el estado de una tabla y/o del índice en su conjunto.
lockboxstatus LockBoxStatus Indica el estado de la caja de seguridad.
cmkstatus CMKStatus Indica el estado de la clave administrada por el cliente.

EntityStatusInfo

Contiene información sobre el estado de las tablas habilitadas para la búsqueda.

Name Type Description
entitylogicalname string Nombre lógico de la tabla
objecttypecode string Código de tipo de objeto de la tabla.
primarynamefield string La columna principal de la tabla.
lastdatasynctimestamp string La última hora de la sincronización de datos.
lastprincipalobjectaccesssynctimestamp string La hora de sincronización del último acceso al objeto principal.
entitystatus string El estado a nivel de entidad.
searchableindexedfieldinfomap Dictionary<string,FieldStatusInfo> El diccionario de nombres y detalles de columnas indexadas.

FieldStatusInfo

Detalles de los campos indexados de una tabla.

Name Type Description
indexfieldname string El nombre del campo indexado.

Status

Indica el estado de una tabla y/o del índice en su conjunto.

Name valor Description
notprovisioned 0 La organización no está aprovisionada para la búsqueda.
provisioninginprogress 1 Aprovisionamiento de organización en curso
provisioned 2 La organización está aprovisionada para la búsqueda.

CMKStatus

Indica el estado de la clave administrada por el cliente.

Más información: Administrar la clave de cifrado

Name valor Description
Unknown 0 La búsqueda de Dataverse no está aprovisionada.
Disabled 1 La clave administrada por el cliente está deshabilitada.
Enabled 2 La clave administrada por el cliente está habilitada.
DisablingInProgress 3 La clave administrada por el cliente está en proceso de deshabilitarse.
EnablingInProgress 4 La clave administrada por el cliente está en proceso de habilitarse.

LockBoxStatus

Indica el estado de la caja de seguridad.

Más información: Acceder de forma segura a los datos del cliente mediante Caja de seguridad del cliente en Power Platform (versión preliminar)

Name valor Description
Unknown 0 La búsqueda de Dataverse no está aprovisionada.
Disabled 1 La caja de seguridad está deshabilitada.
Enabled 2 La caja de seguridad está habilitada.
DisablingInProgress 3 La caja de seguridad se va a deshabilitar.
EnablingInProgress 4 La caja de seguridad se va a habilitar.

ManyToManyRelationshipSyncStatus

Contiene información sobre el estado de sincronización de la relaciones de varios a varios.

Name Type Description
relationshipName string El nombre de la relación.
relationshipMetadataId identificador único El id. de la relación.
searchEntity string El nombre de la tabla de búsqueda.
relatedEntity string El nombre de la tabla relacionada.
searchEntityIdAttribute string El nombre de la clave principal de la tabla de búsqueda.
relatedEntityIdAttribute string El nombre de la clave principal de la tabla relacionada.
intersectEntity string El nombre de la tabla de intersección que admite esta relación de varios a varios.
searchEntityObjectTypeCode entero La tabla de búsqueda de código de tipo de objeto.
lastSyncedVersion string La última versión sincronizada.

Ejemplos de estado

Los siguientes ejemplos muestran el resultado de la API de estado.

Este ejemplo es de la muestra de SDK para operaciones de búsqueda de .NET en GitHub.

/// <summary>
/// Demonstrate status API
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <returns></returns>
static void OutputSearchStatus(IOrganizationService service)
{
    Console.WriteLine("OutputSearchStatus START\n");

    var searchStatusResponse = (searchstatusResponse)service.Execute(new searchstatusRequest());

    JObject ResponseObj = (JObject)JsonConvert.DeserializeObject(searchStatusResponse.response);

    SearchStatusResult results = ResponseObj["value"].ToObject<SearchStatusResult>();

    Console.WriteLine($"\tStatus: {results.Status}");
    Console.WriteLine($"\tLockboxStatus: {results.LockboxStatus}");
    Console.WriteLine($"\tCMKStatus: {results.CMKStatus}");

    if (results.Status == SearchStatus.Provisioned)
    {
        // There will be no results if status is notprovisioned
        if (results.EntityStatusInfo?.Count > 0)
        {
            Console.WriteLine("\tEntity Status Results:\n");
            results.EntityStatusInfo.ForEach(result =>
            {
                Console.WriteLine($"\t\tentitylogicalname: {result.EntityLogicalName}");
                Console.WriteLine($"\t\tobjecttypecode: {result.ObjectTypeCode}");
                Console.WriteLine($"\t\tprimarynamefield: {result.PrimaryNameField}");
                Console.WriteLine($"\t\tlastdatasynctimestamp: {result.LastDataSyncTimeStamp}");
                Console.WriteLine($"\t\tlastprincipalobjectaccesssynctimestamp: {result.LastPrincipalObjectAccessSyncTimeStamp}");
                Console.WriteLine($"\t\tentitystatus: {result.EntityStatus}");

                Console.WriteLine($"\t\tsearchableindexedfieldinfomap:");
                result.SearchableIndexedFieldInfoMap.ToList().ForEach(searchableindexedfield =>
                {
                    Console.WriteLine($"\t\t\t{searchableindexedfield.Key}\t indexfieldname:{searchableindexedfield.Value.IndexFieldName}");
                });
                Console.WriteLine("\n");
            });
        }
    }

    Console.WriteLine("OutputSearchStatus END\n");
}

Salida

Cuando invoca el método OutputSearchStatus con una instancia autenticada de la clase ServiceClient:

OutputSearchStatus(service: serviceClient);

El resultado deberá ser ahora similar a esto:

OutputSearchStatus START

        Status: Provisioned
        LockboxStatus: Disabled
        CMKStatus: Disabled
        Entity Status Results:

                entitylogicalname: account
                objecttypecode: 1
                primarynamefield: name
                lastdatasynctimestamp: 1555508!10/16/2023 02:21:59
                lastprincipalobjectaccesssynctimestamp: 0!10/16/2023 02:22:00
                entitystatus: EntitySyncComplete
                searchableindexedfieldinfomap:
                        accountid        indexfieldname:a_0
                        accountnumber    indexfieldname:a0w
                        address1_city    indexfieldname:a0x
                        createdon        indexfieldname:i_0
                        emailaddress1    indexfieldname:a0y
                        entityimage_url  indexfieldname:h_0
                        modifiedon       indexfieldname:j_0
                        name     indexfieldname:d_0
                        ownerid  indexfieldname:b_0
                        owningbusinessunit       indexfieldname:c_0
                        primarycontactid         indexfieldname:a0z
                        statecode        indexfieldname:f_0
                        statuscode       indexfieldname:g_0
                        telephone1       indexfieldname:a12
                        telephone2       indexfieldname:a13
                        versionnumber    indexfieldname:e_0


                <Additional tables removed for brevity>


OutputSearchStatus END

Clases de apoyo

El método OutputSearchStatus depende de las siguientes clases de soporte para enviar la solicitud y procesar el resultado:

Clases searchstatusRequest y searchstatusResponse

Estas clases se generan usando el comando Power Platform CLI pac modelbuilder build como se describe en Generar clases enlazadas anticipadamente para el SDK para .NET.

Clase SearchStatusResult

Se utiliza para deserializar los datos de searchstatusResponse.response.value.

class SearchStatusResult
{
   /// <summary>
   /// The current search status
   /// </summary>
   [JsonProperty("status")]
   public SearchStatus Status { get; set; }

   /// <summary>
   /// The current lockbox status
   /// </summary>
   [JsonProperty("lockboxstatus")]
   public LockboxStatus LockboxStatus { get; set; }

   /// <summary>
   /// The current customer managed key status
   /// </summary>
   [JsonProperty("cmkstatus")]
   public CMKStatus CMKStatus { get; set; }

   /// <summary>
   /// Information on enabled tables
   /// </summary>
   [JsonProperty("entitystatusresults")]
   public List<EntityStatusInfo>? EntityStatusInfo { get; set; }

   /// <summary>
   /// Information about th status of synchronized many-to-many relationships
   /// </summary>
   [JsonProperty("manytomanyrelationshipsyncstatus")]
   public List<ManyToManyRelationshipSyncStatus>? ManyToManyRelationshipSyncStatus { get; set; }
}
Enumeración SearchStatus

Se utiliza para deserializar los datos Status.

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;

[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum SearchStatus
{
    /// <summary>
    /// Organization is not provisioned for search.
    /// </summary>
    [EnumMember(Value = "notprovisioned")]
    NotProvisioned = 0,

    /// <summary>
    /// Organization provisioning in progress.
    /// </summary>
    [EnumMember(Value = "provisioninginprogress")]
    ProvisioningInProgress = 1,

    /// <summary>
    /// Organization provisioned for search.
    /// </summary>
    [EnumMember(Value = "provisioned")]
    Provisioned = 2,
}
Enumeración LockboxStatus

Se utiliza para deserializar los datos LockBoxStatus.

using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;
using Newtonsoft.Json;

/// <summary>
/// Indicates the status of the lockbox.
/// </summary>
[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum LockboxStatus
{
    /// <summary>
    /// Indicates dataverse search is not provisioned.
    /// </summary>
    [EnumMember]
    Unknown = 0,

    /// <summary>
    /// Indicates lockbox is disabled.
    /// </summary>
    [EnumMember]
    Disabled = 1,

    /// <summary>
    /// Indicates lockbox is enabled.
    /// </summary>
    [EnumMember]
    Enabled = 2,

    /// <summary>
    /// Indicates lockbox is disabling in progress.
    /// </summary>
    [EnumMember]
    DisablingInProgress = 3,

    /// <summary>
    /// Indicates lockbox is enabling in progress.
    /// </summary>
    [EnumMember]
    EnablingInProgress = 4,
}
Enumeración CMKStatus

Se utiliza para deserializar los datos CMKStatus.

using Newtonsoft.Json.Converters;
using System.Runtime.Serialization;
using Newtonsoft.Json;

/// <summary>
/// Indicates the status of the customer managed key.
/// </summary>
[DataContract]
[JsonConverter(typeof(StringEnumConverter))]
public enum CMKStatus
{
    /// <summary>
    /// Indicates dataverse search is not provisioned.
    /// </summary>
    [EnumMember]
    Unknown = 0,

    /// <summary>
    /// Indicates customer managed key is disabled.
    /// </summary>
    [EnumMember]
    Disabled = 1,

    /// <summary>
    /// Indicates customer managed key is enabled.
    /// </summary>
    [EnumMember]
    Enabled = 2,

    /// <summary>
    /// Indicates customer managed key is disabling in progress.
    /// </summary>
    [EnumMember]
    DisablingInProgress = 3,

    /// <summary>
    /// Indicates customer managed key is enabling in progress.
    /// </summary>
    [EnumMember]
    EnablingInProgress = 4,
}
Clase EntityStatusInfo

Se utiliza para deserializar los datos EntityStatusInfo.

using Newtonsoft.Json;

public sealed class EntityStatusInfo
{
    /// <summary>
    /// Gets or sets the entity logical name.
    /// </summary>
    [JsonProperty(PropertyName = "entitylogicalname")]
    public string EntityLogicalName { get; set; }

    /// <summary>
    /// Gets or sets the object type code.
    /// </summary>
    [JsonProperty(PropertyName = "objecttypecode")]
    public int ObjectTypeCode { get; set; }

    /// <summary>
    /// Gets or sets the primary field name.
    /// </summary>
    [JsonProperty(PropertyName = "primarynamefield")]
    public string PrimaryNameField { get; set; }

    /// <summary>
    /// Gets or sets the last data sync time.
    /// </summary>
    [JsonProperty(PropertyName = "lastdatasynctimestamp")]
    public string LastDataSyncTimeStamp { get; set; }

    /// <summary>
    /// Gets or sets the last principal object access sync time.
    /// </summary>
    [JsonProperty(PropertyName = "lastprincipalobjectaccesssynctimestamp")]
    public string LastPrincipalObjectAccessSyncTimeStamp { get; set; }

    /// <summary>
    /// Gets or sets entity level status.
    /// </summary>
    [JsonProperty(PropertyName = "entitystatus")]
    public string EntityStatus { get; set; }

    /// <summary>
    /// Gets or sets the dictionary of attribute name and details.
    /// </summary>
    [JsonProperty(PropertyName = "searchableindexedfieldinfomap")]
    public IDictionary<string, FieldStatusInfo> SearchableIndexedFieldInfoMap { get; set; }
}
Clase FieldStatusInfo

Se utiliza para deserializar los datos FieldStatusInfo.

using Newtonsoft.Json;
using System.Diagnostics.CodeAnalysis;

namespace PowerApps.Samples.Search.Types;

[ExcludeFromCodeCoverage]
public sealed class FieldStatusInfo
{
    /// <summary>
    /// Gets or sets index field name.
    /// </summary>
    [JsonProperty(PropertyName = "indexfieldname")]
    public string IndexFieldName { get; set; }
}
Clase ManyToManyRelationshipSyncStatus

Se utiliza para deserializar los datos ManyToManyRelationshipSyncStatus.

using Newtonsoft.Json;

public sealed class ManyToManyRelationshipSyncStatus
{   
    /// <summary>
    /// Gets the relationship name.
    /// </summary>
    [JsonProperty("relationshipName")]
    public string? RelationshipName { get; }

    /// <summary>
    /// Gets the relationship metadata id.
    /// </summary>
    [JsonProperty("relationshipMetadataId")]
    public Guid RelationshipMetadataId { get; }

    /// <summary>
    /// Gets the search entity name.
    /// </summary>
    [JsonProperty("searchEntity")]
    public string? SearchEntity { get; }

    /// <summary>
    /// Gets the second entity name.
    /// </summary>
    [JsonProperty("relatedEntity")]
    public string? RelatedEntity { get; }

    /// <summary>
    /// Gets the search entity Id attribute.
    /// </summary>
    [JsonProperty("searchEntityIdAttribute")]
    public string? SearchEntityIdAttribute { get; }

    /// <summary>
    /// Gets the related entity Id attribute.
    /// </summary>
    [JsonProperty("relatedEntityIdAttribute")]
    public string? RelatedEntityIdAttribute { get; }

    /// <summary>
    /// Gets the intersect entity name.
    /// </summary>
    [JsonProperty("intersectEntity")]
    public string? IntersectEntity { get; }

    /// <summary>
    /// Gets the search entity object type code.
    /// </summary>
    [JsonProperty("searchEntityObjectTypeCode")]
    public int SearchEntityObjectTypeCode { get; }

    /// <summary>
    /// Gets the synced version.
    /// </summary>
    [JsonProperty("lastSyncedVersion")]
    public string? LastSyncedDataVersion { get; }
}

Consulte también

Buscar registros de Dataverse
Consulta de búsqueda de Dataverse
Sugerencia de búsqueda de Dataverse
Búsqueda con autocompletado de Dataverse
Búsqueda heredada de Dataverse

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