TIF 2024.5.0 Release Information

This release was published 2024-12-13.

Reporting

A new component has been added to TIF that can be used to create reports.

See this document for additional details.

Store Secrets in the TIF Database

TIF allows you to store secret values, e.g. passwords, in the TIF database in a secure way. Such secret value is typically administrated via the TIF Administration UI, like shown in the image below.

secrets admin
Figure 1. Administration of Secrets

The secret values are stored encrypted within the TIF database, and once the secret value is entered, it cannot be retrieved or viewed again from the Administration UI. It can only be used when running some integration use case and the value is fetched when, for example, authenticating against some other system.

From the destinations.xml file, you can for those settings holding a password instead of storing the value in clear text, referencing the secret from the TIF database via this syntax:

secret:sap.test.pwd

In other places, where a Job macro is being used, one can reference a secret value via this syntax:

${secret:sap.test.pwd}

Application Tokens as Bearer Tokens

When using the application tokens to grant access for incoming requests, TIF now supports using the Bearer token authentication scheme for these requests.

Earlier, one had to supply these using the Basic authentication scheme.

Example:

curl -X POST -H "Authorization: Bearer <token>" https://tif-server:8181/enovia/jaxrs/service

Endpoint for Testing Dataset

The Admin API has been extended with an endpoint allowing you to test the output from a data-set. This is useful during development to verify the correctness of a dataset definition.

See this document for additional details.

Support Processing Delete Event

Added support for processing events related to deletion of business objects from ENOVIA/3DEXPERIENCE.

Since the creation of the payload in such cases is impossible to do, because querying the ENOVIA/3DEXPERIENCE database for information about non-existent business objects results in errors

You can use the below constructs in the payload / job configuration to pass over information about the deleted object:

<Job>
    <Name>Test Delete Object</Name>
    <TransferData>
      <Payload inline="true">
        <SourceObjectInfo /> (1)
        <RPEVariables /> (2)
        <JobParameters /> (3)
      </Payload>

      <Destinations>
        <File id="file-dest-1" />
      </Destinations>
    </TransferData>
</Job>
1 This will inject the basics of the business object being deleted, based on information from the ENOVIA/3DEXPERIENCE RPE environment
2 Includes all RPE environment variables and values
3 Includes all TIF Job Parameters

Neither of these elements will query the database, as all of this data is passed over by the TIFTrigger when the job was created.

TIF Trigger Manager / Job Triggering

You can on the "eService Trigger Program" in the ENOVIA/3DEXPERIENCE database now specify custom arguments, that will include the current object-id.

Normally you pass this as the FIRST argument in the program like this:

attribute[eService Program Argument 1].value = ${OBJECTID}

In some cases, you may pass the original object id as a custom argument and handle this on the TIF server instead. To do so, you can now declare the attributes like this:

attribute[eService Program Argument 1].value =
attribute[eService Program Argument 4].value = CustomObjectId=$(OBJECTID)

Note that here you need to use $(OBJECTID) as macro, otherwise it will interfere with the ENOVIA/3DEXPERIENCE Trigger Manager logic.

Skip ID Validation on TIF Server

When TIF picks up new job requests, and the job request is made in the context of a specific business object. TIF will per default validate that the object is valid. If not, then the job is marked as failed and further execution is prevented.

As of this release, you can bypass this check by providing a parameter called tif.skipIdValidation when the job is requested.

You probably also either want to do some custom validation using a custom event handler, or use the built-in event handler that will, unless configured differently, mark the job as failed AND with a resolution set. This event handler will also update the source-object information on the job itself in case the object exists.

<Events>
    <Validate>
        <ValidateExists resolution="..." />
    </Validate>
</Events>

See this chapter for more details.

File Modifier - Excel to PDF

The File Modifier / Batch feature will as a step before running the PDF conversion, remove any declared print-area on hidden Excel sheets before running the PDF conversion.

That is done to prevent hidden sheets from being exported to PDF.

Create/Update Integration - Custom Argument

It is now possible to pass custom arguments to trigger the create/update integration via File, JMS, or Kafka listener, or REST call.

In the Java code, the custom arguments are available from the integration context. Additionally, the attribute "fallbackValue" on a <Field> configurations, support macro resolution.

Arguments may contain static text, macros, or use a custom Java class for resolving argument values. Availability of macros depend on the context.

Here is an example configuration.

Directory listener:

<DirectoryListener>
    ...
    <Arguments>
        ...
        <!-- Static text -->
		<tif:Argument name="myArg1" value="static text" />
		<!-- Maps to directory name of the directory listener -->
		<tif:Argument name="myArg2" value="${dirName}" />
		<!-- Uses a custom resolver class -->
		<tif:Argument name="myAg3" value="java:com.acme.tif.CustomResolver" />
    </Arguments>
</DirectoryListener>

Referring to a custom argument within a field:

...
<UpdateValues useForCreate="false">
    <Description fallbackValue="${myArg1}" />
</UpdateValues>

Custom Java argument resolver:

package com.acme.tif;

import java.nio.file.Path;
import com.technia.tif.enovia.file.createupdate.FileArgumentResolver;
import com.technia.tif.enovia.file.createupdate.FileContext;

public class CustomResolver implements FileArgumentResolver {

    @Override
    public String resolve(FileContext context) {

        Path path = context.getFile();
        // TODO: Return the resolved value as string.
        return "some value";
    }

}

Create/Update Integration - Invoke Custom Processor without Specifying CreateValues or UpdateValues

By default, if no <CreateValues> or <UpdateValues> are specified in a <Config>, custom object or relationship processor will, as designed, not be invoked.

However, sometimes it might be necessary to allow the processor to perform custom logic for creation or update without input from the <CreateValues> or <UpdateValues>. To do so, the default behavior can be overridden using the attribute processOnMissingCreateValues or processOnMissingUpdateValues.

For example:

<ObjectProcessor
    className="com.acme.MyObjectProcessor"
    processOnMissingCreateValues="true" />

Note on the Synchronous Job Creation API

The API for invoking a Job on the TIF server synchronously from the ENOVIA/3DEXPERIENCE application, have been guarded from being used from the TIF Server itself.

This API should not be used from code executed on the TIF Server, as it will perform an HTTP call to itself.

If this API is used from the TIF Server, an exception will be thrown to prevent further execution.

Reference Current Payload Name in Job Macro

The name of the payload, if available, can be referenced from a job macro. This could for example be used in a File destination like shown below:

<File id="file-dest-reports"
      directory="/mnt/reports"
      fileName="${job.source.type}/${job.source.name}/${job.source.revision}/${payload.name}" />

Job Events - Validate Source Object

The Validate event can be used to validate that there is a source object / context object related to the Job itself. And by so either cancel the execution or mark it as failed.

This is achieved by the below construct:

<Job>
    <Events>
        <Validate>
            <SourceObject select="exists" ifFalse="cancel" />
        </Validate>
    </Events>
</Job>

Planned Upcoming Changes

As announced in past release, there are some upcoming changes planned that are good to be aware of. These are described here.

Fixed Bugs

Below is the list of fixed bugs as of this release.

Issue No Description

1015

Create/Update Integration ignores configuration for number generator

1018

The formatSelect configuration is ignored when file-mapper is used for checking in files

1031

When using ElasticSearch: Jobs with async-replies reported as overdue did not correctly reflect this in the Elastic index.