Skip to main content
Arrow Backward IconBack to Overview

Core 2.0.746

July 16, 2024

Released on all test and acceptance environments on July 16, 2024

Will be released to production in EUW and ASE on July 22, 2024*

Will be released to production in CUS on July 23, 2024*


release notes image

Breaking

No breaking changes.

Settings & functionalities

🆕 Matching settings to functionalities

A new batch of settings have had functionalities attached.

You can read more about the details below, or check the affected settings directly.

Details

Context: We intend for each setting to be linked to a specific functionality within EVA. This ensures that only designated roles will have the ability to modify certain settings, allowing for more precise control over your environments.

Example: For instance, the setting APIGiftCard:BaseUrl will be associated with the functionality named GiftCardConfiguration.

Implementation Plan: Given the extensive nature of EVA's settings (approximately 1500 in total), we will be rolling these out in batches, once every EVA Drop - effectively once every four weeks. Several batches of these adjustments have already been included in the following EVA Core drops:

  • 2.0.726
  • 2.0.730
  • 2.0.735
  • 2.0.738
  • 2.0.742
  • 2.0.746

Timeline: This new batch of changes is now available on your Test and Acceptance environments. These changes will be deployed to Production environments next week with EVA Core drop 2.0.747 (July 23). We anticipate completing this process over approximately 3 more EVA Drops until all settings are included.

Action Required: We encourage you to review this batch of settings, which are already documented on our Docs. Ensure that the roles assigned within your organization align appropriately with the functionalities necessary for access to these settings.

List of settings combined with functionalities in this EVA Core Drop
SettingFunctionality
ShoppingCart:CreateDummiesOrders
ShoppingCart:CreateNewCartWhenRequestedIsCancelledOrders
Slack:Channel:ClientNone
Slack:Channel:DebugNone
Slack:Channel:ErrorNone
Slack:EnabledNone
Slack:IconUrlNone
Slack:UrlNone
Slack:UsernameNone
Sms:CustomerCreated:SendCustomers
Sms:OrderPlaced:SendOrderStatus
Sms:StockReservation:SendNone
Smtp:EnableSslNone
Smtp:EnableStartTlsNone
Smtp:HostNone
Smtp:PasswordNone
Smtp:PortNone
Smtp:TimeoutInSecondsNone
Smtp:UseInternationalDeliveryFormatNone
Smtp:UsernameNone
SmtpFromAddressNone
SmtpFromDisplayNameNone
SplitEmployeesAccountsEmployeeData
StepXml:ClassificationBlacklistNone
StepXml:ClassificationQueryChildrenNone
StepXml:ExcludeFromNavigation:EnabledNone
StepXml:Ftp:HostNone
StepXml:Ftp:PasswordNone
StepXml:Ftp:ReadWriteTimeoutInSecondsNone
StepXml:Ftp:UserNameNone
StepXml:ImportAsDisableBackorderNone
StepXml:MarketingMainRitualsNone
StepXml:UseZipFilesNone
Orders:ReturnToSupplier:DefaultStockLabelReturnToSupplierOrders
Orders:ReturnToSupplier:HoldingStockLabelReturnToSupplierOrders
Orders:ReturnToSupplier:RequireOrderValidationReturnToSupplierOrders
Orders:ReturnToSupplier:UseExcludePolicyOnShipmentReturnToSupplierOrders
Orders:ReturnToSupplier:PlaceReturnToSupplierOrderEmailAddressReturnToSupplierOrders
Orders:ReturnToSupplier:ShipReturnToSupplierOrderEmailAddressReturnToSupplierOrders
StockReplenishmentTasks:AutoGenerateStockReplenishments
StockReplenishmentTasks:AutoGenerateCycleCountZoneResetStockReplenishments
StockReplenishmentTasks:ExpirationTimeInHoursStockReplenishments
StockReplenishmentTasks:GroupProductPropertyStockReplenishments
StockReplenishmentTasks:ProductPropertiesStockReplenishments
StockReplenishmentTasks:ZonesStockReplenishments
StockReservation:AllowNASCAdjustStock
StockReservation:OrderProductsInSameOrderUserTasks
StockReservation:ReminderDaysUserTasks
StockReservation:SendCommunicationForInStoreReservationsUserTasks
StockTimeline:IgnoreOverduePurchaseOrderThresholdInDaysNone
StockTimeline:MaxReservationDaysBeforeRequestedDateNone
StockTimeline:PurchaseOrderProcessingTimeNone
StockTimeline:StockLevelCommitThresholdNone
StockReservation:ReactivateReservationTasksOnSufficientStockUserTasks
SupplierPurchaseOrderAlternativeMappingPurchaseOrders
SupplyAndDemand:PreferCurrentStockOverFutureStockThresholdInDaysAdjustStock
Template:ProductPropertiesMessageTemplates
Shipcloud:ApiKeyShippingMethods
Shipcloud:DefaultParcelHeightShippingMethods
Shipcloud:DefaultParcelLengthShippingMethods
Shipcloud:DefaultParcelWeightShippingMethods
Shipcloud:DefaultParcelWidthShippingMethods
Shipcloud:DPDAccountIDShippingMethods
Shipcloud:EnabledShippingMethods
Shipcloud:EndpointShippingMethods
Shipcloud:IsDeliveryReceiptShippingMethods
Shipcloud:LabelFormatShippingMethods
ShipFromStore:CompleteDeadlineTasks
ShipFromStore:CompositionTasks
ShipFromStore:DeliveryConfirmationBaseUrlTasks
ShipFromStore:DisablePickReceiptTasks
ShipFromStore:DisablePrintingTasks
ShipFromStore:DisableShipReceiptTasks
ShipFromStore:ExternalLabelHandlerPrintTypeTasks
ShipFromStore:LabelProductPropertiesTasks
ShipFromStore:SeparatePrintTaskForExternalLabelHandlersTasks
ShipFromStore:ShowBundlesWithServiceAsAssemblyDuringPackTasks
ShipFromStore:StartDeadlineTasks
Shipment:AutoCompleteShipmentShipmentSettings
Shipment:AutoGenerateShipmentBackendIDForInterbranchOrdersShipmentSettings
Shipment:GenerateLocalBackendIDShipmentSettings
Shipment:ReceiveMethodDeterminatorShipmentSettings
Shipment:RequireReceiveMethodReasonShipmentSettings
Shipment:ShipRemainingChildLinesShipmentSettings
Shipment:ValidateDuplicateBackendIDsShipmentSettings
ShipmentDocumentGeneratorNameShipmentSettings
ShipmentDocumentsToGenerateShipmentSettings
ShipmentDocumentToUseForPrintingShipmentSettings
ShipmentExporterShipmentSettings
ShippingCosts:CalculateWithoutShippingAddressShippingCosts
ShippingCosts:DescriptionShippingCosts
ShippingCostsMomentOfShipmentShippingCosts
ShippingMethods:SetSingleAvailableShippingMethodOnOtherLinesShippingMethods
ShippingMethods:UseLegacyFilterWhenSettingAShippingMethodShippingMethods
ShipFromStore:DisableAutomaticReceiveShipment (deprecated)UserTasks
ShipFromStore:DeliverDeadline (deprecated)UserTasks
ShipFromStore:AutoAssignNextUserTaskUserTasks
ShipFromStore:FanoutTaskLabelUserTasks
ShipFromStore:CheckShipFromStoreDeliveryType (deprecated)UserTasks
ShipFromStore:PrintShouldCompletePickTask (deprecated)UserTasks
ShippingCosts:ExportedLinesCanIncreaseShippingCostsShippingCosts
ReportRenderer:AbortOnErrorNone
ReportRenderer:ErrorsEmailAddressNone
ReportRenderer:LoggingNone
ReportRenderer:NotifyOnErrorNone
ReportRenderer:TimeoutNone
RequiredData:ClearValidMessagesNone
RequiredData:MaximumOrderAmountNone
RequiredData:MinimumOrderAmountNone
RequiredData:MovePaymentValidationToInvoiceForReturnsNone
RequiredData:RequireCreateOrderNone
RequiredData:RequireCustomerInfoAlwaysNone
RequiredData:RequireDeliveryPaymentNone
RequiredData:RequireOrderPaymentNone
RequiredData:RequireShippingMethodForDeliveryNone
RequiredData:RequireSignatureForPaymentHandledByCarrierNone
RequiredData:RequireSignatureForUnPaidDeliveryNone
RequiredData:ValidateAvailableCountriesNone
RequiredData:ValidateAvailableShippingMethodsNone
RequiredData:ValidateCustomerNone
ReservationCleanupTasks:EnabledTasks
ReservationDeviationTasks:EnabledTasks
ResolveNegativeStockDuringPeriodClosingFinancialPeriodClosing
Returnable:InvoicedDaysReturnOrder
ReturnOrderValidationErrorOnInvalidLinesReturnOrder
ReturnToSupplier:ExportReturnToSupplierOrders
ReturnToSupplier:ShippingOptionReturnToSupplierOrders
UniqueInvoiceNumberSequenceInvoices
UniqueInvoiceNumberSequencePerTypeInvoices
UnprocessedFinancialPeriods:ToFinancialPeriods
UseAddressBookCustomers
UseExpectedCompletionTimeOnReceiveShipmentTaskTasks
UseInvoiceOutputFacadeNone
UseLegacyReceiptPrintingBehaviorNone
UseOrderOrchestrationOrderFulFillments
UseOrderOrchestrationForReturnOrdersOrderFulFillments
User:GetCompanyForUserNotFoundEmptyResponseNone
UserCards:AllowRefundsWithoutOriginalTransactionRefunds
UserSearch:FilterOnCountryInStoresNone
UserSearch:NumberOfReplicasNone
UserSearch:NumberOfShardsNone
UserSearch:UseNewUserTypeFilteringNone
UserTasks:CreateCycleCountOnNoStockPartialPickCompletionCycleCounts
ProductPropertyNone
ExpectedValueNone
ProductMarkerValueNone
UserTasks:ProductMarkerForTasksNone
UserTasks:ProductPropertiesNone
UseUnifiedOrdersNone
VerifyPaidPickupOrders:EnabledVerifyOrder
WaitingForStock:MinimumStockQuantityAdjustStock
WaldoDebugNone
WaldoEnabledNone
WaldoTimeoutInSecondsNone
WarehouseOrderExporter:Cancellation:AllowNone
WarehouseOrderExporter:EndpointNone
WarehouseOrderExporter:Modification:AllowNone
WarehouseOrderExporter:TokenNone
WorkedHours:CorrectionTimeCorrectWorkedHours
ZipCode:ProviderNone
TestEnvironmentFallbackIpAddressNone
TestEnvironmentFallbackIpAddressEnabledNone
TestSuite:Deprecation:OptIn:ExecutionNone
TestSuite:Deprecation:OptIn:IntroducedNone
TestSuite:Deprecation:OptIn:TypingsNone
TestSuite:Deprecation:OptOut:ExecutionNone
TestSuite:Deprecation:OptOut:IntroducedNone
TestSuite:Deprecation:OptOut:TypingsNone
ThermalPrinting:ReprintWatermarkBlobIDPrintBlobs
ThermalPrinting:SupportGiftReceiptsNone
ThreadPool:MinWorkerThreadsNone
Throttle:Login:EnabledLogin
Throttle:Login:Ip:LifetimeLogin
Throttle:Login:Ip:LimitLogin
Throttle:Login:Pin:LifetimeLogin
Throttle:Login:Pin:LimitLogin
Throttle:Login:User:LifetimeLogin
Throttle:Login:User:LimitLogin
Thunderstock:AccessKeyNone
Thunderstock:BucketNone
Thunderstock:ClientIDNone
Thunderstock:MaxLineCountNone
Thunderstock:RegionNone
Thunderstock:SecretNone
TimeRegistration:AllowPeriodClosingWithClockedInUsersFinancialPeriodClosing
TrackingProviderNameNone
Translations:ProductionTemplatesMessageTemplates
Translations:TestTemplatesMessageTemplates
Treazure:JSONAuthenticationEndPointNone
Treazure:LoginIDNone
Treazure:LoginPasswordNone
Treazure:RetailerIDNone
Throttle:Login:Ip:WhitelistNone
SearchOrders:FilterOnCurrentOrganizationUnitIDOrders
Security:DenyLoginInOtherOrganizationUnitNone
Security:ElevatedFunctionalityProviderNone
Security:Password:LoginValidationNone
Security:Password:MinimumHashSecurityLevelNone
Security:Password:PasswordValidationNone
Security:Password:ReauditDaysNone
Security:TemporaryElevationCode:ExpireInMinutesNone
Security:VisibilityGroups:Orders:EnabledVisibilityGroups
Security:VisibilityGroups:OrganizationUnits:EnabledVisibilityGroups
Security:VisibilityGroups:Users:EnabledVisibilityGroups
Security:VisibilityGroups:Users:UseDefaultGroupVisibilityGroups
Sellability:DisableDeletedNone
Sellability:MinimumSalePricePricing
Sellability:RequireSalePricePricing
SessionDuration:DefaultNone
SessionDuration:EmployeeNone
SessionDuration:MagicLinkNone
SessionDuration:TemporaryNone
SetShipFromWhenUsingOrderOrchestrationNone
SetupCompletedNone

Compliance

✅ SDI & NTH Support

The GetInvoiceExportDocuments service is now being utilized to support both SDI and NTH.

An announcement via our notes will be made once this is also supported via the Admin Suite chapter E-invoices.


🇩🇪 Germany

🆕 Payment Type Name on Receipts

The Receipts stencil in Germany now displays the payment type name.

✅ Global Blue changes

We made some changes when it comes to eligibility for using Global Blue tax free forms.

🇵🇱 Poland

The following changes apply:

  • Items which are 100 % discounted are not eligible for a tax refund, and therefore will no longer be shown on the Global Blue tax refund form.
  • Items with a price of 0 wll also no longer appear on the form.
  • Services sold will not appear on the form.
  • Services sold will not be taken into account for reaching the minimum gross sales amount.
  • The Global Blue option will no longer be available when buying only a service.
🇮🇹 Italy
  • Since giftcard products are not eligible for tax refund, they will not be transmitted to Global Blue.
  • Additionally, giftcards will not count towards the threshold condition for the tax free eligibility.

Properties

🆕 BackendSystemID in Event Exports from Cases

We've added the BackendSystemID to the event export target for Cases. More on event export targets here

🆕 CustomFieldBackendID in GetRepair

To help simplify integrations with third parties, if custom fields have a BackendID, it will now be included in the GetRepair response as CustomFieldBackendID.

✅ IncludedProductProperties in ListProductGiftCards

To make for a more efficient use of service calls, we've added a new optional property to the ListProductGiftCards service call: IncludedProductProperties.

Details

The new property IncludedProductProperties in ListProductGiftcards works similar to other services which include product details.

The service's response exposes the Product property with the additional product information requested.

{
IncludedProductProperties: ["backend_id", "custom_id"],
}

{
Result: {
"PageConfig": {
"Filter": {},
"Start": 0,
"Limit": 50,
"SortDirection": 0
},
"Page": [
{
"ID": 1,
"ProductID": 894,
"ProductName": "Example Giftcard",
"Product": {
"product_id": 1234,
"backend_id": "Example_Giftcard",
"custom_id": "eg1234"
},
"GiftCardConfigurationID": 2,
"GiftCardConfigurationName": "INTERSOLVE",
"IsDigital": false
},
...
],
...
}
}

🆕 OrderLineID in Orders Data lake export

The Orders Data lake export now contains an OrderlineID property in the OrderLines' OrderLedgers object.

🆕 BackendSystemID in scripting

You can now use a BackendSystemID when scripting. This will for one allow for easier routing and reporting of return types.

Please bear in mind however, that this property is being phased out slowly across EVA in favor of unique BackendIDs.

Rectification 14-08-24

While this drop mentions including a BackendSystemID, this was ultimately not introduced. The property that did get introduced was BackendID.

Services

✅ Validating Roles on User types

From now on, roles can only be added to user types which are explicitly specified in that role.

EVA holds many kinds of User types. When configuring Roles, you could optionally attach such user types, after which EVA would check if the user was of the right type when trying to assign that role.

Until now, if you had not added any kind of user type in a role, it would mean that the role could be added to all user types.

That changes with this Core drop in the following way:

  • EVA now requires you to add user types when creating a role.
  • More importantly: EVA now validates that the role matches the user type, even when no user types are specified in that (already existing) role. This means that from now on, roles can only be added to user types which are explicitly specified in that role.

🆕 SetDiscountLayerSequences

To allow for making bulk changes in discount layers, we're introducing a new service: SetDiscountLayerSequences.

Sample

This new service can set the sequence for all layers at once. All layers are required (except the System layer).

Sample

{
"Layers": [2, 3, 5, 8, 4, 7, 6] // LayerIDs
}

✅ ExportProductBaseExcel

The ExportProductBaseExcel service now includes a limit (up to 1.000.000 records) on the number of products that can be exported, to take Excel's limitations into account.

Additionally, the related services have been moved to async variants.

Services made async
  • ExportProductBaseExcel
  • UploadProductExcel
  • UploadProductContentExcel
  • ExportProductContentExcel
  • UploadProductBarcodeExcel

Settings

✅ UseSpecialInStoreReturn defaults to false

The UseSpecialInStoreReturn setting, as mentioned in last week's Changes to the in-store return flow Core drop entry, now defaults to false instead of the earlier mentioned true.

🆕 PrivacyRemovalRequests

To increase your options when it comes to clearing customer data, we are introducing two new settings.

The goal of these settings is to make sure there never are customers which are not actively needed to finalize an order.

Details
  • PrivacyRemovalRequests:TriggerForCompletedOrderAfterXMinutes

By specifying a number of minutes in this setting, EVA removes a created customer from any completed orders and then wipes the customer (after the number of minutes have passed). This is regardless of the presence of any other uncompleted orders with this customer.

  • PrivacyRemovalRequests:RemoveCustomersAfterXMinutes

By specifying a number of minutes in this setting, EVA finds customers without orders and wipes them (after the number of minutes have passed).

If you try to find such a customer based on its ID, the GetUser call will return an error of type EntityDeleted. You can still recreate the exact same customer after having been wiped.

Other topics

✅ Pagination in User requirement sets

The User requirement sets chapter now includes pagination.

🆕 Logic for preventing stencil triggers

You can now include logic in any stencil template to prevent the stencil from being triggered based on your custom conditions.

This logic can be created as a Helper.

Sample
{{if User.CustomFields['NO_EMAILS'] == 'true'}}
{{:~eva_template_early_exit()}}
{{/if}}

Mind that it's the {{:~eva_template_early_exit()}} element which tells EVA not to send/generate it.

We have added several properties related to taxes and product properties to several templates.

Properties and templates

The following templates now have the ProductName property available.

  • RepairCompleted
  • RepairCancelled
  • RepairShipped
  • RepairReadyForPickup

The same templates now include the following object:

  • Lines
    • TotalAmount
    • NetTotalAmount
    • NetTotalAmountInTax

🆕 Requiring custom fields for applying discounts

We have made several changes which will soon result in the ability to create manual discounts which require custom fields to be filled.

Details

Manual discounts can now be set with mandatory custom fields of the following type:

  • Order
  • Orderline
  • User

To that end, the following services have been altered:

  • Valdiate/Create/Update Discount services - these now accept the property RequiredCustomFields
    • This property a list of CustomFieldIDs.
  • AddManualDiscountToOrder now accepts the property CustomFields
    • It contains a list of the custom field key-value pairs which are required for the manual discount. If omitted, existing values will be used. If there is no existing value and no value is given either, then the discount cannot be applied.
  • ListManualDiscounts now exposes these fields via the property RequiredCustomFields

The following two services have been newly introduced to manage the required custom fields separately:

  • AddRequiredCustomFieldsToManualDiscount
  • RemoveRequiredCustomFieldsFromManualDiscount

Any custom fields set as required will be exposed as required order data in checkout.

Fixes

  • Resolved an issue that prevented updating the UserIdentifierRequiredForSubscription value according to the "User identifier: Request from frontend" field in subscription services.
  • In case of unified orders, transfer order lines that are created as a result of lines being shipped from external orders will no longer copy the BackendID of the original lines.

    this would prevent cancelling lines that were partially shipped as there would be two order lines with the same BackendID

  • Old email verification tokens will be properly invalidated.
  • You can now delete roles which have an OU set attached which itself was already deleted.
  • Transfer order lines will no longer have a BackendID, allowing for the use of CancelOrder again.

    these IDs don't exist outside of EVA

  • The ability to generate coupons on returns (introduced in Core drop 2.0.735) is now triggered based on the ShipmentShippedConfirmation event.

    this fixes an issue for coupons that weren't generated for exchange orders

  • The ReceiveShipment service now handles edge cases where purchase orders were overshipped but received with a deficit.

    this effectively allows for better balancing over multiple shipments

  • Cash handler will no longer allow for notes or coins whose value is lower than or equal to 0.

Deprecations

🚫 Effective

These deprecations are now effective. As of now, these services and/or fields are no longer available in EVA and can no longer be used.

Deprecated

High

  • High HasReturns is deprecated since 2.0.746: Replaced with a new Properties/NotProperties value HasReturnLines (131072).
    • SearchOrders.HasReturns
  • High Order.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • CreateOrderFromShoppingCartResponse.Order.CreatedBy
  • High Order.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • CreateOrderFromShoppingCartResponse.Order.HasReturns
  • High Result.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • GetOrderResponse.Result.CreatedBy
    • EVAPayGetInfoResponse.Result.CreatedBy
  • High Result.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • GetOrderResponse.Result.HasReturns
    • EVAPayGetInfoResponse.Result.HasReturns
  • High Result.Order.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • GetStockReservationTaskResponse.Result.Order.CreatedBy
  • High Result.Order.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • GetStockReservationTaskResponse.Result.Order.HasReturns
  • High Result.Page.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • ListOrdersForCustomerResponse.Result.Page.CreatedBy
  • High Result.Page.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • ListOrdersForCustomerResponse.Result.Page.HasReturns
    • SearchOrdersResponse.Result.Page.HasReturns
  • High Roles is deprecated since 2.0.746: Replaced by RolesWithDefault.
    • GetSharedWorkspaceByIDResponse.Roles
  • High ShoppingCart.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • ShoppingCartResponse.ShoppingCart.CreatedBy
  • High ShoppingCart.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • ShoppingCartResponse.ShoppingCart.HasReturns
  • High Task.Order.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • StartReservationCleanupResponse.Task.Order.CreatedBy
  • High Task.Order.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • StartReservationCleanupResponse.Task.Order.HasReturns
  • High WorkSet.Order.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • StartStockReservationResponse.WorkSet.Order.CreatedBy
  • High WorkSet.Order.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • StartStockReservationResponse.WorkSet.Order.HasReturns
  • High WorkSet.Orders.CreatedBy is deprecated since 2.0.746: Use CreatedByID or CreatedByFullName.
    • CompleteReservationDeviationTask.WorkSet.Orders.CreatedBy
    • StartReservationDeviationTaskResponse.WorkSet.Orders.CreatedBy
  • High WorkSet.Orders.HasReturns is deprecated since 2.0.746: Use the new Properties value HasReturnLines (131072).
    • CompleteReservationDeviationTask.WorkSet.Orders.HasReturns
    • StartReservationDeviationTaskResponse.WorkSet.Orders.HasReturns
Impact descriptions

For more details on the impact categories, please see When are changes communicated?.





Release dates may vary

The exact date for deploying a Core release to production environments may vary. See How we handle Core releases for more details.