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