---
id: object/codeunit/30177
type: object
title: Codeunit 30177 "Shpfy Product Events"
summary: Codeunit 30177 "Shpfy Product Events" in Shopify (Microsoft.Integration.Shopify). 36 events. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - shopify
versions:
  introduced: "29"
  last_changed: null
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: bd3e2f14f8ce9390e9a580dc0c63f2d19f7be9e32a31545c133ae26e7fdc208c
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al
    title: src/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 30177
name: Shpfy Product Events
namespace: Microsoft.Integration.Shopify
app: Shopify
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in: []
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 36
  events: 36
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 0
  called_by: 0
  implements: 0
---

# Codeunit 30177 "Shpfy Product Events"

> Codeunit 30177 "Shpfy Product Events" in Shopify (Microsoft.Integration.Shopify). 36 events. Introduced in BC29, still in BC30.

Shopify · Microsoft.Integration.Shopify · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Shopify/app/src/Products/Codeunits/ShpfyProductEvents.Codeunit.al) · facts from BC29

## Events published

- `OnAfterSetProductTitle(Item: Record Item; LanguageCode: Code[10]; var Title: Text)` (internal)
- `OnAfterCreateItem(Shop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var Item: Record Item)` (integration): Raised After Create Item.
- `OnAfterCreateItemVariant(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; var ItemVariant: Record "Item Variant")` (integration): Raised After Create Item Variant.
- `OnAfterCreateTempShopifyProduct(Item: Record Item; var ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; var ShopifyTag: Record "Shpfy Tag")` (integration): Raised After Temp Shopify Product and Variant are created.
- `OnAfterCreateTempShopifyVariant(Item: Record Item; var ShopifyVariant: Record "Shpfy Variant")` (integration): Raised After Temp Shopify Variant from Item is created.
- `OnAfterCreateProductBodyHtml(ItemNo: Code[20]; ShopifyShop: Record "Shpfy Shop"; var ProductBodyHtml: Text; LanguageCode: Code[10])` (integration): Raised After Create Product Body Html.
- `OnBeforeUpdateProductMetafields(ProductId: BigInteger)` (integration): Raised before updating product metafields in Shopify.
- `OnAfterFindItemTemplate(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var TemplateCode: Code[20])` (integration): Raised After Find Item Template.
- `OnAfterGetCommaSeparatedTags(ShopifyProduct: Record "Shpfy Product"; var Tags: Text)` (integration)
- `OnAfterGetBarcode(ItemNo: Code[20]; VariantCode: Code[10]; UoM: Code[10]; var Barcode: Text)` (integration): Description for OnAfterGetBarcode.
- `OnBeforeCreateItem(Shop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var Item: Record Item; var Handled: Boolean)` (integration): Raised Before Create Item.
- `OnBeforeCreateItemVariant(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; var ItemVariant: Record "Item Variant"; var Handled: Boolean)` (integration): Raised Before Create Item Variant.
- `OnBeforeCreateItemVariantCode(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; var ItemVariantCode: Code[10]; var Handled: Boolean)` (integration): Raised Before Create Item Variant Code.
- `OnBeforeCreateProductBodyHtml(ItemNo: Code[20]; ShopifyShop: Record "Shpfy Shop"; var ProductBodyHtml: Text; var Handled: Boolean; LanguageCode: Code[10])` (integration): Raised Before Create Product Body Html.
- `OnBeforeFindItemTemplate(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var TemplateCode: Code[20]; var Handled: Boolean)` (integration): Raised Before Find Item Template.
- `OnBeforGetBarcode(ItemNo: Code[20]; VariantCode: Code[10]; UoM: Code[10]; var Barcode: Text; var Handled: Boolean)` (integration): Description for OnBeforGetBarcode.
- `OnBeforSetProductTitle(Item: Record Item; LanguageCode: Code[10]; var Title: Text; var Handled: Boolean)` (integration): Description for OnBeforSetProductTitle.
- `OnBeforeFindProductMapping(Direction: Enum "Shpfy Mapping Direction"; var ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; var Item: Record Item; var ItemVariant: Record "Item Variant"; var Handled: Boolean)` (integration): Raised Before Find Mapping.
- `OnAfterCalculateUnitPrice(Item: Record Item; VariantCode: Code[20]; UnitOfMeasure: Code[20]; ShopifyShop: Record "Shpfy Shop"; Catalog: Record "Shpfy Catalog"; var UnitCost: Decimal; var Price: Decimal; var ComparePrice: Decimal)` (integration): Raised After Calculate Unit Price.
- `OnBeforeCalculateUnitPrice(Item: Record Item; VariantCode: Code[20]; UnitOfMeasure: Code[20]; ShopifyShop: Record "Shpfy Shop"; Catalog: Record "Shpfy Catalog"; var UnitCost: Decimal; var Price: Decimal; var ComparePrice: Decimal; var Handled: Boolean)` (integration): Raised Before Calculate Unit Price.
- `OnAfterUpdateItem(Shop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var Item: Record Item)` (integration): Raised After Update Item.
- `OnAfterUpdateItemVariant(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; var ItemVariant: Record "Item Variant")` (integration): Raised After Update Item Variant.
- `OnBeforeUpdateItem(Shop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; ShopifyVariant: Record "Shpfy Variant"; var Item: Record Item; var Handled: Boolean)` (integration): Raised Before Update Item.
- `OnBeforeUpdateItemVariant(Shop: Record "Shpfy Shop"; ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; var ItemVariant: Record "Item Variant"; var Handled: Boolean)` (integration): Raised Before Update Item Variant.
- `OnBeforeSendCreateShopifyProduct(ShopifyShop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; var ShopifyVariant: Record "Shpfy Variant"; var ShpfyTag: Record "Shpfy Tag")` (integration): Raised Before Send Create Shopify Product.
- `OnBeforeSendUpdateShopifyProduct(ShopifyShop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; xShopifyProduct: Record "Shpfy Product")` (integration): Raised Before Send Update Shopify Product.
- `OnBeforeSendAddShopifyProductVariant(ShopifyShop: Record "Shpfy Shop"; var ShopifyVariant: Record "Shpfy Variant")` (integration): Raised Before Send Add Shopify Product Variant.
- `OnBeforeSendUpdateShopifyProductVariant(ShopifyShop: Record "Shpfy Shop"; var ShopifyVariant: Record "Shpfy Variant"; xShopifyVariant: Record "Shpfy Variant")` (integration): Raised Before Send Update Shopify Product Variant.
- `OnDoUpdateItemBeforeModify(var ShopifyShop: Record "Shpfy Shop"; var ShopifyProduct: Record "Shpfy Product"; var Item: Record Item; var IsModifiedByEvent: Boolean)` (integration): Raised Before Modify on Items.
- `OnDoUpdateItemVariantBeforeModify(var ShopifyShop: Record "Shpfy Shop"; var ShopifyVariant: Record "Shpfy Variant"; var ItemVariant: Record "Item Variant"; var IsModifiedByEvent: Boolean)` (integration): Raised Before Modify Items Variant.
- `OnAfterUpdateItemPicture(var Item: Record Item; ImageUrl: Text; InStream: InStream)` (integration): Raised After Modify Item Picture.
- `OnAfterUpdateItemVariantPicture(var ItemVariant: Record "Item Variant"; ImageUrl: Text; InStream: InStream)` (integration): Raised After Modify Item Variant Picture.
- `OnAfterFillInShopifyProductFields(Item: Record Item; var ShopifyProduct: Record "Shpfy Product")` (integration): Raised After Shopify Product fields are filled from Business Central Item. These fields are sent to Shopify when creating or updating a product.
- `OnAfterProductsToSynchronizeFiltersSet(var ShopifyProduct: Record "Shpfy Product"; Shop: Record "Shpfy Shop"; OnlyUpdatePrice: Boolean)` (integration): Raised after products to export are filtered.
- `OnAfterFillInProductVariantDataFromVariant(var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; ItemVariant: Record "Item Variant"; ItemUnitofMeasure: Record "Item Unit of Measure"; Shop: Record "Shpfy Shop")` (integration): Raised after the product variant data has been filled from Business Central Item, Item Variant, and Item Unit of Measure. This event allows customization of the Shopify variant after all standard fields are set, but only when an Item Variant is present.
- `OnAfterFillInProductVariantData(var ShopifyVariant: Record "Shpfy Variant"; Item: Record Item; ItemVariant: Record "Item Variant"; Shop: Record "Shpfy Shop")` (integration): Raised after the product variant data has been filled from Business Central Item and Item Variant (without Unit of Measure). This event allows customization of the Shopify variant after all standard fields are set.

## Across versions

- Present in: BC29-30
- Changed (declaration) in: none

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "codeunit", object_name: "Shpfy Product Events")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
