[ Download ] Epicor 10.2 & Kinetic .CHM Schema

Kinetic 2022.1 Schema .CHM

Download

Bonus

For those who cant use .chm files
https://www.dropbox.com/s/yudirhvy8rkdqy7/Kinetic%202022.1%20HTML%20Version.7z?dl=0

Reminder

Remember that on Windows 10 you must right click on the properties of the file and Unblock it and for Windows 7 you must uncheck the Ask Me security checkbox on the Run Dialog. Also don’t run it from an UNC Path - WinHelp Bugs - or you will get Blank Content.

Lastly, this is for educational purposes only. Use it as your sidekick to easily lookup column names and their purpose.

9 Likes

Thanks Haso! You rule.

Above and beyond @hkeric.wci. Thanks!

1 Like

Thanks!

Thanks

1 Like

Thanks Haso!

Haso are you seeing this all over the place? Descriptions for the fields as Userchar1??

Yes I am in 2022.1 but not in 2021.1 oddly enough I just upgraded to .5 and the Data Dictionary shows correct. Odd. I’ll be building the 2022.2 soon anyways and I’ll keep an eye out - not sure what happened.

1 Like

Their field help in epicor does the same thing so it’s not you.

2 Likes

Thanks about Unblock it.

@hkeric.wci - Starting with 2023.1 we are adding a DB Upgrade step that will populate the Data Base Descriptions. The processing to do that will run sometime after the initial upgrade so we don’t slow down the upgrade process itself.

Thanks for the idea :slightly_smiling_face:

4 Likes

Nice! That would help everyone. Generating the documentation is easy, once MS_Description data is filled in.

Not sure if these scripts are better than yours :slight_smile: but feel free to use them. I had some SQL Genius a few years ago write these for me. Basically extracting the details from ZData and putting into MS_Description.Then I use any 3rd party tool to generate chm or html.

CREATE PROCEDURE [dbo].[AddExtendedPropertiesToColumns]
AS
    BEGIN

        SET NOCOUNT ON

        DECLARE @SystemCode NVARCHAR(8) ,
            @DataTableID NVARCHAR(128) ,
            @FieldName NVARCHAR(128) ,
            @Description NVARCHAR(4000) ,
            @Progress NVARCHAR(MAX) ,
            @Percent INT = 0 ,
            @Total INT = 0 ,
            @Current INT = 1

	   --get total rows count from table
        SELECT  @Total = COUNT(*)
        FROM    [Ice].[ZDataField]

	   --declare cursor for iterating through rows
	   --try to get [DBTableName] and [DBFieldName] first and if they are empty get [DataTableID] and [FieldName] instead
        DECLARE Descriptions CURSOR FAST_FORWARD
        FOR
            SELECT  [SystemCode] ,
                    CASE WHEN ISNULL([DBTableName], '') = ''
                         THEN [DataTableID]
                         ELSE [DBTableName]
                    END ,
                    CASE WHEN ISNULL([DBFieldName], '') = '' THEN [FieldName]
                         ELSE [DBFieldName]
                    END ,
                    [Description]
            FROM    [Ice].[ZDataField]


	   --open cursor
        OPEN Descriptions

	   --fetch first row from cursor into variables
        FETCH NEXT FROM Descriptions INTO @SystemCode, @DataTableID,
            @FieldName, @Description

	   --while there are rows loop through them
        WHILE @@FETCH_STATUS = 0
            BEGIN
                 IF EXISTS(select * from sys.tables t
						join sys.schemas s on t.schema_id = s.schema_id
						join sys.columns c on t.object_id = c.object_id
						where t.name = @DataTableID and s.name =  @SystemCode and c.name = @FieldName)
                    BEGIN	   
				    --if extended property exists update it, otherwise add it
                        IF EXISTS ( SELECT  NULL
                                    FROM    SYS.EXTENDED_PROPERTIES
                                    WHERE   [major_id] = OBJECT_ID(@SystemCode
                                                              + '.'
                                                              + @DataTableID)
                                            AND [name] = N'MS_Description'
                                            AND [minor_id] = ( SELECT
                                                              [column_id]
                                                              FROM
                                                              SYS.COLUMNS
                                                              WHERE
                                                              [name] = @FieldName
                                                              AND [object_id] = OBJECT_ID(@SystemCode
                                                              + '.'
                                                              + @DataTableID)
                                                             ) )
                            BEGIN
						  --update extended property
                                EXECUTE sp_updateextendedproperty @name = N'MS_Description',
                                    @value = @Description,
                                    @level0type = N'SCHEMA',
                                    @level0name = @SystemCode,
                                    @level1type = N'TABLE',
                                    @level1name = @DataTableID,
                                    @level2type = N'COLUMN',
                                    @level2name = @FieldName; 
                            END
                        ELSE
                            BEGIN
						  --add extended property
                                EXECUTE sp_addextendedproperty @name = N'MS_Description',
                                    @value = @Description,
                                    @level0type = N'SCHEMA',
                                    @level0name = @SystemCode,
                                    @level1type = N'TABLE',
                                    @level1name = @DataTableID,
                                    @level2type = N'COLUMN',
                                    @level2name = @FieldName;
                            END
                    END

			 --set progress string
                SET @Progress = 'Updated property for: ' + @SystemCode + '.'
                    + @DataTableID + '.' + @FieldName
                    + '; Current progress is '
                    + CAST(@Current * 100 / @Total AS NVARCHAR(MAX)) + '%%'

			 --notify in message tab
                RAISERROR(@Progress, 0, 1) WITH NOWAIT

			 --fetch next row from cursor
                FETCH NEXT FROM Descriptions INTO @SystemCode, @DataTableID,
                    @FieldName, @Description
			 
			 --increment current updated rows count
                SET @Current = @Current + 1
            END
    
	   --close cursor and free resources
        CLOSE Descriptions
        DEALLOCATE Descriptions

    END

CREATE PROCEDURE [dbo].[AddExtendedPropertiesToTables]
AS
    BEGIN

        SET NOCOUNT ON

        DECLARE @SystemCode NVARCHAR(8) ,
            @DataTableID NVARCHAR(128) ,
            @Description NVARCHAR(4000) ,
            @Progress NVARCHAR(MAX) ,
            @Percent INT = 0 ,
            @Total INT = 0 ,
            @Current INT = 1


	   --get total rows count from table
        SELECT  @Total = COUNT(*)
        FROM    [Ice].[ZDataTable]

	   --declare cursor for iterating through rows
	   --try to get [DBTableName] first and if it is empty get [DataTableID] instead
        DECLARE Descriptions CURSOR FAST_FORWARD
        FOR
            SELECT  [SystemCode] ,
                    CASE WHEN ISNULL([DBTableName], '') = ''
                         THEN [DataTableID]
                         ELSE [DBTableName]
                    END ,
                    [Description]
            FROM    [Ice].[ZDataTable]


	   --open cursor
        OPEN Descriptions
        
	   --fetch first row from cursor into variables
        FETCH NEXT FROM Descriptions INTO @SystemCode, @DataTableID,
            @Description

	   --while there are rows loop through them
        WHILE @@FETCH_STATUS = 0
            BEGIN
                IF EXISTS(select * from sys.tables t
							join sys.schemas s on t.schema_id = s.schema_id
							where t.name = @DataTableID and s.name =  @SystemCode)
                    BEGIN
				    --if extended property exists update it, otherwise add it
                        IF EXISTS ( SELECT  NULL
                                    FROM    SYS.EXTENDED_PROPERTIES
                                    WHERE   [major_id] = OBJECT_ID(@SystemCode
                                                              + '.'
                                                              + @DataTableID)
                                            AND [name] = N'MS_Description'
                                            AND [minor_id] = 0 )
                            BEGIN
						  --update extended property
                                EXECUTE sp_updateextendedproperty @name = N'MS_Description',
                                    @value = @Description,
                                    @level0type = N'SCHEMA',
                                    @level0name = @SystemCode,
                                    @level1type = N'TABLE',
                                    @level1name = @DataTableID;
                            END
                        ELSE
                            BEGIN
						  --add extended property
                                EXECUTE sp_addextendedproperty @name = N'MS_Description',
                                    @value = @Description,
                                    @level0type = N'SCHEMA',
                                    @level0name = @SystemCode,
                                    @level1type = N'TABLE',
                                    @level1name = @DataTableID;
                            END
                    END

			 --set progress string
                SET @Progress = 'Updated property for: ' + @SystemCode + '.'
                    + @DataTableID + '; Current progress is '
                    + CAST(( @Current * 100 ) / @Total AS NVARCHAR(MAX))
                    + '%%'
                
			 --notify in message tab
                RAISERROR(@Progress, 0, 1) WITH NOWAIT

			 --increment current updated rows count
                FETCH NEXT FROM Descriptions INTO @SystemCode, @DataTableID,
                    @Description

                SET @Current = @Current + 1
            END

	   --close cursor and free resources
        CLOSE Descriptions
        DEALLOCATE Descriptions

    END
2 Likes

66K + columns (that’s just ERP Schema), yep that will take a bit of time. Yikes!

Download

Notes

I usually use the very basic chm because I usually want to search tables. There is a Stored Procedures chm that includes functions, sps, tables with more info among other things. But that makes the searching more noisy. Hence why I dont just generate that, its useless for a Business Analyst who is using this to quickly bring up column details. It’s just cool that’s all.

Reminder

Remember that on Windows 10 you must right click on the properties of the file and Unblock it and for Windows 7 you must uncheck the Ask Me security checkbox on the Run Dialog. Also don’t run it from an UNC Path - WinHelp Bugs - or you will get Blank Content.

Lastly, this is for educational purposes only. Use it as your sidekick to easily lookup column names and their purpose.


@Rich thanks for pinging me, I forgot to upload - here we go!

7 Likes

It takes me with 8GB of RAM about 20 minutes. To populate Tables and Columns. But if Epicor from the get-go populates it in their Database Seed, eventually it’ll just come pre-populated and viola.

2 Likes

Thanks - we will review your Script.

If the database diagrams were right in SSMS, that would be even cooler.

I’ll take Swagger/OpenAPI for the win Tom.

1 Like

Thanks for putting these together. In the Data Schema file I am not seeing the jpeg files. Anyone else have this issue?

I believe you have to make it a trusted document in the properties of it somewhere, I think that’s what you’re missing.

1 Like