Skip to content

ProductSync error 'The resource is not set.' #104

@lorana94

Description

@lorana94

@bradbecker-ac / @jorgeeurekalabs

=== ActiveCampaign Product Sync Error Report ===
Generated: 2026-06-08T08:36:45Z
Magento: Magento CLI 2.4.8-p3
Plugin: activecampaign/module-integration 2.1.28 (GitHub main)
PHP: PHP 8.3.16 (cli) (built: Jan 17 2025 01:31:10) (NTS)
URL: [please contact Loran]

=== USER-FACING ERROR ===
The resource is not set.

=== WHEN IT HAPPENS ===

  • Saving ActiveCampaign config with Product Sync enabled in admin
  • Specifically when saving field: active_campaign/product_sync/cron_minute
  • Backend model: ActiveCampaign\Product\Model\Config\CronConfig

=== REPRODUCTION (CLI) ===
The resource isn't set.

=== STACK TRACE (captured via PHP) ===
Instantiated class: ActiveCampaign\Product\Model\Config\CronConfig
Resource name on model: []
Magento\Framework\Exception\LocalizedException: The resource isn't set.
#0 /var/www/html/vendor/magento/framework/Model/AbstractModel.php(681): Magento\Framework\Model\AbstractModel->_getResource()
#1 Command line code(14): Magento\Framework\Model\AbstractModel->save()
#2 {main}

=== ROOT CAUSE ANALYSIS ===
Product\Model\Config\CronConfig is created WITHOUT a resource model injected.
Order\Model\Config\CronConfig works because a compiled Interceptor exists from di:compile.
Product module (new in v2.1.28) has no di.xml wiring for CronConfig resource/runModelPath.
Missing compared to Magento core cron backends: argument resource + runModelPath in di.xml

=== DIAGNOSTIC: resource injection comparison ===
Order class=ActiveCampaign\Order\Model\Config\CronConfig\Interceptor resource=Magento\Config\Model\ResourceModel\Config\Data
Product class=ActiveCampaign\Product\Model\Config\CronConfig resource=NULL

=== RELEVANT PLUGIN FILE ===
vendor/activecampaign/module-integration/Product/Model/Config/CronConfig.php
vendor/activecampaign/module-integration/Product/etc/adminhtml/system.xml (cron_minute uses backend_model)
vendor/activecampaign/module-integration/Product/etc/di.xml (missing CronConfig DI)

=== MAGENTO LOGS (sanitized) ===
--- system.log (ActiveCampaign related) ---
[2026-06-08T08:20:41.800614+00:00] main.CRITICAL: Type Error occurred when creating object: ActiveCampaign\AbandonedCart\Model\Config\CronConfig\Interceptor, ActiveCampaign\AbandonedCart\Model\Config\CronConfig::__construct(): Argument #4 ($configWriter) must be of type Magento\Framework\App\Config\ConfigResource\ConfigInterface, Magento\Framework\App\Cache\TypeList\Interceptor given, called in /var/www/html/generated/code/ActiveCampaign/AbandonedCart/Model/Config/CronConfig/Interceptor.php on line 14 [] []
[2026-06-08T08:20:41.800872+00:00] main.ERROR: Type Error occurred when creating object: ActiveCampaign\AbandonedCart\Model\Config\CronConfig\Interceptor, ActiveCampaign\AbandonedCart\Model\Config\CronConfig::__construct(): Argument #4 ($configWriter) must be of type Magento\Framework\App\Config\ConfigResource\ConfigInterface, Magento\Framework\App\Cache\TypeList\Interceptor given, called in /var/www/html/generated/code/ActiveCampaign/AbandonedCart/Model/Config/CronConfig/Interceptor.php on line 14 [] []
--- activecampaign.log (API tokens redacted) ---
[2026-06-08T08:33:14.111734+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"GET","URL":"https://{account_url}.api-us1.com/api/3/fields?limit=20&offset=0","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":""} []
[2026-06-08T08:33:14.329510+00:00] ActiveCampaign.INFO: RESPONSE {"fields":[],"meta":{"total":"0","selected":null}} []
[2026-06-08T08:33:31.367672+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"GET","URL":"https://{account_url}.api-us1.com/api/3/fields?limit=20&offset=0","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":""} []
[2026-06-08T08:33:31.524953+00:00] ActiveCampaign.INFO: RESPONSE {"fields":[],"meta":{"total":"0","selected":null}} []
[2026-06-08T08:33:58.713397+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"GET","URL":"https://{account_url}.api-us1.com/api/3/contacts?filters[email]={email}","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":""} []
[2026-06-08T08:33:58.889424+00:00] ActiveCampaign.INFO: RESPONSE {"contacts":[],"meta":{"page_input":{"segmentid":null,"formid":0,"listid":0,"tagid":0,"limit":20,"offset":0,"search":null,"sort":null,"seriesid":0,"waitid":0,"status":-1,"forceQuery":0,"cacheid":"477a974caa99f42ba7e2c8529516a0bf"},"total":"0","sortable":true}} []
[2026-06-08T08:33:58.892331+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"POST","URL":"https://{account_url}.api-us1.com/api/3/contacts","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":"{"contact":{"email":"{email}","firstName":"{name}","lastName":"{lastname}","phone":"+{phone}","fieldValues":[]}}"} []
[2026-06-08T08:33:59.248552+00:00] ActiveCampaign.INFO: RESPONSE {"fieldValues":[],"contact":{"email":"{email}","phone":"+{phone}","firstName":"{name}","lastName":"{lastname}","cdate":"2026-06-08T03:33:59-05:00","udate":"2026-06-08T03:33:59-05:00","orgid":"0","orgname":"","accountContacts":[],"links":{"bounceLogs":"https://{account_url}.api-us1.com/api/3/contacts/3/bounceLogs","contactAutomations":"https://{account_url}.api-us1.com/api/3/contacts/3/contactAutomations?limit=2500&orders%5Blastdate%5D=DESC","contactData":"https://{account_url}.api-us1.com/api/3/contacts/3/contactData","contactGoals":"https://{account_url}.api-us1.com/api/3/contacts/3/contactGoals","contactLists":"https://{account_url}.api-us1.com/api/3/contacts/3/contactLists","contactLogs":"https://{account_url}.api-us1.com/api/3/contacts/3/contactLogs","contactTags":"https://{account_url}.api-us1.com/api/3/contacts/3/contactTags","contactDeals":"https://{account_url}.api-us1.com/api/3/contacts/3/contactDeals","deals":"https://{account_url}.api-us1.com/api/3/contacts/3/deals","fieldValues":"https://{account_url}.api-us1.com/api/3/contacts/3/fieldValues","geoIps":"https://{account_url}.api-us1.com/api/3/contacts/3/geoIps","notes":"https://{account_url}.api-us1.com/api/3/contacts/3/notes","organization":"https://{account_url}.api-us1.com/api/3/contacts/3/organization","plusAppend":"https://{account_url}.api-us1.com/api/3/contacts/3/plusAppend","trackingLogs":"https://{account_url}.api-us1.com/api/3/contacts/3/trackingLogs","scoreValues":"https://{account_url}.api-us1.com/api/3/contacts/3/scoreValues","automationEntryCounts":"https://{account_url}.api-us1.com/api/3/contacts/3/automationEntryCounts"},"fieldValues":[],"id":"3","organization":null}} []
[2026-06-08T08:33:59.251420+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"GET","URL":"https://{account_url}.api-us1.com/api/3/ecomCustomers?filters[email]={email}","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":""} []
[2026-06-08T08:33:59.369736+00:00] ActiveCampaign.INFO: RESPONSE {"ecomCustomers":[],"meta":{"total":0}} []
[2026-06-08T08:33:59.375490+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"POST","URL":"https://{account_url}.api-us1.com/api/3/ecomCustomers","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":"{"ecomCustomer":{"email":"{email}","firstName":"{name}","lastName":"{lastname}","phone":"+{phone}","fieldValues":[],"connectionid":"2","externalid":"{email}","acceptsMarketing":0}}"} []
[2026-06-08T08:33:59.601161+00:00] ActiveCampaign.INFO: RESPONSE {"connections":[{"service":"magento2-Default Store View","externalid":"default","name":"Default Store View","isInternal":"0","connectionType":"ecommerce","status":"1","syncStatus":"0","sync_request_time":null,"sync_start_time":null,"lastSync":null,"logoUrl":"https://{url}/static/version1775921150/adminhtml/Magento/backend/en_US/images/logo.svg","linkUrl":"https://{url}/","credentialExpiration":null,"cdate":"2026-04-11T10:39:18-05:00","udate":"2026-04-11T10:39:18-05:00","disconnectDate":null,"listId":"1","planTier":null,"links":{"options":"https://{account_url}.api-us1.com/api/3/connections/2/options","customers":"https://{account_url}.api-us1.com/api/3/connections/2/customers"},"id":"2","serviceName":"magento2-Default Store View"}],"ecomCustomer":{"email":"{email}","phone":"+{phone}","connectionid":"2","externalid":"{email}","avgRevenuePerOrder":0,"totalRevenue":0,"totalOrders":0,"totalProducts":0,"acceptsMarketing":0,"connection":"2","subscriberid":"3","first_name":"{name}","last_name":"{lastname}","links":{"connection":"https://{account_url}.api-us1.com/api/3/ecomCustomers/5/connection","subscriber":"https://{account_url}.api-us1.com/api/3/ecomCustomers/5/subscriber","orders":"https://{account_url}.api-us1.com/api/3/ecomCustomers/5/orders"},"id":"5","subscriber":"3"}} []
[2026-06-08T08:33:59.754361+00:00] ActiveCampaign.INFO: REQUEST {"METHOD":"POST","URL":"https://{account_url}.api-us1.com/api/3/ecomOrders","HTTP VERSION":"1.1","HEADERS":{"Content-Type":"application/json","Api-Token":"[REDACTED]},"BODY DATA":"{"ecomOrder":{"externalcheckoutid":"108","source":1,"email":"{email}","orderProducts":[{"externalid":"31","name":"Proteus Fitness Jackshirt","price":4500,"quantity":1,"sku":"MJ12-M-Blue","description":"

Part jacket, part shirt, the Proteus Fitness Jackshirt makes an ideal companion for outdoor training, camping or loafing on crisp days. Natural Cocona® technology brings breathable comfort and increased dryness along with UV protection and odor management. The drop-tail hem provides extra coverage when you're riding a bike or replacing a sink valve.<\/p>\n

• 1\/4 zip. Stand-up collar. <br \/>• Machine wash\/dry.<br \/>• Quilted inner layer.<\/p>","imageUrl":"https:\/\/{url}\/media\/catalog\/product\/cache\/207e23213cf636ccdef205098cf3c8a3\/m\/j\/mj12-orange_main_1.jpg","productUrl":"https:\/\/{url}\/proteus-fitness-jackshirt.html","category":"Jackets"}],"orderDiscounts":{"discountAmount":0},"orderUrl":"https:\/\/{url}\/checkout\/cart?ac_redirect=true","abandonedDate":"2026-04-11T11:47:05-04:00","externalCreatedDate":"2026-04-11T11:47:05-04:00","externalUpdatedDate":"2026-04-11T11:47:05-04:00","shippingMethod":"flatrate_flatrate","totalPrice":5000,"shippingAmount":500,"taxAmount":0,"discountAmount":0,"currency":"USD","orderNumber":"108","connectionid":"2","customerid":"5"}}"} []
[2026-06-08T08:33:59.969694+00:00] ActiveCampaign.INFO: RESPONSE {"connections":[{"service":"magento2-Default Store View","externalid":"default","name":"Default Store View","isInternal":"0","connectionType":"ecommerce","status":"1","syncStatus":"0","sync_request_time":null,"sync_start_time":null,"lastSync":null,"logoUrl":"https://{url}/static/version1775921150/adminhtml/Magento/backend/en_US/images/logo.svg","linkUrl":"https://{url}/","credentialExpiration":null,"cdate":"2026-04-11T10:39:18-05:00","udate":"2026-04-11T10:39:18-05:00","disconnectDate":null,"listId":"1","planTier":null,"links":{"options":"https://{account_url}.api-us1.com/api/3/connections/2/options","customers":"https://{account_url}.api-us1.com/api/3/connections/2/customers"},"id":"2","serviceName":"magento2-Default Store View"}],"ecomOrderProducts":[{"orderid":"3","connectionid":"2","externalid":"31","sku":"MJ12-M-Blue","name":"Proteus Fitness Jackshirt","description":"

Part jacket, part shirt, the Proteus Fitness Jackshirt makes an ideal companion for outdoor training, camping or loafing on crisp days. Natural Cocona® technology brings breathable comfort and increased dryness along with UV protection and odor management. The drop-tail hem provides extra coverage when you're riding a bike or replacing a sink valve.

• 1/4 zip. Stand-up collar.
• Machine wash/dry.
• Quilted inner layer.

","price":"4500","quantity":"1","category":"Jackets","imageUrl":"https://{url}/media/catalog/product/cache/207e23213cf636ccdef205098cf3c8a3/m/j/mj12-orange_main_1.jpg","productUrl":"https://{url}/proteus-fitness-jackshirt.html","createdDate":"2026-06-08T03:33:59-05:00","updatedDate":"2026-06-08T03:33:59-05:00","tags":[],"isOnSale":null,"brand":null,"averageRating":null,"tstamp":"2026-06-08T03:33:59-05:00","links":{"ecomOrder":"https://{account_url}.api-us1.com/api/3/ecomOrderProducts/7/ecomOrder"},"id":"7","ecomOrder":"3"}],"ecomOrder":{"externalcheckoutid":"108","source":1,"email":"{email}","currency":"USD","connectionid":"2","customerid":"5","orderUrl":"https://{url}/checkout/cart?ac_redirect=true","abandonedDate":"2026-04-11T10:47:05-05:00","externalCreatedDate":"2026-04-11T10:47:05-05:00","externalUpdatedDate":"2026-04-11T10:47:05-05:00","shippingMethod":"flatrate_flatrate","totalPrice":5000,"shippingAmount":500,"taxAmount":0,"discountAmount":0,"orderNumber":"108","totalProducts":1,"createdDate":"2026-06-08T03:33:59-05:00","updatedDate":"2026-06-08T03:33:59-05:00","state":2,"orderProducts":["7"],"orderDate":"2026-04-11T10:47:05-05:00","tstamp":"2026-06-08T03:33:59-05:00","links":{"connection":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/connection","customer":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/customer","orderProducts":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/orderProducts","orderDiscounts":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/orderDiscounts","orderActivities":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/orderActivities","subscriberConversions":"https://{account_url}.api-us1.com/api/3/ecomOrders/3/subscriberConversions"},"externalid":"","customer":"5","connection":"2","id":"3"}} [] --- exception.log: no Product Sync resource error logged (error surfaces in admin UI only) ---

=== INSTALLED AC MODULES ===
ActiveCampaign_Core
ActiveCampaign_AbandonedCart
ActiveCampaign_Customer
ActiveCampaign_Newsletter
ActiveCampaign_Order
ActiveCampaign_Product
ActiveCampaign_SyncLog

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions