Business Operations
Business Operations component is intended to transform the input data into the output data. Some Business Operations can perform complex calculations with subsequent changes of the business objects state, i.e. they can modify the application data. Other Business Operations work in read-only mode: they obtain the input parameters and the application data and return some results then. The examples of Business Operations are listed below:
- the payroll process,
- the formation of the invoice on the basis of contracts,
- obtaining a price list,
- MRP procedure and so on.
Each Business Operation is an integral part of the subsystem interaction interface. They also have a special mechanism to override their implementation without recompiling the code, thus they can be used as the points of the final application configurating. Business Operations are used to maintain compatibility between different versions of the subsystems.
Business Operation can be executed either independently or in the context of a certain object. Context-dependent Business Operation use the data of the business object, in the context of which they are started. For example, if the amount recalculation of the waybill is needed, it is rational to run this operation in the context of the waybill's instance. To do so, the developer should implement a context-dependent Business Operation. Independent Business Operations work without taking any context into account. For example, it may be a batch generation of expenditure vouchers or a database integrity check.
For more information about Business Operations, please refer to the .
Xafari Audit
Xafari Audit module allows to log data changes, Action calls, and Business Operation calls. Compared with the module, Xafari Audit has more flexible configuration and singnificantly higher performance and stability in cases of massive changes to the objects (more than 1000 objects in a transaction).
Xafari Audit logs the following events:
- Removal, creation or modification of an object, its fields and collections.
- Execution of (context-dependent and context-agnostic), rollbacks of Business Operations.
- Execution of Actions (context-dependent and context-agnostic).
- Reports creation.
- User login or sign out.
The first version of the module implements the audit at the database level using triggers. It provides higher performance for processing large volumes of data and transactions.

For more information, please refer to the Xafari Audit. Getting Started post.
Docflow
The Xafari Docflow module exposes a number of components allowing to describe the life cycle of a document or an object in a formal manner. The Schema is a basic concept for document workflow design based on the Xafari Docflow module.
The Schema describes the sequence of stages, through which the document goes, and the sequence of performed tasks. It is possible to design a fixed Schema (ex. Workflow) or a flexible Schema (ex. ACM - Adaptive Case Management). All information relating to the document is collected and aggregated during the lifecycle.
All configuration of the Schema's behavior is performed in the Application Model. It can be configured even while the application is running. In so doing, programming in C# is not necessary.
You can specify a number of Schemas for any object type (Domain Component). Different instances of the same type can be processed using different Schemas.

For more information about the Docflow, please refer to the .
Branches
Branches are intended to separate data coming from various organizational structures. The usage of this module allows to implement the automation of holding companies efficiently and transparantly. Data isolation with using the Branches module provides the users with the ability to receive the whole set of consolidated statements for the corporation and group or filter data in the context of branches.
The administrator can effectively control the permissions to access the information. All information is stored in a single database. Each of the branches has full access to its own data. Access to the data of other branches is regulated in accordance with customizable rules and permissions excluding any possibilities of unauthorized access to the data storage.
Task List
This module provides the opportunity to create task lists for the employees and to execute the tasks from such lists. The main requirement when creating the module was to give the end-user the ability to work with task lists comfortably. To achieve this goal, we created intuitive and lightweight forms adapted for different purposes.
This module was designed to meet different needs of applied projects, i.e. it is fairly universal and flexible for solving most of practical tasks. There is a special API for the use of the module. The Task List module is used in since x06 version.

Common Data

Message Queue
Message Queue binds remote services to an independent application and coordinates their common work. The application can generate various types of messages for different services that handle these messages and return the results back to the app. This solution allows the developer to move some business logic from the application to the service. Such approach reduces the consumption of hardware resources and improves the response time of the application.
Messages can be of different types and they all are stored in the same database that the application is connected to. The messages are processed asynchronously on the server side.

For more information, please refer to the Working with Xafari (x07) Message Queue post.
Xafari Server
This component monitors the queue and distributes messages to specified handlers. Xafari Server works asynchronously as a XAF-application. Performing an operation, it selects all required messages, blocks them and sends to the corresponding handlers. Xafari Server has its own security provider establishing an environment for message processing and async interaction with the database through the connection pool.
Xafari Server can work in parallel with the main application in a separate thread; in this case it can use a local queue to store messages. Another scenario is to use a dedicated server. Using the local queue, all messages are deleted when the the main application closes. Using the server allows to keep all messages in the application database.
Xafari Report Server is based on Xafari Server and generates reports on a dedicated server. All generated reports are stored in the database and can be viewed in the reports journal of the app. The reports are generated based on the data available to the user launching the process. The generated report, therefore, contains only the certain data according to user roles and permissions.
Xafari Reports
Xafari Reports is a new reporting system for XAF-applications; it expands the fucntionality of XAF reports. The Xafari Reports system allows to create reports on the basis of several business objects with complex data structure and many calculated properties. The Xafari Reports system supports various sets of parameters that can be specified by the developer and saved for being reused when needed. The developer can implement an arbitrary algorithm to generate a report.
The Xafari Reports system allows to define multiple report representations (printed reports, graphs, pivot tables, uploading a file, etc.) depending on the choice of the user.
