Skip to main content

AX 2009 - How to Transfer Security Settings to a Production Server

Option 1 – Use the Security Export/Import Process
In this option, you use the built-in Export and Import functions on the User group permissions form.
Export from STAGING
  1. Log into STAGING system
  2. Go to Administration | Setup | Security | User group permissions
  3. Select the User group and Domain for which you want to export
  4. Click the Export to button
  5. Enter the file name and location of the export file (e.g., SalespersonExport.asg)
  6. Click OK
  7. The User group/Domain security is exported into a *.asg file
Import in PRODUCTION
  1. Log into PRODUCTION system
  2. Go to Administration | Setup | Security | User group permissions
  3. Select the User group and Domain for which you want to import the new security settings
  4. Click the Import button
  5. Browse to the .asg file created in step 7 above
  6. Click OK
  7. The security settings from the .asg file are imported into the User group/Domain you selected in step 3
Option 2 – Use the Standard Export/Import Process
In this option, you use the standard built-in import/export utility and import in only the tables that you need.
Export from STAGING
  1. Log into the STAGING system
  2. Log into the DAT company
  3. Go to Administration | Periodic
  4. Expand Data export/import
  5. Select Definition groups
  6. Enter a new Definition group (e.g., Security)
  7. Enter a Definition group name (e.g., Transfer Security Settings)
  8. In this example, select Standard as the Type (you can use another that you prefer)
  9. Click Options tab
  10. Select the "Include system tables" checkbox (security tables are considered system tables in AX)
  11. Click the Table setup button
  12. Only include the following tables:
    1. AccessRightsList* - Stores the security permissions for User groups
    2. UserGroupInfo* - Stores the User groups
    3. DomainInfo* - Stores the Domains
    4. UserGroupList - Stores the User group membership
    5. UserInfo - Stores the AX Users
    6. SysUserInfo - Stores the AX User option settings
    7. CompanyDomainList - Stores the company/domain relationship
  13. Click the Export to button
  14. Browse to a location, name, and save the file (.dat if using Standard type)
  15. OK
Import in PRODUCTION
  1. Log into PRODUCTION system
  2. Log into the DAT company
  3. Go to Administration | Periodic
  4. Expand Data export/import
  5. Select Import
  6. Select the Definition group you created
  7. Browse to the .dat file you exported
  8. Ok

Important Notes:
  • These are examples of a one-time transfer and where it is accepted to overwrite any security settings that may have already been created on the Production system
  • You must understand the data that is stored in each of these security tables as it will overwrite your settings
  • Export and import only the tables that you wish to use in the new system
  • There are additional tables that could optionally be exported and imported such as usage data stored in the SysLastValue table if the circumstances were that the usage data created on the STAGING server is valuable to bring over to PRODUCTION
  • When using the Standard Import/export utility, you must perform this in the DAT company as the security tables are system tables

Recommendations:
  1. You should create your security settings on the PRODUCTION server to avoid moving data from STAGING to PRODUCTION.
  2. Use option 1 if you are only moving small sets of permissions as it will require additional work and could create many export files. With this option you can only export out one User group+Domain combination at a time. Ex: If you had 5 domains, it would mean each group could have 5 export files.
  3. You should use the transfer options for one-time transfers of security and you should always include the tables marked with an * when one-time transfers

Popular posts from this blog

Mark All for Open Cust Trans and Open Vend Trans

We have situations where there are lots of open transactions that need to be settled against each other. This can be the case if auto settlement is turned off. One solution is to add a "Mark All" button to the custOpenTrans or vendOpenTrans forms. This button "checks" the mark checkbox on every line. The user can then uncheck several lines if needed and Update to settle the lines. The code below is an example of what we used on the open vendor transaction screen. The code is very similar on the AR side. One note: I used vendTable.AccountNum in the code below. That should be generalized to work with any buffer that is passed into the open trans form. void customMarkAll() { VendTransOpen localVendTransOpen; VendTrans localVendTrans; container conSum; int linesProcessed; ; //show wait cursor startLengthyOperation(); element.lock(); //remove all prior markings specOffsetVoucher.deleteSpe...

Print Report in Microsoft Dynamics AX 2009 through X++

I am trying to print sales confirmation report on a button click which I have added on Sales Order Detail form in Microsoft Dynamics AX 2009. On click event of that button, I have written following code: void clicked() {     Args                args;     ReportRun           reportRun;     SalesFormLetter     salesFormLetter;     PrintJobSettings    printJobSettings;     CustConfirmJour     custConfirmJour;     RecordSortedList    list                = new RecordSortedList(55);     SalesTable          salesTableUpdate;     ;     SELEC...

Creating Free Text Invoice through X++ code

Job: Calling class from job to run the class public void freeTextInvoicePostTestJob() { Dialog dialog; DialogField dlgCustAcc; DialogGroup dialogPeriodLengthGroup, dialogPeriodLengthGroup1; DialogField dlgLedgerAcc; ; dialog = new Dialog("Free-Text Invoice"); dialogPeriodLengthGroup1 = dialog.addGroup('Cust Table'); dlgCustAcc = dialog.addField(typeid(CustAccount)); dialogPeriodLengthGroup = dialog.addGroup('Ledger Table'); dlgLedgerAcc = dialog.addField(typeid(LedgerAccount)); if(dialog.run()) { if(dlgCustAcc.value() && dlgLedgerAcc.value() != '') FreeTxtInvoiceCreatePost::main(dlgCustAcc.value(), dlgLedgerAcc.value()); else throw error(strfmt("Either CustAccount or LedgerAccount info is missing.")); } } Class: Which creates the free text invoice class FreeTxtInvoiceCreatePost { } static void main(CustAccount _custAccount, LedgerAccount _ledgerAccount) { CustInvoiceTable custInvoiceTable; ...