> ## Documentation Index
> Fetch the complete documentation index at: https://docs.superoffice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What's new in version 12.0.342.0

> What's new in database version 12.0.342.0.

# Released database changes in version 12.0.342.0

## SuperOffice

The fieldId type should be used for all fields that contain a tablenumber + fieldnumber; needed for correct mapping in the
Windows client. Some were not correctly set earlier. We also finish off the heading.listTableId dance

* Modify table CacheTables
  subKeyId
* Modify table ImportRelation
  foreignKey
* Remove table HeadingTemp

**Step 10**

Upgrade Oracle databases from 8.0 to 8.1: We are no longer using the CLOB datatype for fields shorter than 4k.
For other databases this is a no-op. On large customers this will take quite some time!

**Step 12**

This step will add two new functional rights to the system. One for controlling whether a user can manage consents for a customer, and one for controlling whether a user can override consent/subscription checks in Mailings.
In addition, this step will give these two rights to all roles with the general admin right.

**Step 14**

NB: Due to a Merge/RedAlert f...up, the functionality in this step has been moved to the Optimization name; and should properly live there!
Modify indexes that have a major impact on performance in Online

**Step 18**

Clear out orphan person records (contact\_id != 0, no such contact record exists), as well as email, phone, address and udef records that point to nonexistent parents

* Modify table person
* Modify table phone

**Step 19**

Add fields and attributes to support the Soft Delete feature on person and contact tables

* Modify table Contact
  DeletedDate
* Modify table Person
  DeletedDate

**Step 20**

Support Saint V2, with more entities and enable/disable

* Add table SaintConfiguration
* Modify table StatusDef
  generationStart, lastGenerated

**Step 22**

Priming step for upgrading databases from whatever earlier 8.0 version
We must handle upgrade from 8.0 RC2, since that is the version Online database migration uses.

**Step 23**

Add UserName to Associate

* Modify table Associate
  userName

**Step 24**

Priming step for upgrading databases from whatever earlier 8.0 version
We must handle upgrade from 8.0 RC2, since that is the version Online database migration uses.

**Step 25**

Priming step for upgrading databases from whatever earlier 8.0 version
We must handle upgrade from 8.0 RC2, since that is the version Online database migration uses.

**Step 26**

Minor update in ZipCity; update of preference descriptions; update of FI address layout; update of SuperOffice data for SW, DA, GE

Priming step for upgrading databases from whatever earlier 8.0 version
We must handle upgrade from 8.0 RC2, since that is the version Online database migration uses.
NB When this step was submitted, some updated imp files for new databases were also submitted.

**Step 27**

Preference Description update with Service mappings and new rank/group fields; also cleanup of obsolete Counter preferences (#63450)

* Modify table PrefDesc
  rank, subGroup, minLevel

**Step 28**

Add the Tags MDO list, a new Function Right to directly define tags, and assign that right to List and General admins

* Add table Tags
* Add table TagsGroupLink
* Add table TagsHeadingLink

**Step 29**

Reload the CacheTabs table, to add new lists

**Step 30**

It is now possible to turn off trailing-whitespace trimming of string fields in the database; and specify this and TimeZone processing in a generic manner

* Modify table appointment
  do\_By, done, endDate, activeDate
* Modify table recurrenceRule
  startDate, endDate
* Modify table email\_folder
  name

**Step 31**

Preference descriptions for the R project

**Step 32**

Transfer any password rules set in the now-obsolete preference System/PasswordPolicy into the password\_rules table with id=1

**Step 33**

Add 4 fields to DocTemplate table to support Email-templates and prime in 1 row in UdListDefinition table to declare Email templates as a list

* Modify table DocTmpl
  includeSignature, showCurrents, senderEmailMode, senderEmailAddress

**Step 34**

Re-add the Tags MDO list in UdListDefinition table.

**Step 35**

Preference descriptions for the R project

**Step 36**

New classifier fields to enabled personalized and source-bound archive layouts

* Modify table SuperListColumnSize
  ownerTable, ownerRecord, group\_id, configurationName

**Step 37**

Preference descriptions for invitation support

**Step 38**

Preference descriptions for invitation support and cleanup of UserPreference table

**Step 39**

New preference: default appointment type for incoming invitations

**Step 40**

This step has been made obsolete by later changes

**Step 41**

This step has been made obsolete by later changes

**Step 42**

Updated preferences, and translated name of functional right to create Tags

**Step 43**

Updated ZipCity for Norway

**Step 44**

Add a table to keep historical information related to deleted associates

* Add table AssociateHistory

**Step 45**

Add a field snum to table document, and cautionWarning to appointment

* Modify table Document
  snum
* Modify table Appointment
  cautionWarning

**Step 46**

Updated preferences

**Step 47**

Update preferences priming; add a virtual field on person (dotsyntax); populate the new Main Contact field on all contact records

* Modify table person
  emailBounceCount
* Modify table contact

**Step 48**

Add fields for language and sentiment to ej\_message; Update preferences priming: move the EmailBounceThreshold preference from the System section to the Mail section

* Modify table ej\_message
  language, sentiment, sentimentConfidence

**Step 49**

Add fields for language and sentiment to ej\_message; Update preferences priming: move the EmailBounceThreshold preference from the System section to the Mail section

* Modify table ej\_message
  suggestedCategory\_id

**Step 50**

Fix inconsistent Main Contact (supportPersonId) after bug in Sales.Web GUI

**Step 51**

Add a virtual field on contact (dotsyntax)

* Modify table contact
  emailBounceCount

**Step 52**

Add 1 field to DocTemplate table to support Invitation type templates

* Modify table DocTmpl
  invitationDocType, privacyDocType

**Step 53**

Update Red Letter Days, table is overwritten, adding Red days for 2005-2030 for 23 countries

**Step 54**

Add a virtual field on person and contact (dotsyntax): emailLastBounce

* Modify table contact
  emailLastBounce
* Modify table person
  emailLastBounce

**Step 55**

Reset bounceCount and lastBounce on the Email table for rows where lastBounce is before the start of year 2020

**Step 56**

Remove several sections and some individual preferences, that were only relevant to the Windows client.
Remove never-used fields in searchcriterionvalue and replace with a string field for valueType

* Modify table searchcriterionvalue
  valueType, valueDataType
* Modify table searchcriterionvalue
  valueType

**Step 57**

Add TimeSpan=Minutes markers to relevant fields on the ticket, ej\_message, invoice and ticket\_priority tables; controls behavior in Archives including Selection

* Modify table ticket
* Modify table ej\_message
  time\_spent, time\_charge
* Modify table invoice
  time\_charged
* Modify table ticket\_priority
  deadline
* Modify table ticket\_status\_history
  timespan, real\_timespan
* Modify table appointment
  done, do\_by, activeDate, endDate
* Modify table text
  updatedCount

**Step 58**

Update SOCompany information for new Online databases based on what is in the template and what data is wanted spring 2020

**Step 60**

Add mother\_associate\_id to appointments to optimize logic that depends on the owner of the mother appointment

* Modify table appointment
  mother\_associate\_id

**Step 61**

Add soundex field to freetext words table to enable soundex searching

* Modify table freetextwords
  word, soundEx
* Modify table freetextindex
  contact\_id

**Step 62**

New preference for disabling Image editor in Unlayer mailings editor

**Step 63**

New functional right for hiding Service and Mailings button and screen

**Step 64**

New preference for invitations, no tentative appointments for others

**Step 65**

New preference for mailing, disable image library for royalty-free images

**Step 66**

Add starting 0 to german zipcodes where it missed. Update N\_List for US, remove duplicate MrMrs.

**Step 67**

, Remove duplicate of LowerLimitsaletypecat, new preference for mailing, disable image library for royalty-free images, translations

**Step 68**

New preference for document dialog in SOFO (and possible later OML, GmailLink and WEB)

**Step 69**

Update some languageinfo and languageinfocountry for correct detecting of language for GDPR confirmation mail. Update RedLetterDay and SOCompany address for Germany. Add a zipcode for DK: Orø. Set group for quote documents for new dbs.

**Step 70**

Added filename field to BatchTask table to be used by ExportArchiveBatchTask.

* Modify table BatchTask
  FileName

**Step 71**

New preference for Mailing, DisableFormsPoweredBy. Rename Mailing header to Marketing. Some fixes of quotes to single quotes.

**Step 72**

New field in Document-table for URL to external documents. Should be used internally by DocPlugins only!

* Modify table document
  ExtUrl

**Step 73**

Turn on freetext index in online.

**Step 74**

* Add table CacheInvalidation

**Step 75**

New preference: disable export of tile data

**Step 76**

Cleanup LocaleText - Reinsert all data

**Step 77**

Cleanup Prefdesc and prefdescline: Only partner-added rows are left, all SuperOffice-maintained preferences are now described in code

**Step 78**

Updated ZipToCity for Norway and Sweden

**Step 79**

New complete LocaleText - with new ticket notifications

**Step 80**

LocaleText - with LanguageRows for detection of supported GUI languages

**Step 81**

Add functional right 'Lock / Unlock Target Assignment'

**Step 82**

Index names for extrafields need to be as the Service code creates them; SDB import did not conform. This step will locate and rename any wrongly-named physical indexes (only applicable to databases that have been SDB-imported).
There was also another bug where index-creation logic for extrafields was inverted, such that a field would get an index when it should not have, and vice versa. This is also corrected, both ways.

**Step 83**

Historically, extra-fields of type 'long text' where 'ntext' in Sql Server. This data type is obsolete and such steps will be converted to 'nvarchar(max)', though without reallocating storage space as that might take a long time depending on the amount of data

**Step 84**

Update translations for functional right 'Can lock and unlock target assignment'

**Step 85**

New fields in QuoteVersion-table for use when requesting quote approval

* Modify table QuoteVersion
  request\_associate\_id, request\_comment

**Step 86**

New list tables to define quote approval and quote denied reasons

* Add table QuoteApprReason
* Add table QuoteApprReasonGroupLink
* Add table QuoteApprReasonHeadingLink
* Add table QuoteDenyReason
* Add table QuoteDenyReasonGroupLink
* Add table QuoteDenyReasonHeadingLink

**Step 87**

Add quote approval push notification texts

**Step 88**

Add functional right 'Targets Administrator'

**Step 89**

Add phone description and searchphone fields to freetext index

* Modify table phone
  description, searchPhoneNumber

**Step 90**

Reset possible flag that says TAGS list is MDO grouped - not supported and should always be off

**Step 91**

Change code-generation flags for the ticket and ej\_message tables, to give a custome Row implementation in NetServer. No changes to physical DB schema.

* Modify table ticket
* Modify table ej\_message

**Step 92**

Add invitation declined push notification texts

**Step 93**

Update userpreference for Mirroring rows.Technical update of some imp files.

**Step 95**

Correct a red date for UK.

**Step 96**

Update SOCompany information for new Online databases based on data wanted december 2022

**Step 97**

Updated descriptions for UserCandidate fields. This removes the need to define descriptions further up in the carrier etc.

* Modify table user\_candidate
  person\_id, secret\_key, secret\_value

**Step 98**

This table will contain the number of different entities an associate has created for usage statistics

* Add table EntityCounts

**Step 99**

Repair missing ForeignKey relations for person.associate\_id and person.group\_id

**Step 100**

Update SOCompany information for new Online databases based on data wanted april 2023

**Step 101**

Add composite index to avoid sql server making a very poor decisions in query execution of appointment conflict detector queries

* Modify table appointment

**Step 102**

Mark udef number fields as freetext index sources.

* Modify table udcontactSmall
* Modify table udpersonSmall
* Modify table udappntsmall
* Modify table uddocsmall
* Modify table udprojectSmall
* Modify table udsalesmall

**Step 103**

Correct spelling for danish city Aarhus

**Step 104**

FreetextWords and FreetextIndex tables used random primary keys during incremental indexing. This is now changing to ordinary PK's from the sequence table. During the transition we need to "make room at the top" of the id space, to ensure we avoid collisions until the next full reindexing

**Step 105**

Add FirstChange date, and reset the counters in the CacheInvalidation table, after changes to cache invalidation policies

* Modify table CacheInvalidation
  FirstChange

**Step 106**

Add new index on freetext index table to improve query performance.

* Modify table freetextindex

**Step 107**

(No longer valid) Remove old index on freetext index table so we can create new fresh indexes.

**Step 108**

(No longer valid) Create new clustered index on freetext index table to improve query performance.

**Step 109**

Increase length of Credentials.Secret and login.ns\_secret.

* Modify table Credentials
  secret
* Modify table login
  ns\_secret

**Step 110**

Workflow add 2 functional rights, moved from workflows

**Step 111**

Remove user-specific unsafe file types. It should only be settable on the group level.

**Step 112**

Clear bit 22 in ejUser.flags. It will be reused for storing 'includeOwnTicketsInGetNext'.

**Step 113**

Modify Message table to support new yellow banner messaging system

* Modify table Message

**Step 114**

Update requiredModule for cs-listextratablecontent and cs-editextratablecontent to 'SuperOffice.expander-services'

**Step 115**

Add ContentSetCount to Document table.

* Modify table document
  contentSetCount

**Step 116**

As reporter is removed, customers with saved report documents want an easy way to retrieve them, so we give them a dynamic selection to do that

**Step 117**

Update ejuser.num\_expanded\_messages

**Step 118**

Add indexes for the search-criteria storage tables, which have become unexpectedly large

* Modify table SearchCriteriaGroup
* Modify table SearchCriterion
* Modify table SearchCriterionValue

**Step 119**

Add OwnedExternally to Appointment.

* Modify table appointment
  owned\_externally

**Step 120**

Copy SR\_ARCHIVE\_NUMBER to SR\_SALESARCHIVE\_NUMBER and SR\_PL\_INTERESTS\_PERSON to SR\_PL\_INTERESTS\_1 in resourceoverride table to make different labelsubstitution possible for those two resources

**Step 121**

Update RedLetterDays for Denmark, remove Store Bededag as red day from 2024, but keep it as named day

**Step 122**

Add fields contactId and personId to the Notify table

* Modify table notify
  contact\_id, person\_id

**Step 123**

Add table UtmParameters

* Add table utm\_parameters

**Step 124**

Add fields categorygroup and enable lead status

* Modify table Category
  category\_group, enable\_lead\_status

**Step 125**

* Add table leadstatus

**Step 126**

Adding field leadstatus on contact and person table

* Modify table contact
  leadstatus\_id
* Modify table person
  leadstatus\_id

**Step 127**

Remove unused column leadstatus on contact table

* Modify table contact
  leadstatus\_id
* Modify table person

**Step 128**

Corrects the DatabaseModel for three indexes that were incorrectly marked as unique after a previous upgrade. This step inspects the model for indexes on 'target\_revision\_history.target\_group\_id', 'email\_account.email\_address', and 'email\_folder.account\_id' and sets their IsUnique property to false if found to be true.

**Step 129**

Remove ServiceAssociates rows from history. They are redundant and not used anymore.

**Step 130**

* Modify table sale
  stage\_when\_closed\_id
* Modify table SaleHist
  stage\_when\_closed\_id

**Step 131**

Adding values for category\_group, enable\_lead\_status in category table. (For new customers only)

**Step 132**

This table will contain info on how to autoupdate category on contact and person when changing sale and leadstatus

* Add table AutomatedCategoryUpdate

**Step 133**

This table will contain info on how to autoupdate category on contact and person when changing sale and leadstatus

* Modify table AutomatedCategoryUpdate
  leadstatus\_id

**Step 134**

Add column OwnerLock on table s\_shipment\_addr

* Modify table s\_shipment\_addr
  owner\_lock

**Step 136**

This step creates a table that contains all fonts selected to be available for external usage

* Add table available\_fonts

**Step 137**

Change attributes of the 'parent' fields on the Quote tables, to ensure that Sentry calculations are reset when these fields are changed

* Modify table Quote
  SaleId
* Modify table QuoteVersion
  QuoteId
* Modify table QuoteAlternative
  QuoteVersionId
* Modify table QuoteLine
  QuoteAlternativeId

**Step 138**

Add ExternalParticipants to Appointment.

* Modify table appointment
  external\_participants

**Step 139**

This step adds column deleted to table AvailableFonts to support soft delete of available fonts.

* Modify table available\_fonts
  deleted

**Step 140**

Add fonts for use in forms

**Step 141**

Add fonts for use in forms, this time sorted alphabetically

**Step 142**

Remove the 'hide-reporter' function right; it's no longer needed since the Reporter product no longer exists. Drop all Reporter metadata tables.

* Remove table OleField
* Remove table OleFieldText
* Remove table OleSubject
* Remove table OleSubjectText
* Remove table OleView
* Remove table OleViewText
* Remove table SORCRITERIA
* Remove table SORFCT
* Remove table SORFIELD
* Remove table SOROPERATORS
* Remove table SORPUBLISH
* Remove table SORPUBLISHGROUPLINK
* Remove table SORSECTION
* Remove table SORTEMPLATE
* Remove table REPORTERLISTDEF

**Step 143**

Add new project/projectmember fields for Lyyti events

* Modify table project
  event\_id, startDate
* Modify table projectmember
  event\_participant\_status

**Step 144**

Remove eventual Reporter specific preferences from the UserPreference table

**Step 145**

Remove unique index on productversion.(ownername, codename, version) that no longer makes sense

* Modify table ProductVersion

**Step 146**

Remove obsolete (and empty) backup tables that only exists in One, after an earlier GDPR cleaning process that is no longer in use

**Step 147**

Remove obsolete table 'usagestats', that contains usage statistics from the discontinued Windows Desktop client

* Remove table UsageStats

**Step 148**

Add functional right 'Can mark requests as Spam'

**Step 149**

Update translations for functional right 'Can mark requests as Spam'

## ai

The `ai_chat_turn` table contains chat history for user's chatbot sessions with GPT. Chats are keyed by the chat\_id and associate\_id, and ordered by timestamp. Chat Messages are automatically added to the history as the bot generates answers.

* Add table ai\_chat\_turn

## chat

* Modify table chat\_topic
* Modify table chat\_topic\_user
  can\_respond, notifications, can\_listen, manager
* Modify table chat\_session
  name, company\_name, email, phone, first\_message, last\_message, flags
* Modify table chat\_message
  created\_by
* Modify table ejuser
  chat\_status

**Step 2**

* Modify table chat\_topic
  widget\_language
* Modify table cust\_lang
  iso\_code

**Step 3**

* Modify table chat\_session
  project\_id, sale\_id, ticket\_id, contact\_id, transfer\_to
* Modify table config
  feature\_toggle

**Step 4**

* Modify table login\_customer
  created\_at
* Add table quick\_reply

**Step 6**

* Modify table chat\_session
  consented

**Step 7**

* Modify table chat\_topic

**Step 8**

Adding field for using a custom message in the chat widget queue message

* Modify table chat\_topic
  custom\_queue\_text

**Step 9**

Add CS language to chat\_session table. Specify displayField to chat\_topic table.

* Modify table chat\_session
* Modify table chat\_topic

**Step 10**

Add index on the chat\_session table, to optimize the 'anything happening now?' requests that come in every 15 seconds, per service rep

* Modify table chat\_session

**Step 11**

* Modify table chat\_topic
  flags

**Step 12**

* Modify table chat\_session
  status
* Modify table chat\_message
  type, special\_type

**Step 13**

* Modify table chat\_topic
  bot\_enabled, bot\_name, bot\_register\_trigger\_id, bot\_newsession\_trigger\_id, bot\_statechange\_trigger\_id, bot\_newmessage\_trigger\_id
* Modify table chat\_session
  chatbot\_isactive

**Step 14**

* Modify table chat\_topic
  bot\_register\_trigger\_id, bot\_newsession\_trigger\_id, bot\_statechange\_trigger\_id, bot\_newmessage\_trigger\_id, bot\_register\_scriptid, bot\_session\_created\_scriptid, bot\_session\_changed\_scriptid, bot\_message\_received\_scriptid

**Step 15**

Add fields for setting lunch hours on a chat topic.

* Modify table chat\_topic
  use\_lunch\_hours, lunch\_start, lunch\_stop

**Step 16**

Add more fields to chat\_topic for agent use firstname.

* Modify table chat\_topic
  widget\_agent\_use\_firstname

**Step 17**

Add suport for country in chat\_session.

* Modify table chat\_session
  country

**Step 18**

Add notification interval for new chat messages in chat\_topic.

* Modify table chat\_topic
  warning\_chat\_message, manager\_warning\_chat\_message

**Step 19**

Add fields for enabling offline form capabilites when customer is in chat queue.

* Modify table chat\_topic
  offline\_form\_time\_limit, offline\_form\_queue\_length

**Step 20**

Add fields for support rating of a chat session.

* Modify table chat\_topic
  widget\_enable\_rating, widget\_rating\_text
* Modify table chat\_session
  rating

**Step 21**

Add field for chat widget badge color

* Modify table chat\_topic
  widget\_badge\_color

**Step 22**

Add field for chat widget styles

* Modify table chat\_topic
  widget\_badge\_text\_color, widget\_cust\_msg\_color, widget\_cust\_msg\_text\_color, widget\_agent\_msg\_color, widget\_agent\_msg\_text\_color, widget\_font\_size, widget\_button\_color, widget\_button\_text\_color

## configurablescreens

This table will contain deltas for configurable screens to add and remove from recipes in SCIL

* Add table ConfigurableScreenDelta

**Step 2**

Added state enum for draft and published state for the json recipe deltas

* Modify table ConfigurableScreenDelta
  deltaState

**Step 3**

Clear out all rows in SystemEvent, in preparation for a unique index to be defined

**Step 4**

Create unique index on SystemEvent, to support multi-user-safe event locking

* Modify table SystemEvent

**Step 5**

This table will contain a mapping on which type of data (appliesToKey) will be used to differ between layouts in the given recipeId

* Add table ConfigurableScreenAppliesTo

**Step 6**

This table will contain list items for merging in as menu items in taskmenus

* Add table TaskMenu
* Add table TaskMenuGroupLink
* Add table TaskMenuHeadingLink

**Step 7**

Added enocding enum ANSI UniCode or None

* Modify table TaskMenu
  encoding

**Step 8**

Move webpanels that are actually task menu items to new table taskmenu

**Step 9**

Update Ticket tab pane container ID from 'CardPanes' to 'TicketTabPanes'

**Step 10**

Remove reference to FeatureToggle:NSTicketType

**Step 11**

Update existing ticket status related CONFIGURABLESCREENDELTA because of the new TicketStatusComponent

## ConsentManagement

This class is now empty, since step 5 nuked the consent tables

* Modify table category
  family\_id

**Step 6**

* Modify table Category
  family\_id
* Remove table consent\_person
* Remove table consent\_purpose
* Remove table ConsentSource
* Remove table LegalBase
* Remove table category\_family
* Add table ConsentPurpose
* Add table LegalBase
* Add table ConsentSource
* Add table ConsentPerson
* Add table CategoryFamily
* Modify table DocTmpl
  privacyDocType, emailSubject
* Modify table Category
  CategoryFamily\_id

**Step 7**

* Modify table outbox
  rfc822\_content

**Step 9**

One-time "migration" from person.nomailing and s\_shipment\_addr to become ConsentPerson rows

**Step 10**

Make the person\_id + consentPurpose\_id index unique, this is an important constraint

* Modify table ConsentPerson

**Step 11**

Make the person\_id + consentPurpose\_id index unique, this is an important constraint

* Modify table ConsentPerson
* Modify table ConsentPerson
* Modify table ShipmentTypeReservation
* Modify table ConsentPurpose
* Modify table ConsentSource
* Modify table LegalBase
* Modify table ShipmentType

**Step 12**

Add to fields to ErpConnection table. ConsentSourceId and LegalBaseId. Both are foreign keys to GDPR tables. These fields will be set for all new persons synced to SuperOffice

* Modify table ErpConnection
  ConsentSourceId, LegalBaseId

**Step 13**

Add to fields to ErpConnection table. ConsentSourceId and LegalBaseId. Both are foreign keys to GDPR tables. These fields will be set for all new persons synced to SuperOffice

* Modify table ErpConnection
  ConsentSourceId, LegalBaseId

**Step 14**

Set the #STORE consent on all person records that do not already have it; we assume that all persons in the customers database are there for a legitimate reason

**Step 16**

As we now set the #STORE consent on all person records that do not already have it, we also set a default consent and legal base for new persons, thus we set the Default legal base preference.

**Step 22**

Remove confirmation mail links for consent sources where SuperOffice does not send privacy confirmation email by design.

**Step 23**

Update document template to sync emailmode with privacytype

## Copilot

Add tables for Copilot

* Add table copilot
* Add table copilot\_data\_source
* Add table copilot\_data\_source\_setting

**Step 2**

Add initial Copilot

## CRMScript

* Add table script\_trace
* Add table script\_trace\_run
* Modify table screen\_chooser
  description, enabled

**Step 2**

* Modify table ejscript
  extra\_menus\_id

**Step 3**

* Modify table ejscript
  unique\_identifier, registered, registered\_associate\_id, updated, updated\_associate\_id, updatedCount
* Modify table screen\_chooser
  unique\_identifier, registered, registered\_associate\_id, updated, updated\_associate\_id, updatedCount

**Step 4**

Flag unique\_identfier fields that they should be auto-populated with a GUID on creation; and populate existing rows with GUID's

* Modify table ejscript
  unique\_identifier
* Modify table screen\_chooser
  unique\_identifier

**Step 5**

Create unique indexes for GUID identifiers

* Modify table ejscript
  unique\_identifier
* Modify table screen\_chooser
  unique\_identifier

**Step 6**

New flag field in screen\_definition: autosave

* Modify table screen\_definition
  autosave

**Step 7**

Fix triggers with screen\_type = 130. Set to 113 and disable.

**Step 8**

Adds a type field to the ej\_script table, to indicate what type of script this is.

* Modify table ejscript
  type

**Step 9**

Adds a frames field to the script\_trace\_run table to contain the JSON frames of the trace.

* Modify table script\_trace\_run
  frames

**Step 10**

Support for email notification and exceptions only for script trace.

* Modify table script\_trace
  notification\_email, notify, num\_notifications, exception\_only, sum\_runs, sum\_size

**Step 11**

Adds a fk from screen\_chooser to ejscript for TypeScript triggers.

* Modify table screen\_chooser
  ejscript\_id

## CS

* Modify table ticket
  from\_address

**Step 3**

* Modify table s\_message
  long\_description

**Step 4**

* Modify table ticket\_status
  status
* Modify table ticket\_priority
  status, flags, ticket\_read, changed\_owner, ticket\_newinfo, ticket\_closed, ticket\_changed\_priority, ticket\_new
* Modify table ej\_category
  delegate\_method, closing\_status, msg\_closing\_status, flags

**Step 5**

* Modify table ticket
  status, slevel, origin, read\_status
* Modify table ticket\_status
  status

**Step 6**

* Modify table ej\_message
  slevel, type, message\_category

**Step 7**

Adding a field to ej\_message, allowing the user to filter and view only important messages

* Modify table ej\_message
  important

**Step 8**

Add a ForeignKeyArray field to the ticket table as the first entity to use Tags; and add a contact\_id to start off that project

* Modify table Ticket
  tags, contact\_id

**Step 9**

Transfer mobile phone from ticket to person if no phone on person

**Step 10**

Set ticket.contact\_id to be consistent with ticket.cust\_id.contact\_id; and copy the person classifiers (associate\_id, group\_id, business\_idx, category\_idx) from contact to person unless person.contact\_id = 0

**Step 11**

Add flags to s\_list\_element table.

* Modify table s\_list\_element
  status

**Step 12**

Create new table, attachment\_location, to be able to store attachments in multiple locations

* Add table attachment\_location
* Modify table attachment
  attachment\_location\_id

**Step 13**

Create and enable password rules if they have not been changed from the default

**Step 14**

Add field for storing Mailgun DSN setting for each mailbox

* Modify table mail\_in\_filter
  mailgun\_dsn

**Step 15**

Add sentiment and language values to ticket table. Add index on ej\_message.created\_at

* Modify table ej\_message
* Modify table ticket
  language, sentiment, sentimentConfidence

**Step 16**

Move ej\_message.suggestedCategory\_id to the ticket table. Add ticket.orig\_human\_category\_id

* Modify table ej\_message
  suggestedCategory\_id
* Modify table ticket
  suggestedCategory\_id, origHumanCategory\_id

**Step 17**

Add details clob to ticket\_log\_action table for JSON logging

**Step 18**

Change type of mail\_in\_filter.server\_type to a defined enum called MailboxType

* Modify table mail\_in\_filter
  server\_type

**Step 19**

Stage 1 of 3: Introduce proper ForeignKey fields for ej\_category: closing\_status and msg\_closing\_status, and populate them

* Modify table ej\_category
  closing\_status\_temp, msg\_closing\_status\_temp

**Step 20**

Stage 2 of 3: Drop old fields for ej\_category: closing\_status and msg\_closing\_status

* Modify table ej\_category
  closing\_status, msg\_closing\_status

**Step 21**

Stage 3 of 3: Rename new fields for ej\_category: closing\_status\_temp and msg\_closing\_status\_temp to original names

* Modify table ej\_category
  closing\_status\_temp, msg\_closing\_status\_temp

**Step 22**

Add fields for enabling/disabling AI operations on a Service mailbox

* Modify table mail\_in\_filter
  ai\_suggest\_category, ai\_text\_analysis

**Step 23**

Change ticket notification expiry from 10 minutes to 24 hours

**Step 24**

Add support for setting tags on email filter

* Modify table ms\_filter
  new\_tags

**Step 25**

Add field for setting an URL on custom notifications

* Modify table notify
  custom\_url

**Step 26**

Increase the length of the field inbox.uidl

* Modify table inbox
  uidl

**Step 28**

* Modify table reply\_template\_body
  flags
* Modify table reply\_template
  flags

**Step 29**

Mark Ticket fields as freetext indexable.

* Modify table ticket
  title, author, from\_address

**Step 30**

Add changed\_at and changed\_by fields to EjMessage table.

* Modify table ej\_message
  changed\_at
* Modify table ej\_message
  changed\_by

**Step 31**

Add sale\_id, project\_id to Ticket table.

* Modify table ticket
  sale\_id, project\_id

**Step 32**

Add IsDefinedByUserGroup field to CATEGORY\_MEMBERSHIP table.

* Modify table category\_membership
  is\_defined\_by\_usergroup, weight

**Step 33**

Increase the length of the field ej\_message.message\_id to 850 (as this is max size for an indexed field).

* Modify table ej\_message
  message\_id

**Step 34**

Interprets TicketLogAction table's LogAction field as enum instead of int

* Modify table ticket\_log\_action
  log\_action

**Step 35**

Adds badge column to explicitly determine how a message was generated

* Modify table ej\_message
  badge

**Step 36**

Add registered and registered\_associate\_id fields to Notify table

* Modify table notify
  registered, registered\_associate\_id

**Step 37**

Mark Ticket status field as freetext indexable.

* Modify table ticket
  status

**Step 38**

Add time\_spent field to Ticket table

* Modify table ticket
  time\_spent

**Step 39**

This step has been superseded by a later step

* Modify table ticket
  ticket\_type, request\_type

**Step 40**

Remove priming data for RequestType list that we wish to move to another table

**Step 41**

Remove tables for never-implemented TicketType functionality. The motivation is to clear out junk, as well as keep a consistent naming scheme for ticket functionality

* Modify table ticket\_type
* Modify table ticket\_relation\_type
* Modify table ticket\_relation\_action
* Modify table ticket\_relation
  source, target, relation\_type, registered, registered\_associate\_id, updated, updated\_associate\_id, updatedCount
* Remove table request\_type
* Remove table request\_type\_priority
* Remove table request\_type\_status
* Modify table ticket
  request\_type
* Rename table ticket\_type to obsolete\_1
* Rename table ticket\_relation\_type to obsolete\_2
* Rename table ticket\_relation\_action to obsolete\_3
* Rename table ticket\_relation to obsolete\_4

**Step 42**

Re-create the tables needed for the new ticket\_type functionality

* Add table ticket\_type
* Add table ticket\_type\_priority
* Add table ticket\_type\_status
* Modify table ticket
  ticket\_type

**Step 43**

Adjust tables and priming data needed for the new ticket\_type functionality

* Modify table ticket\_type
  deleted

**Step 44**

Add TimeSpan=Minutes marker to ticket.time\_spent column; controls behaviour in Archives including Selection

* Modify table ticket
  time\_spent

**Step 45**

Remove primary key constraint from now-obsolete tables, to prevent faults during Database Mirroring. Only relevant for Online

**Step 46**

Add ticket\_type.is\_default column and insert the first, default, request type

* Modify table ticket\_type
  is\_default

**Step 47**

Add ticket\_type as fields on mail\_in\_filter and ms\_filter

* Modify table mail\_in\_filter
  ticket\_type
* Modify table ms\_filter
  new\_ticket\_type

**Step 48**

This step has been superseded by a later step

**Step 49**

Update ticket\_type.icon column with default icon value

* Modify table ticket\_type
  icon

**Step 50**

Ticket type priming data used to set default tooltip. We remove it by setting tooltip empty where ticket\_type\_id = 1

**Step 51**

Change CreatedBy criteria to be based on EjUser instead of Associate

**Step 52**

Add dates for last execution over HTTP to Ejscript table

* Modify table ejscript
  last\_exec\_http, last\_exec\_anon\_http

**Step 53**

Add field for storing an id for icons on a extra table

* Modify table extra\_tables
  icon\_id

**Step 54**

Add ticket\_type.show\_in\_new, ticket\_type.exclude\_signature, ticket\_type.exclude\_email\_recipients, ticket\_type.external\_as\_default columns and insert the first, default, request type

* Modify table ticket\_type
  show\_in\_new, exclude\_signature, exclude\_email\_recipients, external\_as\_default

**Step 55**

Add ticket\_type.visible\_for\_groups field.

* Modify table ticket\_type
  visible\_for\_groups

**Step 56**

Add ticket\_type.reply\_forward\_no\_signature

* Modify table ticket\_type
  reply\_forward\_no\_signature

**Step 57**

Add field source\_code, which will contain the source code for the script, for example in Typescript.

* Modify table ejscript
  source\_code

**Step 58**

Add fields includes and last\_compiled, which will be used to check if we need to just-in-time compile again.

* Modify table ejscript
  includes, last\_compiled

**Step 59**

Add ticket\_type.reply\_external\_as\_default

* Modify table ticket\_type
  reply\_external\_as\_default

**Step 60**

Add field source\_maps, which will contain mappings from location in body to source\_code (with includes).

* Modify table ejscript
  source\_maps

**Step 61**

Adds ejscript HTTP verb access field

* Modify table ejscript
  blocked\_verbs

**Step 62**

Add a table number field

* Modify table extra\_tables
  table\_number

**Step 63**

Fill extra\_tables.table\_number

**Step 64**

Recalculate Model.NextTableNumber

**Step 65**

Recalculate Model.NextTableNumber

**Step 66**

Generate Dataright rows for CustomObjects for all applicable roles

**Step 67**

Updates custom object selection table number to correct one

**Step 68**

Create tables for ticket relations

* Add table ticket\_relation\_def
* Add table ticket\_rel\_def\_ticket\_type
* Add table ticket\_relation

**Step 69**

Update tables for ticket relations; truncate ticket relation table data

* Modify table ticket\_relation
  relation\_type
* Modify table ticket\_relation\_def
  name\_passive, isBuiltIn

**Step 70**

Alter ticket\_relation.ticket\_relation\_def\_id NOT NULL. (Note, the data was truncated in previous DB step)

* Modify table ticket\_relation
  ticket\_relation\_def\_id

**Step 71**

Drop tables previously made obsolete (we couldn't delete them in earlier versions)

* Remove table obsolete\_1
* Remove table obsolete\_2
* Remove table obsolete\_3
* Remove table obsolete\_4

**Step 72**

Insert new default status for TicketBaseStatus.Spam. Insert new registry row

## customerCenter

Create new table for storing customer center styling and configuration options

* Add table cust\_config

**Step 2**

Prime in default Customer Center Config

**Step 3**

Create cc\_template table for customer center templates

* Add table cc\_template

**Step 4**

Add payload column to the TemporaryKey table

* Modify table TemporaryKey
  payload

**Step 5**

Upgrade cc\_template formFrame2.html

**Step 6**

Upgrade cc\_template formFrame2.html

**Step 7**

Upgrade cc\_template formFrame2.html

**Step 8**

Upgrade cc\_template formFrame2.html

**Step 9**

Upgrade cc\_template formFrame2.html, form.js

**Step 10**

Delete cc\_template formFrame2.html, form.js with type=1

**Step 11**

Upgrade cc\_template formFrame2.html, form.js

**Step 12**

Upgrade cc\_template formFrame2.html, form.js

**Step 13**

Upgrade cc\_template formFrame2.html

**Step 14**

Upgrade cc\_template formFrame2.html

**Step 15**

Upgrade cc\_template formFrame2.html

**Step 16**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 17**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 18**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 19**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 20**

Upgrade cc\_template formFrame2.html

**Step 21**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 22**

Upgrade cc\_template updateSubscriptionsFrame2.html

**Step 23**

Upgrade cc\_template formFrame2.html

**Step 24**

Upgrade cc\_template formFrame2.html

**Step 25**

Upgrade cc\_template formFrame2.html

**Step 26**

Upgrade cc\_template formFrame2.html

**Step 27**

Upgrade cc\_template formFrame2.html

**Step 28**

Upgrade cc\_template formFrame2.html

## dashboard

Add tables for Dashboard V2, these will store info about dashboards and dashboard tiles

* Add table dashboard
* Add table dashboard\_theme
* Add table dashboard\_tile\_definition
* Add table dashboard\_tile
* Add table dashboard\_tile\_field

**Step 2**

Add rank to tiles

* Modify table dashboard\_tile
  rank

**Step 3**

Add selection foreign key, currency and more to tile definition

* Modify table dashboard\_tile\_definition
  selection\_id, currency\_id, currency\_mode, sort\_by, measure, measure\_field

**Step 4**

Add visible for, pinning, and more

* Modify table dashboard\_tile\_definition
  secondary\_selection\_id, layout\_config, entity\_name
* Modify table dashboard
  visible\_for\_all, visible\_for\_associates, visible\_for\_groups, pin\_for\_all, pin\_for\_associates, pin\_for\_groups

**Step 5**

Add rank to DashboardTheme

* Modify table dashboard\_theme
  rank

**Step 6**

Add functional right

**Step 7**

Remove fulltext indexing generated by the FkArray datatype. FT indexing is good for large tables, but is asynchronous and that creates some headaches

* Modify table dashboard

**Step 8**

Add columns to dashboard

* Modify table dashboard
  columns

**Step 9**

Add measure\_by\_field column to dashboard

* Modify table dashboard\_tile\_definition
  measure\_by\_field

**Step 10**

Add dashboard\_tile\_definition\_id foreign key to selection

* Modify table selection
  dashboard\_tile\_definition\_id

**Step 11**

Add client column to dashboard\_theme table

* Modify table dashboard\_theme
  client

**Step 12**

Prime default data

* Modify table dashboard\_theme
  isBuiltIn
* Modify table dashboard
  guid

**Step 13**

Add currency\_code to DashboardTileDefinition

* Modify table dashboard\_tile\_definition
  currency\_id, currency\_code

**Step 14**

Set the required attributes to activate Sentry functionality on dashboard, dashboard\_tile and dashboard\_tile\_definition. Update DashboardTheme with new font colors for dark themes.

* Modify table dashboard
* Modify table dashboard\_tile
* Modify table dashboard\_tile\_definition

**Step 15**

Update dashboard theme data with fixed IDs

**Step 16**

Generate Dataright rows for the new Dashboard, in the data right matrix in Admin

**Step 17**

Add 'style' to DashTheme

* Modify table dashboard\_theme
  style

**Step 18**

Update big number colors in dark mode for built-in dashboard themes

**Step 19**

Update DashboardTileDefinition with information about where it can be used

* Modify table dashboard\_tile\_definition
  usage

**Step 20**

Update colors for stalled and open sales in dashboards.

**Step 21**

Update DashboardTheme with resource symbols.

**Step 22**

Add table for QuickFilters

* Add table quick\_filter\_info

**Step 23**

Superseded by DashboardStep24\_DefaultDashboardNoOwner

**Step 24**

Change associate\_id of existing default dashboards to -1.

## ExternalOwner

Adds support for external\_owner system, used to keep track of external data that gets imported (e.g. BusinessTemplates)

* Add table external\_owner

## forms

* Add table form
* Add table form\_submission

**Step 2**

* Modify table form
  active, expires, maxSubmits

**Step 3**

* Modify table form
  type

**Step 4**

* Modify table form
  recipe

**Step 5**

* Modify table form\_submission
  is\_submitted

**Step 6**

* Modify table form\_submission
  is\_submitted, status, processing\_log

**Step 7**

* Modify table form
  group\_id

**Step 8**

* Modify table ticket
  form\_submission\_id

**Step 9**

* Modify table form
  form\_key

**Step 10**

Create new field to be able to filter out forms that are used to creating tickets

* Modify table form
  new\_ticket

**Step 11**

Create new table FormFieldRestriction, used for saving restrictions for fields used in forms

* Add table form\_field\_restriction

## inbox

* Add table email\_account
* Add table email\_folder
* Add table service\_auth
* Add table email\_item

**Step 2**

* Modify table email\_item

**Step 3**

* Modify table email\_item
  replied\_at, in\_reply\_to, messageId
* Modify table email\_account
  default

**Step 4**

* Modify table email\_account
  account\_status
* Modify table email\_item
  cc
* Modify table service\_auth
  associate\_id, auth\_status

**Step 5**

* Modify table timestamps
  mailsync

**Step 6**

* Modify table email\_account
  email\_address
* Modify table email\_folder
  account\_id

**Step 7**

* Modify table email\_account
  encryptedCheck, associate\_id, incoming\_auth, outgoing\_auth
* Modify table service\_auth
  encryptedCheck, associate\_id, server, port, auth\_type, username, password

**Step 8**

* Modify table email\_account
  error\_count, error\_reason
* Modify table email\_item
* Add table email\_attachment

**Step 9**

* Modify table email\_folder
  folder\_separator

**Step 10**

* Modify table email\_item
  cal\_data

**Step 11**

Ensure all email-IDs used as foreignkeys in the foreignkey-table are enclosed in tags. Update all rows as needed, in one operation

**Step 12**

* Modify table email\_account
  simple\_mode, last\_fetch

**Step 13**

Add string server\_identifier on email\_item, and bool use\_graph\_api on email\_account

* Modify table email\_item
  server\_identifier
* Modify table email\_account
  use\_graph\_api

## invitation

Adds support for invitations (iCal) leading to appointments

* Add table invitation
* Modify table email
  appointment\_id

**Step 2**

Allows for storage of the organizer's email and full name in the table; Adds support for recurring invitations.

* Modify table invitation
  organizer\_email, organizer\_fullname, recurring\_end\_date

**Step 3**

Set preference "Diary sync active" if Infobridge synchronizer seem to be in use.

**Step 4**

Adds support for modifications of single appointments in a recurring series.

* Modify table invitation
  recurring\_start\_date
* Modify table erpexternalkey

**Step 5**

Adds better support for modifications of single appointments in a recurring series.

* Modify table appointment
  original\_start\_date

**Step 6**

Adds support for storing a chosen template language for email invitations.

* Modify table invitation
  template\_language

## LandingPage

Add table for landing pages. One row per associate per entity (table number) storing which selection to show.

* Add table landing\_page
* Add table landing\_page\_pin

## Mailings

Adding field to store the document mailing recipient sort order

* Modify table s\_shipment
  sorting

**Step 2**

Add fields for storing the design of a mailing message and mailing design type

* Modify table s\_message
  design, designtype
* Add table s\_messageblock
* Modify table s\_message
  flags

**Step 3**

Remove the old SOEditor mailing templates for new Online installations

**Step 4**

Change type of S\_Shipment.Status to a defined enum called ShipmentStatus and change type of (S\_Link\_Customer/S\_Link\_Customer\_Statical).LinkType to ShipmentLinkType.

* Modify table s\_shipment
  status
* Modify table s\_link\_customer
  link\_type
* Modify table s\_link\_customer\_statical
  link\_type

**Step 5**

Add field for storing foreign key to form\_submission in s\_shipment\_addr. This is used to connect a mailing recipient with a form\_submission, to be used to populate the parser.

* Modify table s\_shipment\_addr
  form\_submission\_id

**Step 6**

Add two new fields so s\_shipment\_addr and Email for storing bounce code and bounce reason as separate fields.

* Modify table s\_shipment\_addr
  bounce\_code, bounce\_reasontag, cleaned
* Modify table Email
  lastBounceCode, lastBounceReason

**Step 7**

Add fields to s\_shipment for cached statistical values

* Modify table s\_shipment
* Modify table s\_link\_customer\_statical
* Modify table s\_link\_customer
* Modify table s\_shipment\_addr

**Step 8**

Remove are\_statistics\_dirty from s\_shipment, we want it to be NOT NULL with a DEFAULT (see next step)

* Modify table s\_shipment
  are\_statistics\_dirty

**Step 9**

Add are\_statistics\_dirty to s\_shipment, with a NOT NULL and a DEFAULT of 1 (true)

* Modify table s\_shipment
  are\_statistics\_dirty

**Step 10**

Creates a new List called MailingDomains. The table will contain entries consisting of domain addresses, which can be used for enforcing a mailing to use one of these in the senders email address.

* Add table MailingDomains

**Step 11**

Add sent\_num field to s\_shipment for cached statistical values

* Modify table s\_shipment
  sent\_num

**Step 12**

Add a foreign key to s\_message from s\_link, to denote that a link is a local link, belonging to that particular message

* Modify table s\_link
  local\_link

**Step 13**

Increase length of url column from 255 to 4000 characters

* Modify table s\_link
  url

**Step 14**

Move Bool redirect\_is\_url to a new enum field: redirect\_kind

* Modify table s\_link
  redirect\_kind, link\_parameters

**Step 15**

Delete obsolete field redirect\_is\_url (moved to redirect\_kind)

* Modify table s\_link
  redirect\_is\_url

**Step 16**

Add additional fields for form redirects

* Modify table s\_link
  form\_id, form\_parameters

## Metering

Create table for metering service use

* Add table metering\_log

## NewFollowupDialog

Changes length of text-field in Text-table, and adds html\_text-field. Adds agenda\_text\_id and internal\_notes\_text\_id to appointment.

* Modify table text
  text, html\_text
* Modify table appointment
  agenda\_text\_id, internal\_notes\_text\_id

**Step 2**

Add SendEmail field to Appointment table.

* Modify table appointment
  SendEmail

**Step 3**

Add index on appointment agenda\_text\_id

* Modify table appointment

**Step 4**

Add sentry to html text

* Modify table text
  html\_text

## NewSelection

The typical search table is an owner of a set of predefined selection criteria

**Step 2**

Cleanup after initial (obsolete) table definition

* Remove table TypicalSearch

**Step 3**

Define the TypicalSearch table from scratch

* Add table TypicalSearch

**Step 4**

Cleanup 'temporary selection' marking by introducing the IsTemporary field

* Modify table selection
  SystemType

**Step 5**

Add fields to table selection for more functionality. Also update the default sidepanel view for all pages, in userpreference

* Modify table selection
  chartKey, lastLoaded, lastLoadedBy, lastMembershipChange, lastMembershipChangeBy

**Step 6**

SelectionForFind creates a dynamic selection for each entity/associate as needed; they were missing the required VisibleFor row; those are added here

**Step 7**

Update targetTableNumber to 5 where it was 0, and reset membercounts to -1 where we have no recent data

**Step 8**

Due to limitations in the Windows code stack, the chartKey field is shortened to 254 characters

* Modify table selection
  chartKey

**Step 9**

Board view settings

* Add table board\_view\_settings

**Step 10**

Board view badge statistics (and other time accumulation statistics)

* Add table time\_keeping

**Step 11**

Making time\_keeping table compatible with our standard generated code, easier cleanup of orphan records, and easier db merge

* Modify table time\_keeping
  ownerTable, ownerRecord, entity\_id

## Notifications

Adds modified\_appointment\_fields field to appointment, and defines related ModifiedAppointmentFields enum.

* Modify table appointment
  modified\_appointment\_fields

**Step 2**

Add index on appointment, fields: type, activeDate for efficient queries

* Modify table appointment

## Online

Add table OnlineApp, to echo information about authorizations and usage. Optimize indexes for userpreference table, based on Ops data

* Add table OnlineApp
* Modify table userpreference
* Modify table userpreference

## Optimization

* Modify table TravelTransactionLog
* Modify table ForeignKey

**Step 2**

Deleting obsolete counter-preferences

## Pocket

* Add table PushNotificationService

**Step 2**

* Modify table PushNotificationService
  Language

**Step 3**

* Modify table PushNotificationService
  PocketVersion, OSVersion

**Step 5**

Adding rank field to favourites

* Modify table Favourite
  Rank

**Step 6**

Add TimeZoneId field to PushNotificationService, so notifications can use the recipients preferred timezone

* Modify table PushNotificationService
  TimeZoneId

## R\_Service

Add field for storing flags on a service login session

* Modify table login
  flags

**Step 2**

Change value of registry entry for maximum width of components

**Step 3**

Make sure the row with id=1 in ejuser contains the '(System)' user

## SubscriptionMgmt

* Add table MailingType
* Add table MailingTypeReservation
* Modify table s\_shipment
  mailingtype\_id

**Step 3**

* Add table TemporaryKey

**Step 5**

The "MailingType" list conflicts with an existing, hard-coded list in NetServer with the same name. Not good.

* Modify table MailingTypeReservation
  MailingType\_id
* Modify table s\_shipment
  mailingtype\_id
* Rename table MailingType to ShipmentType
* Modify table ShipmentType
  MailingType\_id
* Rename table MailingTypeReservation to ShipmentTypeReservation
* Modify table ShipmentTypeReservation
  MailingTypeReservation\_id, MailingType\_id
* Modify table s\_shipment
  mailingtype\_id

**Step 6**

The "MailingType" list conflicts with an existing, hard-coded list in NetServer with the same name. Not good.

* Modify table ShipmentTypeReservation

## SuperId

* Modify table associate
  waiting\_for\_approval

**Step 2**

* Modify table associate
  waiting\_for\_approval

**Step 3**

* Modify table associate
  waiting\_for\_approval

## targets

Add tables for Targets (Sales, Project, Selection....

**Step 2**

Some further normalization

* Remove table target\_group
* Remove table target\_period
* Remove table target\_period\_assignment
* Add table target\_group
* Add table target\_period
* Add table target\_assignment\_info
* Add table target\_assignment\_value

**Step 3**

Generate Dataright rows for Targets, in the data right matrix in Admin

**Step 4**

Add tables for Targets revision history

* Add table target\_revision\_history
* Add table target\_revision
* Add table target\_change

**Step 5**

Support larger values than 2 billion and log more revision details

* Modify table target\_revision\_history
  target\_assignment\_info\_id, target\_group\_id
* Modify table target\_assignment\_value
  target\_value2
* Modify table target\_change
  value\_change\_from2, value\_change\_to2

**Step 6**

Remove old value fields

* Modify table target\_assignment\_value
  target\_value, target\_value2
* Modify table target\_change
  value\_change\_from, value\_change\_to, value\_change\_from2, value\_change\_to2

**Step 7**

Support for new dimensions in targets system

* Add table target\_dimension
* Modify table target\_group
  target\_dimension\_id
* Modify table target\_assignment\_info
  target\_dimension\_item\_id

**Step 8**

List field rename

* Modify table target\_dimension
  dimension\_list

## TechnicalDebt

In this step we would like to remove userpreference entries with duplicate primary key!

## UserPreference

Migrate EjUser.num\_expanded\_messaged to UserPreference table

**Step 2**

Migrate EjUser default\_status\_new\_ticket, default\_status\_add\_message, default\_category, default\_user to UserPreference table

**Step 3**

Migrate EjUser flags to UserPreference table

**Step 4**

Migrate EjUser NotifyMask to UserPreference table

## Webhooks

The **Webhook** table keeps track of the **Target\_URL** where we will dispatch HTTP POST notificationsof events that happen in SuperOffice. The webhook state should be ACTIVE(1). If too many errors are received when we try to POST to the TargetUrl, then the webhook state is changed to TOO-MANY-ERRORS(3).

Define the new Webhook table to keep track of where we will dispatch HTTP POST notifications
of events that happen in SuperOffice.

* Add table Webhook

**Step 2**

The **Webhook\_usage** table keeps track of How many calls/errors a webhook has encountered. Moved off the main **Webhook** table to avoid disturbing Webhook cache.

Define the new WebhookUsage table to keep track of how much a webhook is used.
Move these fields off the webhook table so we can update without bothering webhook cache

* Add table Webhook\_usage

**Step 3**

Remove the old usage fields from the webhooks table after the usage has been copied to the new webhook\_usage table.

Define the new WebhookUsage table to keep track of how much a webhook is used.
Move these fields off the webhook table so we can update without bothering webhook cache

* Modify table Webhook
  total\_calls, total\_errors, consecutive\_errors, last\_error

**Step 4**

The **errors\_email** field tracks where to send an e-mail when NetServer receives too many errors trying to notify a webhook.

Add error e-mail field to webhooks
Allow e-mail to be sent to maintainer when webhook errors out

* Modify table Webhook
  errors\_email

**Step 5**

The **Webhook\_notify** table allows multiple associates or ad-hoc email addresses to be notified when a webhook fails. The **notify\_via** and **notify\_when** columns on **Webhook** control how and when those notifications are sent. Existing **errors\_email** values are migrated to **Webhook\_notify** rows.

Add Webhook\_notify table for notifying multiple associates/emails on webhook failure.
Add description, notify\_via and notify\_when columns to Webhook.
Migrate existing errors\_email data to Webhook\_notify.

* Modify table Webhook
  description, notify\_via, notify\_when
* Add table Webhook\_notify

## Workflows

Add tables for Workflows (email flows etc.)

* Add table workflow
* Add table email\_flow
* Add table workflow\_instance
* Add table workflow\_goal
* Add table workflow\_step
* Add table workflow\_trigger

**Step 2**

Add step rank

* Modify table workflow\_step
  Rank

**Step 3**

Add hierarchy\_id (folder structure)

* Modify table email\_flow
  hierarchy\_id

**Step 4**

Email settings on email flow

* Modify table email\_flow
* Modify table workflow\_instance
  next\_step, wait\_until

**Step 5**

Workflow settings for start, stop, remove from flow

* Modify table workflow
  use\_workflow\_start, workflow\_start, use\_enrollment\_end, enrollment\_end, tzLocationId, remove\_from\_flows
* Modify table email\_flow
  tzLocationId

**Step 6**

Workflow blocklist and more

* Modify table workflow
  block\_lists
* Modify table email\_flow
  from\_type, reply\_to\_type

**Step 7**

WorkflowStepOptions and Reply-To name

* Modify table workflow\_step
  parent\_workflow\_step\_id
* Modify table email\_flow
  reply\_to\_name
* Add table workflow\_step\_option
* Add table workflow\_step\_option\_link

**Step 8**

Email flow content (connected message assets)

* Add table email\_flow\_content\_link

**Step 9**

Store datetimes as UTC and disable automatic time zone conversion

**Step 10**

Locking system for concurrency control needed by workflows (and others)

* Add table temp\_db\_lock

**Step 11**

Workflow instance fields added

* Modify table workflow\_instance
  next\_step, last\_communication\_step, dropout\_reason, step\_started, step\_level

**Step 12**

Linking s\_shipment\_addr to workflow step and workflow instance to track responses

* Modify table s\_shipment\_addr
  workflow\_step\_id, workflow\_instance\_id

**Step 13**

Indexing new foreign keys on s\_shipment\_addr

* Modify table s\_shipment\_addr

**Step 14**

Change the key field from string to int

* Modify table workflow\_step\_option
  key, key\_id

**Step 15**

Exit settings for flow

* Modify table workflow
  exit\_flow\_id, exit\_success\_flow\_id

**Step 16**

WorkflowWaitForAction new table

* Add table workflow\_wait\_for\_action

**Step 17**

Workflow add 2 functional rights (obsolete)

**Step 18**

Email flow content (more assets)

* Modify table email\_flow\_content\_link
  s\_message\_id, email\_flow\_id, form\_id, s\_link\_id

**Step 19**

Workflow id elimination, simplification, optimization

* Modify table email\_flow
  workflow\_id, main\_message\_id
* Modify table workflow\_step\_option\_link
  Rank
* Add table workflow\_root\_step\_link

**Step 20**

Workflow id elimination, and simplification

* Modify table workflow\_step
  workflow\_id, rank
* Modify table workflow\_wait\_for\_action
  workflow\_id
* Modify table workflow\_step\_option
  workflow\_id

**Step 21**

Searchable form fields

* Add table form\_field\_value

**Step 22**

Add references to flow from other entities to track them (and some more)

* Modify table person
  created\_by\_form\_id, modified\_by\_workflow\_id, modified\_by\_workflow\_when
* Modify table sale
  created\_by\_workflow\_id
* Modify table ticket
  created\_by\_workflow\_id
* Modify table appointment
  created\_by\_workflow\_id


## Related topics

- [What's new in version 12.1.1412.0](/release-notes/database/changes-12.1.1412.md)
- [What's new in version 12.2.2072.0](/release-notes/database/changes-12.2.2072.md)
- [What's new in version 12.3.2195.0](/release-notes/database/changelog.md)
- [What's new in version 11.12.675.0](/release-notes/database/changes-11.12.675.md)
- [What's new in version 10.3.12.929](/release-notes/database/changes-10.3.12.md)
- [What's new in SuperOffice 12](/release-notes/12/index.md)
