> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XStoreQueryProductsAsync

> XStoreQueryProductsAsync

# XStoreQueryProductsAsync

Devuelve información de descripción de los productos especificados que están asociados al juego actual, independientemente de si los productos están disponibles para su compra dentro del juego.

## Sintaxis

```cpp theme={null}
HRESULT XStoreQueryProductsAsync(  
         const XStoreContextHandle storeContextHandle,  
         XStoreProductKind productKinds,  
         const char** storeIds,  
         size_t storeIdsCount,  
         const char** actionFilters,  
         size_t actionFiltersCount,  
         XAsyncBlock* async  
)  
```

### Parámetros

*storeContextHandle*   \_In\_\
Tipo: XStoreContextHandle

El identificador de contexto de la tienda para el usuario, devuelto por [XStoreCreateContext](/reference/system/xstore/functions/xstorecreatecontext).

*productKinds*   \_In\_\
Tipo: [XStoreProductKind](/reference/system/xstore/enums/xstoreproductkind)

Los tipos de productos que se devolverán.

*storeIds*   \_In\_z\_count\_(storeIdsCount)\
Tipo: char\*\*

Los identificadores de la tienda de los productos que se recuperarán.

*storeIdsCount*   \_In\_\
Tipo: size\_t

El número de productos en la lista de **storeIds**.
Este número no debe superar los 100.

*actionFilters*   \_In\_opt\_z\_count\_(actionFiltersCount)\
Tipo: char\*\*

Restringe los resultados según alguna acción almacenada en el documento del producto.
De forma predeterminada, esta API devuelve todos los productos, incluso si no se pueden comprar, pero puede usar filtros de acción para restringir los resultados.
Por ejemplo, use "Purchase" si solo quiere productos que se puedan comprar, o "License" si solo quiere productos que se puedan licenciar.
Otros filtros de acción incluyen "Fulfill", "Browse", "Curate", "Details" y "Redeem".

*actionFiltersCount*   \_In\_\
Tipo: size\_t

El número de filtros en **actionFilters**.

*async*   \_Inout\_\
Tipo: [XAsyncBlock\*](/reference/system/xasync/structs/xasyncblock)

Un [XAsyncBlock](/reference/system/xasync/structs/xasyncblock) que define el trabajo asincrónico que se está realizando.
Use el [XAsyncBlock](/reference/system/xasync/structs/xasyncblock) para comprobar el estado de la llamada y obtener los resultados.
Para obtener más información, consulte [XAsyncBlock](/reference/system/xasync/structs/xasyncblock).

### Valor devuelto

Tipo: HRESULT

Código HRESULT de éxito o de error.

## Comentarios

Llame a [XStoreQueryProductsResult](/reference/system/xstore/functions/xstorequeryproductsresult) para recuperar la información de descripción y el resultado de ejecución de esta función.

Esta API genera un error si proporciona más de 100 storeIDs en la solicitud.
Si trabaja con un catálogo grande, limite cada consulta a menos de 100 productos.

Para obtener detalles de todos los productos que los jugadores pueden comprar dentro del juego actual, use [XStoreQueryAssociatedProductsAsync](/reference/system/xstore/functions/xstorequeryassociatedproductsasync) en su lugar.

El siguiente fragmento de código muestra un ejemplo de recuperación de información de descripción de los productos especificados que están asociados al juego actual.

```cpp theme={null}

void ProcessResults(XStoreProductQueryHandle queryHandle)
{
    HRESULT hr = XStoreEnumerateProductsQuery(
        queryHandle,
        nullptr,
        EnumerateProductsQueryCallback);

    if (FAILED(hr))
    {
        printf("Failed enumerate the product query handle: 0x%x\r\n", hr);
        XStoreCloseProductsQueryHandle(queryHandle);
        return;
    }

    XStoreCloseProductsQueryHandle(queryHandle);
}

void CALLBACK QueryProductsCallback(XAsyncBlock* asyncBlock)
{
    XStoreProductQueryHandle queryHandle = nullptr;

    HRESULT hr = XStoreQueryProductsResult(
        asyncBlock,
        &queryHandle);

    if (FAILED(hr))
    {
        printf("Failed retrieve the product query handle: 0x%x\r\n", hr);
        return;
    }

     ProcessResults(queryHandle);
}

void QueryProducts(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
    auto asyncBlock = std::make_unique<XAsyncBlock>();
    ZeroMemory(asyncBlock.get(), sizeof(*asyncBlock));
    asyncBlock->queue = taskQueueHandle;

    asyncBlock->callback = QueryProductsCallback;

    XStoreProductKind allProductKinds =
        XStoreProductKind::Consumable |
        XStoreProductKind::Durable |
        XStoreProductKind::Game |
        XStoreProductKind::Pass |
        XStoreProductKind::UnmanagedConsumable;

    const char* storeIds[] =
    {
        "9YYYYYYYYYYY",
        "9ZZZZZZZZZZZ",
    };

    // This is only needed if you want to restrict to items that are currently purchasable.
    // If you want items that have been sold in the past,
    // but are no longer available for purchase, then
    // pass in nullptr or an empty array for the actionFilters.
    const char* actionFilters[] =
    {
        "Purchase"
    };

    HRESULT hr = XStoreQueryProductsAsync(
        storeContextHandle,
        allProductKinds,
        storeIds,
        ARRAYSIZE(storeIds),
        actionFilters,
        ARRAYSIZE(actionFilters),
        asyncBlock.get());

    if (FAILED(hr))
    {
        printf("Failed to get products: 0x%x\r\n", hr);
        return;
    }
}

```

## Requisitos

**Encabezado:** XStore.h (incluido en XGameRuntime.h)

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Documentación conceptual

* [Operaciones básicas de la tienda](/publishing/xstore-commerce/xstore-basic-operations)
* [Concesión a los jugadores de acceso a contenido de complementos](/publishing/xstore-commerce/xstore-granting-access)
* [Limitación de frecuencia pormenorizada para las API de Microsoft Store](/publishing/xstore-commerce/xstore-fgrl)

## Consulte también

[XStore](/reference/system/xstore/xstore_members)
[XStoreQueryProductsResult](/reference/system/xstore/functions/xstorequeryproductsresult)\
[XStoreQueryAssociatedProductsAsync](/reference/system/xstore/functions/xstorequeryassociatedproductsasync)\
[XStoreQueryEntitledProductsAsync](/reference/system/xstore/functions/xstorequeryentitledproductsasync)\
[XStoreQueryProductsAsync](/reference/system/xstore/functions/xstorequeryproductsasync)\
[XStoreQueryProductForCurrentGameAsync](/reference/system/xstore/functions/xstorequeryproductforcurrentgameasync)\
[XStoreQueryProductForPackageAsync](/reference/system/xstore/functions/xstorequeryproductforpackageasync)\
[Operaciones básicas de la tienda](/publishing/xstore-commerce/xstore-basic-operations)\
[Concesión a los jugadores de acceso a contenido de complementos](/publishing/xstore-commerce/xstore-granting-access)


## Related topics

- [XStoreQueryProductsResult](/es/reference/system/xstore/functions/xstorequeryproductsresult.md)
- [XStoreQueryProductForPackageAsync](/es/reference/system/xstore/functions/xstorequeryproductforpackageasync.md)
- [XStoreQueryProductForPackageResult](/es/reference/system/xstore/functions/xstorequeryproductforpackageresult.md)
- [XStoreQueryProductForCurrentGameAsync](/es/reference/system/xstore/functions/xstorequeryproductforcurrentgameasync.md)
- [XStoreQueryAssociatedProductsForStoreIdResult](/es/reference/system/xstore/functions/xstorequeryassociatedproductsforstoreidresult.md)
