Varios ejemplos C# .net para conectar con AX 4.0 utilizando Bussines conector

Filed under:.NET,4.0,Uncategorized,axapta,desarrollo,dynamics — posted by admin on June 24, 2010 @ 1:20 am

UAN

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Microsoft.Dynamics.BusinessConnectorNet.Axapta DynAx;
            DynAx =3D new =
Microsoft.Dynamics.BusinessConnectorNet.Axapta();
            // Test the connection to the .NET Business Connector=20
            // by using the proxy user.
            System.Net.NetworkCredential nc =3D new =
            System.Net.NetworkCredential("proxyBCAX", "********");
            try
            {
                DynAx.LogonAs("proxyBCAX", "", nc, "", "", "", =
                   "C:\\Documents and Settings\\1314\\Escritorio\\BC.AXC");
                //DynAx.LogonAs(Environment.UserName, "", null, "", "", =
                 "", "C:\\Documents and Settings\\1314\\Escritorio\\BC.AXC");
                Console.WriteLine( "Success Login OK");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
    }
}

CHU
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                label1.Text = "";

                Microsoft.Dynamics.BusinessConnectorNet.Axapta DynAx = new
                    Microsoft.Dynamics.BusinessConnectorNet.Axapta();
                Microsoft.Dynamics.BusinessConnectorNet.AxaptaRecord DynRec;

                // Authenticate the user and establish a session.
                DynAx.Logon(Company.Text, null, AOS.Text, Configuration.Text);
                if (DynAx != null)
                {
                    label1.Text = ("Login OK");
                }

                // Define the record as the AddressState table.
                DynRec = DynAx.CreateAxaptaRecord("AddressState");

                // Define the query that will run on the AddressState records.
                // This will return all the data in the AddressState table with
                // the cursor positioned at the first record in the table.
                DynRec.ExecuteStmt("select * from %1");

                // Check if the query returned any data.
                if (DynRec.Found)
                {
                    // Display the record on the form that was retrieved from the query.
                    textBox1.Text = (string)DynRec.get_Field("Name");

                }
            }
            catch (Exception ex)
            {
                textBox1.Text = (ex.ToString());
                textBox1.Text += (ex.Message);
                label1.Text = ("Login Filed");
            }
        }
    }
}
ZRI
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

                label1.Text = "";

                Microsoft.Dynamics.BusinessConnectorNet.Axapta DynAx = new
                    Microsoft.Dynamics.BusinessConnectorNet.Axapta();
                Microsoft.Dynamics.BusinessConnectorNet.AxaptaRecord DynRec;

            // Authenticate the user and establish a session.
                System.Net.NetworkCredential nc = new System.Net.NetworkCredential(USER.Text, PASS.Text);
            try
            {
                //"C:\\Documents and Settings\\1314\\Escritorio\\BC.AXC"
                DynAx.LogonAs(AXUser.Text, Domain.Text, nc, Company.Text, null, AOS.Text, Configuration.Text);

                if (DynAx != null)
                {
                    label1.Text = ("Login OK");
                }

                // Define the record as the AddressState table.
                DynRec = DynAx.CreateAxaptaRecord("AddressState");

                // Define the query that will run on the AddressState records.
                // This will return all the data in the AddressState table with
                // the cursor positioned at the first record in the table.
                DynRec.ExecuteStmt("select * from %1");

                // Check if the query returned any data.
                if (DynRec.Found)
                {
                    // Display the record on the form that was retrieved from the query.
                    textBox1.Text = (string)DynRec.get_Field("Name");

                }
                //DynAx.Logoff();
            }
            catch (Exception ex)
            {
                textBox1.Text = (ex.ToString());
                textBox1.Text += (ex.Message);
                label1.Text = ("Login Filed");
            }
        }
    }
}

Uso de contenedores Con AX Business Connector Net

Filed under:.NET,4.0,5.0,axapta,desarrollo,dynamics,dynamics2009,x++ — posted by admin on February 2, 2009 @ 7:54 am

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Security.Cryptography;
using System.IO;
using Microsoft.Dynamics.BusinessConnectorNet;

namespace ConsoleApplication3
{
class Program
{

static void Main(string[] args)
{
Axapta AX;
AX = new Axapta();
AX.Logon(“CNS”, null, “DYmanicsAx1:2713″ , null);
object[] Parmlist = new object[1];

AxaptaContainer Container = AX.CreateAxaptaContainer();
Container = (AxaptaContainer)AX.CallStaticRecordMethod(“InventDim”, “dimEnabledFieldList”, 1);
Console.WriteLine(BankAccountTable.Call(“balanceCur”, Container));

AX.Logoff();
}

Microsoft Dynamics 2009

Filed under:5.0,axapta,dynamics,dynamics2009,oracle — posted by admin on May 16, 2008 @ 1:04 am

Ya esta aquí, la pre-released de axapta 2009 y como lo han bautizado Dynamics 2009.

Bueno puestos a probarla, pues hay va el resumen de la instalación, lo cierto que esta nueva versión tiene muchas cosas nuevas que iremos descubriendo y probando, así rápido de decir que podremos configurar en nuestros clientes el consumo de memoria en función de la instalación he incluso en que cpu queremos que se ejecute nuestro aos. También hay nuevos conceptos que la parte de desarrollo que consiguen una perfecta integración y nos facilitara la vida a todos los X frikis. 

Diario de una instalación.

Herramientas:

-Windosw 2003 R2

-Oracle express 10 g

Después de hacernos con la copia de dynamics 2009 en el mercado negro por supuesto.

La tostamos por que queda muy chuli eso de ir enseñando el dvd por hay .. jejej…

y le damos cera a la instalación.

dibujo_1.JPG

Uno empieza a darle a los botones todo loko de contento cuando se encuentra con que no se puede instalar en sql server 2000, el framework 3.5 y un par de cosillas mas, eso me pasa por darle y no leer las especificaciones de instalación.

Suerte que los pakistanies que ha puesto  M$ a trabajar en esta versión se han puesto las pilas y se nota que son de donde son… total q la cosa y a viene lista sin andar por hay buscando parches y otras fiestas…

dibujo_2.JPG

dibujo_3.JPG

Tras  pegarnos con la instalación de oracle, configurar el usuario y el active directori que no falte… (estos siempre barriendo pa su casa)

dibujo_5.JPG

Una de las cosas mas interesantes que trae este pre-released es la posibilidad de consultar un log con todas las maldades que nos ha ido haciendo en el sistema, lo que proporcina una gran ayuda para solventar posibles errores.

dibujo_6.JPG

Es importante que la instalación al igual que 4.0 nos envia bastante información al visor de sucesos.

Durante una de las pruebas el tablespaces de systema se nos quedo pequeño al configurar mal  la ubicación de tablas lo que nos produjo unos cuantos errores de sincronización, como unos 800, total que por suerte en 2 minutos se pudo averiguar la causa y solventarla.

dibujo_7.JPG

Esta versión ya podemos decir que es un producto tecnologicamente mas competitivo y mas estable.

dibujo_8.JPG

Estas son los comandos para crear un tablespaces de pruebas y un usuario valido, a la vez que la autentificación  externa.

SQL> alter system set os_authent_prefix =”OPS$” scope=SPFILE;
SQL> create user “OPS$DOM\ADMINISTRADOR” identified externally;

Usuario creado.

SQL> grant connect to “OPS$DOM\ADMINISTRADOR”;

Concesi¾n terminada correctamente.

SQL>
create tablespace AXDATA datafile ‘C:\oraclexe\oradata\XE\AXDATA.dbf’
size 50M autoextend on;

create tablespace AXINDEX datafile ‘C:\oraclexe\oradata\XE\AXINDEX.dbf’
size 50M autoextend on;

Rápido y conciso no ???

No hay para mas que el jefe me pide cerrar  iva y no llegamos..

JAJJAJAJA

Como ejecutar un archivo cmd o .bat desde un cliente sobre el servidor AOS

Filed under:3.0,4.0,AOS,dynamics,x++ — posted by admin on March 27, 2008 @ 4:27 am

Para poder crear un archivo tipo bat o cmd con definirlo de esta manera “file = new asciiio(‘c:\\filex.bat’,'w’);” ya tenemos un fichero llamado filex.bat en c:\ . Ahora bien en nuestro c: o en el del sevidor???? Pues eso solo lo sabremos si el metdodo q hemos ejecutado se lanza del lado del cliente o del lado del servidor, y para salir de dudas mejor definir una metodo static y ponerle server para que de fijo se lance en el servidor donde se este ejecutando nuestro AOS (AX32serv.exe).

static server void Start()
{
asciiio file;
str txt;
;
winapi::deleteFile(‘C:\\file2.txt’);

file = new asciiio(‘c:\\filex.bat’,'w’);

if (file)
{
txt = (strfmt(‘net start “Axapta batch 1″ ‘));
file.write(txt);

file = null;

winapi::shellExecute(‘c:\\filex.bat’);
winapi::deleteFile(‘C:\\filex.txt’);
}

}

ftx_tpv_shutdownrestartservices.xpo

dibujo111111.JPG

Como instalar un cluster de AOS en 3.0 y para que sirve.

Filed under:3.0,AOS,axapta,dynamics — posted by admin on March 6, 2008 @ 1:20 am

Buenas, pues todo el mundo sabe lo que es un cluster de maquinas no??,  el que no se pede pasar por la wiki y luego seguimos.

Total  Ax (axapta 3.0) permite instalar un balanceador de conexiones entre dos o mas AOS, para que sirve esto, pues más bien para no mucho, el concepto es que el dependiendo del número de usuario que se han conectado a un u otro AOS este cluster distribuye la conexión entrante para mantener un numero homogéneo de conexiones. 

Nada de  transacciones o de carga de procesos, simple y “molt macu” para vender un poco de tecno-logia al puro estilo de las modas de internet. Seguro que en un par de meses se les ocurre algo para dual core.. jajjajaa..

Para terminar un copy paste de como se instala y se configura.. Perdon por los derechos de autor.. jejjeje

Axapta Object Server cluster

The Axapta Object Server cluster environment is build to provide load balancing and fall back. An Axapta Object Server can be specified to belong to a specific cluster. If the same cluster name is given for a number of object servers they all belong to the same cluster. A user can be specified to connect to a given cluster.

Suppose a number of servers are set up in the same cluster – named AOSC. They should all use the same application and database, and in other aspects have the same settings. All clients connecting to the AOSC should be specified to search for servers belonging to this cluster, otherwise the load balancing mechanism will not work properly. A client starting up against an Axapta Object Server Cluster will start out by broadcasting an UDP package requesting Axapta Object Servers fulfilling names and IP server masks given in the client settings to respond. It is therefore vital that firewalls allows such packages to pass through. The client will receive answers from all Object Servers with information on object server name and the name of the instance plus the number of clients connected to that instance. The client disregard information from servers not belonging to the requested cluster. The client then chooses one of the instances with the lowest number of clients.

Since a client automatically can choose from all servers in a cluster one or more Object Servers can be down with out changing the connection procedures. However performance might suffer severely due to higher load on the fewer servers.

Setting up the server

On the server manager select the server of interest and click settings. In the advanced field write -cluster=<my cluster name>. The cluster name can be up to 10 characters long.

Setting up the client

In the configuration tool choose the configuration of interest. In the advanced field write -cluster=<my cluster name>. The client setting for connecting to an object server depends on two situations. The first situation being both client and Axapta Object Servers being in the same subnet. The second being client and Axapta Object Servers belong to different subnets.

Recall the settings in the configuration utility for connecting to an object server:

- Axapta Object Server Mask
- Axapta Object Server host names
- Axapta Object Server IP Address masks

When the client and Object Servers belong to the same subnet the above three masks can be left blank.

When the client and Object Servers belong to different subnets the IP Address masks should contain the mask for the subnet the Object Servers belong to. An example could be 192.88.253.255, where the last 255 specifies that the search is done among servers in the subnet 192.88.253.*.

Note – if client at any time receives only service response from Object Servers within the same cluster it will automatically choose the least loaded of these servers without having to specify the cluster name in the client configuration. This means that if your installation is one single Axapta cluster, there is no need to change the existing configuration with respect to cluster name. Ensure that all relevant Object Servers are located by client configurations network set up.

Como pasar parametros entre objetos usando la clase args AX axapta

Filed under:3.0,4.0,Uncategorized,aot,axapta,desarrollo,dynamics,x++ — posted by admin on February 19, 2008 @ 5:01 am

Args  es utiliza para pasar argumentos al constructor de una clase. Args pueden transmitir información como el nombre, y los parámetros que llaman a una nueva clase.

Los formularios, informes y consultas utilizan  la clase Args como primer argumento en el constructor.

Pasandole el nombre del objeto a crear a una clase args y despues llamar a classfactory con estos argumentos podemos inicializar fomularios, informes etc.

    Args a = new Args(“CustTable”);
    formRun fr = ClassFactory.FormRunClass(a);
    fr.init();
    fr.run();
 

para recuperar el objeto args en la clase de destino, por regla general existe un metodo que nos devuelve este dato.

elment.args() en el caso de formulario.

El objetivo de esto es poder pasar a traves de args objetos completos a otros contextos de ejecución de forma que podriamos abrir un formulario inicial F1 ejecutar otro formulario secundario F2 y poder ejecutar metodos del formulario 1 desde el formulario 2.

un ejemplo.

Hemos creado un from con un metodo para recuperar el texto de un strignedit y este texto lo vamos a pintar desde un report, utilizando para ello una clase intermedia o el metodo del form que lo ha llamado.

fir_dem.xpo 

public void init()
{
    object ob;
    FIR_ReportClas FIR_ReportClas;

    super();

    //axl si no es la clase entonces es el formmm…
    if (classIdGet(element.args().caller()) == classNum(FIR_ReportClas))
    {
            FIR_ReportClas = element.args().caller();
            print FIR_ReportClas.texto();
    }
    else
    {
        ob = element.args().caller();
        print ob.texto();
    }

dibujoaaxxzee.bmp

Instalación de AX Dinamics 4.0 con oracle express

Filed under:3.0,4.0,Uncategorized,axapta,dynamics,oracle — posted by admin on February 15, 2008 @ 2:04 am

Desde este blog apostamos más por la utilidad y el buen hacer que por las facturas que van a cobrar las consultoras en ventas de productos Microsoft. Hemos de reconocer que AX es un buen producto como “erp” que ya se ha asentado en nuestro país y que día a día es una solución tanto para la pequeña como media empresa. A la hora de implantar un Ax normalmente los que deciden que base de datos o plataforma se va a utilizar, suelen ser los comerciales que le venden la moto al pobre cliente que no sabe realmente que necesita ya  que no tiene experiencia sobre en el tema. Aprovechando esta carencia algún que otro desalmado le coloca un sql Server solo para sacarse unas perrillas de más y de paso subir un par de puntos en el ranking de “Partners“, o tal vez por puro desconocimiento o falta de profesionalidad. Para nosotros y con la experiencia adquirida desde la versión 2.1,  desde antes del año 2000 recomendamos “oracle” para las instalaciones que requieran un volumen de movimientos  grande. Bases de datos que vayan a superar los 30 o 50 GB no en su instalación base, sino en el crecimiento que sufrirá tras su puesta en producción. A lo que vamos. La instalación de AX 4.0 es muy sencilla y solamente necesitamos una maquina 2003 server r2 actualizada y una base de datos en este caso oracle Express que aun con una limitación de 4 GB  nos servirá de ejemplo. http://www.oracle.com/technology/software/products/database/xe/index.htmlTras instalar oracle Express que no es muy difícil continuaremos con la de AX 4.0, uno de los pasos en la instalación es la elección de la base de datos, en este instante nos solicitara una serie de datos, el listener, el puerto tcp o el usuario y la contraseña de la base de datos. Ax necesita que la autentificación de base de datos la realice el sistema operativo. Para conseguir esto solo necesitamos cambiar el parámetro de XE

os_authent_prefix  

Con un prefijo tipo ‘ops$’ nos sevira,  de manera que oracle sepa identificar si el usuario del SO que solicita la conexión esta creado en oracle autorizando el acceso.  Crearemos un usuario  en oracle como este:

-- Windows
CREATE USER "OPS$DOMINIO.COM\DBO" IDENTIFIED EXTERNALLY;
GRANT CONNECT TO "OPS$DOMINIO.COM\DBO";

Crearemos un usuario en nuestro dominio en este caso DBO .Oracle –> OPS$dominio\DBOWin –> DBOY podremos finalizar la instalación.Ni que decir tiene que debemos crear un tablespace de datos otro de indices etc. (Vamos lo típico en estos casos).http://www.oracle-base.com/articles/misc/OsAuthentication.php Para finalizar recomendaros que ORACLE + SUSE Linux  + AX es la mejor combinación para un optimo rendimiento de la instalación y evitar los sustos que nos dará Microsoft con el día a día que ya sabemos todos.  Un saludo.

Como es eso de la seguridad en AX 3.0

Filed under:3.0,Uncategorized,axapta,dynamics,seguridad — posted by admin on February 5, 2008 @ 2:08 am

A mi me cuesta mucho entender el modelo de seguridad de AX, pero menos mal que tenia por hay un documento de M$ que vamos a pegar integro por si a alguien le sirve pa algo…

Configuration and security in Navision Axapta

This technical information paper will go through the concept of the configuration and security system introduced in version 3.0 of Navision Axapta.

Introduction

With version 3.0 of Navision Axapta the Configuration and Security system is introduced. This system is an extension of the feature key system that has existed since the first version of Axapta.

This paper is an introduction to the concept and ideas behind the new system. The paper will not deal with the technical aspects of how to create configuration and security keys and connect these to application objects. These issues are covered in the Navision Axapta Developer’s Guide, which is available from the Help menu in the toolbar.

For help on specific forms in Navision Axapta, please consult the online help.

Configuration and security key concept

The new security system was created to make the system more intuitive and flexible, and easier for the administrator to set up. The feature keys are replaced by two types of keys: configuration and security keys. This means, that the double-function the feature keys previously had, is now replaced by two types of keys each having one function.

The standard version 2.5 of Navision Axapta had more than 1,000 feature keys. The new system will only have few, but well-defined keys. To maintain the flexibility, security can now be set up on each menu item.

License codes

The license code concept has not changed on the interface with version 3.0. The setup form still looks the same, and license information can be entered manually or loaded from the license file. But license codes are now defined in the AOT. The specific codes, however, are still requested at, and generated by Navision.

Configuration keys

Configuration keys are used to disable or enable functionality and, according to the name, used for configuration of your system. Configuration keys are present everywhere in the AOT like the feature keys were present.

When buying license codes and entering these in the system, you perform the first steps of the configuration. A more detailed configuration is done from the Administration menu; click Setup, then System and double-click Configuration. In most cases license codes control the configuration keys, therefore it is not possible, and would not make sense, to disable a configuration key. A configuration key, however, can control a number of child configuration keys, and they can be either disabled or enabled as required. An example could be a company buying the Trade module license code; the company wants most of the functionality in this module, but does not do business with other countries, and chooses therefore to disable the Foreign trade configuration key. This can all be controlled from the Configuration form.

A minimized system

Having loaded the license code file, the system will start up minimized. This means that all child configuration keys are disabled. Any required extra features can safely be enabled later. A specific setup can still be exported and imported, or, if necessary reset to standard, which is the minimized system. The minimized system will not be used during an upgrade.

dibujo1112.JPG

Security keys

Having set up the configuration keys, security must be considered. Security keys are used to control access to functionality for users. The security keys are used almost everywhere the feature keys were, except for indexes, fields and types:

  • Indexes – the performance of indexes must be available for all users, just as in version 2.5.

  • Fields – security on fields must be set up from the User group permissions form, under the table they belong to.

  • Types – security can only be applied to fields, making the concept of indirect access obsolete.

Security keys control access to menu items and tables, and setup is done from the Administration menu, click Setup, then Security, and User group permissions. Access for menu items and tables can be set to:

  • No access,

  • View,

  • Edit,

  • Create, and

  • Full control.

     

The figures (2 and 3) below illustrate the hierarchy of the configuration and security keys.

Key hierarchy

dibujo1113.JPG

dibujo1114.JPG

Fig 3.: (C) = Configuration key, (S) = Security key, (MI) = Menu item, and (T) = Table.

 

Figure 3 illustrates how security keys control menu item and table access, and how the Ledger configuration key controls the Cust security key.

For each module, a set of 9 security keys exists, they all have the same naming, and the prefixes denote the module. For the Accounts Receivable module the security keys are:

  • Cust

  • CustDaily,

  • CustJournals,

  • CustInquiries,

  • CustReports,

  • CustPeriodic,

  • CustSetup,

  • CustMisc, and

  • CustTables.

    The security key structure resembles the Main menu structure. To make setup easier, drill-down of menu items is possible. A drill-down will display the tables, form controls and other menu items that are accessible from the menu item.

Record level security

Another new feature for version 3.0 is the Record level security system. It can be used in addition to the other permissions setup in Navision Axapta. For each combination of company, user group, and table a query can be set up, limiting data access for the specific combination. Specify, for example, that a certain user group within a company only has access to see customer numbers from 1000 to 4999. Row level security is set up from the Administration menu, under Setup, then Security, and Record level security.

Read more about Record level security in the online help.

Forms’ setup

In previous versions, an extension of the security access was to set up access to fields etc. on specific forms. The setup was done from each specific form for the user group. With version 3.0, the same functionality is available, but it is handled differently. Granting access to form controls is done from the User group permissions form. In the tree, each control for a specific form, this being a field, a button or a display field can be set to the appropriate access level.

Comparison

For the user coming from an Axapta version 2.5, the changes may not seem very overwhelming on the interface. The main difference between the old and the revised system is the split-up into two different types of keys. This means that it is more obvious to the user what keys are used for what purpose.

Another difference is, that indirect access no longer exists. Indirect access was introduced to allow related fields to be shown in the related table in order to, for example, show the Item number on a Sales Order. Since it is no longer possible to set security on types, the Item number field will not be removed, and the indirect access is not necessary. To remove the Item number field from the Sales Order, use table access on the sales order table and item number field.

The following table illustrates the Feature key system versus the Configuration system:

 

Functionality

2.5

3.0

License codes

Used for registering license information.

Codes are requested at Navision.

License codes are defined in the kernel.

 

Used for registering license information.

Codes are requested at Navision.

License codes are defined in the AOT.

Configuration keys

Did not exist as a separate type of key. The function lied in Feature keys.

Are used for enabling/disabling functionality.

Security keys

Did not exist as a separate type of key. The function lied in Feature keys.

Are used for assigning access to user groups.

Users

Users are created, and permissions are assigned to User groups. A user must be member of at least one User group.

Users are created, and permissions are assigned to User groups. A user must be member of at least one User group.

User groups

Permissions are assigned to User groups. A User group can belong to one or more Domain(s), and can have different permissions assigned through the Domain.

Permissions are assigned to User groups. A User group can belong to one or more Domain(s), and can have different permissions assigned through the Domain.

Companies

A company can be connected to one or more Domain(s).

A company can be connected to one or more Domain(s).

Domains

A domain is a collection of one or more company accounts. The purpose of domains is to enable user groups to have some permissions within a number of company accounts, and other permissions within other company accounts.

A domain is a collection of one or more company accounts. The purpose of domains is to enable user groups to have some permissions within a number of company accounts, and other permissions within other company accounts.

User group permissions

User group permissions are assigned for a user group within a certain domain. The same user group can have different permissions assigned within each domain.

Feature keys controlled the access rights for user groups to features, menus and tables.

User group permissions are assigned for a user group within a certain domain. The same user group can have different permissions assigned within each domain.

Security keys control the access for user groups. Each module is divided into 8 categories, resembling the Main menu structure: Daily, Journals, Inquiries, Reports, Periodic, Setup, Miscellaneous, and Tables.

The indirect access concept has disappeared. Access is set up on security keys, menu items, tables, fields, and form controls.

Record Level Security

Did not exist.

Record level security allows setup of data limitations for a certain combination of Company/User group/Table. It extends the User group permissions setup.

Forms’ setup

Setup for the specific controls on a form, saved per User group and Domain.

No longer exists as a separate form. Setting form control access is done from the User group permissions form per User group and Domain.

Table access

A separate system to limit access to confidential tables and fields by overruling the feature keys.

No longer exists as a separate system. Security is set up from the security tree, see Example on page 7.



image: detail of installation by Bronwyn Lace