Skip to content

Commit 3227a35

Browse files
onbuyukaclaude
andauthored
[Shopify] Remove B2B Plus-only plan restriction (#7605)
## Summary Shopify [expanded B2B features](https://changelog.shopify.com/posts/key-b2b-features-now-available-on-non-plus-plans) to all plans (Basic, Grow, Advanced, Plus), not just Plus. The connector currently restricts B2B to Plus plans only via the `B2B Enabled` field on the Shop table. This PR: - **Obsoletes the `B2B Enabled` field** (117) with `CLEAN29`/`CLEANSCHEMA32` guards — B2B features (companies, catalogs, company sync, B2B orders) are now unconditionally available on all plans - **Introduces `Staff Members Enabled` field** (207) — staff member GraphQL queries still require Plus, Plus Trial, Development, or Advanced plans, so this new field gates only staff-member-specific functionality - **Adds upgrade code** using `DataTransfer` to migrate existing `B2B Enabled = true` shops to `Staff Members Enabled = true` - **Removes all consumer code** that checked `B2B Enabled` for B2B features (ShopCard page visibility, Activities page filter, ImportOrder/StaffMemberAPI guards) - **Updates tests** to remove `B2B Enabled` assignments and update staff visibility test Fixes [AB#630316](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/630316) ## Changes by file | File | Change | |------|--------| | `ShpfyShop.Table.al` | Obsolete field 117, add field 207, update `GetShopSettings()` plan check (adds `Advanced`) | | `ShpfyShopCard.Page.al` | Remove 6x `Visible = Rec."B2B Enabled"`, unconditional company/catalog sync, gate StaffMembers on new field | | `ShpfyActivities.Page.al` | Remove `B2BEnabled` variable and B2B shop filter | | `ShpfyImportOrder.Codeunit.al` | Gate `StaffMember` query parameter on `Staff Members Enabled` instead of `B2B Enabled` | | `ShpfyStaffMemberAPI.Codeunit.al` | Gate early exit on `Staff Members Enabled` instead of `B2B Enabled` | | `ShpfyUpgradeMgt.Codeunit.al` | Add `StaffMembersEnabledUpgrade()` with `DataTransfer` (source filter + constant value) | | 4 test files | Remove `B2B Enabled := true` setup, update staff visibility test | ## How to review 1. **ShpfyShop.Table.al** — verify the obsolete field follows the `CLEAN29`/`CLEANSCHEMA32` dual-state pattern (compare with field 206). Verify `GetShopSettings()` now sets `Staff Members Enabled` for Plus, Plus Trial, Development, and Advanced plans. 2. **ShpfyShopCard.Page.al** — verify all B2B visibility gates are removed (companies, catalogs, market catalogs, sync companies, B2B company sync group). Verify `StaffMembers` action is now gated on the new `Staff Members Enabled` field. Verify the "Sync All" action now always syncs companies and catalog prices. 3. **ShpfyUpgradeMgt.Codeunit.al** — verify upgrade uses `AddSourceFilter` on `B2B Enabled = true` + `AddConstantValue(true)` to `Staff Members Enabled`. Verify tag is registered in `RegisterPerCompanyTags`. 4. **ShpfyImportOrder.Codeunit.al** / **ShpfyStaffMemberAPI.Codeunit.al** — verify staff member gating now uses `Staff Members Enabled` instead of `B2B Enabled`. 5. **Test files** — verify `B2B Enabled` assignments are removed and staff test uses `Staff Members Enabled`. ## Testing scenarios - Connect a Basic/Grow plan shop → B2B sections (companies, catalogs) should be visible and functional - Connect a Plus/Advanced plan shop → Staff Members action should be visible, staff member import should work - Connect a Basic plan shop → Staff Members action should NOT be visible - Upgrade from previous version → shops that had `B2B Enabled = true` should now have `Staff Members Enabled = true` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent cb275ec commit 3227a35

28 files changed

Lines changed: 210 additions & 53 deletions
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Documentation last updated
2-
commit: 40f9d4ce5f71b412b5dbfa8d17fd5150a13532ea
3-
date: 2026-03-24
2+
commit: 343aa21d1e5737d250aabf05cd9233d15c411cdc
3+
date: 2026-04-08
44
scope: full

src/Apps/W1/Shopify/App/CLAUDE.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ The Shopify Connector bridges Shopify e-commerce with Business Central ERP, bi-d
99

1010
## How it works
1111

12-
The Shop table (`ShpfyShop.Table.al`, ID 30102) is the god object. Nearly every configuration setting lives there: sync directions for items/customers/companies, mapping strategies, customer/item template codes, G/L account mappings for shipping/tips/gift cards/refunds, B2B flags, currency handling, webhook settings, and fulfillment service configuration. A single BC company can connect to multiple Shopify shops (each with its own Shop Code), and each shop gets its own set of configuration.
12+
The Shop table (`ShpfyShop.Table.al`, ID 30102) is the god object. Nearly every configuration setting lives there: sync directions for items/customers/companies, mapping strategies, customer/item template codes, G/L account mappings for shipping/tips/gift cards/refunds, plan-based feature flags, currency handling, webhook settings, and fulfillment service configuration. A single BC company can connect to multiple Shopify shops (each with its own Shop Code), and each shop gets its own set of configuration.
13+
14+
The `"Advanced Shopify Plan"` boolean field (207) on the Shop table gates features that require Plus, Plus Trial, Development, or Advanced plans. `GetShopSettings()` reads the Shopify plan and sets this flag automatically. B2B features (companies, catalogs, company sync) are now unconditionally available on all Shopify plans -- the old `"B2B Enabled"` field (117) has been obsoleted (CLEAN29/CLEANSCHEMA32 guards).
15+
16+
*Updated: 2026-04-08 -- B2B Enabled obsoleted, Advanced Shopify Plan added*
1317

1418
All Shopify API communication goes through GraphQL. The `ShpfyCommunicationMgt.Codeunit.al` is the single entry point for API calls. It constructs URLs using a versioned API path (currently `2026-01`), handles authentication, rate limiting, and retry logic. GraphQL queries are stored as `.graphql` resource files under `.resources/graphql/{Area}/`, loaded at runtime via `NavApp.GetResourceAsText()`. The `ShpfyGraphQLType` enum maps each query to its resource file using `{Area}_{QueryName}` naming, and the dispatcher loads the corresponding file instead of calling interface methods. The `ShpfyGraphQLRateLimit` codeunit (singleton) tracks Shopify's cost-based throttle -- it reads `restoreRate` and `currentlyAvailable` from responses and sleeps before issuing requests that would exceed the budget.
1519

@@ -56,7 +60,7 @@ Records link to BC entities via SystemId (GUID), not Code/No. For example, `Shpf
5660

5761
## Things to know
5862

59-
- The Shop table is the god object -- nearly every configuration setting lives there, with over 100 fields controlling sync directions, mapping strategies, account mappings, B2B flags, webhook config, and more.
63+
- The Shop table is the god object -- nearly every configuration setting lives there, with over 100 fields controlling sync directions, mapping strategies, account mappings, plan-based feature flags, webhook config, and more. The `"Advanced Shopify Plan"` field gates features requiring Plus/Advanced plans (currently staff members). B2B features are now unconditionally available on all plans.
6064
- All API calls go through GraphQL, never REST. Queries are `.graphql` resource files in `.resources/graphql/{Area}/`, loaded via `NavApp.GetResourceAsText()` and dispatched through the `ShpfyGraphQLType` enum.
6165
- Products use hash-based change detection (`"Image Hash"`, `"Tags Hash"`, `"Description Html Hash"`) via a custom hash algorithm to skip unnecessary API calls when nothing has changed.
6266
- Records link to BC entities via SystemId (GUID), not Code/No. -- FlowFields like `"Item No."` display the human-readable values via CalcFormula lookup. Renumbering BC items does not break Shopify links.

src/Apps/W1/Shopify/App/docs/business-logic.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ The export flow is driven by `ShpfyProductExport.Codeunit.al`. It iterates all S
1212

1313
The update flow relies heavily on hash-based change detection. Before making any API call, the codeunit computes the current hash of the product's tags, HTML description, and images, then compares them against the stored hashes on the Product record. Only fields that have actually changed result in API calls. This is critical because Shopify's GraphQL API has per-store rate limits, and a full product catalog update without change detection would quickly exhaust the budget.
1414

15-
Price sync can run independently of the full product sync via the `OnlyUpdatePrice` flag. When enabled, prices are batched into a bulk mutation (`ShpfyBulkUpdateProductPrice.Codeunit.al`) for efficiency. If the bulk operation fails, it falls back to individual variant price updates, reverting variant changes on failure.
15+
Price sync can run independently of the full product sync via the `OnlyUpdatePrice` flag. When enabled, prices are batched into a bulk mutation (`ShpfyBulkUpdateProductPrice.Codeunit.al`) for efficiency. If the bulk operation fails, it falls back to individual variant price updates, reverting variant changes on failure. Item price sync is skipped when the item's unit of measure is invalid, preventing errors from propagating into Shopify pricing data.
16+
17+
*Updated: 2026-04-08 -- Price sync skipped for invalid unit of measure*
1618

1719
The product body HTML is assembled from BC data by `CreateProductBody()` in the export codeunit -- it concatenates extended text, marketing text, and item attributes into an HTML structure. Events fire before and after this assembly (`OnBeforeCreateProductBodyHtml`, `OnAfterCreateProductBodyHtml`), allowing extensions to customize the output.
1820

@@ -52,7 +54,9 @@ Order processing is the most complex flow in the connector. It spans multiple co
5254

5355
### Import
5456

55-
`ShpfyImportOrder.Codeunit.al` takes an order from the staging table and creates the full Order Header and Order Lines. It parses the GraphQL response to populate all address blocks, financial fields (in both currencies), customer IDs, discount codes, attributes, tax lines, and risk assessments. The `OnAfterImportShopifyOrderHeader` and `OnAfterCreateShopifyOrderAndLines` events fire after import.
57+
`ShpfyImportOrder.Codeunit.al` takes an order from the staging table and creates the full Order Header and Order Lines. It parses the GraphQL response to populate all address blocks, financial fields (in both currencies), customer IDs, discount codes, attributes, tax lines, and risk assessments. Staff member handling during order import is gated by the Shop's `"Advanced Shopify Plan"` flag (true for Plus, Plus Trial, Development, and Advanced plans). The `OnAfterImportShopifyOrderHeader` and `OnAfterCreateShopifyOrderAndLines` events fire after import.
58+
59+
*Updated: 2026-04-08 -- Staff member gating moved from B2B Enabled to Advanced Shopify Plan*
5660

5761
### Mapping
5862

@@ -91,6 +95,10 @@ The `"Create Invoices From Orders"` setting causes fully-fulfilled orders to be
9195

9296
Special line types require attention: gift card purchases map to the `"Sold Gift Card Account"` G/L account, tips map to `"Tip Account"`, and shipping charges map to `"Shipping Charges Account"`. These are all configured on the Shop record.
9397

98+
The Shopify Order page includes contact lookup and validation, allowing users to verify and resolve customer contact information directly from the order.
99+
100+
*Updated: 2026-04-08 -- Contact lookup/validation added to Shopify Order page*
101+
94102
## Fulfillment
95103

96104
Fulfillment sync runs when BC sales shipments are posted. `ShpfyOrderFulfillments.Codeunit.al` creates fulfillment records in Shopify from the posted shipment data, including tracking numbers and carrier information.
@@ -136,3 +144,9 @@ Export to Shopify is handled by `ShpfyCustomerExport.Codeunit.al`. It creates or
136144
Company sync follows the same pattern but with `ShpfyCompanyImport.Codeunit.al` and `ShpfyCompanyExport.Codeunit.al`. Company mapping uses `ICompanyMapping` with strategies including By Email/Phone, By Tax ID, and Default Company. The B2B chain is: Company -> Company Location -> Customer (the location's main contact becomes the BC customer).
137145

138146
When a B2B order arrives, the customer resolution differs from D2C: the connector looks up the company's main contact customer ID and the company location to determine the sell-to and ship-to customer numbers. This can result in different BC customers for different company locations of the same Shopify company.
147+
148+
## Test infrastructure
149+
150+
Test mocking uses the HttpClientHandler pattern rather than `IsTestInProgress` checks. Test codeunits inject a mock HTTP handler that intercepts Shopify API calls and returns canned responses, avoiding conditional test logic scattered through production code.
151+
152+
*Updated: 2026-04-08 -- Test mocking migrated from IsTestInProgress to HttpClientHandler*

src/Apps/W1/Shopify/App/docs/data-model.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ The Shop table is the center of the configuration universe. Every sync operation
88

99
Synchronization Info stores the last sync timestamp per shop and sync type (products, customers, orders, inventory, etc.). It is keyed on Shop Code + Synchronization Type. For order sync specifically, the key is the Shop's integer hash (`"Shop Id"`) rather than the Shop Code -- this allows multiple BC companies connected to the same Shopify store to share one order sync cursor without re-importing the same orders.
1010

11+
The Shop table includes plan-based feature flags. The `"Advanced Shopify Plan"` field (207) is set to true for Plus, Plus Trial, Development, and Advanced plans, and currently gates staff member features. The old `"B2B Enabled"` field (117) has been obsoleted (CLEAN29/CLEANSCHEMA32 guards) -- B2B features are now unconditionally available on all plans.
12+
13+
*Updated: 2026-04-08 -- B2B Enabled obsoleted, Advanced Shopify Plan added*
14+
1115
Shop Location maps Shopify fulfillment locations to BC warehouse locations. Each mapping includes a stock calculation enum that determines how to compute available stock for that pairing.
1216

1317
```mermaid
@@ -131,11 +135,15 @@ erDiagram
131135
COMPANY }o--|| SHOP : belongs_to
132136
```
133137

134-
The B2B order flow differs from D2C: when an order has a `"Company Id"`, the connector uses the company mapping strategy instead of the customer mapping strategy, and it looks up the company location to determine the bill-to/ship-to customer.
138+
The B2B order flow differs from D2C: when an order has a `"Company Id"`, the connector uses the company mapping strategy instead of the customer mapping strategy, and it looks up the company location to determine the bill-to/ship-to customer. B2B features (companies, catalogs, company sync) are available on all Shopify plans -- they are no longer gated by a plan-specific flag.
139+
140+
*Updated: 2026-04-08 -- B2B no longer gated by plan*
135141

136142
## Payments and transactions
137143

138-
Order Transactions record the individual payment events on an order (authorization, capture, refund). They are imported from Shopify and store amounts, gateway names, and status.
144+
Order Transactions record the individual payment events on an order (authorization, capture, refund). They are imported from Shopify and store amounts, gateway names, and status. A `"Shop"` field links each transaction to its Shop record (populated via upgrade DataTransfer from Order Header).
145+
146+
*Updated: 2026-04-08 -- Shop field added to OrderTransaction*
139147

140148
Gift Cards have their own table because they serve dual roles: as a line item when purchased and as a payment instrument when redeemed.
141149

src/Apps/W1/Shopify/App/src/Base/Codeunits/ShpfyUpgradeMgt.Codeunit.al

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ codeunit 30106 "Shpfy Upgrade Mgt."
4242
SetShopifyCatalogsType();
4343
CreateInvoicesFromOrdersUpgrade();
4444
OrderTransactionShopCodeUpgrade();
45+
HasAdvancedShopifyPlanUpgrade();
4546
end;
4647

4748
internal procedure UpgradeTemplatesData()
@@ -514,6 +515,24 @@ codeunit 30106 "Shpfy Upgrade Mgt."
514515
UpgradeTag.SetUpgradeTag(GetOrderTransactionShopCodeUpgradeTag());
515516
end;
516517

518+
local procedure HasAdvancedShopifyPlanUpgrade()
519+
var
520+
Shop: Record "Shpfy Shop";
521+
UpgradeTag: Codeunit "Upgrade Tag";
522+
ShopDataTransfer: DataTransfer;
523+
begin
524+
if UpgradeTag.HasUpgradeTag(GetHasAdvancedShopifyPlanUpgradeTag()) then
525+
exit;
526+
527+
ShopDataTransfer.SetTables(Database::"Shpfy Shop", Database::"Shpfy Shop");
528+
ShopDataTransfer.AddSourceFilter(Shop.FieldNo("B2B Enabled"), '=%1', true);
529+
ShopDataTransfer.AddConstantValue(true, Shop.FieldNo("Advanced Shopify Plan"));
530+
ShopDataTransfer.UpdateAuditFields := false;
531+
ShopDataTransfer.CopyFields();
532+
533+
UpgradeTag.SetUpgradeTag(GetHasAdvancedShopifyPlanUpgradeTag());
534+
end;
535+
517536
internal procedure GetAllowOutgoingRequestseUpgradeTag(): Code[250]
518537
begin
519538
exit('MS-445989-AllowOutgoingRequestseUpgradeTag-20220816');
@@ -589,6 +608,11 @@ codeunit 30106 "Shpfy Upgrade Mgt."
589608
exit('MS-610671-OrderTransactionShopCodeUpgrade-20251022');
590609
end;
591610

611+
local procedure GetHasAdvancedShopifyPlanUpgradeTag(): Code[250]
612+
begin
613+
exit('MS-630316-HasAdvancedShopifyPlanUpgrade-20260408');
614+
end;
615+
592616
local procedure GetDateBeforeFeature(): DateTime
593617
begin
594618
exit(CreateDateTime(DMY2Date(1, 8, 2022), 0T));
@@ -608,5 +632,6 @@ codeunit 30106 "Shpfy Upgrade Mgt."
608632
PerCompanyUpgradeTags.Add(GetShopifyCatalogsTypeUpgradeTag());
609633
PerCompanyUpgradeTags.Add(GetCreateInvoicesFromOrdersUpgradeTag());
610634
PerCompanyUpgradeTags.Add(GetOrderTransactionShopCodeUpgradeTag());
635+
PerCompanyUpgradeTags.Add(GetHasAdvancedShopifyPlanUpgradeTag());
611636
end;
612637
}

src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyActivities.Page.al

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ page 30100 "Shpfy Activities"
3838
ApplicationArea = All;
3939
DrillDownPageId = "Shpfy Companies";
4040
ToolTip = 'Specifies the number of imported companoes that aren''t mapped.';
41-
Visible = B2BEnabled;
4241
}
4342
field(UnmappedProducts; Rec."Unmapped Products")
4443
{
@@ -154,10 +153,6 @@ page 30100 "Shpfy Activities"
154153
Commit();
155154
end;
156155

157-
Shop.SetRange("B2B Enabled", true);
158-
B2BEnabled := not Shop.IsEmpty();
159-
160-
Shop.Reset();
161156
Shop.SetRange(Enabled, true);
162157
if Shop.FindFirst() then begin
163158
ApiVersion := CommunicationMgt.GetApiVersion();
@@ -166,6 +161,4 @@ page 30100 "Shpfy Activities"
166161
end;
167162
end;
168163

169-
var
170-
B2BEnabled: Boolean;
171164
}

src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,6 @@ page 30101 "Shpfy Shop Card"
352352
}
353353
group("B2B Company Synchronization")
354354
{
355-
Visible = Rec."B2B Enabled";
356355
field("Company Import From Shopify"; Rec."Company Import From Shopify")
357356
{
358357
ApplicationArea = All;
@@ -389,6 +388,7 @@ page 30101 "Shpfy Shop Card"
389388
field("Auto Create Catalog"; Rec."Auto Create Catalog")
390389
{
391390
ApplicationArea = All;
391+
Visible = Rec."Advanced Shopify Plan";
392392
}
393393
field("Company Metafields To Shopify"; Rec."Company Metafields To Shopify")
394394
{
@@ -745,7 +745,6 @@ page 30101 "Shpfy Shop Card"
745745
RunObject = Page "Shpfy Companies";
746746
RunPageLink = "Shop Id" = field("Shop Id");
747747
ToolTip = 'Add, view or edit detailed information for the companies.';
748-
Visible = Rec."B2B Enabled";
749748
}
750749
action(Catalogs)
751750
{
@@ -759,7 +758,7 @@ page 30101 "Shpfy Shop Card"
759758
RunObject = Page "Shpfy Catalogs";
760759
RunPageLink = "Shop Code" = field(Code);
761760
ToolTip = 'View a list of Shopify B2B catalogs for the shop.';
762-
Visible = Rec."B2B Enabled";
761+
Visible = Rec."Advanced Shopify Plan";
763762
}
764763
action(MarketCatalogs)
765764
{
@@ -773,7 +772,6 @@ page 30101 "Shpfy Shop Card"
773772
RunObject = Page "Shpfy Market Catalogs";
774773
RunPageLink = "Shop Code" = field(Code);
775774
ToolTip = 'View a list of Shopify market catalogs for the shop.';
776-
Visible = Rec."B2B Enabled";
777775
}
778776
action(Languages)
779777
{
@@ -839,7 +837,7 @@ page 30101 "Shpfy Shop Card"
839837
RunObject = Page "Shpfy Staff Mapping";
840838
RunPageLink = "Shop Code" = field(Code);
841839
ToolTip = 'View a list of Shopify Staff Members for the shop.';
842-
Visible = Rec."B2B Enabled";
840+
Visible = Rec."Advanced Shopify Plan";
843841
}
844842
}
845843
area(Processing)
@@ -1009,7 +1007,6 @@ page 30101 "Shpfy Shop Card"
10091007
PromotedCategory = Category5;
10101008
PromotedOnly = true;
10111009
ToolTip = 'Synchronize the companies with Shopify. The way companies are synchronized depends on the B2B settings in the Shopify Shop Card.';
1012-
Visible = Rec."B2B Enabled";
10131010

10141011
trigger OnAction()
10151012
var
@@ -1126,10 +1123,8 @@ page 30101 "Shpfy Shop Card"
11261123
BackgroundSyncs.InventorySync(Rec);
11271124
BackgroundSyncs.ProductImagesSync(Rec, '');
11281125
BackgroundSyncs.ProductPricesSync(Rec);
1129-
if Rec."B2B Enabled" then begin
1130-
BackgroundSyncs.CompanySync(Rec);
1131-
BackgroundSyncs.CatalogPricesSync(Rec, '', "Shpfy Catalog Type"::" ");
1132-
end;
1126+
BackgroundSyncs.CompanySync(Rec);
1127+
BackgroundSyncs.CatalogPricesSync(Rec, '', "Shpfy Catalog Type"::" ");
11331128
end;
11341129
}
11351130
}

src/Apps/W1/Shopify/App/src/Base/Tables/ShpfyShop.Table.al

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -717,11 +717,21 @@ table 30102 "Shpfy Shop"
717717
DataClassification = SystemMetadata;
718718
InitValue = true;
719719
}
720+
#if not CLEANSCHEMA32
720721
field(117; "B2B Enabled"; Boolean)
721722
{
722723
Caption = 'B2B Enabled';
723724
DataClassification = SystemMetadata;
725+
ObsoleteReason = 'B2B features are now available on all Shopify plans.';
726+
#if CLEAN29
727+
ObsoleteState = Removed;
728+
ObsoleteTag = '32.0';
729+
#else
730+
ObsoleteState = Pending;
731+
ObsoleteTag = '29.0';
732+
#endif
724733
}
734+
#endif
725735
field(118; "Can Update Shopify Companies"; Boolean)
726736
{
727737
Caption = 'Can Update Shopify Companies';
@@ -928,6 +938,11 @@ table 30102 "Shpfy Shop"
928938
#endif
929939
}
930940
#endif
941+
field(207; "Advanced Shopify Plan"; Boolean)
942+
{
943+
Caption = 'Advanced Shopify Plan';
944+
DataClassification = SystemMetadata;
945+
}
931946
}
932947

933948
keys
@@ -1114,8 +1129,8 @@ table 30102 "Shpfy Shop"
11141129
JResponse := CommunicationMgt.ExecuteGraphQL('{"query":"query { shop { name plan { publicDisplayName partnerDevelopment shopifyPlus } weightUnit } }"}');
11151130
if JResponse.SelectToken('$.data.shop.plan', JItem) then
11161131
if JItem.IsObject then
1117-
Rec."B2B Enabled" := JsonHelper.GetValueAsBoolean(JItem, 'shopifyPlus') or
1118-
(JsonHelper.GetValueAsText(JItem, 'publicDisplayName') in ['Plus Trial', 'Development']);
1132+
Rec."Advanced Shopify Plan" := JsonHelper.GetValueAsBoolean(JItem, 'shopifyPlus') or
1133+
(JsonHelper.GetValueAsText(JItem, 'publicDisplayName') in ['Plus Trial', 'Development', 'Advanced']);
11191134
Rec."Weight Unit" := ConvertToWeightUnit(JsonHelper.GetValueAsText(JResponse, 'data.shop.weightUnit'));
11201135
end;
11211136

0 commit comments

Comments
 (0)