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.
How it is now:
Class and database table names are verified when creating a new process and error messages are shown.
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.
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.
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.
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.
Unnecessary elements were removed from the form builder for process start, such as Transition buttons, Process information and Process context properties container.
Diagram export
Text overlay in the logo of diagrams exported as images was removed; the text is now localizable.
How it was:
How it is now:
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:
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.
Diagram export
Now the image of the exported diagram contains the name in the header.
Processes
Option for interrupting child processes in case of multiple operation start was added.
Display of document type subscribers added
How it was:
How it is now:
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
Designer
Debugging of custom activities was added (similar to process script debugging). It is available only after publishing the custom activity.
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:
How it is now:
User interface
1. Possibility to assign control to a group of users in a project plan was added.
2. The Subtasks tab of project tasks displays subtasks of outdated and unpublished plan versions with the “outdated plan” label.
3. On a project task page it is possible to specify expected start date, due date and time report.
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).
4.2 Search form. Hierarchy display was added when clicking on the organizational structure icon.
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
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.
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
Possibility to rotate pages of PDF files in preview was added
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.
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.
Designer
When adding a configuration in Designer, only remote connection to server is available now. Local connection to configuration is no longer supported.
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
2. Filling in the task subject with the name of the attached document.
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).
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
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.
All the added and not configured fields are hidden by default. The fields marked with the icon, 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.
It is configured in Administration – CRM – Access to fields and properties.
All the added and not configured fields are hidden by default. The fields marked with the 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.
SMS statistics
New menu item was added in the Administration section – SMS Statistics. It opens the page for viewing the SMS statistics.
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.
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.
Two new activities were added: Adjust Approval Route and New Approval Route.
Helpers for editing and viewing an Adjust approval route entity were added.
Task completion reminder
Interface was changed. Possibility to specify absolute time was added.
“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.
Portal settings were moved to a separate portlet in Administration
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;
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
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:
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.
5. Page for filtering any object types was added.
Script editor
1. Multi-comment display model was added (when adding a comment via scripts)
2. Window with information on the settings of debugging in Visual Studio was added to the Scripts section: processes, global modules.
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)
5. Possibility to use method overloading when selecting a script was added (where selecting scripts is available).
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.
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.
8. Highlighting of parentheses, brackets and braces was added.
9. Support of regions and wrapped code was added.
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).
13. The standard set of links in processes was extended
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