Aptify strongly recommends that you install and test the installation on a test environment first using a copy of your production server before running it directly on the production server. Also, review the Important Post-Installation Considerations topic before starting an installation. |
Download the Aptify 6.0 Service Pack Installer ZIP file to a folder on the database server and unzip its contents.
When using low-end hardware, Aptify recommends running the installation program locally on the database server; do not run it over the network. |
The Windows API requires that fully qualified file names are less than 260 characters. Aptify recommends that the Aptify 6.0 Service Pack Installer ZIP file is unzipped in a folder close to the drive's root folder (for example C:\Downloads) in order to limit the possibility of exceeding the character limitation for fully qualified file names imposed by the operating system. |
Enter login information for your database server. Specify an account with system administrator privileges to both the Aptify database and SQL Server. The user should also be tied to a Developer license to ensure that the setup can perform such tasks as entity creation when needed.
Selecting the System Administrator option when creating a user in the Aptify database sets the user to a dbowner in SQL Server. It does not add the user to the sysadmin role. You will need to manually add the user to the sysadmin role through SQL Server. If in doubt, check the user's permissions in the Security > Logins area of SQL Management Studio before proceeding with the installation. |
Review the Installation welcome screen and click Next to continue.
If you are using the SQL Server Reporting System (SRSS) in your environment, enter the location where the SSRS reports are stored in the SSRS Reports Path field.
The location should be entered in the following format:
You can leave this field blank if an SQL Reporting Server is not already configured or if you are not planning on using SSRS in your environment. The location can be configured at a later time. |
If you have organization specific configurations, you can check any or all of the options on the Validation step to help identify invalid repository and database objects, and foreign key constraint errors.
Aptify recommends that you check all validation options to ensure Aptify 6.0 installs successfully. |
When using the Generic Import wizard with the Aptify 6.0 Desktop interface to import a Microsoft Access 2013 or 2016 file, the import may fail if running the 64-bit version of Microsoft Office 2013 or 2016. The error that is generated is: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. The import fails because the user's computer has the 64-bit version of Access 2013 or 2016 installed, while the Aptify shell requires the 32-bit version. The current workaround for this issue is to install the 32-bit version of the Access Database Engine Redistributable on the user's computer. The installation file, AccessDatabaseEngine.exe, can be found in the Access Database Update sub-folder.
If you are planning on viewing reports using SQL Server Reporting Services (SSRS), you will need to install the 32-bit version of the Microsoft SQL Server System CLR Types and Report Viewer.
Save and close the Entities record.
Regenerate the base view for any related entities that join the entity for which you just enabled row set security.
This section provides the instructions to configure the Log4net functionality in Aptify:
Follow the below steps to configure these settings in app.config / web.config file. In Aptify, the Aptify Shell.config file is used to configure these settings.
Config Section: Add the below log4net Config section to add the namespace:
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> <section name="exceptionManagement" type="Aptify.Framework.ExceptionManagement.ExceptionManagerSectionHandler,AptifyExceptionManagement" /> <section name="AttributeManagement" type="Aptify.Framework.AttributeManagement.AttributeManagerSectionHandler,AptifyAttributeManagement" /> </configSections> |
Root: A single root section is required under the top-level root section as specified in Config Section. These are the loggers that inherit information from your base logger (root).
<log4net debug="false"> <root> <appender-ref ref="TextInfoAppender"/> <appender-ref ref="TextDebugAppender"/> <appender-ref ref="TextErrorAppender"/> <appender-ref ref="TextPerformanceAppender"/> </root> <appender name="TextInfoAppender" type="log4net.Appender.RollingFileAppender">...</appender> <appender name="TextDebugAppender" type="log4net.Appender.RollingFileAppender">...</appender> <appender name="TextErrorAppender" type="log4net.Appender.RollingFileAppender">...</appender> <appender name="TextPerformanceAppender" type="log4net.Appender.RollingFileAppender">...</appender> </log4net> |
Appender: An appender is the name of the information logger. It specifies where, how and under what circumstances the information will be logged. Each appender has different parameters based on the data movement.
<appender name="TextInfoAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\AptifyLogs\Infolog.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maximumFileSize value="5MB"/> <maxSizeRollBackups value="-1"/> <staticLogFileName value="true"/> <datePattern value="_yyyy.MM".log""/> <filter type="log4net.Filter.LevelMatchFilter">...</filter> <filter type="log4net.Filter.LevelMatchFilter">...</filter> <filter type="log4net.Filter.LevelMatchFilter">...</filter> <filter type="log4net.Filter.LevelMatchFilter">...</filter> <filter type="log4net.Filter.LevelMatchFilter">...</filter> </appender> |
Filter: With a filter, you can specify which level(s) to log and also look for keywords in the message. When a message fits inside the criteria for a filter, it is logged and the processing of the filter is finished. This is the biggest gotcha of a filter. Therefore, ordering of the filters becomes very important while creating a complex filter.
<filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO"/> <acceptOnMatch value="true"/> </filter> |
Following are the additional configurations to turn on /off the exception log for the respective level.
<appSettings> <add key="Aptify.Framework.Log.IsInfo" value="true"/> <add key="Aptify.Framework.Log.IsDebug" value="true"/> <add key="Aptify.Framework.Log.IsPerformance" value="false"/> </appSettings> |
Below is an example of the log4net code in the app.config file:
<log4net debug="false"> <root> <appender-ref ref="TextInfoAppender"/> <appender-ref ref="TextDebugAppender"/> <appender-ref ref="TextErrorAppender"/> <appender-ref ref="TextPerformanceAppender"/> </root> <appender name="TextInfoAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\AptifyLogs\Infolog.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maximumFileSize value="5MB"/> <maxSizeRollBackups value="-1"/> <staticLogFileName value="true"/> <datePattern value="_yyyy.MM".log""/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO"/> <acceptOnMatch value="true"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="DEBUG"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="PERFORMANCE"/> <acceptOnMatch value="false"/> </filter> <layout type="Aptify.Framework.Log.TextLayout"/> </appender> <appender name="TextDebugAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\AptifyLogs\Debuglog.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maximumFileSize value="5MB"/> <datePattern value="_yyyy.MM".log""/> <maxSizeRollBackups value="-1"/> <staticLogFileName value="true"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="DEBUG"/> <acceptOnMatch value="true"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="PERFORMANCE"/> <acceptOnMatch value="false"/> </filter> <layout type="Aptify.Framework.Log.TextLayout"/> </appender> <appender name="TextErrorAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\AptifyLogs\Errorlog.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maximumFileSize value="5MB"/> <datePattern value="_yyyy.MM".log""/> <maxSizeRollBackups value="-1"/> <staticLogFileName value="true"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="DEBUG"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL"/> <acceptOnMatch value="true"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR"/> <acceptOnMatch value="true"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="PERFORMANCE"/> <acceptOnMatch value="false"/> </filter> <layout type="Aptify.Framework.Log.TextLayout"/> </appender> <appender name="TextPerformanceAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\AptifyLogs\Performancelog.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <maximumFileSize value="5MB"/> <datePattern value="_yyyy.MM".log""/> <maxSizeRollBackups value="-1"/> <staticLogFileName value="true"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="DEBUG"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="FATAL"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="ERROR"/> <acceptOnMatch value="false"/> </filter> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="PERFORMANCE"/> <acceptOnMatch value="true"/> </filter> <layout type="Aptify.Framework.Log.TextLayout"/> </appender> </log4net> |