logo

List of critical changes in versions 3.9.x

List of changes in version 3.9.22

OracleTransformationProvider changed

The Connection property of the class EleWise.ELMA.Extensions.Oracle.OracleTransformationProvider returns EleWise.ELMA.Runtime.Db.Proxies.DbConnectionProxy instead of connection of the Oracle provider.

PublicAPI

No changes.

 

List of changes in version 3.9.21

API of code and public classes

Rounding up numbers using scripts

If a script is executed when changing the value of an integer or fraction, when specifying a more precise value than defined in the property settings (entering a fraction in an integer field), it will receive a rounded up value according to the settings.

User interface

Notification about a new periodic event to the participants

Now the notification about a new periodic event contains a correct link to the event template.

Designer, Data model, Business processes

Added verification of class and database table names on the form for creating a new process in Designer. The IDs in these fields must start with a Latin letter, followed by numbers, Latin letters or underscores "_". In addition, C# keywords are forbidden in class names, and keywords of the DBMS used are forbidden in database table names.

How it was:

When creating a process, you could specify any symbols in the class name and database table name of different process structures. There was no verification and no error message was displayed, while the process was saved. However, it was impossible to publish such a process later and the class name could not have been changed in Designer.

http://www.elma-bpm.ru/kb/assets/Butorina/855_136.png

How it is now:

Class and database table names are verified when creating a new process and error messages are shown.

http://www.elma-bpm.ru/kb/assets/Butorina/855_137.png

PublicAPI

No changes

 

List of changes in version 3.9.20

Code API. Public methods and interfaces

Views for Email and Phone types

Views for displaying separate Emails and Phones were added (not as a list). Views for displaying Email and Phone lists were modified.

Site.cshtml view

The DisplayTemplates/Site.cshtml view was deleted from the system; its logic was moved to the DisplayTemplates/Uri.cshtml view

Template generator functions changed

1. The following functions were renamed:

a. RemindTime renamed to GetReminderTimeSpan

b. TransformFile renamed to TransformFileToSignedText

c. IsProjectTemplate renamed to IsProjectTaskTemplate

d. GetObject renamed to LoadEntityByWorkLogItem

e. ObjectDisplayName renamed to GetEntityDisplayNameByWorkLogItem

2. The functions EleWise.ELMA.Tasks.Notifications.TaskTemplateGeneratorFunctions.HtmlString and EleWise.ELMA.Messaging.SMS.Notifications.SmsTemplateGeneratorFunctions.StringCut were moved to the standard template generation functions EleWise.TemplateGenerator.Function.DefaultFunctions.

3. Class EleWise.ELMA.Messaging.SMS.Notifications.SmsTemplateGeneratorFunctions was deleted.

User interface

Access permissions to pages modified

When editing portlet pages, users, who have permissions to edit, can now switch to editing general settings.

Configuring access to a page is available only if the user has full access to the page and when editing general settings.

Projects

Possibility to select users (executor/co-executor/supervisor) for project tasks when publishing a project plan. In case when a project role with more than one user was selected in a plan task, the system used to suggest selecting a specific user each time when publishing the plan. Now you do not select users for completed tasks and the tasks for which a user had been selected during previous publications.

Designer

Two parameters were added to the Designer’s configuration file (EleWise.ELMA.BPM.Designer.exe.config):

1. SvcUtilPath (path to the SvcUtil utility) will be used in most cases. The file must contain a local path to SvcUtil.exe.

2. SvcUtilAdditionalParams (additional parameters for starting SvcUtil) will rarely be used, but may be required occasionally. Start parameters must be passed. To learn more, read https://docs.microsoft.com/en-us/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe

Fill in these fields only if the supplied SvcUtil version does not work. If the SvcUtil parameter is empty or the file is not found in the specified path, the supplied SvcUtil version is started.

PublicAPI

CRM section:

PublicAPI.CRM.Objects.Category.Filter() - filter changed:

IsDeleted(Boolean isDeleted) - Added

KPI section:

PublicAPI.KPI.Objects.SMART.SMARTTask.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

PublicAPI.KPI.Objects.KpiTask.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

Docflow section:

PublicAPI.Docflow.Tasks.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

Projects section:

PublicAPI.Projects.ProjectTaskBase.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

PublicAPI.Projects.ProjectTaskBase.Milestone.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.Filter() - filter changed:

UnderControl(Boolean underControl) - Deleted

UnderControl(Nullable<Boolean> underControl) - Added

 

List of changes in version 3.9.19

Public methods and interfaces

1. In the class EleWise.ELMA.Documents.Managers.AcquaintanceTaskGroupManager methods AddExecuters were marked as obsolete; instead, use AddSwimlaneExecuters.

2. In the class EleWise.ELMA.Documents.Managers.ApprovementTaskGroupManager methods AddExecuters were marked as obsolete; instead, use AddSwimlaneExecuters.

3. In the class EleWise.ELMA.Security.Managers.ReplacementManager methods AddUserToList and GetExecutor were marked as obsolete; instead, use AddUserToList<T> and GetExecutor<T>.

4. In the class EleWise.ELMA.Workflow.BPMN.Diagrams.Activities.BPMNActivity<TElement> methods Pair<IUser, IUser>[] GetExecutors were marked as obsolete; instead, use IUser[] GetSwimlaneExecutors. Methods AddUserToList were marked as obsolete; instead, use AddSwimlaneUserToList with different sets of parameters. Method Pair<IUser, IUser>[] IActivityWithExceptionFlowsImpl.GetExecutors was marked as obsolete; instead, use IUser[] IActivityWithExceptionFlowsImpl.GetSwimlaneExecutors.

5. In the interface EleWise.ELMA.Workflow.BPMN.Diagrams.Activities.IBPMNActivity methods Pair<IUser, IUser>[] GetExecutors were marked as obsolete. Methods IUser[] GetSwimlaneExecutors(IWorkflowInstance instance) and IUser[] GetSwimlaneExecutors(IWorkflowInstance instance, out bool assignedToResponsible) were added.

6. In the interface EleWise.ELMA.Workflow.Diagrams.Activities. IActivityWithExceptionFlowsImpl method Pair<IUser, IUser>[] GetExecutors was marked as obsolete. Method IUser[] GetSwimlaneExecutors(NativeActivityContext context, out bool assignedToResponsible) was added.

7. The extension point ISwimlaneChangedHandler were marked as obsolete; instead, use ISwimlaneChangedExecHandler.

User interface

Default sorting in the list of linked objects

Default sorting setting was added for the list of linked objects. When configuring this element in the form builder, you can select one of the displayed columns and specify a sorting direction. After publishing the object (process/document type/project type), which uses a form with changed settings of the list of linked objects, users will see the new settings in Web Application (all the user settings of this list will be reset to the ones, configured in the form builder in Designer).

Other

1. The “Do not validate required fields” box was removed from the Create Document activity.

2. A separate log file for script execution data was added. The new log files are in web\logs\ScriptLog.

PublicAPI

Docflow section:

Added methods:

Void PublicAPI.Docflow.Document.AddComment(Document document, Comment comment, IEnumerable<Attachment> attachments, IEnumerable<DocumentAttachment> documentAttachments)

Portal section:

Added object managers:

PublicAPI.Portal.Objects.Security.ReplacementRule

ReplacementRuleFilterHelper PublicAPI.Portal.Objects.Security.ReplacementRule.Filter()

PublicAPI.Portal.Objects.Security.ReplacementRule.Filter() - filter changed:

Replacement(Replacement replacement) - Added

TargetUser(User targetUser) - Added

PropertyUid(Guid propertyUid) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

 

List of changes in version 3.9.18

Code API. Public methods and interfaces

In the BinaryFile class, a new property was added:

/// <summary>

/// Delete the temporary file after saving to the database

/// </summary>

bool DeleteTempFileAfterSave { get; set; }

and a method:

/// <summary>

/// Set a local path to the file

/// </summary>

/// <param name="contentFilePath">Local path to the file </param>

/// <param name="deleteTempFileAfterSave">Delete the temporary file after saving to the database </param>

void SetContentFilePath(string contentFilePath, bool deleteTempFileAfterSave = false);

This property indicates, that after saving the file to the database, the physical source file must be deleted; true is automatically assigned to this property when the InitializeContentFilePath method is invoked; false is assigned when a new value is assigned to the ContentFilePath property. Clearing of the folder for storing temporary ELMA files was added; all the files, created more than 24 hours ago will be automatically deleted.

Object filters changed

1. In the interface EleWise.ELMA.BPM.Web.Common.Controllers. IFilterController method was changed FilterFields: parameter string filterGridId = "" was added.

2. Unique ids of objects and scripts were added to the html markup of the filter form.

 

User interface

Reassigning business process tasks

Only task executors and their superiors can reassign a task (reassigning is not forbidden in the process). The process initiator, who is the task author, does not have this permission.

PublicAPI

 

List of changes in version 3.9.17

Code API. Public methods and interfaces

The extension point IPreBindResolver is marked as obsolete, instead use the extension point

namespace EleWise.ELMA.Web.Mvc.Binders

{

/// <summary>

/// Factory for ValueProvider

/// </summary>

[ExtensionPoint(ServiceScope.Shell)]

public interface IValueProviderFactory

{

/// <summary>

/// Create ValueProvider for the current <see cref="controllerContext"/>

/// </summary>

IValueProvider GetValueProvider(ControllerContext controllerContext);

}

}

User interface

Changes in the LDAP module

Manual and automatic synchronization of users imported from LDAP with automatic locking (according to the condition, specified in the import/synchronization filter) of ELMA users was implemented.

http://www.elma-bpm.ru/kb/assets/Butorina/855_132.png

In the LDAP module settings, you can enable/disable automatic synchronization and start manual synchronization.

Display of parent tasks on the Gantt chart

Parent tasks are now displayed differently, depending on whether it is a stage task or not.

http://www.elma-bpm.ru/kb/assets/Butorina/855_133.png

General improvements

· Text formatting in the Task Description field fixed.

· Possibility to combine cells in a column for single objects (only header, only editing field, etc.) was added.

· Possibility to hide the block header or the grid header for tables with configurable column width was added.

ELMA plugin for Visual Studio

Plugin version field was added to the About Program window, displaying the current version of the plugin. If the plugin and server versions do not match, the user will see a respective notification in the About Program window.

Possibility to change the designer/web server/package manager folder was implemented. To activate the respective buttons, run Visual Studio as the administrator.

http://www.elma-bpm.ru/kb/assets/Butorina/855_134.png

PublicAPI

No changes.

 

List of changes in version 3.9.16

Code API. Public methods and interfaces

New methods for placing and releasing data by regions were added to ComplexCacheService:

/// <summary>

/// Get value from cache or calculate value and write it to cache, if not found

/// </summary>

/// <typeparam name="T">Value type</typeparam>

/// <param name="key">Key to store in cache</param>

/// <param name="timestampKey">Timestamp key</param>

/// <param name="timestampRegionKey">Region timestamp key</param>

/// <param name="valueAccessor">Function, that returns a value. It is invoked if information is not found in the cache</param>

/// <returns>Value</returns>

T GetOrAdd<T>(string key, string timestampKey, string timestampRegionKey, Func<T> valueAccessor);

 

/// <summary>

/// Get value from cache or calculate value and write it to cache, if not found

/// </summary>

/// <typeparam name="T">Value type</typeparam>

/// <param name="key">Key to store in cache</param>

/// <param name="timestampKey">Timestamp key</param>

/// <param name="timestampRegionKey">Region timestamp key</param>

/// <param name="valueAccessor">Function, that returns a value. It is invoked if information is not found in the cache</param>

/// <param name="timeout">Value store timeout</param>

/// <returns>Value</returns>

T GetOrAdd<T>(string key, string timestampKey, string timestampRegionKey, Func<T> valueAccessor, TimeSpan timeout);

 

/// <summary>

/// Update timestamp

/// </summary>

/// <param name="timestampKey">Timestamp key</param>

/// <param name="timestampRegionKey">Region timestamp key</param>

void RefreshTimestamp(string timestampKey, string timestampRegionKey);

 

/// <summary>

/// Update region timestamp

/// </summary>

/// <param name="timestampRegionKey">Region timestamp key</param>

void RefreshTimestampRegion(string timestampRegionKey);

Changes in export/import

1. Transfer of simple settings was added for document type export/import:

· Document name template

· Allow changing the document name

· Load version from file

· Scan version button

· Generate version from template

· Dispatch control

· Allow registering documents of these type several times

· Restrict the work with the document via the web interface

· Use a life cycle for documents of this type

2. Transfer of document groups was added for document type export/import.

Permissions in CRM

The service category “No category” for Contractors and Leads was returned to CRM. Algorithm: If the “Inherit from categories” box is selected and no category is assigned for a Contractor (Lead), then the “No category” permissions are automatically added to the “Inherited permissions” section.

User interface

Configuring forms in processes

All the elements, available for tasks (including Time report log tab and time report list) were added to the form builder for process tasks.

http://www.elma-bpm.ru/kb/assets/Butorina/855_128.png

Unnecessary elements were removed from the form builder for process start, such as Transition buttons, Process information and Process context properties container.

http://www.elma-bpm.ru/kb/assets/Butorina/855_129.png

Diagram export

Text overlay in the logo of diagrams exported as images was removed; the text is now localizable.

How it was:

http://www.elma-bpm.ru/kb/assets/Butorina/855_130.png

How it is now:

http://www.elma-bpm.ru/kb/assets/Butorina/855_131.png

Tasks

· When creating a sub-task with several executors, one entry with all the created tasks is added to the history.

· Creating overdue sub-tasks is forbidden.

Settings

Description of parameters that allow configuring the application was added in the Settings.config file. Description was added both for default parameters and for situational (hidden) parameters.

PublicAPI

Docflow section:

Added methods:

Boolean PublicAPI.Docflow.Document.ChangeStatus(Document document, LifeCycleStatus status)

Boolean PublicAPI.Docflow.Document.ChangeStatus(Document document, LifeCycleStatus status, String comment)

Boolean PublicAPI.Docflow.Document.CanChangeStatus(Document document, LifeCycleStatus status)

IEnumerable<LifeCycleStatus> PublicAPI.Docflow.Document.GetEnableStatuses(Document document)

Projects section:

PublicAPI.Projects.Objects.MaterialResource.Filter() - filter changed:

NotIds(Int64[] notIds) - Added

NotIds(List<Int64> notIds) - Added

 

List of changes in version 3.9.15

Public methods and interfaces

1. Method EleWise.ELMA.KPI.Managers.SmartTaskManager.CheckTaskExpiration(DateTime checkTime) was marked as obsolete.

2. Extension point EleWise.ELMA.BPM.Web.Common.ExtensionPoints. IFilterPortletGridId was marked as outdated.

User interface

Outgoing mail settings

In the outgoing mail settings in the administration section, the Use SSL property was replaced with the new Connection Protection property, which has three values: No, SSL, TLS. When loading settings from a database, the old parameters are automatically converted to the new: if No is selected in the Use SSL field, then No will be selected in the Connection Protection field. Otherwise, the value will be selected depending on the value of the Port for Sending Messages field.

Form builder

Possibility to hide the icon for creating object on process task/object forms was added.

This option is in the property dialog box:

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_52.png

After selecting this option on the form (in Designer), the icon will be hidden both in the Designer and on the form in Web Application after publishing the object. Important: the object creation icon will be hidden for all the child object, but you can change it for each particular child object.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_53.png

Diagram export

Now the image of the exported diagram contains the name in the header.

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_123.png

Processes

Option for interrupting child processes in case of multiple operation start was added.

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_124.png

Display of document type subscribers added

How it was:

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_125.png

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_126.png

How it is now:

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_127.png

Now you can view subscribers by clicking Actions – View Subscriptions on the document page.

PublicAPI

Docflow section:

Added methods:

Void PublicAPI.Docflow.Objects.Tasks.AcquaintanceTaskGroup.Terminate(AcquaintanceTaskGroup group, String comment, Boolean sendNotification)

Void PublicAPI.Docflow.Objects.Tasks.AcquaintanceTaskGroup.Terminate(AcquaintanceTaskGroup group, Boolean sendNotification)

Void PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Terminate(ApprovementTaskGroup group, String comment, Boolean sendNotification)

 

List of changes in version 3.9.14

Code API. Public methods and interfaces

Extension point IElementWithViewTransformation, responsible for getting the required view for a specific task type, was added. It has the following methods:

· bool AcceptableElement(IElementWithView element) – for which task type the extension point is used;

· FormView GetFormView(IElementWithView element, IWorkflowTaskBase task) – get the element form.

Base realization of this extension point was implemented – BaseFormViewTransformation, which is executed for all the process task types and returns element.View, if no other realization was found. To child classes were implemented: UserTaskViewTransformation and DocflowViewTaskTransformation for process tasks and document tasks.

Documents

Possibility to create a document in a script without specifying a type was removed

User interface

Forest integration for LDAP was added

1. Use Forest parameter was added

2. Template import settings for the forest were added

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_50.png

Designer

Debugging of custom activities was added (similar to process script debugging). It is available only after publishing the custom activity.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_51.png

PublicAPI

Docflow section:

Outdated methods:

Document PublicAPI.Docflow.Document.Create(BinaryFile file, Folder folder, String name)

Document PublicAPI.Docflow.Document.Create(Folder folder, String name)

Document PublicAPI.Docflow.Document.Create()

 

List of changes in version 3.9.13

Code API. Public methods and interfaces

  • Method LoadMetadata(string filename, bool throwEx) was added to MetadataSerializer. If the metadata are not found in the file, then depending on throwEx null (throwEx == false) or error (throwEx == true) will be returned.
  • Three methods were added in the interface IElementWithExceptionFlows: CanHandleException, QueueExecutionTimeoutSupported and GetQueueExecutionTimeout.
  • In the class ActivityExceptionFlowHelper method Execute was marked as obsolete.
  • To implement automatic escalation triggered by error or timer in your custom activities, you need to implement interface IElementWithExceptionFlows (or redefine methods CanHandleExceptionByEscalation and QueueExecutionTimeoutSupported when inheriting from BPMNFlowElement)

User interface

Lead conversion

When converting a lead, it is now possible to create neither a deal nor a relationship. When choosing to create a deal or a lead, required fields on the form are validated.

Telephony

Possibility to configure CallerId for each user, if using Asterisk.

ELMA plugin for Visual Studio

Possibility to create ELMA Entity in the ELMA plugin for Visual Studio was removed. Possibility to edit exiting ELMA Entity remains.

PublicAPI

No changes.

List of changes in version 3.9.12

ELMA plugin for Visual Studio

ELMA plugin now supports Visual Studio 2015.

New functions added to the template document generator:

Function for displaying date and time in a defined format - DateTimeFormat

Equivalent to DateTime.ToString("your format")

* - required parameter

Parameters:

[0]*: Date/time (DateTime)

[1]: Display format

Example: {DateTimeFormat({$Date}; ‘yy-MM-dd’)}

Function for displaying a number in a defined format - NumberFormat

Both standard formats and the number of decimal places are acceptable

* - required parameter

Parameter:

[0]*: Number (all numeric types, except for byte)

[1]: One of the standard or custom display formats (string)

[1]: Number of decimal places (all numeric types, except for byte)

-Note: if a number with a floating decimal point is passed as the second parameter, then the number of decimal places will be equal to the integral part of this number with rounding up

Example: {NumberFormat(2345.6789;3)}

Function for displaying a number as money. Displayed only in the Russian culture format - MoneyFormat

Number exponent separator is a space

In the same way, takes the format of the number of decimal places

* - required parameter

Parameters:

[0]*: Number (all numeric types, except for byte)

[1]: Number of decimal places (all numeric types, except for byte)

-Note: if a number with a floating decimal point is passed as the second parameter, then the number of decimal places will be equal to the integer part of this number with rounding up

Example: {MoneyFormat(23451234.6789;2)}

User interface

1. Possibility to insert images to email signature was added. In the settings, you can select what signature will be used for system emails: simple or HTML. You can add markup and images to an HTML signature.

2. Links to external and internal sub-process instances were added to the process instance map. Links to the parent process instance were added to the sub-process instance map.

Public API interfaces

Encryption providers

1. Interface ICryptoProvider was expanded: properties IsAttributesSupported and IsContentSupported were added

2. Abstract class AbstractCryptoProvider was added, which implements the interface ICryptoProvider

3. All encryption providers are inherited from AbstractCryptoProvider, instead of ICryptoProvider

Working with files

In the class EleWise.ELMA.Web.Mvc.Controllers. BinaryFilesController methods:

1. HasPermissionOnFile(BinaryFile file)

2. HasPermissionOnFile(BinaryFile file, out string errorMessage)

3. PrepareBinaryFile(BinaryFile file)

4. GetRanges(string rangesHeader, long fileLength, out long[] RangesStartIndexes, out long[] RangesEndIndexes) were marked as obsolete, the code of these methods was moved to the class EleWise.ELMA.Web.Service.FileUpDownHelper.

In the class EleWise.ELMA.Web.Service.FileUpDownHelper the following methods were additionally implemented:

1. GetContentRange(string rangeHeader, out long fileLength, out long startPos, out long endPos)

2. BinaryFile GetStorableBinaryFile(string id, out string errMessage)

3. GetCachedBinaryFile(string id, out string fileName, out string filePath, out string contentType)

4. Stream GetPartialFileStream(string filePath, out long fileLength, out long startOffset, out long endOffset, out bool isPartial, out string errMessage)

5. bool CreateOrAppendIncrementFile(ref Guid fileGuid, string fileName, Stream inputStream, long startPos, long endPos)

Class EleWise.ELMA.Files.RangeStreamWrapper was transferred from version 3.10.

PublicAPI

Docflow section:

Added methods:

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Nullable<WorkTime> planWorkLog, Boolean forceEndDateFromTask, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Nullable<WorkTime> planWorkLog, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

DocumentApprovementTask PublicAPI.Docflow.Tasks.CreateTask(ApprovementTaskGroup group, ApprovementListItem item, Boolean forceEndDateFromTask, SwimlaneElement swimlane, User author, Nullable<DateTime> endDateFromTask, String customName)

PublicAPI.Docflow.Objects.DocumentAssignUser.Filter() - filter changed:

User(User user) - Added

Enums section:

Added enumerations:

PublicAPI.Enums.Documents.DigitalSignature.SignatureGeneratingType.TemplateAndContent

PublicAPI.Enums.Documents.DocumentsDigitalSignature.SignatureGeneratingType.TemplateAndContent

PublicAPI.Enums.KPI.Performance.PerformanceMatrixStatus.NoComplete

PublicAPI.Enums.KPI.KPIPerformance.PerformanceMatrixStatus.NoComplete

List of changes in version 3.9.11

User interface

1. Ctrl+S shortcut was added for forms (views)

2. Behavior of the "Do not validate required fields" option was changed – validation is disabled only for context variables, for other variables on the form, validation remains.
This behavior works only for these elements:

a. Send for approval

b. Send for acquaintance

c. Make a decision

d. Create decision based tasks

e. Signing

f. Approval

g. Register document

h. Create document

3. The "Do not validate required fields" box was added for the following elements:

a. Send document

b. Make decision

c. Create decision based tasks

d. Signing

e. Approval

4. The "Validate required fields" box was added for the following elements:

a. Register document

b. Create document

PublicAPI

Docflow section:

Added object managers:

PublicAPI.Docflow.Permissions.TranslateSystemPermission

Processes section:

Added object managers:

PublicAPI.Processes.Permissions.TranslateSystemPermission

Portal section:

Added object managers:

PublicAPI.Portal.Security.PermissionsSecurity.TranslateSystemPermission

PublicAPI.Portal.CalendarEvent.PermissionsEvent.TranslateSystemPermission

Projects section:

Added object managers:

PublicAPI.Projects.Permissions.TranslateSystemPermission

List of changes in version 3.9.10

User interface

Additional EQL filter for documents

Additional EQL filter applied to a property with documents also filters recently used documents.

Locked users in a user group

When selecting users from a user group, locked users are excluded.

Searching users by organizational structure element

If you select a department in the organizational structure field when searching users, then the search result will display all the employees of the department and subordinate units. In Administration, the user filter has a parameter, indicating that only users included in the department (without subordinate units) should be searched.

Binding a process to stage change in the active sales funnel

When configuring processes in the sales funnel, you can also select the processes, that the current user cannot start.

Dynamic text field

The height of text fields in the web interface can be changed when entering data.

Nested object properties in blocks

You can configure display of nested object properties in blocks; they will be displayed in the list of entries.

CRM

Leads now support the form builder

Report functioning changed

1. Report cache FastReport EleWise.ELMA.Reports.Services. FastReportRunCache was removed.

2. System reports are published automatically after the import.

Metadata functioning changed

1. Restriction on naming table columns user properties of metadata (Uid and TypeUid) was added.

Script editor

1. PublicAPI autocomplete was added in the scripts module.

2. Web service link generation mechanism was changed. The new mechanism is similar to adding web services in Visual Studio. Generation with the old method is also available.

How it was:

https://www.elma-bpm.ru/kb/assets/tazmieva/855_39.png

How it is now:

https://www.elma-bpm.ru/kb/assets/tazmieva/855_40.png

https://www.elma-bpm.ru/kb/assets/tazmieva/855_41.png

User interface

1. Possibility to assign control to a group of users in a project plan was added.

https://www.elma-bpm.ru/kb/assets/tazmieva/855_42.png

https://www.elma-bpm.ru/kb/assets/tazmieva/855_43.png

 

2. The Subtasks tab of project tasks displays subtasks of outdated and unpublished plan versions with the “outdated plan” label.

https://www.elma-bpm.ru/kb/assets/tazmieva/855_44.png

3. On a project task page it is possible to specify expected start date, due date and time report.

https://www.elma-bpm.ru/kb/assets/tazmieva/855_45.png

https://www.elma-bpm.ru/kb/assets/tazmieva/855_46.png

 

 

4. Organization structure object:

4.1. Drop down list. Display of users, assign to a job position was added; the number of users is also displayed if there are more than one (option in the property settings).

https://www.elma-bpm.ru/kb/assets/tazmieva/855_47.png

https://www.elma-bpm.ru/kb/assets/Palshina/927_101.png

4.2 Search form. Hierarchy display was added when clicking on the organizational structure icon.

https://www.elma-bpm.ru/kb/assets/Palshina/927_100.png

Data model

Obsolete property was added to the interface EleWise.ELMA.Projects.Models.IProjectTaskBase, which indicates that a task does not pertain to the current plan version.

Changes in export/import

1. Export of data from objects marked as not participating in data export/import is forbidden.
2. Import of data, whose metadata is marked as not participating in export/import is forbidden.

User interface

Object selection window during export was changed

https://www.elma-bpm.ru/kb/assets/tazmieva/855_50.png

Now, if data export is forbidden for an object, the checkbox is replaced with an icon with a tooltip.

Support of new Rutoken plugin

Due to disabling of NPAPI in Chrome, the Rutoken integration code was rewritten to asynchronous calls.

Portal

Possibility to configure the color theme of ELMA web interface was added.

PublicAPI

CRM section:

Added methods:

LeadPersonPermissionFilterHelper PublicAPI.CRM.Objects.LeadPersonPermission.Filter()

PublicAPI.CRM.Objects.LeadPersonPermission.Filter() - filter changed:

User(User user) - Added

PermissionRole(Nullable<Guid> permissionRole) - Added

Lead(Lead lead) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

Projects section:

PublicAPI.Projects.ProjectTaskBase.Filter() - filter changed:

Obsolete(Boolean obsolete) - Added

PublicAPI.Projects.ProjectTaskBase.Milestone.Filter() - filter changed:

Obsolete(Boolean obsolete) - Added

PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.Filter() - filter changed:

Obsolete(Boolean obsolete) - Added

 

List of changes in version 3.9.5

User interface

Session timeout settings for named licenses

If you have activation with concurrent licenses, a separate timeout parameter for named licenses is available in Administration.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_39.png

This parameter sums up the timeout with the main setting. If the timeout is not defined, then the session of named licenses will not be complete.

Selecting a user in a filter

When you select a user in a filter, the locked users are displayed separately at the bottom of the list; the search window displays users alphabetically with lock icons.

Form builder for the Contact object

Form builder was implemented for the Contact object in the CRM module. You can configure the view, create and edit forms, and details on a contact of a company.

Possibility to select a group or an organizational structure element in an approval stage

When filling in the Approval route object, you can select a user group or an organizational structure element as approvers of a stage. First Response box was added.

Telephony

Call page opens in case of channel bridging in Asterisk

I.e. if when bridging a non-sip or non-pjsip channel is used and the other channel belongs to an ELMA user, then the call page with the number located in callerId of the first channel will be displayed for the user.

This situation may occur if the call is first received by the secretary.

Code API. Public methods and interfaces

Overload was added for the method GetEntityActions(EntityMetadata metadata, bool inherit, bool onlyBase, bool loadextensions) in MetadataLoader. It allows getting actions of an entity with regard to extensions.

PublicAPI

Docflow section:

PublicAPI.Docflow.Objects.Nomenclature.NomenclatureCache.Filter() - filter changed:

UseRegistrationPlacePermissions(Nullable<Boolean> useRegistrationPlacePermissions) - Added

Portal section:

Added methods:

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment, User commentAuthor)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.AddComment(Question task, CommentActionModel model)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetTaskEndDate(Int64 taskId, DateTime newEndDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLog(Int64 taskId, Int64 minutes)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days)

Void PublicAPI.Portal.Objects.Tasks.Question.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.Question.CompleteTask(Int64 taskId, CompleteTaskModel model)

 

List of changes in version 3.9.4

User interface

Filtering by File type (binary file)

When adding a File type (binary file) field to an object filter in Web Application, you can enter the ID of the searched file in the text field. If you specify an incorrect ID, search will not show any results.

Razor views when copying forms in the form builder

When copying forms in the form builder, all the razor views, which are used in this form, are copied locally for the object to a new form. When copying a child form to another child form, only the views that are configured in the source form are copied.

Code API. Public methods and interfaces

1. If an action cannot be performed, then the server returns an HTTP error with the 409 Conflict code.

2. Data transfer method from POST to GET of the Messages module for the method /Posts/GetMyFavorite was changed.

PublicAPI

CRM section:

Added methods:

Void PublicAPI.CRM.Contractor.AddComment(Contractor contractor, String comment, User commentAuthor)

Void PublicAPI.CRM.Contact.AddComment(Contact contact, String comment, User commentAuthor)

Void PublicAPI.CRM.Lead.AddComment(Lead lead, String comment, User commentAuthor)

Void PublicAPI.CRM.Sale.AddComment(Sale sale, String comment, User commentAuthor)

Void PublicAPI.CRM.Inpayment.AddComment(Inpayment inpayment, String comment, User commentAuthor)

Void PublicAPI.CRM.Relationship.AddComment(Relationship relationship, String comment, User commentAuthor)

KPI section:

Added methods:

Void PublicAPI.KPI.Objects.KpiTask.AddComment(KpiTask task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.AddComment(ApprovalTaskPerformance task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.AddComment(ApprovalTaskPerformance task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.AddComment(SMARTTask task, String comment, User commentAuthor)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.AddComment(SMARTTask task, String comment, User commentAuthor)

Docflow section:

Added methods:

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.AddComment(SendDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.AddComment(AssignDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.AddComment(RegistrationDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.AddComment(CreateDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.AddComment(SendToAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.AddComment(SendToApprovementTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.AddComment(SendDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.AddComment(AssignDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.AddComment(RegistrationDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.AddComment(CreateDocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.AddComment(SendToAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.AddComment(SendToApprovementTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.AddComment(DocumentAcquaintanceTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.AddComment(DocumentTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.AddComment(ResolutionTask task, String comment, User commentAuthor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.AddComment(DocumentApprovementTask task, String comment, User commentAuthor)

Processes section:

Added methods:

Void PublicAPI.Processes.WorkflowInstance.AddComment(WorkflowInstance instance, String comment, User commentAuthor)

Void PublicAPI.Processes.WorkflowTaskBase.AddComment(TaskBase task, String comment, User commentAuthor)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.AddComment(WorkflowTask task, String comment, User commentAuthor)

Portal section:

Added methods:

Void PublicAPI.Portal.TaskBase.AddComment(TaskBase task, String comment, User commentAuthor)

Void PublicAPI.Portal.TaskBase.Task.AddComment(Task task, String comment, User commentAuthor)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.AddComment(ApprovalTask task, String comment, User commentAuthor)

PublicAPI.Portal.CalendarEvent.Filter() - filter changed:

ConfirmParticipation(Boolean confirmParticipation) - Added

PublicAPI.Portal.Objects.Calendar.CalendarEventPeriodical.Filter() - filter changed:

ConfirmParticipation(Boolean confirmParticipation) - Added

Projects section:

Added methods:

Void PublicAPI.Projects.ProjectTaskBase.AddComment(ProjectTaskBase task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTask.AddComment(ProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Tasks.AddComment(ProjectTaskBase task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.AddComment(ProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.AddComment(Milestone task, String comment, User commentAuthor)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.AddComment(WorkflowProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.ProjectComplexTask.AddComment(ProjectComplexTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.CreateProjectTask.AddComment(CreateProjectTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.AddComment(ProjectPlanApprovalTask task, String comment, User commentAuthor)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.AddComment(ProjectBudgetApprovalTask task, String comment, User commentAuthor)

 

List of changes in version 3.9.3

User interface

Possibility to delete activities was added

https://www.elma-bpm.ru/kb/assets/tazmieva/855_36.png

Possibility to rotate pages of PDF files in preview was added

https://www.elma-bpm.ru/kb/assets/tazmieva/855_37.png

ELMA Plugin for Visual Studio

Portlet template localization. When you create a portlet in a custom module using the plugin, all the text, used in the portlet template will be in the language, used in Visual Studio. The portlet template is available in English and Russian. When you change the language of Visual Studio, the language of the created portlet will not change; for this, you need to create a new one.

Changed logging

1. log4net is no longer directly used for logs. For logs, use the following code:
private static readonly EleWise.ELMA.Logging.ILogger ImportLog = EleWise.ELMA.Logging.Logger.GetLogger("ElmaImport");

2. Logger of the class EleWise.ELMA.CRM.Telephony.Managers.TelephonyManager was changed. Instead of public static log4net.ILog telephonyLog, public static readonly EleWise.ELMA.Logging.ILogger TelephonyLog is used.

3. Logger of the class EleWise.ELMA.Integration1C.Data.CProvider was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

4. Logger of the class EleWise.ELMA.Integration1C.Listeners.Connection1CScheduler was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

5. Logger of the class EleWise.ELMA.Integration1C.V77.CDocument77 was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

6. Logger of the class EleWise.ELMA.Integration1C.V77.CHelper77 was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

7. Logger of the class EleWise.ELMA.Integration1C.V81.CDocument81 was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

8. Logger of the class EleWise.ELMA.Integration1C.V81.CProvider81 was deleted. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog of its base class EleWise.ELMA.Integration1C.Data.CProvider is used.

9. Logger of the class EleWise.ELMA.Integration1C.Integration1CService was changed. Instead of protected static log4net.ILog integrationLog, protected static readonly EleWise.ELMA.Logging.ILogger IntegrationLog is used.

10. Logger of the class EleWise.ELMA.Messages.Impl.TransactionalMessageManager was changed. Instead of public static log4net.ILog MessagesLog, public static readonly EleWise.ELMA.Logging.ILogger MessagesLog is used.

11. Logger of the class EleWise.ELMA.Tasks.Managers. SolveTaskHelper was changed. Instead of public static log4net.ILog SolveTaskLog, public static readonly EleWise.ELMA.Logging.ILogger SolveTaskLog is used.

 

List of changes in version 3.9.2

Code API. Public methods and interfaces

Saving logs of scripts to separate files

New property – Logger – was added to the base class for scripts of objects (including document and project types) and processes. It allows saving logs to a separate log-file (logs\scripts\sc-log-*).

Outside the class with scripts for objects and processes (e.g. in global modules and in separate modules in VS) you can use the class EleWise.ELMA.Logging.ScriptLogger.

After republishing an object, the structure Logger.Log.Error(...) will use the Logger property instead of the class EleWise.ELMA.Logging.Logger in all the object script classes, thus, the logs will be automatically written to the script log instead of the error logs. To achieve the same in processes, you need to recompile process scripts or publish the new process version for new instances.

To write logs to a common file (e.g. errors log) use the structure Logging.Logger.Log (Logging.Logger.Log.Error(...)).

The following information is saved to the scripts log:
Date/time [flow] class.method(:line number) - message.
Example:
2016-07-21 14:46:42,157 [7] EleWise.ELMA.ConfigurationModel.Scripts.SpravochnikScripts.FormLoad(:26) - FormLoad1.

For correct output of the line number for object scripts, writing of debugging information file Web\App_Data\CompiledModel\EleWise.ELMA.ConfigurationModel.Scripts.pdb was added.

Forms of system objects

Base forms were added to the Relationship object. Current forms of Relationship child objects were converted into base forms.

Changes in object export/import

1. Algorithm for transferring local assemblies (connected in the object scripts module) from the source server to the recipient server was implemented.

2. When importing objects with global modules, a notification popup will appear. You should import global modules SEPARATELY. If you import objects with global modules to the recipient server without such global modules, import will be canceled with an error.

https://www.elma-bpm.ru/kb/assets/korolyeva/855_31.png

https://www.elma-bpm.ru/kb/assets/korolyeva/855_32.png

User interface

Object selection element was improved

Select icon was added. It is displayed inside the control. Properties AutocompleteComboBox: ShowComboBoxSelectIcon, ComboBoxSelectImageUrl, ComboBoxSelectOnClick.

Add icon was added. It is displayed inside the control. Properties AutocompleteComboBox: ShowComboBoxAddIcon, ComboBoxAddImageUrl, ComboBoxAddOnClick.

Clear field icon was added. Properties AutocompleteComboBox: ShowComboBoxDeleteIcon, ComboBoxDeleteImageUrl, ComboBoxDeleteOnClick.

For Single Select:

Possibility to use a template for displaying inside a control was added. Properties AutocompleteComboBox : UseTemplate , Template , TemplateJs ,TemplateOnLoad . For this, set UseTemplate = True, and pass the templates to the properties Template (display when rendering the control), TemplateJs (render the template when selecting an object).

Edit field icon was added. Properties AutocompleteComboBox : ShowEditTemplateIcon , Template , EditTemplateImageUrl , EditTemplateOnClick .

By default, when using a user template (UseTemplate) an object link is displayed, under the condition that the system managed to get the link; otherwise, text is displayed.

All the object selection controls are set to the template display mode. External icons Select and Add are not displayed; internal icons are displayed.

Selecting a task due date when reassigning

Possibility to specify task due date (if not specified, the fields will remain empty), when reassigning business process tasks, document tasks, etc. was added. When reassigning some task types (e.g. SMART-task), due dates cannot be changed: fields are unavailable on the form.

Projects

Possibility to enter a name when creating/copying project plan or budget version was added.

https://www.elma-bpm.ru/kb/assets/korolyeva/855_35.png

Designer

When adding a configuration in Designer, only remote connection to server is available now. Local connection to configuration is no longer supported.

https://www.elma-bpm.ru/kb/assets/korolyeva/855_36.png

PublicAPI

CRM section:

PublicAPI.CRM.Objects.CategoryAssignMethod.Filter() - filter changed:

ContainerContractorPermission(ContContractorPermission containercontractorPermission) - Added

KPI section:

Added methods:

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KpiTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.Performance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KPIPerformance.ApprovalTaskPerformance.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.SMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.KPI.Objects.KPISMART.SMARTTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Docflow section:

Added methods:

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.BPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.AssignDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.RegistrationDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.CreateDocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.DocumentsBPMN.SendToApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentAcquaintanceTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.ResolutionTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.DocumentApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Processes section:

Added methods:

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Processes.WorkflowTaskBase.WorkflowTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Portal section:

Added methods:

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.TaskBase.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.TaskBase.Task.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.ApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Projects section:

Added methods:

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.ProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.Milestone.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.ProjectTaskBase.WorkflowProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Budget PublicAPI.Projects.Budgets.BudgetBudgets.Create(Project project, Action<IBudget> preSave)

Budget PublicAPI.Projects.Budgets.BudgetBudgets.CreateFrom(Budget oldBudget, Boolean cloneItems, Project newProject, Action<IBudget> preSave)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.ProjectComplexTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.CreateProjectTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.ProjectPlanApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor, String comment)

Void PublicAPI.Projects.Objects.Budgets.ProjectBudgetApprovalTask.ReAssign(Int64 taskId, User newExecutor, Comment comment)

 

List of changes in version 3.9.1

Designer was redesigned

Graphic design of ELMA Designer was updated in this version.

API public methods

Calculation methods that take project calendar into account were added:

/// <summary> /// Check if the date is a business day /// </summary> /// <param name="dateTime">Day</param>

/// <returns><c>true</c>, if the date is a business day </returns> public bool IsWorkDay(DateTime

dateTime) /// <summary> /// Calculate end date and time according to the calendar /// </summary>

/// <param name="startTime">Start date </param> /// <param name="interval">Time interval </param>

/// <returns>End date </returns> public DateTime EvalTargetTime(DateTime startTime, TimeSpan interval)

/// <summary> /// Calculate end date and time according to the calendar /// </summary> /// <param

name="startTime">Start date </param> /// <param name="intervalHours">Interval in hours </param> /// <returns>End date </returns> public DateTime EvalTargetTime(DateTime startTime, double intervalHours) /// <summary>

/// Calculate working interval between dates (days, hours, minutes and seconds) /// </summary> ///

<param name="startTime">Start date </param> /// <param name="endTime">End date</param> ///

<returns>Working interval</returns> public TimeSpan EvalWorkTimeDifference(DateTime startTime, DateTime

endTime) /// <summary> /// Calculate the number of working days between dates. A day with working hours is considered a working day, regardless of their duration. /// </summary> /// <param name="startTime">Start date </param>

/// <param name="endTime">End date</param> /// <returns>Working time interval </returns>

public int EvalWorkDaysDifference(DateTime startTime, DateTime endTime) /// <summary> /// Calculate end date based on the start date and duration

/// </summary> /// <param name="start"></param> /// <param name="durationDays"></param>

/// <returns></returns> public DateTime EvalEndDateByStartAndDuration(DateTime start, long durationDays) ///

<summary> /// Get end date of the previous working day /// </summary> /// <param name="date">Source date

</param> /// <returns>Result date</returns> public DateTime GetPreviousWorkDayEnd(DateTime

date) /// <summary> /// Get the start date of the next working day /// </summary> /// <param name="date">Source date</param> /// <returns>Result date</returns> public DateTime GetNextWorkDayStart(DateTime date)

/// <summary> /// Get the start of the working hours (if day off, then 0) /// </summary> /// <param name="day">Day</param>

/// <returns>Working hours start</returns> public TimeSpan GetWorkTimeStart(DateTime day) /// <summary>

/// Get the end of working hours (if day off then 0) /// </summary> /// <param name="day">Day</param>

/// <returns>Working hours end </returns> public TimeSpan GetWorkTimeEnd(DateTime day) /// <summary>

/// Add a certain number of days to a date, in accordance with the calendar (regardless of the working time) /// </summary> ///

<param name="startTime">Source date</param> /// <param name="addDays">Added/subtracted number of days

</param> /// <returns>Result date</returns> public DateTime AddDays(DateTime startTime, long

addDays) /// <summary> /// Get the working day duration /// </summary> /// <returns>Working day duration

</returns> public TimeSpan GetWorkTimeInDay(DateTime day) /// <summary> /// Minutes in a working day

/// </summary> /// <param name="day">Day</param> /// <returns>Number of minutes</returns>

public long MinutesInDay(DateTime day)

Export/import changed

1. Transfer of process policies was added.

2. Transfer of custom activities folders was added.

3. Object actions interface when importing EleWise.ELMA.Deploy.Import.ExtensionPoints. IEntityImportSaveActions was changed:

· method ExecPostSaveActions(IEntity entity, Type type, Dictionary<string, object> values, Dictionary<string, string> serviceData, List<LinksDictionaryItem> links) was replaced with method ExecPostSaveActions(IEntity entity, Type type, Dictionary<string, object> values, Dictionary<string, string> serviceData, LinksDictionary links).

4. Import-export serializer class EleWise.ELMA.Deploy.Serialization.EntityXmlSerializer was changed:

· type of returned value of function Deserialize(object obj, Dictionary<string, object> serObj) was changed to EleWise.ELMA.Deploy.Import.Links. LinksDictionary;

· Function ConvertFromSerializable(Dictionary<string, object> serObj, Type entityType, out IEntity tpItem) was removed;

· Function ConvertFromSerializable(object obj, Dictionary<string, object> serObj) was removed;

General modifications

1. Attaching multiple documents to a task

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_110.png

2. Filling in the task subject with the name of the attached document.

https://www.elma-bpm.ru/kb/assets/Mikheeva/819_111.png

3. Processing of spaced in phone numbers. When making a call to a phone number with spaces, the spaces are skipped.

4. Possibility to show tasks for a longer period and display completed tasks in the Project Tasks from Me portlet was added (configured in the portlet settings).

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_30.png

Messages module

Changes in WEB API

1. Methods:
bool EleWise . ELMA . Messages . API . IMessageFeedService . GetSettingsPostCommentEnterKey(),
bool EleWise . ELMA . Messages . API . MessageFeedService . GetSettingsPostCommentEnterKey() were marked as obsolete
. The following methods are used instead:
FeedSettings EleWise . ELMA . Messages . API . IMessageFeedService . GetFeedSettings () and FeedSettings EleWise . ELMA . Messages . API .MessageFeedService . GetFeedSettings ()
respectively.

User settings

In some cases, the “Buttons for sending a comment” parameter may be reset.

Public API

No changes

 

List of changes in version 3.9.0

List of most important structural changes and modifications

1. ASP.NET MVC platform was updated from version 3 to version 4. To learn more, read this article.

2. NHibernate was updated to version 4.0.

3. ID generation mechanism was changed on MSSQL. Now stored procedures are used – alternatives of “generators”. Now, when saving and object by using the Save method, it is added to the database only when confirming the transaction.
When updating to the existing MSSQL database to version 3.9, database will be converted, which may take a long time. To ensure correct update, increase the database timeouts:

o In the file ELMA\Web\Settings.config specify the “DbTransformCommandTimeout” parameter in seconds. We recommend setting more than required – 360000. Also check the file UserConfig\WebApplication\settings.config – if it contains this parameter, then set this value there as well.

o In the file UserConfig\configuration.config find the tag <main connectionStringName="MainDB" … /> and add the commandTimeOut="360000" attribute, if there isn’t one. If it is there, set its value.

o Update may take a very long time, which depends on the database size and database server resources. Our test show, that on average, a 100GB database on a server with 16GB RAM and quad-core 2.4GHz CPU is updated in 5-8 hours.

o The Linked Server mechanism is also used for the MSSQL server. It allows isolating ID generation transactions from the main transaction. During the first start, the system will attempt to create a link point. In case of a failure, instructions for the database administrator will be shown in Web Application.

4. Access permissions to a separate message were removed.

5. Possibility to archive Messages for a period was added.

6. The system of CRM permissions was completely changed.

7. Permissions for creating CRM objects are now distinguished.

8. Full text index mechanism was improved and inbuilt Lucene.NET provider is used now.

9. [Projects] The revenue and expense item objects were moved to the common module.

10. Calendar events were modified to support the form builder.

11. Mail forms were modified to support the form builder.

12. Meeting forms were modified to support the form builder.

13. Call forms were modified to support the form builder.

14. EQL search of documents in filter folders was implemented.

15. [Business processes] New activities for sending mail and SMS.

16. Security events registration for audit.

o This is a separate module; it writes data to a separate database.

17. Routing process for a list of object instances.

18. Access settings on the level of object fields.

19. Firebird 3.0 support.

o The software package still includes Firebird 2.5.

o You can deploy a new database on FB 3 or convert the existing one (description inside the task).

20. [Substitutions 2.0] Substitutions were improved (active tasks).

21. EQL check page for object type.

22. Project plan publishing significantly loads the server (up to stopping it).

o Publication mechanism was completely changed; now it is asynchronous, i.e. it is executed on the server in the background mode.

o While a project is being published, many of its features become unavailable

23. Possibility to select an object in a drop down list by reference

Third party packages updated

packages/Antlr3.Runtime.3.1.0.39271/lib/net40/Antlr3.Runtime.dll

Deleted

packages/Antlr3.Runtime.3.5.0.2/lib/net40/Antlr3.Runtime.dll

Added

packages/AsterNET.1.6.3.3/lib/net40/AsterNET.dll

Deleted

packages/AsterNET.1.6.3.4/lib/net40/AsterNET.dll

Added

packages/Autofac.2.2.4.900/lib/net40/Autofac.dll

Deleted

packages/Autofac.2.2.4.901/lib/net40/Autofac.dll

Added

packages/BitMiracle.LibTiff.NET.2.3.642.1/lib/net40/BitMiracle.LibTiff.NET.dll

Deleted

packages/BitMiracle.LibTiff.NET.2.4.528.0/lib/net40/BitMiracle.LibTiff.NET.dll

Added

packages/FirebirdSql.Data.FirebirdClient.4.5.0.1/lib/net40/FirebirdSql.Data.FirebirdClient.dll

Deleted

packages/FirebirdSql.Data.FirebirdClient.4.10.0.0/lib/net40/FirebirdSql.Data.FirebirdClient.dll

Added

packages/FluentNHibernate.2.0.3/lib/net40/FluentNHibernate.dll

Added

packages/Iesi.Collections.4.0.1.4000/lib/net40/Iesi.Collections.dll

Added

packages/NHibernate.2.1.2.4007/lib/net40/NHibernate.dll

Deleted

packages/NHibernate.4.0.4.4001/lib/net40/NHibernate.dll

Added

 

User interface

Import of KPIs

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_01.png

General improvements

1. Possibility to configure availability (hide, read, edit) of fields and properties for objects, based on a user, user group, organizational structure element or content of one of the properties (with a user, user group or organizational structure element). Thus, different users can see the same object differently. It is configured in Administration – Users – Access Settings – Objects.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_02.png

All the added and not configured fields are hidden by default. The fields marked with the https://www.elma-bpm.ru/kb/assets/Mikheeva/855_05.pngicon, are the object name and are not hidden.

2. Possibility to configure availability (hide, read, edit) of fields and properties for CRM objects (Contractor, Deal, Relationship), based on a user, user group, organizational structure element or content of one of the properties (with a user, user group or organizational structure element). Thus, different users can see the same object differently.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_03.png

It is configured in Administration – CRM – Access to fields and properties.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_04.png

All the added and not configured fields are hidden by default. The fields marked with the https://www.elma-bpm.ru/kb/assets/Mikheeva/855_05.png icon, are the object name and are not hidden.

Permissions system in CRM changed

Access permissions are now assigned individually for each object and inherited by dependent objects.

Regular and Required category concepts were removed.

Global permission “Create Contractors” was divided into “Create Company” and “Create Individual” and so on for all the contractor’s heirs.

Notification activity

In the Notification activity, the Notification Recipients tab was changed. Now you can specify a list that can include the current user, a context variable, an organizational structure element or a user group.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_06.png

SMS statistics

New menu item was added in the Administration section – SMS Statistics. It opens the page for viewing the SMS statistics.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_07.png

Approval by stages

The “Use Approval Route” box was added to the Approval activity if it is placed in a Business Role swimlane. If you check this box, the block for specifying a context variable for selecting approval executors becomes hidden and the block for selecting a context variable of the Configure Approval Route type becomes visible.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_08.png

The “Use Approval Route” box was added to the Common tab of the New Approval Sheet activity. If you check it, the Approval Type setting is hidden on the Advanced tab and one more approval result is added – Continue the approval procedure.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_09.png

Two new activities were added: Adjust Approval Route and New Approval Route.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_10.png

Helpers for editing and viewing an Adjust approval route entity were added.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_11.png

Task completion reminder

Interface was changed. Possibility to specify absolute time was added.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_12.png

“Hide empty element” setting was added in the form builder

In the form builder, two settings – hide empty read only properties and hide empty panels/tabs – were combined into one with the possibility to inherit values from the element’s container.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_13.png

Portal settings were moved to a separate portlet in Administration

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_14.png

Routing process for a list of object instances

In the object menu, the column for selecting object element instances and the start process button were added only for the objects, for which a route is configured in Designer. When selecting one element in the list, only processes that had an input variable with the list and single link types could be started; when selecting several elements, only processes that had an input variable with the list link type could be started.

Projects

1. The mode for viewing/editing the project plan as a work breakdown structure;

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_15.png

2. Possibility to print a project plan was added (beta version, enabled in Gantt.EnablePrint = true в Settings.config)

3. Possibility to display planned expense and revenue amounts of the current budget for tasks on the Gantt chart was added (columns in the table are available if there is a published budget);

4. Possibility to configure task links by adding predecessors on the Gantt chart was added (“Predecessor” item of the context menu).

5. In the Calendar portlet, if the number of event participants is more than 6, they are displayed in an expandable panel.

6. Planning mode was added for links between plan tasks (ScheduleMode field in EleWise.ELMA.Projects.Models. IProjectLinkPlan):

o manual – linked tasks are shifted freely, taking days off into account.

o automatic – linked tasks are shifted according to the specified delay.

You can set the planning type in the link editing menu or in the list of task predecessors. By default, all the links are now planned manually. Manually planned links are drawn in a stipple line.

7. Project plan publishing was changed. Publishing became more reliable, fail-safe, quick and informative.
Added:

o Panel with information on the plan publication status. The panel is displayed above the project plan when starting publication and shows the currently executed action, progress, operation name and completion percent, publication error and restart button (if the user has project administration permissions and an error occurs).

o Monitor of published project plans (the button for opening it is in the toolbar on the Projects page, which is available if you have full access to all projects). The monitor shows the list of project plans which are currently being published. All the publication data are in the table: start time, start author, completion percent and error (if any).

o Automatic start of unfinished publications in case of sever restart.

o Locking of operations that depend on the publication. All the dependent operations are locked if a project publication is active. The web part shows a notification about an active publication, and the scripts throw a EleWise.ELMA.Projects.Exceptions.PublishException exception and the operation is interrupted.

Service for starting processes in ELMA based on data exported from an xml file

A service was developed that allows starting processes based on the data from an xml file. The xml file can be created by two schemes: Strict and Custom. The Strict scheme provides validation of the imported values.

The Custom scheme does not provide validation of passed values, however it allows importing more complex objects.

The service is configured in its installation media. To configure the service without the installation media, edit the config file.

To learn more, read this article.

Work with EQL

1. EQL parser was re-written on Nemerle.Peg

2. COUNT function was added to EQL search

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_16.png

Writing formats:

o Count(Contact)

o Count(from Contractor where Name like ’%Ltd.%’)

3. Five new functions were added to the EQL search for working with subordination and groups:

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_17.png

o GetChiefByUser(<user Id>) – all the superiors of the user;

o GetUserSubordinate(<user Id >) – all the subordinates of the user;

o GroupUsers(<group Id>) – all the users in the group;

o UserGroups(<user Id >) – all the groups of the user;

o UserOrganisationItems(<user Id>) – all the job positions of the user;

4. EQL search helper was improved. Now the helper allows creating nested queries.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_18.png

5. Page for filtering any object types was added.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_19.png

Script editor

1. Multi-comment display model was added (when adding a comment via scripts)

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_20.png

2. Window with information on the settings of debugging in Visual Studio was added to the Scripts section: processes, global modules.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_21.png

3. Ctrl+S shortcut was added to the following sections:

o Processes

o Objects and enumerations

o Document management (only document types)

o Projects (project types)

o Reports

o Interface (pages, portlets)

o Scripts (processes, global modules, custom activities)

4. Confirmation of saving changes in the script editor when closing Designer was added

Dialog box with information on unsaved objects, which are used by scripts, was added. The information on an unsaved object is written only when a script is edited. Added to:

o Processes

o Objects

o Document types

o Project types

o Reports

o Interface (pages, portlets)

o Scripts (process scripts, global modules, custom activities)

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_22.png

5. Possibility to use method overloading when selecting a script was added (where selecting scripts is available).

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_23.png

6. Highlighting of syntax errors was added. Tooltips for syntax errors were added. Display of syntax errors on the scroll bar was added (with the possibility to click on an error to open it). Alt+PageUp and Alt+PageDown shortcuts were added to quickly switch to the next or previous syntax error.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_24.png

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_25.png

7. Context menu was updated, two new shortcuts were added: format the selected text (Ctrl+I) and format the entire document (Ctrl+Shift+I). IMPORTANT!!! -> code formatting will not work if the document contains syntax errors.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_26.png

8. Highlighting of parentheses, brackets and braces was added.

9. Support of regions and wrapped code was added.

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_27.png

10. Code auto-formatting was added (line breaks, margins, auto-closing of parentheses).

11. Warnings of missing comments were removed from compilation errors.

12. Support of web services with basic authentication was added. Progress bar when adding a web service was added (it is almost unnoticeable on light-weight web services).

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_28.png

13. The standard set of links in processes was extended

https://www.elma-bpm.ru/kb/assets/Mikheeva/855_29.png

 

Indexation and full text search changed

Indexation providers

In version 3.9.0 two indexation providers are available: Lucene.Net 3.0.3 and ElasticSearch 1.7.3.

Lucene is the default provider and is available in all the ELMA editions. It does not require installing an indexation server separately or configuring anything.

ElasticSearch requires installing a separate indexation server and configuring connection to it. It is not available in the Express edition.

In ELMA 3.9.0, ElasticSearch was updated; indexation requires server version 1.7.3. Older versions are not supported.

Recommendations on deploying ElasticSearch server https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html

What happens during the first start of 3.9.0

If ELMA is installed with a new configuration and without previous installation, Lucene is installed as the indexation provider, and indexation of contractors and documents is enabled automatically.

If you update ELMA from an earlier version and indexation is disabled, Lucene is installed as the indexation provider, and indexation is not enabled.

If you update ELMA from an earlier version and indexation is enabled, ElasticSearch is installed as the indexation provider. During the first attempt to access the index, the indexation is stopped. To continue, you need to update the indexation server and restart the indexation.

Indexation settings

Lucene and ElasticSearch are available as the indexation providers. To start Lucene, you only need to select it. To start ElasticSearch, specify the indexation server address. If the server is unavailable or its version is not supported, you will not be able to start the indexation.

Index Contractors setting enables/disables the indexation of contractors. When the indexation is enabled, the list of contractors and the contractor filtering result will be displayed by the index data. The search will be taking morphology into account.

Index contractors’ attachments setting enables/disables the indexation of files attached to a contractor. The name and the content of the files is indexed. In case of attached documents, only the name is indexed. Morphology is taken into account during the search. When you enable this setting, the In Attachments setting appears in the contractor search interface. If contractor indexation is disabled, it does not work.

Index documents setting enables/disables indexation of documents. When indexation is enabled, the list of documents and the document filtering result is displayed by the index data. The search will be taking morphology into account.

Index document versions setting enables/disables indexation of the current document version. Version file content is indexed. Does not work if document indexation is disabled.

How indexation works

Indexation can be divided into two parts: index receives data and index returns data.

To fill in the index, data are collected and passed to the indexation provider service, which in its turn passes them to the active indexation provider, which adds them to the index.

To get data from the index, search by required criteria is requested from the indexation server. The received data are converted into either an object page or an object.

Object page

During the indexation, an object is not passed to the indexation provider directly. Intermediate DTO is used for this (object page), which is a realization of the EleWise.ELMA.FullTextSearch.Model.IFullTextSearchObject interface heir.

Indexed types

During the object indexation, only properties of the following types are passed to the index: yes / no, date / time, fraction, drop-down list, object, enumeration, GUID, HTML markup, integer (16 bit), integer (32 bit), integer, money, link to an object, string, text, time interval, URL, working time interval.
Blocks and object block properties are not indexed.

Data types that support morphological search and quick search

Some data types support not only search by full match (filtering), but also morphological search (extended quick search). The following types have this property: HTML markup, string, text, URL.

Variants of searching in the index

The EleWise.ELMA.FullTextSearch.Services.FullTextSearchService service is used to invoke search in the index. It allows getting data from the index in one of the three methods.

Count method returns the number of found object pages by the specified filtering conditions. Search and filtering is applied to both static and dynamic page properties.

Find method returns the data of the found object properties by the specified filtering parameters. Used for dynamic search.

Search method returns data on and highlights the found object pages by the specified search parameters. Used for static search.

Registration of security events

1. Security events are registered in ELMA. They are stored in an external database. Microsoft SQL and Firebird are supported.

2. List of objects, whose events are registered, is defined in a separate configuration file with the .xml extension.

3. System data fetch events are not registered, such as viewing, printing and export of object, document and report data, except for document view. Registered events:

o User signs in / signs out

o User adds / edits / deletes data

o Users are created / deleted / locked

o User’s permissions are changed

o System settings are changed

o User groups are changed, including adding / deleting users in the group

o Document is viewed

Asterisk

 

1. Methods for working with a queue were added

ELMA Agent

1. Multiline comment was added.

2. Tooltips for buttons were added.

3. Optimization for MAC.

4. When scanning, agent helps the user spot empty sheets and suggests deleting them.

5. Fixed:

o It was possible to edit a signed document version vis Agent.

Processes

1. Support of the “Workflow.QueueEnabled=false” parameter was removed in the Settings.config file (when false, this setting used to allow executing business processes without the execution queue.

2. When a script is executed upon form loading, the changes in the context are not added to the database immediately after it is executed, but only after the task is completed or saved.

Activation

1. When activating the system with a limited period of use, the expiration date is now the same for all the system components (based on the platform expiration date).

Development of components (nupkg)

When developing components (packages) you can specify in a manifest what packages must be deleted when installing this package version. Can be used, for example, if an additional dependent package was used in the old package version, which is unnecessary in the new version. To do so, near the main manifest (.nuspec file) put a file with the same name and the .nuspecx extension of the following content:

1 <?xml version="1.0"?> <package> <xmetadata> <uninstallDependencies> <dependency id="<deleted_package_ID>"/> 

2 </uninstallDependencies> </xmetadata> </package>

 

Public methods and interfaces

Web API

When creating objects via IEntityService, now you can specify UID

Calendar

Service for working with calendar events was added - /API/REST/Calendar/Help

Document management

For ELMA filters, base interface IFilterBase was added. Now IFilter and IFilterDocumentFolder implement it.

Controller FilterDocumentFolderController.cs and all its views (FilterDocumentFolder folder) were deleted from ECM. Instead, controller FilterDocumentController.cs was added. Filter folders now function on its basis. If some views were replaced for document filters, specifically in the FilterDocumentFolder folder, then they will not work in 3.9. You need to rewrite them.

Document search form was deleted: DocumentSearchForm.cshtml .

Controller with views was deleted from the Contract Management module: FilterDocumentFolderController.cs

Messages module

EleWise.ELMA.Messages.Web build

1. In the controller EleWise.ELMA.Messages.Web.Controllers.BaseMessageController the following public methods were deleted:

o ActionResult MessagesCount()

o SetMessagesReadedAll([Bind(Prefix = "BaseMessageFilter")] IBaseMessageFilter filter)

2. Controller EleWise.ELMA.Messages.Web.Controllers.MessageController was deleted.

3. The following classed were deleted:

o EleWise.ELMA.Messages.Web.Models.InternalMailMessageModel

o EleWise.ELMA.Messages.Web.Models.MessageGrid

o EleWise.ELMA.Messages.Managers

EleWise.ELMA.Messages build

4. In the manager EleWise.ELMA.Messages.Managers.BaseMessageManager the following methods were deleted:

o long GetUnreadedMessagesCount()

o ResetUnreadedMessagesCountCache(long userId)

o List<BaseMessageStatus> GetStatusesForMessages(List<long> messagesId, IUser recipient)

o void SetAllMessagesStatus(ELMA.Security.Models.IUser user, MessageStatus status)

o void UpdatePermissions(IBaseMessage message)

5. The following classes were deleted:

o EleWise.ELMA.Messages.Managers.BaseMessagePermissionManager

o EleWise.ELMA.Messages.Models.BaseMessagePermission

o EleWise.ELMA.Messages.Security.BaseMessageInstanceDefaultPermission

o EleWise.ELMA.Messages.Security.BaseMessageInstanceUpdatePermission

o EleWise.ELMA.Messages.Security.InstanceSettingsBaseMessagePermission

o EleWise.ELMA.Messages.Security. MessagesRoleTypes

6. In the manager EleWise.ELMA.Messages.Managers.InformationChannelManager methods were deleted

o void UpdatePermissions(IInformationChannel channel)

7. In the object EleWise.ELMA.Messages.Models.BaseMessage properties were deleted:

o Iesi.Collections.Generic.ISet<EleWise.ELMA.Messages.Models.IBaseMessagePermission> Permissions

8. In the class EleWise.ELMA.Messages.permissionProvider properties and constants were deleted:

o const string MessageViewPermissionId

o const string MessageEditPermissionId

o string MessageFullPermissionId

o Permission MessageViewPermission

o Permission MessageEditPermission

o Permission MessageFullPermission

ELMA Plugin for VS

Project templates in English were added (all the comments, object names, properties and actions were translated). A template in the required language will be used when creating a project depending on the language, specified in the Visual Studio settings.

Fixed Visual Studio crashes when opening the Properties or Filter tab in an object.

Project templates upgraded to MVC4

PublicAPI

CRM section:

Added object managers:

PublicAPI.CRM.Objects.ContContractorPermission

PublicAPI.CRM.Objects.ContLeadPermission

PublicAPI.CRM.Objects.RelationshipPersonPermission

RelationshipPersonPermissionFilterHelper PublicAPI.CRM.Objects.RelationshipPersonPermission.Filter()

PublicAPI.CRM.Objects.LeadPersonPermission

PublicAPI.CRM.Objects.ContactPersonPermission

ContactPersonPermissionFilterHelper PublicAPI.CRM.Objects.ContactPersonPermission.Filter()

PublicAPI.CRM.Objects.ContractorPersonPermission

ContractorPersonPermissionFilterHelper PublicAPI.CRM.Objects.ContractorPersonPermission.Filter()

PublicAPI.CRM.Objects.SalePersonPermission

PublicAPI.CRM.Objects.TemplateLeadPermission

TemplateLeadPermissionFilterHelper PublicAPI.CRM.Objects.TemplateLeadPermission.Filter()

PublicAPI.CRM.Objects.TemplateContractorPermission

TemplateContractorPermissionFilterHelper PublicAPI.CRM.Objects.TemplateContractorPermission.Filter()

Added methods:

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, User user)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, UserGroup userGroup)

Void PublicAPI.CRM.Contractor.DeleteAuthorPermission(Contractor contractor, Permission permission)

Void PublicAPI.CRM.Contractor.AddAuthorPermission(Contractor contractor, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, OrganizationItem orgItem)

Void PublicAPI.CRM.Contractor.EnableInheritPermissions(Contractor contractor)

Void PublicAPI.CRM.Contractor.DisableInheritPermissions(Contractor contractor)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, User user, Permission permission)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contractor.AddPermission(Contractor contractor, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, User user, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contractor.DeletePermission(Contractor contractor, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, User user)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, UserGroup userGroup)

Void PublicAPI.CRM.Contact.DeleteAuthorPermission(Contact contact, Permission permission)

Void PublicAPI.CRM.Contact.AddAuthorPermission(Contact contact, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, OrganizationItem orgItem)

Void PublicAPI.CRM.Contact.EnableInheritPermissions(Contact contact)

Void PublicAPI.CRM.Contact.DisableInheritPermissions(Contact contact)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, User user, Permission permission)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contact.AddPermission(Contact contact, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, User user, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Contact.DeletePermission(Contact contact, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, User user)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, UserGroup userGroup)

Void PublicAPI.CRM.Lead.DeleteAuthorPermission(Lead lead, Permission permission)

Void PublicAPI.CRM.Lead.AddAuthorPermission(Lead lead, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, OrganizationItem orgItem)

Void PublicAPI.CRM.Lead.EnableInheritPermissions(Lead lead)

Void PublicAPI.CRM.Lead.DisableInheritPermissions(Lead lead)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, User user, Permission permission)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Lead.AddPermission(Lead lead, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, User user, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Lead.DeletePermission(Lead lead, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, User user)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, UserGroup userGroup)

Void PublicAPI.CRM.Sale.DeleteAuthorPermission(Sale sale, Permission permission)

Void PublicAPI.CRM.Sale.AddAuthorPermission(Sale sale, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, OrganizationItem orgItem)

Void PublicAPI.CRM.Sale.EnableInheritPermissions(Sale sale)

Void PublicAPI.CRM.Sale.DisableInheritPermissions(Sale sale)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, User user, Permission permission)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Sale.AddPermission(Sale sale, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, User user, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Sale.DeletePermission(Sale sale, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, User user)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, UserGroup userGroup)

Void PublicAPI.CRM.Relationship.DeleteAuthorPermission(Relationship relationship, Permission permission)

Void PublicAPI.CRM.Relationship.AddAuthorPermission(Relationship relationship, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, OrganizationItem orgItem)

Void PublicAPI.CRM.Relationship.EnableInheritPermissions(Relationship relationship)

Void PublicAPI.CRM.Relationship.DisableInheritPermissions(Relationship relationship)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, User user, Permission permission)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Relationship.AddPermission(Relationship relationship, OrganizationItem orgItem, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, User user, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, UserGroup userGroup, Permission permission)

Void PublicAPI.CRM.Relationship.DeletePermission(Relationship relationship, OrganizationItem orgItem, Permission permission)

PublicAPI.CRM.Objects.RelationshipPersonPermission.Filter() - filter changed:

PermissionId(Guid permissionId) - Added

User(User user) - Added

PermissionRole(Nullable<Guid> permissionRole) - Added

Relationship(Relationship relationship) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.CRM.Objects.ContactPersonPermission.Filter() - filter changed:

User(User user) - Added

PermissionRole(Nullable<Guid> permissionRole) - Added

Contact(Contact contact) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.CRM.Objects.ContractorPersonPermission.Filter() - filter changed:

PermissionId(Guid permissionId) - Added

User(User user) - Added

UserSecuritySetCacheId(Nullable<Int64> userSecuritySetCacheId) - Added

PermissionRole(Nullable<Guid> permissionRole) - Added

Contractor(Contractor contractor) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.CRM.Objects.TemplateLeadPermission.Filter() - filter changed:

ContainerLead(ContLeadPermission containerLead) - Added

AddPermission(Boolean addPermission) - Added

DelPermission(Boolean delPermission) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.CRM.Objects.TemplateContractorPermission.Filter() - filter changed:

ContainerContractor(ContContractorPermission containercontractor) - Added

AddPermission(Boolean addPermission) - Added

DelPermission(Boolean delPermission) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

Docflow section:

Added object managers:

PublicAPI.Docflow.Objects.Tasks.RouteApprovement

RouteApprovementFilterHelper PublicAPI.Docflow.Objects.Tasks.RouteApprovement.Filter()

PublicAPI.Docflow.Objects.Tasks.StageApprovement

StageApprovementFilterHelper PublicAPI.Docflow.Objects.Tasks.StageApprovement.Filter()

Added methods:

ApprovementTaskGroupFilterHelper PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Filter()

Hidden in the PublicAPI tree:

PublicAPI.Docflow.Objects.Tasks.RouteApprovementTask

PublicAPI.Docflow.Objects.Tasks.ApprovementTaskGroup.Filter() - filter changed:

ApprovementStageList(StageApprovement[] approvementStageList) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.Docflow.Objects.Tasks.StageApprovement.Filter() - filter changed:

Number(Int64 number) - Added

Users(User[] users) - Added

Name(String name) - Added

StagePassed(Boolean stagePassed) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

Processes section:

Deleted object managers:

PublicAPI.Processes.Objects.TerminateScriptSchedulerJob

PublicAPI.Processes.WorkflowInstance.Filter() - filter changed:

ImprovedProcessHeaderId(Nullable<Int64> improvedProcessHeaderid) - Added

Portal section:

Deleted object managers:

PublicAPI.Portal.Objects.Messages.BaseMessagePermission

Added object managers:

PublicAPI.Portal.Security.PermissionsSecurity.AbsenceViewPermission

PublicAPI.Portal.Objects.Tasks.ReplacementTask

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, User recipient, String description, Boolean showAll, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, User recipient, String description, Boolean showAll)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddQuestion(ReplacementTask task, Question question)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, String comment, IEnumerable<Attachment> attachments)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.AddComment(ReplacementTask task, CommentActionModel model)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, TaskPriority priority, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.ReAssign(Int64 taskId, User newExecutor, DateTime startDate, DateTime endDate, TaskPriority priority, Comment comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetTaskEndDate(Int64 taskId, DateTime newEndDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLog(Int64 taskId, Int64 minutes)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogHours(Int64 taskId, Int64 hours, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.SetFactWorkLogDays(Int64 taskId, Int64 days, DateTime startDate, String comment)

Void PublicAPI.Portal.Objects.Tasks.ReplacementTask.CompleteTask(Int64 taskId, CompleteTaskModel model)

ReplacementTaskFilterHelper PublicAPI.Portal.Objects.Tasks.ReplacementTask.Filter()

Added methods:

CalendarEventBuilder PublicAPI.Portal.CalendarEvent.CalendarEventBuilder()

CalendarEventPeriodicalBuilder PublicAPI.Portal.CalendarEvent.CalendarEventPeriodicalBuilder()

Hidden in the PublicAPI tree:

PublicAPI.Portal.Objects.Common.CatalogProfile

PublicAPI.Portal.Objects.Common.PropertyAccess

PublicAPI.Portal.Objects.Common.PropertyProfile

PublicAPI.Portal.Objects.Tasks.ReplacementTask.Filter() - filter changed:

Replacement(Replacement replacement) - Added

Statuses(List<TaskBaseStatus> statuses) - Added

TimePlannedRange(Nullable<TimeSpan> timePlannedRange) - Added

IsPlanned(Nullable<Boolean> isPlanned) - Added

TaskId(Nullable<Int64> taskId) - Added

TypeUid(Nullable<Guid> typeUid) - Added

CompleteStatus(TaskCompleteStatus completeStatus) - Added

Executors(User[] executors) - Added

DatePeriod(DateTimeRange datePeriod) - Added

TypeUids(Guid[] typeUids) - Added

TypeUids(List<Guid> typeUids) - Added

OnlyFromMyDepartment(Nullable<Boolean> onlyFromMyDepartment) - Added

OnlyForMyDepartment(Nullable<Boolean> onlyForMyDepartment) - Added

CreationAuthors(User[] creationAuthors) - Added

ExcludedTypeUids(Guid[] excludedTypeUids) - Added

ExcludedTypeUids(List<Guid> excludedTypeUids) - Added

Subject(String subject) - Added

Description(String description) - Added

CreationDate(RelativeDateTime creationDate) - Added

CreationAuthor(User creationAuthor) - Added

Executor(User executor) - Added

StartDate(DateTimeRange startDate) - Added

EndDate(RelativeDateTime endDate) - Added

Priority(TaskPriority priority) - Added

ParentTask(TaskBase parentTask) - Added

Status(TaskBaseStatus status) - Added

EndWorkDate(RelativeDateTime endWorkDate) - Added

InformTo(User[] informTo) - Added

NotShowInLists(Boolean notShowInLists) - Added

Category(TaskCategory category) - Added

IsEmulation(Boolean isEmulation) - Added

ProjectStatus(Nullable<ProjectStatus> projectStatus) - Added

ProjectIds(Int64[] projectIds) - Added

ProjectIds(List<Int64> projectIds) - Added

Project(Project project) - Added

InnerDocument(Document innerDocument) - Added

InnerDocuments(Document[] innerDocuments) - Added

FilterByEntity(Boolean filterByEntity) - Added

Contractor(Contractor contractor) - Added

Contact(Contact contact) - Added

Lead(Lead lead) - Added

Sale(Sale sale) - Added

InstanceId(Int64 instanceid) - Added

ProcessHeaderId(Nullable<Int64> processHeaderId) - Added

ActivityUids(Guid[] activityUids) - Added

ActivityUids(List<Guid> activityUids) - Added

SwimlaneUid(Nullable<Guid> swimlaneUid) - Added

ProcessHeaderIdList(Int64[] processHeaderIdList) - Added

ProcessHeaderIdList(List<Int64> processHeaderIdList) - Added

InstanceFilter(Filter instanceFilter) - Added

Resolution(Resolution resolution) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

PublicAPI.Portal.Objects.Security.Absence.Filter() - filter changed:

Users(User[] users) - Added

Projects section:

Added object managers:

PublicAPI.Projects.Objects.PublishPlanStateInfo

PublishPlanStateInfoFilterHelper PublicAPI.Projects.Objects.PublishPlanStateInfo.Filter()

PublicAPI.Projects.Objects.PublishPlanStateInfo.Filter() - filter changed:

ProjectPlanId(Int64 projectplanId) - Added

ProjectId(Int64 projectId) - Added

ProjectTypeUid(Guid projectTypeUid) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added

Enums section:

Added enumerations:

PublicAPI.Enums.Projects.PublishPlanStateStatus

PublicAPI.Enums.Projects.PublishPlanStateStatus.Begin

PublicAPI.Enums.Projects.PublishPlanStateStatus.OldTaskClosing

PublicAPI.Enums.Projects.PublishPlanStateStatus.OldTaskClosingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.BudgetVersionUpdating

PublicAPI.Enums.Projects.PublishPlanStateStatus.BudgetVersionUpdatingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.NewTaskCreating

PublicAPI.Enums.Projects.PublishPlanStateStatus.NewTaskCreatingEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.ChangeTaskPropertyNotShowInLists

PublicAPI.Enums.Projects.PublishPlanStateStatus.ChangeTaskPropertyNotShowInListsEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.RunProcessTask

PublicAPI.Enums.Projects.PublishPlanStateStatus.RunProcessTaskEnd

PublicAPI.Enums.Projects.PublishPlanStateStatus.ActionEventGenerating

PublicAPI.Enums.Projects.PublishPlanStateStatus.ActionEventGeneratingEnd

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.User

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Script

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Manual

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.Notification

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.MessageSend

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.TaskType.MessageReceive

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.User

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Script

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Manual

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.Notification

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.MessageSend

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.TaskType.MessageReceive

PublicAPI.Enums.Projects.ScheduleMode

PublicAPI.Enums.Projects.ScheduleMode.Manual

PublicAPI.Enums.Projects.ScheduleMode.Auto

PublicAPI.Enums.Documents.Tasks.ApprovementCompleteType.ContinueApprovementInPhase

PublicAPI.Enums.Tasks.ApprovalStatus.Pending

PublicAPI.Enums.Workflow.BPMN.Elements.Tasks.NotificationElementRecipientType.NotSet

PublicAPI.Enums.Workflow.WorkflowBPMN.Elements.Tasks.NotificationElementRecipientType.NotSet

Docflow section:

Added methods:

Void PublicAPI.Docflow.Document.AddComment(Document document, Comment comment, IEnumerable<Attachment> attachments, IEnumerable<DocumentAttachment> documentAttachments)

Portal section:

Added object managers:

PublicAPI.Portal.Objects.Security.ReplacementRule

ReplacementRuleFilterHelper PublicAPI.Portal.Objects.Security.ReplacementRule.Filter()

PublicAPI.Portal.Objects.Security.ReplacementRule.Filter() - filter changed:

Replacement(Replacement replacement) - Added

TargetUser(User targetUser) - Added

PropertyUid(Guid propertyUid) - Added

SearchString(String searchstring) - Added

Id(Int64 id) - Added

Query(String query) - Added

Find() - Added