Migration Notes for Xpert.ivy Designer 4.2 (Rigi) ... 4.3 (Pilatus)
This document informs you in detail about incompatibilities that were introduced between Xpert.ivy versions 4.2 (Rigi) and 4.3 (Pilatus) and tells you what needs to be done to get your existing 4.2 projects working with Xpert.ivy 4.3.

Most of the incompatibilities can be resolved automatically by invoking the project conversion in the Designer.

However,�some issues may have to be fixed manually (after the automatic conversion). Those are described in the next section.

Due to some changes in version 4.3, it may be that your projects are using APIs that are now deprecated. Although it is not absolutely necessary that you fix the deprecated parts, it is strongly recommended to do so.

The changes that were introduced with version 4.3 are described with more detail in the sections below, along with suggestions on how to fix existing code.

  1. ch.ivyteam.ivy.ulc.shared.validation.ValidationConstants
  2. Date.toDate(), Time.toDate(), DateTime.toDate()
  3. String.toDate()
  4. Data Caches with scope Application
  5. Process data serialization errors
  6. Usage of find(...) with count=0 on Workflow API

The interface ch.ivyteam.ivy.ulc.shared.validation.ValidationConstants was moved to package ch.ivyteam.ivy.ulc.server.validation.ValidationConstants. The old interface is still available but deprecated.

//example usage
import ch.ivyteam.ivy.ulc.shared.validation.ValidationConstants;
import com.ulcjava.base.application.util.Color;
Color errorColor = ValidationConstants.ERROR_BACKGROUND;

To fix all usage of the deprecated class in your projects, you only have to perform a global search/replace operation on your workspace:

  1. Go to menu Search > File...
  2. Enter�ch.ivyteam.ivy.ulc.shared.validation.ValidationConstants as search text and *.* as file name pattern, then�hit Replace...
  3. In the appearing Dialog enter the replacement value ch.ivyteam.ivy.ulc.server.validation.ValidationConstants and hit Replace All
This will fix all usages of the interface, including import statements.

To get the java.util.Date from an ivy Date, Time or DateTime type, the hidden method toDate() was provided. This method is now deprecated and should not be used anymore. Favor the toJavaDate() method which was introduced on the ivy date classes.

It is strongly recommended to fix all uses of the methods Date.toDate(), Time.toDate(), DateTime.toDate() in your projects. You could perform a global search operation on your workspace and replace the corresponding usages of toDate() with toJavaDate(). Please check each replacement, e.g. String.toDate() must not be converted in this way, see below!

This final refactoring was necessary to avoid migration problems from ivy 3.x projects.

To get an ivy Date from a String the method toDate() was provided in earlier versions. This method is now deprecated and should not be used anymore. Favor the toIvyDate() method which was introduced to provide a consistent API. The String class now provides the same method like the Date, Time, DateTime and Object classes to get an ivy Date.

It is strongly recommended to fix all uses of the method String.toDate() in your projects. You could perform a global search operation on your workspace and replace the corresponding usages of toDate() with toIvyDate(). Please check each replacement, e.g. Date.toDate() must not be converted in this way, see above!

With the release of Xpert.ivy 4.2, data caches that used the application scope where silently changed to be dependent not only from the application but from the environment too. This was very helpful to handle different tenants within one application (a situation for which you prefer that data caches are depending from the environment too). On the other hand real application data caches were no more available. This is true for both usage of data cache in the inscription masks of the database and web service steps and as well for usage in IvyScript.

To fill this gap and to prevent wrong usage of data cache scopes because of the misinterpreting names, we changed the following:

  • All data caches in inscription masks that had the scope Application in 4.2, have now the scope Environment. This is performed silently, you do not have to do something.
  • To get the data cache for the current application in IvyScript, use the new method getAppCache()
  • To get the data cache for the current environment in IvyScript of the current application, use the new method getEnvironmentCache()
  • The method getApplicationCache() still returns the data cache for the current environment, but is deprecated now.
It is strongly recommended to fix all IvyScript calls of the method IDataCacheContext.getApplicationCache() in your projects.

Perform a global search operation on your workspace and replace the corresponding usages of getApplicationCache() with getEnvironmentCache(). Please check each replacement for the correct scope of your data caches!

Errors while serializing/deserializing workflow or event data are not compensated silently any more. So far, the serialization/deserialization silently ignored values that could not be serialized and used null values instead. This caused inexplicable exceptions.

With Xpert.ivy 4.3 serialization/deserialization exceptions are logged. Please analyze your log files after upgrading to 4.3 and consider fixing those serialization/deserialization problems.

If you do not require to serialize a value of a dataclass you can fix the problem by setting the persistence flag to false. Otherwise you will have to fix the Java classes which could not be serialized. Normally adding a default constructor is sufficient.

The behaviour of some Workflow API methods has been fixed.

If 0 (zero)�was provided for the parameter count of the following methods then the behaviour of the methods was not as�documented. Instead of�returning no results, all results were returned. This has been fixed to match the description.

Existing code that provides 0 (zero) for the parameter count and which relies on the (previously erraneous) returning of all results will fail. This code must be updated to provide -1�instead of��0 for the count parameter.

Affected API's:

Interface ch.ivyteam.ivy.worklfow.IWorkflowContext
  • public IQueryResult<ICase> findCases(String propertyName, String propertyValue, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ICase> findCases(IPropertyFilter<CaseProperty> filter, List<PropertyOrder<CaseProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ITask> findTasks(String propertyName, String propertyValue, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ITask> findTasks(IPropertyFilter<TaskProperty> filter, List<PropertyOrder<TaskProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ITask> findWorkTasks(final IUser user, final int startIndex, final int count)
    ��������� throws PersistencyException;
  • public IQueryResult<ITask> findWorkTasks(final IUser user, final IPropertyFilter<TaskProperty> filter,
    ��������� final List<PropertyOrder<TaskProperty>> order, final int startIndex, final int count, final boolean returnAllCount,
    ��������� final EnumSet<TaskState> includeTaskStates) throws PersistencyException;
  • public IQueryResult<IWorkflowEvent> findWorkflowEvents(IPropertyFilter<WorkflowEventProperty> filter, List<PropertyOrder<WorkflowEventProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<IIntermediateEvent> findIntermediateEvents(IPropertyFilter<IntermediateEventProperty> filter, List<PropertyOrder<IntermediateEventProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • IQueryResult<IEventLog> findEventLogs(IPropertyFilter<EventLogProperty> filter, List<PropertyOrder<EventLogProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • IQueryResult<IEventLog> findEventLogs(EventLogStatus status, IPropertyFilter<EventLogProperty> filter, List<PropertyOrder<EventLogProperty>> order, int startIndex, int count, boolean returnAllCount) throws PersistencyException;
Interface ch.ivyteam.ivy.workflow.IWorkflowSession
  • public IQueryResult<ITask> findWorkTasks(IPropertyFilter<TaskProperty> filter, List<PropertyOrder<TaskProperty>> order,�int startIndex, int count, boolean returnAllCount, EnumSet<TaskState> includeTaskStates) throws PersistencyException;
  • public List<ITask> findSuspendedWorkTasks(int startIndex, int count) throws PersistencyException;
  • public List<ITask> findSuspendedAndParkedWorkTasks(int startIndex, int count) throws PersistencyException;
  • public List<ITask> findParkedWorkTasks(int startIndex, int count) throws PersistencyException;
  • public List<ITask> findResumedWorkTasks(int startIndex, int count) throws PersistencyException;
  • public List<ITask> findCreatedAndResumedWorkTasks(int startIndex, int count) throws PersistencyException;
  • public IQueryResult<ITask> findLockedWorkTasks(IPropertyFilter<TaskProperty> filter, List<PropertyOrder<TaskProperty>> order,�int startIndex, int count, boolean returnAllCount, EnumSet<TaskState> includeTaskStates) throws PersistencyException;
  • public IQueryResult<ICase> findStartedCases(IPropertyFilter<CaseProperty> filter, List<PropertyOrder<CaseProperty>> order,�int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public List<ICase> findStartedCases(int startIndex, int count, Date caseStartTimestampFilter) throws PersistencyException;
  • public IQueryResult<ICase> findStartedCasesByRole(List<IRole> roles, IPropertyFilter<CaseProperty> filter, List<PropertyOrder<CaseProperty>> order,�int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ITask> findWorkedOnTasks(IPropertyFilter<TaskProperty> filter, List<PropertyOrder<TaskProperty>> order,�int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public List<ITask> findWorkedOnTasks(int startIndex, int count, Date taskEndTimestampFilter) throws PersistencyException;
  • public IQueryResult<ITask> findWorkedOnTasksByRole(List<IRole> roles, IPropertyFilter<TaskProperty> filter, List<PropertyOrder<CaseProperty>> order,�int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ICase> findInvolvedCases(IPropertyFilter<CaseProperty> filter, List<PropertyOrder<CaseProperty>> order,int startIndex, int count, boolean returnAllCount) throws PersistencyException;
  • public IQueryResult<ICase> findInvolvedCasesByRole(List<IRole> roles, IPropertyFilter<CaseProperty> filter, List<PropertyOrder<CaseProperty>> order,�int startIndex, int count, boolean returnAllCount) throws PersistencyException;

The IvyAddOns project, which was delivered with Xpert.ivy 4.2, is not compatible with Xpert.ivy 4.3.

If you use the IvyAddOns project in your workspace then delete the existing IvyAddOns project and import the Xpert.ivy 4.3 compatible IvyAddOns version from the applications/utilities/IvyAddOns directory.

Since Xpert.ivy Designer 4.3 the import of old 3.9 projects (*.csp) is supported. However, most projects will require a good deal of manual adjustments before they can be run on a 4.3 server (or inside the Designer).

Please consult the Xpert.ivy 4.3 Designer Guide (> Projects > Converting old 3.x projects) to learn more about how to import and migrate 3.9 projects, so that they can be executed on a 4.3 installation.