---
schema_version: "1"
id: 4486eea96f3b32c3ad4217196a736fd5565b7bf6aa05e050530dc4d2b2afa45a
title: Abstraction Framework Concepts and Terminology (Managed Package)
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/ind/264-0-0/comms_t_abstraction_framework_concepts_and_terminology_80650.md
canonical_url: https://help.salesforce.com/s/articleView?id=ind.comms_t_abstraction_framework_concepts_and_terminology_80650.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: 167e18ec8eefc470fb1460bee48a08a4f60360aac80b11319cf8bfb25a778752
description: The abstraction framework abstracts out the essential structure of a product model so that it can locate a product or an attribute anywhere in the product model, without any knowledge of the product model itself.
products:
  - Communications
release: "264"
---
# Abstraction Framework Concepts and Terminology (Managed Package)

The abstraction framework abstracts out the essential structure of a product model so that it can locate a product or an attribute anywhere in the product model, without any knowledge of the product model itself.

![Managed Package Icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-ind-communications-264-0-0-production-enus/444efb86-ea1e-477e-afbc-56eaac192eaf/communications/images/media_package_icon.png) _This feature is part of the Communications Cloud managed package._

A product model is represented by a comprehensive set of metadata and the abstraction framework uses its knowledge of the metadata structure to locate products and attributes in a product model. Any changes in a product model, therefore, are communicated to the framework simply by updating the relevant custom metadata.

The custom metadata used by the product model abstraction layer consists of the following columns:

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
        <colgroup>
          <col>
          <col>
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d80933e54">Column Name</th>
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d80933e57">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">IntegrationKey</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">A unique identifier for the product, attribute, or field that
                you want to access. It maps to the label of the custom metadata
                object. In the custom metadata provided by default, the prefix
                <code>VPL_</code> is used to indicate targets in the reference
                product model. Don't use this prefix for products in your product
                model. It is recommended that you implement a robust naming
                convention for your integration keys to ensure that placement and
                use of each target is clear.
              </p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">Target</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p>The name of the target.</p>
              <ul>
                <li>For a field, use the field API name.</li>
                <li>For an attribute, use the attribute code.</li>
                <li>For a product, use the product code.</li>
              </ul>
              <p style="margin-bottom:0;">The target must exist in your org.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">TargetType</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p>The target type. A target can be one of the following
                types:</p>
              <ul>
                <li>Product</li>

                <li>Attribute</li>

                <li>Field</li>

              </ul>
              <p style="margin-bottom:0;">The TargetType must be consistent with the method
                used. For example, the method to set an attribute can be used only
                with the TargetType <code>attribute</code>, while the method to add
                or disconnect a product can be used only with the TargetType
                <code>product</code>.
              </p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">
              <p style="margin-bottom:0;">TargetEntity</p>
            </td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">The Product Code of the product that you want to access. If
                the target that you want to access is a product, the TargetEntity is
                the same as the Target. If the target that you want to access is an
                attribute or a field, the TargetEntity is the Product Code of the
                product or the product specification to which the attribute or field
                belongs.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">TargetEntityContext</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p>The location of the TargetEntity in the product model
                hierarchy. A TargetEntity can have one of the following
                contexts:</p>
              <ul>
                <li>Root - Used for a root product in a product model.</li>

                <li>RootChild - Used for a direct child of the root product.</li>

                <li>Child - Used for any child product that is not a root product or a
                  RootChild.</li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">ParentEntity</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">The Product Code of the entity that is the parent of the
                TargetEntity. ParentEntity can be null for an attribute or a field
                where the TargetEntityContext is Root or RootChild.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">ParentEntityContext</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p>The location of the ParentEntity in the product model
                hierarchy. A ParentEntity can have one of the following contexts for
                each value of TargetEntityContext:</p>
              <ul>
                <li>Root: <ul>
                    <li>None</li>
                  </ul>
                </li>

                <li>RootChild:<ul>
                    <li>None</li>
                    <li>Root</li>
                    <li>RootChild</li>
                  </ul>
                </li>

                <li>Child: <ul>
                    <li>None</li>
                    <li>RootChild</li>
                    <li>Child</li>
                  </ul>
                </li>

              </ul>
              <p style="margin-bottom:0;">If ParentEntityContext is Child, then you should
                use options such as ContextId, Mode, and Depth to provide more
                information about the context of the target in the product
                hierarchy.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">Flow</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">The name of the workflow where the target is used. This allows
                you to define the context at a more granular level when you search
                for a target in the custom metadata table. It is useful if you want
                to find a target for which the IntegrationKey is not known. It also
                allows you to group together target products and attributes based on
                the workflow they are used in.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">TargetGroup</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">A name that allows you to group identical targets that occur
                in different places in the hierarchy, so that the MatchData method
                can act on all the targets in a single call. For example, consider a
                nested hierarchy where a particular product occurs at different
                places in the product model. Let's say the target product can be
                either a RootChild, or a Child. The integration key for the product
                is unique to the target's place in the product model. So if you want
                to act on just one specific occurrence of the product, you can use
                its integration key. If, however, you want to act on all instances
                of the target, wherever they occur in the product model, then you
                can specify the target group. Specifying the target group returns
                all rows in the custom metadata table that match the given target
                group.</p>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">TargetDataType</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p>The data type of the target. A target can have one of the
                following data types:</p>
              <ul>
                <li>Currency</li>

                <li>Double</li>

                <li>Reference</li>

                <li>String</li>

                <li>Text area</li>

                <li>Date</li>

                <li>DateTime</li>

                <li>Picklist</li>

                <li>Boolean</li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Column Name" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e54 ">Comment</td>

            <td data-label="Description" class="slds-cell-wrap" style="vertical-align:top;" headers="d80933e57 ">
              <p style="margin-bottom:0;">Any comment pertaining to the target. This comment is returned
                in the output of the GetData method.</p>
            </td>

          </tr>
        </tbody>
      </table>