Retrieve data about the catalog in Power Platform

To retrieve data about the catalogs for your tenant, you need to determine which environments have catalogs installed. Then you can retrieve data from that environment about the catalog by querying the tables or API designed to provide this information.

Most tenants only install one catalog, but it's possible to install a catalog on multiple environments in the tenant.

Find environments with catalogs in your tenant

Use the pac admin list command to view the environments with catalogs in your tenant.

Note

This command requires an administrator authentication profile.

When using this command, you must use the following --application parameter with the value 83a35943-cb41-4266-b7d2-81d60f383695. This value is the application ID associated with the catalog.

PS C:\Users\you> pac admin list --application 83a35943-cb41-4266-b7d2-81d60f383695
Connected as you@yourorg.onmicrosoft.com

Listing all environments from your tenant...
Active Environment Environment ID                       Environment Url                   Type       Organization ID
*      Your Org    b16bdb7a-e023-4158-a839-4f8831ed2432 https://yourorg.crm.dynamics.com/ Production e20be4c1-02ce-4e81-93c6-6e95ff053943

Catalog tables

When you install the Power Platform Catalog manager application in an environment in your tenant, the tables listed in the Catalog in Power Platform table/entity reference are added to that environment only.

Some of the most important tables you might use are in the following table:

Table Description
Approval Request (mspcat_certificationrequest) Contains Approval records that are used to process new or updated submissions to the catalog system.
Catalog Publisher (mspcat_publisher) The publisher Entity for holding TPS Publisher data.
Catalog Item (mspcat_applications) Entry that appears in the Catalog
Package (mspcat_packages) Deployment Assets for a Catalog Item.
Install History (mspcat_InstallHistory) Contains record of installations and their status
Install Activity (mspcat_InstallActivity) Install History Activity IDs

View catalog information

There are two Dataverse messages you can use to get information about the catalog.

  • mspcat_GetPowerCatalogInformation This message is intended to be fast and provide the minimal permissions and descriptive data for the catalog.
  • mspcat_GetPowerCatalogDetails Use the contents of this message to populate the submission document and set the labels for what a Catalog Item and a Publisher should be called for this catalog.

mspcat_GetPowerCatalogInformation

The mspcat_GetPowerCatalogInformation message has a single permissionsonly boolean parameter and returns the following information defined by the mspcat_GetPowerCatalogInformationResponse complex type:

Name Type Description
SolutionVersion string Version of the catalog solution installed
CatalogDescription string Describes what this catalog is for
CanRead bool Can the user read the items in the catalog
CatalogName string Name of the catalog installed on this environment
ImageLink string If set, is the image for the catalog
CanSubmit bool Can the user submit items to the catalog

If the permissionsonly boolean parameter is true, the CatalogDescription, CatalogName, and ImageLink values aren't returned. SolutionVersion, CanRead, and CanSubmit values are always returned.

The following GetPowerCatalogInformationExample static method retrieves data using the mspcat_GetPowerCatalogInformationRequest and mspcat_GetPowerCatalogInformationResponse classes generated for the mspcat_GetPowerCatalogInformation message by the pac modelbuilder build command.

/// <summary>
/// Returns data about the catalog for an environment
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance.</param>
/// <param name="permissionsonly">Whether to only return information about permissions.</param>
static void GetPowerCatalogInformationExample(IOrganizationService service, bool permissionsonly = false)
{
   var request = new mspcat_GetPowerCatalogInformationRequest();
   if (permissionsonly) {
         request.permissionsonly = true;
   }
   var response = (mspcat_GetPowerCatalogInformationResponse)service.Execute(request);

   Console.WriteLine($"SolutionVersion: {response.SolutionVersion}");
   Console.WriteLine($"CatalogDescription: {response.CatalogDescription}");
   Console.WriteLine($"CanRead: {response.CanRead}");
   Console.WriteLine($"CatalogName: {response.CatalogName}");
   Console.WriteLine($"ImageLink: {response.ImageLink}");
   Console.WriteLine($"CanSubmit: {response.CanSubmit}");
}

Output

With permissionsonly equal false.

SolutionVersion: 1.1.24.500
CatalogDescription: Catalog in Power Platform applications created by your company.
CanRead: True
CatalogName: Default Catalog Name
ImageLink:
CanSubmit: True

Generate early-bound classes for the SDK for .NET
Use the Dataverse SDK for .NET

mspcat_GetPowerCatalogDetails

Use the information returned by mspcat_GetPowerCatalogDetails to populate the submission document and set the labels for what a catalog item and a publisher should be called for this catalog.

This function returns an object with a single CatalogDetails string property that contains an encoded string. When decoded, the string contains JSON data with the following properties:

Name Type Description
catalogId string The unique ID of the catalog
isSuccess string For internal use only.
sourceOptions option array The options from the mspcat_certificationrequest_requestsource global choice.
categoryOptions option array The options from the mspcat_catalogbusinesscategory global choice.
publisherLocalizedDisplayName string The localized name of the catalog publisher.
catalogItemLocalizedDisplayName string The localized name used to refer to catalog items.

The following GetPowerCatalogDetailsExample static method retrieves data using the mspcat_GetPowerCatalogDetailsRequest and mspcat_GetPowerCatalogDetailsResponse classes generated for the mspcat_GetPowerCatalogDetails message by the pac modelbuilder build command.

/// <summary>
/// Outputs details of the catalog in Power Platform.
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance.</param>
static void GetPowerCatalogDetailsExample(IOrganizationService service) {

    var request = new mspcat_GetPowerCatalogDetailsRequest();
    var response = (mspcat_GetPowerCatalogDetailsResponse)service.Execute(request);

   JsonDocument catalogDetails = JsonDocument.Parse(response.CatalogDetails);

    string catalogId = catalogDetails.RootElement.GetProperty("catalogId").GetString();
    bool isSuccess = catalogDetails.RootElement.GetProperty("isSuccess").GetBoolean();
    JsonElement sourceOptions = catalogDetails.RootElement.GetProperty("sourceOptions");
    JsonElement categoryOptions = catalogDetails.RootElement.GetProperty("categoryOptions");
    string publisherLocalizedDisplayName = catalogDetails.RootElement.GetProperty("publisherLocalizedDisplayName").GetString();
    string catalogItemLocalizedDisplayName = catalogDetails.RootElement.GetProperty("catalogItemLocalizedDisplayName").GetString();


    Console.WriteLine($"catalogId: {catalogId}");
    Console.WriteLine($"isSuccess: {isSuccess}");
    Console.WriteLine("sourceOptions:");
    foreach (JsonElement element in sourceOptions.EnumerateArray())
    {
        int id = element.GetProperty("id").GetInt32();
        string label = element.GetProperty("userLocalziedLabel").GetString();
        Console.WriteLine($"  {id} {label}");
    }
    Console.WriteLine("categoryOptions:");
    foreach (JsonElement element in categoryOptions.EnumerateArray())
    {
        int id = element.GetProperty("id").GetInt32();
        string label = element.GetProperty("userLocalziedLabel").GetString();
        Console.WriteLine($"  {id} {label}");
    }
    Console.WriteLine($"publisherLocalizedDisplayName: {publisherLocalizedDisplayName}");
    Console.WriteLine($"catalogItemLocalizedDisplayName: {catalogItemLocalizedDisplayName}");
}

Output

The static GetPowerCatalogDetailsExample method writes something like this to the console:

catalogId: 883278f5-07af-45eb-a0bc-3fea67caa544
isSuccess: True
sourceOptions:
  526430000 Other
  526430001 Power Automate Maker Portal
  526430002 Power Platform Maker Portal
  526430003 Power Virtual Agents Maker Portal
  526430004 Power Platform Admin API
  526430005 PAC CLI
  526430006 PAC Build Task
  526430007 Pipelines in Power Platform
categoryOptions:
  526430000 Customer Service
  526430001 Project Management
  526430002 Calendar Management & Scheduling
  526430003 Email Management
  526430004 Files & Documentation
  526430005 Notification & Reminders
  526430006 Analytics
  526430007 Collaboration
  526430008 Commerce
  526430009 Finance
  526430010 Compliance & Legal
  526430011 Sales
  526430012 IT Tools
  526430013 Marketing
  526430014 Operations & Supply Chain
  526430015 Internet of Things
  526430016 AI Machine Learning
  526430017 Geolocation
  526430018 Human Resources
publisherLocalizedDisplayName: Catalog Publisher
catalogItemLocalizedDisplayName: Catalog Item

Generate early-bound classes for the SDK for .NET
Use the Dataverse SDK for .NET

View items in the catalog

You can discover items in the catalog using PAC CLI or by querying the Catalog Item (mspcat_applications) table.

Using PAC CLI

Use the pac catalog list command to view items in the catalog.

pac catalog list 
Connected to... TestCatalog
Connected as user@domain
Listing all published catalog items from the current Dataverse Organization...
Catalog Item Name                   Publisher Name            Catalog Item Id                      Revision Id                          Version Status
Contoso Conference Custom Connector Catalog Conferences Team  ContosoConferencesCustomConnector    4e882dd6-74f3-ed11-8849-000d3a0a286b 1.0.0.1 Published
Contoso Themed Components           ContosoPublisher          ContosoThemedComponents              efbc469d-f1b2-ed11-83fd-000d3a0a2d9d 1.0.0.1 Published

You can also use these parameters to filter returned records:

parameter alias   description
--catalog-item-id -cid Catalog item ID to search for. When catalog item ID is used, any --catalog-item-name parameter values are ignored.
--catalog-item-name -n Catalog item name to search for.
--include-active -ia Include active items.

Use the --json parameter to return JSON data.

Use the --environment (-env) parameter to query a catalog in a different environment.

Query Dataverse tables

Information about catalog items is in the Catalog Item (mspcat_applications) table, so you can retrieve data from it as you would any Dataverse table.

The following static RetrieveCatalogItems method retrieves and prints a table of data from the Catalog Item (mspcat_applications) and Package (mspcat_packages) tables about items in the catalog. This function depends on the ConsoleTables NuGet package to render the table in a console application.

/// <summary>
/// Retrieves information about catalog items and writes it to the console
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance.</param>
static void RetrieveCatalogItems(IOrganizationService service)
{
    QueryExpression query = new("mspcat_applications")
    {
        ColumnSet = new ColumnSet(
             "mspcat_tpsid",
             "mspcat_deploytype",
             "mspcat_applicationtype",
             "mspcat_businesscategory",
             "mspcat_description",
             "mspcat_applicationsid",
             "mspcat_publisherid",
             "mspcat_name",
             "statuscode"),
        Criteria = new FilterExpression(LogicalOperator.And)
        {
            Conditions = {
                {
                    new ConditionExpression(
                        attributeName: "statecode",
                        conditionOperator: ConditionOperator.Equal,
                        value: 0)
                }
            }
        }
    };

    LinkEntity linkToPackages = query.AddLink(
       linkToEntityName: "mspcat_packages",
       linkFromAttributeName: "mspcat_packageasset",
       linkToAttributeName: "mspcat_packagesid",
       joinOperator: JoinOperator.Inner);

    linkToPackages.Columns = new ColumnSet(
        "statecode",
        "mspcat_uniquename",
        "mspcat_version",
        "statuscode");

    linkToPackages.EntityAlias = "pkg";

    EntityCollection catalogs = service.RetrieveMultiple(query);

    var table = new ConsoleTables.ConsoleTable(
        "Catalog Item Name",
        "Publisher Name",
        "Catalog Item ID",
        "Revision ID",
        "Version",
        "Status");

    foreach (Entity catalog in catalogs.Entities)
    {
        string catalogItemName = catalog.GetAttributeValue<string>("mspcat_name");
        string publisherName = catalog.FormattedValues["mspcat_publisherid"];
        string catalogItemId = catalog.GetAttributeValue<string>("mspcat_tpsid");
        Guid revisionId = catalog.GetAttributeValue<Guid>("mspcat_applicationsid");
        string version = (string)catalog.GetAttributeValue<AliasedValue>("pkg.mspcat_version").Value;
        string status = catalog.FormattedValues["statuscode"];

        string[] rowData = {
            catalogItemName,
            publisherName,
            catalogItemId,
            revisionId.ToString(),
            version,
            status
        };

        table.Rows.Add(rowData);
    }
    table.Write();
}

The output of this example might look something like this:

 -----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | Catalog Item Name                  | Publisher Name          | Catalog Item ID                   | Revision ID                          | Version | Status    |
 -----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | Contoso Conference Custom Connector| Catalog Conferences Team| ContosoConferencesCustomConnector | 4e882dd6-74f3-ed11-8849-000d3a0a286b | 1.0.0.1 | Published |
 -----------------------------------------------------------------------------------------------------------------------------------------------------------------
 | Contoso Themed Components          | ContosoPublisher        | ContosoThemedComponents           | efbc469d-f1b2-ed11-83fd-000d3a0a2d9d | 1.0.0.1 | Published |
 -----------------------------------------------------------------------------------------------------------------------------------------------------------------

Use the Dataverse SDK for .NET
Query data using QueryExpression

Next steps