CustomerService
Loyalty programs
In Edit Stores view for Loyalty Programs the Edit Stores button redirects the user to the Stores view, where it is possible to search for a given store using the search field and filter within them. The buttons " Select all" and "deselect all" select and deselect all stores in the grid. What is more, the number with the count for selected stores is updated when stores are selected /deselected.
Member Statistic Dashboard
Remove the '%' Sign for Gross Profit Amount in Detailed Comparison in Period Section
The Gross Profit Amount is displayed without the '%' sign in the Detailed Comparison in Period section in the Member Statistic Dashboard.
System Parameter UI for Bonus Service
The system parameter section that allows the users/chains to configure the service as they need to was added. The new system parameter 'Validation' that governs if BonusService should try to validate member data against CustomerService or not was added:
- The parameter is default false, possible values ar True or False
- The two new user roles are available in user management:
- If the user has the "View system parameters" role, the "edit" button is not available in the UI, and it is not possible to change the value of the parameter
- If the user has the "Edit system parameters" role, the "edit" button is available.
- Clicking the Edit button changes the state of the UI to edit mode, and it is possible to: Edit the parameter, save or cancel the changes
Add Missing Index on SSN
The missing index was added on SocialSecurityNumber - Identy.Person table preventing SSN lookup timeout when a lot of rows are present.
Update BusinessCustomer Import Contract in Customer Service
The BusinessCustomer.Import contract in Swagger has:
- all fields that are mandatory are marked as such in
- information about max and min length for all fields that are burdened with max and min length criteria
Customer View is Filtering out Valid Customers
All valid customer relationships are shown in the customer grid.
System Parameter UI for Bonus Service
The system parameter section that allows the users/chains to configure the service as they need to was added. The new system parameter 'Validation' that governs if BonusService should try to validate member data against CustomerService or not was added:
- The parameter is default false, possible values ar True or False
- The two new user roles are available in user management:
- If the user has the "View system parameters" role, the "edit" button is not available in the UI, and it is not possible to change the value of the parameter
- If the user has the "Edit system parameters" role, the "edit" button is available.
- Clicking the Edit button changes the state of the UI to edit mode, and it is possible to: Edit the parameter, save or cancel the changes
Fallback occurs for more cases than it should
Invalid registration data (e.g. too low age of member) will be handled with correct status 400.
Loyalty Program Details View in Customer Service
Loyalty Program Details View with view role was created. The view role gives access to a view where the fields are not editable and the buttons at the lower right corner are not visible.
Add Confirmed field for Social Security Number
New column SocialSecurityNumberConfirmed in Ident.Person table has been implemented. It is possible to edit value using MemberInfoService API
Loyalty program list view
(RTL-5408)
A simple view showing a list of loyalty programs have been added to the loyalty module.
A simple view for customer groups
(RTL-5804)
A simple view showing a list of customer groups have been added to the customer module.
Joint view for private and business customers
(RTL-5810)
The business customer view has been extended to include private customers, and the name of the menu entry has changed from "Business customers" to "Customers".
Improvements
Header | Description |
---|---|
Member cards: Change status row from drop down to checkbox (RTL-5959) | The status row in the member cards view has been changed from a drop down to a check box to fit the overall pattern in cloud. The name of the row has changed from "status" to "Inactive" |
Extend private customer with credit fields (RTL-6090) | The private customer data schema has been extended to also support credit and balance, |
Member statistics dashboard: Loyalty program access support
(RTL-5840)
The drop down list in the filter section is only visible if the user has access to multiple loyalty programs.
If the drop down list is visible it only contains the loyalty programs the user has access too. Loyalty program access is based on store access in User management.
Improvements
Header | Description |
---|---|
Member identities: Remove the status field (RTL-5960) | The status column is removed from the Member Identities grid. Only active members are shown in the grid. |
Member statistics dashboard: Loyalty program support
(RTL-5776)
Support for loyalty programs has been added to the Dashboard.
For the time being all users with access to the dashboard has access to all loyalty programs
Member card view
(RTL-5731)
A new view for displaying member cards has been added to the Loyalty module.
Member statistics dashboard: Rework of the Subscriptions section
(RTL-5722)
A third graph was added to improve readability. Percentage of member total was also added to all three graphs
Member statistics dashboard: Detailed comparison in period section
(RTL-4518)
The "detailed comparison in period" section of the Member Statistics Dashboard has been added.
Member statistics dashboard: Average age section
(RTL-4515)
The "average age" section of the Member Statistics Dashboard has been added.
Export of Private customer
(RTL-5753)
CustomerService exports private customers in a separate blob type instead of exporting it together with members. The contract for Members and Customers are the same for both import and export, but they will arrive in different blobs so that external systems (like EG POS) can listen to customer changes without receiving members at the same time.
Also a new Import contract was added and the old one was removed from Swagger. We will still support the old contract, but it was renamed from MemberIdentity to Identity.Import since it includes both members and customers.
Improvements
Header | Description |
---|---|
Member identities view times out (RTL-5244) | Performance has been improved |
Deleted Association in CW (on-premise) does not sync to Cloud (RTL-5560) | Deleted associations are correctly removed from member identity in customer service. |
Values in LinkedAssociationsID in MemberService are deleted on update from CustomerService (RTL-5357) | Updates from CustomerService no longer delete Associations that shouldn't be deleted |
Merge timeouts causes Integration Platform to abort and stop the jobs (RTL-5762) | Merging exception of BusinessCustomerMerger and CustomerGroupMerger does not abort job but is handled gracefully with failed batch and error message in staging. Failed merging batches are retried when caused by timeout. |
Member statistics dashboard: Age groups section
(RTL-4516)
The "age groups" section of the Member Statistics Dashboard has been added.
Member statistics dashboard: Sales overview in period section
(RTL-4514)
The "sales overview in period" section of the Member Statistics Dashboard has been added.
Member statistics dashboard: Subscriptions section
(RTL-4511)
The "subscriptons" section of the Member Statistics Dashboard has been added.
Business customer view
(RTL-5210)
There was added a new view in Chain Web where business customers are listed.
Improvements
Header | Description |
---|---|
Member identities is not scrollable for mobile screen (RTL-5535) | The Member Identities view is scrollable in mobile mode, and the fields in the grid are evenly spaced. |
Member statistics dashboard: Members
(RTL-4510)
The "members" section of the Member Statistics Dashboard has been added.
Member statistics dashboard: Time period for graphs
(RTL-4512)
The "time period for graphs" section of the Member Statistics Dashboard has been added.
CustomerService API New features and improvements
(RTL-118)
We are excited to announce a new release for our Customer service API. This update includes a number of improvements and new features to enhance your experience with our API.
Changes to the API:
- The following changes was done to the API. Backwards compatibility is kept so that the old API endpoints still work:
- API/Association -> API/Associations
- API/BusinessCustomer -> API/BusinessCustomers
- API/MemberIdentity -> API/Identities
- API/Membership -> API/Memberships
- Added personal customer relationships to identity (import & export) - You can import and export personal customer relationships to the API, making it easier for you to manage your customer data. Details about the changes can be found in Swagger
- Slight refactoring of business customer - We have made some changes to our business customer functionality for consistency. The CustomerNo field has been replaced by CustomerNumber, and the storage for CustomerRemarks has been simplified and is stored as a JSON object in a single field on the customer.
- Identity API improvements - The Identity API provides the same functionality as before, but in a more RESTful manner, also able to return multiple results for email/mobile query, which might be the case when introducing customer relationships.
- Customer groups - import/export and rest API functionalities for customer groups, making it easy for you to manage and organize your customer data.
- Loyalty program sharding - better support for loyalty program sharding for business customers and customer groups.
Configuration:
Tenant config for MemberInfoServer: The IdentityDataProvider parameter determines which provider to use for getting and setting identity/member/customer data in the API. The default provider is "Hybrid," which uses the MemberService as the master for members and stores a copy of members in the database. The provider "Standalone" fetches and stores everything in the database.
Improvements
Header | Description |
---|---|
Missing association name from MemberService(on-prem)(RTL-5440) | When returning identity from MemberService ExternalNumber is passed as default association name. |
Remove loyaltyprogram from membership (RTL-5320) | LoyaltyProgramNumber was removed from MemberIdentity. |
Icon for Loyalty menu
(RTL-4948)
The new Loyalty icon has been implemented and applied for the loyalty main menu entry and the old loyalty icon is applied for the customer main menu entry.
Improvements
Header | Description |
---|---|
Remove dependence to Organization number (RTL-5112) | An organization number is not required when creating a member in MemberInfoService. It is possible to have no value in this field: NULL. |
Member Identities View Missing Members (RTL-5042) | All members are displayed in the member grid, and it is possible to filter on them. |
Introduce Organization Membership Type with Owners
(RTL-4650)
The new membership type 'Organization' was introduced, and it is possible to add this new type to a specific MemberIdentity and set its owner.
Member Identities view
(RTL-3734)
There was added a new view in Chain Web where member identities are listed.
Improvements
Header | Description |
---|---|
Fetching LpMember with no existing loyalty program (RTL-4525) | Loyalty program number is validated when calling MIS API GetMemberIdentity.
|
Timeout do not cause FlatBatchJson to retry (RTL-4851) | Upon page validation exception batch lines are marked as failed (and ready for retry), and not as processed ok. |
Support adding associations without uploading logo
(RTL-4482)
It is possible to add an association without an uploaded logo.
Thus associations without ImageURL are synchronized correctly to the cloud and are available on the webshop without a logo.
Improvements
Header | Description |
---|---|
MemberIdentityMerger aborted as a deadlock victim (RTL-4262) | Deadlock during merging of data does not abort MemberIdentityMerger. Deadlocked merging data is marked as faulted and retried on another run |
Release date:
IdentifierUpdate Generated for Deleted Members
(RTL-3032)
MemberInfoService do not generate IdentifierUpdate events for deleted members. MemberInfoService is not producing 2 events (IdentityDeactivated & IdentifierUpdated) but just correct one (IdentityDeactivated) when member is deactivated/deleted. That means, the 2 events are not triggered at the same time and do not cause problem in AS.
LoyaltyParams fetch fails on cache refresh
(RTL-3033)
MemberInfoService always have loyalty parameters available. Methods using GetLoyaltyParams (GET GetMemberIdentity, POST PostMemberIdentity) do not generate errors for getting loyalty parameters.
Improve realtime index maintenance
(RTL-3188)
New janitor job's scheduled trigger, which will rebuild most fragmented indexes every 30min according to following logic:
- if fragmentation >90%, then rebuild
- if fragmentation between 50% and 90%, then reorganize
Improvement of the MemberInfoService API validation
(RTL-3209)
PersonalIdentifiers are validated when creating MemberIdentity in MemberInfoService API and an appropriate error is returned.
Exception on Duplicate Identity Delete
(RTL-3354)
The issue with the handling of a batch containing duplicated identity was resolved. That means, now in such cases the MemberIdentityMerger is logged with status 'Completed' and the appropriate message about duplicated identity is logged in the database.
Release date:
Fill in WebUserId when updating LpMember
(RTL-2004)
WebUserId field is filled when member data is updated in MemberService from MemberInfoService or new member is created
Handling of member deletion
(RTL-1608)
When member is anonymized in 3rd part system, then appropriate member is removed from Account Service and the records in Service Bus Explorer are correctly displayed.
Release date:
Changing Household Issue
(RTL-2332)
Moving members from household A (containing more than 2 members) to separate household B when the MemberIdentifierMode is set to MemberNumberAsIdentityNumber cause LpMemberMerger to successfully update member data in MemberInfoService. What is more, validation for LpMemberMerger and MemberIdentityMerger has been changed and from now on member card number is unique for person, not for personal membership as before.
Improve Application Insights Logging
(RTL-2682)
Clarity of logs was improved. That means, from now on GET AddressLookup, GET MemberIdentity and GET Membership operations resulting in 404 response are marked as successfully performed ones.
Release date:
Validation of member information
(RTL-2086)
First name, surname, mobile number and email is validated when updating the member in MemberInfoService. Invalid data is removed preventing incorrect data that might cause other system failures. For example an invalid mobile number or e-mail will be set as blank (NULL). Members without name will not be updated.
Separate Identities by Loyaltyprogram
(RTL-2141)
MemberIdentities are now separated by loyalty program, which allows to create members using same identifiers in different loyalty programs. Loyalty program is now an attribute of MemberIdentity, not Membership. It is possible to register in AccountService multiple accounts each in different loyalty programs using the same identifier like email or mobile number.
Filtering of loyalty programs
(RTL-2201)
It is possible to add filters for individual Loyalty programs that are used in filtering of members that are going to be imported.
Provide SSN format compatible with Bisnode lookup
(RTL-2475)
When using Bisnode as member address lookup provider, upon registration members with SSN will have their address auto-filled.
Release date:
Fix nulls in jsons exported from MemberInfo Service
(RTL-181)
It is possible to create MemberIdentity with null (Membership)Associations,MembershipStores, MembershipAgreements, PersonalAddresses, PersonalAttributes or MemberCards.
Improve Performance of LpMember merger
(RTL-2118)
The performance of the LpMemberMerger job has been improved and more than 1 million members are imported from on premis and processed in less than 4 hours.
LIP Package Improvement
(RTL-2125)
The AssociationImportJob from the MemberInfoIntegration package does not have an empty AppSettings space anymore. The AppSettings part was removed.
BEFORE: NOW:
Handle delete of membercard
(RTL-2209)
In order to not be able to identify deleted members in POS, personal member cards are deactivated in MemberService when member is deleted.
Release date:
Support for deactivating members
(RTL-1992)
New MemberIdentity status has been introduced - Deleted, which results in hard deletion of identity from MemberInfoService regardless of other settings. Note: Identities are not deleted immediately but within 10 minutes.
It is possible to set the deactivation mode in the LIP configuration - Delete to delete deactivated members and OnlyPublish - deactivated identities are not deleted or modified.
In both modes identities with status deleted are deleted.
Identities with status Deleted are always deleted.
Specify fixes for red daily report & alerts
(RTL-2084)
Now, after calling MemberInfoService API once, API keeps alive connection to member service by calling it every minute.
MemberInfoService API
(RTL-2165)
Members, despite having invalid mobile number in Chain Web, will be able to register in MyPage. Previously, this was not the case.
IdentityIdentifierUpdated triggered when no change
(RTL-2178)
MemberInfoService integration does not trigger IdentityIdentifierUpdated event from MemberServiceEventHandler job if only letter capitalization has been changed in email address (for example abc@domain.com changed to ABC@DOMAIN.com)
Release date:
Add social security number in registration process
(RTL-61)
Social security number is implemented in member registration process. In AccountService webapp after confirming an email address, the user have to add social security number, which allow to fetch personal information, such as name and address which will later on be added to the member.
Merge failure when more than one PersonalAttribute on member
(RTL-204)
It is possible to update members, who have more than one personal attribute.
Fix relate to clients using MemberIdentity format.
Anonymizing members in MemberInfoService
(RTL-1805)
When using MyPage together with AccountService v.2 and MemberInfoService, it is possible for user to deactivate (anonymize) member (identity) from MyPage which results in deactivation of member data in MemberInfoService and MemberService on premise. The member will be deleted in MemberInfoService, but anonymized in MemberService.
Add fallback scenario to GetMemberIdentity request
(RTL-1906)
If looked up member is missing in MemberInfoService database, then service will do additional call to MemberService to search for it there.
Associations in MemberInfoService
(RTL-1951)
LpMemberMerger imports associations (connection to member and association number) to the MemberInfoService database. User can see and check linked association within the MyPage profile in the Member Info tab.
Support for deactivating members
(RTL-1992)
New MemberIdentity status has been introduced - Deleted, which results in hard deletion of identity from MemberInfoService regardless of other settings. Note: Identities are not deleted immediately but within 10 minutes.
It is possible to set the deactivation mode in the LIP configuration - Delete to delete deactivated members and OnlyPublish - deactivated identities are not deleted or modified.
In both modes identities with status deleted are deleted.
Identities with status Deleted are always deleted.
LpMemberMerger member's cards lookup for MemberNumberAsIdentity
(RTL-2043)
It is possible to update members, who have member cards attached.
Improvement related to clients using MemberNumber as identity (all clients using AccountService2)
Fix LpMemberMerger conversion of the member's from the same household, but different stores
(RTL-2044)
Importing multiple members from the same household, with different stores, will be executed correctly into MemberInfoService database.
Release date:
Add support for changing member email
(RTL-1508)
When member's email is changed in Chain Web, then it is properly updated in account service in both MemberOnboard and User tables.
Support for blank emails has been added. When member's email is changed in Chain Web to a blank one, then in account service it is saved as a hash.
LPMembers-Configuration of identifiers.
(RTL-1551)
MemberNumberAsIdentity identifier was added to MemberInfoService and AccountService to map identity and membership from on-premise to cloud correctly.
Now to modes of mapping are possible:
- MemberNumberAsIdentity - Identity number be set to MemberId and Membership number is set to HouseholdId.
- SocialSecurityNumberAsIdentity - Identity number is set to SocialId if it is defined otherwise to MemberId, and Membership number is be set to MemberId.
After creating a certain member through ChainWeb or API, it gets the appropriate identifier, is correctly onboarded in AccountService and loaded as a user after finishing registration in AccountService
Add default store number for LoyaltyProgram
(RTL-1569)
Loyalty program table has been extended by DefaultStoreNumber column. By default the store, from the newest membership in each loyalty program is assigned to the DefaultStoreNumber.
New members created in member info service are assigned to the default store number for the selected loyalty program.
Support in MemberInfoService for updates from Mypage
(RTL-1590)
As a step towards supporting AccountService v.2 together with MyPage, changes made by members in in MyPage are updated in MemberInfoService, which in turn will update MemberService on premise. MyPage can be configured to use MemberInfoService instead of MemberService on premise for handling member data.
Endpoint for fetching membership data was created:
GET api/membership/{number}/identities where number= number on membership
This method fetches Member Identities by Membership number and returns its collections.
Change logging of external requests
(RTL-1670)
Requests returned by Linkmobility as 404/400 (unknown phone number) failure are logged in the same way as success (200) in MemberInfoService's App insights to avoid unnecessary error messages.
Release date:
Republish Member events in cloud
(RTL-1516)
Cloud components cannot depend on on-premise MemberService events. When member updates are published, a new job in MemberInfoService (MemberServiceEventHandler) re-publishes them to cloud service bus using following events:
- IdentityIdentifierChanged
- IdentityProviderOnboardRequested
- IdentityDeactivated
Added deletion of memberships
(RTL-270)
Added deletion of memberships for AccountService and MemberInfoService. Deleting a member on-premise in Chain Web will export a message and delete the member in the cloud databases of AccountService and MemberInfoService.
Release date:
GetAssociationInfo Returns 404
(RTL-1440)
An issue was introduced on the 22nd January which causes Get Association Info method to return 404 error when trying to fetch association. This is corrected and using this method in API that exploit customer number as query parameter results in success.
Association import broken due to contract changes
(RTL-1429)
An issue with Associations (Customers) in Cloud [Lindbak Retail] was introduced on the 22nd of January, causing new associations to not be synchronized properly to Cloud, and therefore unavailable in 3rd party API.
Release date:
Map member terms to LpMembers
(RTL-1312)
Mapping of member terms to LpMembers has been implemented. After creating member in AccountService, it is possible to check the approval of the member terms.
Convert to Asp.Net Core 3.1
(RTL-212)
MemberInfoService was converted to target Asp.Net Core 3.1 and use latest version of LRS.MultiTenantService_packages.