Dette dokument beskriver den aktuelle runtime-resolvering af bestillingskontekst for klientkonti i Shop. Fokus er nuværende adfærd i kode, ikke ønsket fremtidig adfærd.
Konto: klientkontoen der bestiller.Program: kontoens CurrentProgramId (med Shop-udvidelse i ShopProgram).Forfædre: parent-konti op gennem kontohierarkiet.ShopProgram: programudvidelse med bl.a. prisgruppe, tilladte metoder/kategorier og bestillingsflags.CurrentProgramId.Resolveres i ShopClientAccountInfo.ComputeEffectivePriceGroupId i to trin:
ShopClientAccount.ClientPriceGroupId.ShopProgram.DefaultPriceGroupId.null.Konsekvens: konto-specifik prisgruppe vinder altid over program-standard.
ShopProgramAvailabilityUtils bruger kontoens aktuelle program (ingen forfader-traversering her):
AvailablePaymentMethodRelations -> tilladte betalingsmetoder.AvailableShippingMethodRelations -> tilladte leveringsmetoder.AvailableCategoryRelations -> tilladte kategorier.Hvis program ikke findes, returneres ingen program-afgrænsning.
ShopClientAccountInfo beregner bl.a.:
IsInvoicingOnParentAccount:
IsInvoicingOnParentAccount, ellersIsSubAccountsInvoicingOnParentAccountByDefault, ellersIsSubAccountTokenLoginEnabled).IsDeliveryWithParentAccount:
IsDeliveryWithParentAccount eller parent-programmets standard,IsSubAccountPartialOrderingEnabled == true.IsSelfOrderingEnabled:
true, medmindre kontoens program eksplicit sætter IsSelfOrderingEnabled == false.IsEndRecipientOrderingEnabled:
true når kontoens program eksplicit sætter feltet til true.RepeatOrderingOnboardingRestEndpointContributor.ResolveScope bruger program + forfaderfallback:
CurrentProgramId: læs ShopProgram.DefaultOrderingTimeCycleId vælges.ShopTimeCycle har:
IsProductNeedsEnabled == true ellerIsSubscriptionOrderingEnabled == true.time_cycle.global_program (hvis program blev fundet) eller none.Konsekvens: onboarding-timecycle kan komme fra forfaderkontoens program, ikke kun den valgte konto.
Udbyder-kontekst for en klientkonto starter med provider_account_id-relationen:
AccountWithProviderRegistration), som kan være:
ProviderAccountId, opløses ForcedProviderDepartmentId fra provider-kontoens DepartmentId.ForcedProviderDepartmentId = null.Konsekvens:
Når ForcedProviderDepartmentId er null, er der ikke en kontobaseret tvungen provider-afdeling.
Det betyder ikke nødvendigvis fri adgang i praksis: