UD Service Designer users (we are on-prem)
For background, we recently purchased the Cloud SDK and are trying to learn how to manage our User Defined tables.
We have 2 test environments - we are treating one as a pseudo-production environment and the other as development so we learn how to deploy to production and manage our tables.
Steps we have taken
In the development environment, we have created a table, regenerated the data model, recycled the app pool, generated the service, recycled the app pool, then tested in REST and all is well.
Next we built a solution containing the ZBODef, ZDataSet and ZDataTable elements, installed it in the pseudo-production environment, regenerated the data model, recycled the app pool, ran conversion step 210, recycled the app pool and tested in REST. All is still good.
Now we want to add a column to the table
We added the column to the table in the development environment, regenerated the data model, recycled the app pool, generated the service, recycled the app pool and tested in REST. All good.
Now we want to move the new column to the pseudo-production environment. We created a new solution using the steps but we get an error when installing the solution in the pseudo-production environment that that the above result in a errors when installing the solution that the records already exist (see screen shot)
Does anyone know how to move new columns to a production environment without using the UD Service Designer in production?
When ZDataTable, ZDataSet, ZBODef is imported via solution workbench, Epicor is checking to see if this GUID exists already as a SysRowID in the respective table.
Once itās added, there is a SolutionDetail row created with SolutionID = āThe Solution ID you installedā, with ForeignSysRowID pointing at the row in the respective table that was added.
Have you tried the options when installing the solution - the āOverwrite Filesā, āOverwrite Dataā, and āDelete Previous Installā? This may allow Solution WB to overwrite the GUID, which should allow your install to succeed.
If not, (try this in a non-prod first of course) you could try deleting the solution from installed solutions, and then installing it again. Deleting it would remove the SolutionDetail row (and also the ZDataSet etc. rows) Since you wouldnāt do a regen data model in between, this might retain the data and work fine.
I have had this happen many times. Here is a guide I wrote:
Follow these steps to deploy new columns to your TEST or PILOT environment before deploying production environment. Follow Test, Test, and Retest methodology:
Build the Solution: In your development environment, create a new solution containing only the modified elements (ZBODef, ZDataSet, and ZDataTable).
Import with Overwrite: When installing the solution in the target environment via Solution Workbench, ensure the overwrite option is selected for the existing records. This allows the new column definitions to be added to the existing table structure instead of failing due to the recordās existence.
Regenerate Data Model: Run the Regenerate Data Model task from the Administration Console to update the database schema with the new columns.
Recycle App Pool: Recycle the IIS Application Pool to apply the schema changes.
Run Conversion 210: Run the Conversion Program 210 (typically titled āRegenerate UD Servicesā or similar). This is the critical step for Cloud SDK users; it is the server-side equivalent of clicking āGenerate Serviceā in the designer and will regenerate the necessary DLLs and REST services for the updated table.
Final Recycle: Recycle the app pool one last time to ensure the newly generated services are fully loaded and accessible via REST.
Thanks for taking time to share your guide. A couple of questions for you. I tried this process and it didnāt work. I am using the kinetic solution workbench for both the build and the install. Iām wondering if you are using classic or kinetic?
We are running 2025.1.9.
How do you set up your keys? I used the PK_xxx_c key that is generated by default, but changed the fields as shown below. After a number of failed attempts to install solutions, I ended up with a table in my target environment that has the sysrowid as the key and the solution install says āZKeyField: Row has been modified by another user and couldnāt be updated.ā I had selected to āDelete the Previous Installā, which caused the ZBODef and ZDataSet to be deleted, but the delete fails for the ZDataTable with the message āDelete failed for āCABTest_cā. Deletion of ZDataTable records must be done manually.ā We are on prem so I did but it didnāt resolve the problem.
If you have any tips to share Iād appreciate it. These are all test environments - just want to be sure we know what we are doing before we start installing in production.
Thanks for taking time to respond Gabe. I did try with the āOverwrite Filesā and āDelete Previous Installā. During the delete phase, I got the message that āDelete failed for āCABTest_cā. Deletion of ZDataTable records must be done manually.ā And when I did that, Solution workbench gave me a row has been modified by another user on the ZKeyField, it had generated the default primary key and didnāt like the fact that I had different fields in the key. Went down a lot of rabbit holes after that including deleting records in the ZDataTable, ZDataSet and ZBODef and the reinstalling the solution. Sadly I lost track of all the things I tried. At this point my table in the target environment has the wrong keys (It chose SysRevID oddly) and no List table. Datamodels gen, Conversion 210 errors on that table.
These are all Test environments so Iām only sad that I canāt get it to work -nothing that matters is broken.
You can see a screen shot of my service definition from the source environment in my response to Jonathan. If you have any tips, I would welcome them.
Without the delete, I just get this:
[1/19/2026 9:05:18 AM] Installation process started.
[1/19/2026 9:05:18 AM] Extracting files from package.
[1/19/2026 9:05:18 AM] Process started by user cbrown.
[1/19/2026 9:05:18 AM] Processing data definitionsā¦
[1/19/2026 9:05:18 AM] Import of ZDataTable record ā5cb3cac1-cdc6-4e5d-b935-70768daad7acā was canceled. Record already exists.
[1/19/2026 9:05:18 AM] Import of ZDataTable record ā66077020-8f52-4e7c-9e93-51265be86a10ā was canceled. Record already exists.
[1/19/2026 9:05:19 AM] Import of ZDataSet record ā609e696d-3188-4b01-ab29-619f177a302cā was canceled. Record already exists.
[1/19/2026 9:05:19 AM] Import of ZDataSet record āb979cf73-a123-426f-ad84-0574a5e13647ā was canceled. Record already exists.
[1/19/2026 9:05:19 AM] Import of ZBODef record ā67b3c1ef-a8db-4de7-bb9e-ee273a4ee245ā was canceled. Record already exists.
[1/19/2026 9:05:19 AM] Finished the import of data definitions.
[1/19/2026 9:05:19 AM] Removing temporary files.
[1/19/2026 9:05:19 AM] Installation process completed.