Introduction

  • Users frequently find the situation when a business date has to be made available to a larger number of jobs.
    • This can include the current date or a calculated date such as a trade date that considers calendars.
    • This can include a previous date such as a reporting date.
  • Requirements
    • The business date has to consider existing business rules, e.g. to use the current date, a calculated date or a previous date.
    • The business date has to be updated at a precise point in time and on a regular basis.
    • The business date has to be made available to a larger number of jobs.

Building Blocks

Use of Job Resources

JS7 - Job Resources are a means of carrying variables and making them available to jobs.

  • A Job Resource can hold any number of variables. Such variables are available for JVM Jobs from arguments and for Shell Jobs from environment variables.
  • A Job Resource environment variable is automatically available as a local environment variable to a Shell Job.
    • If a Workflow is assigned the Job Resource then the environment variables of the Job Resource will be propagated to all the Shell Jobs in the workflow.

    • If a Job is assigned the Job Resource then this job can use the propagated environment variables of the Job Resource.
  • As a result users can add a variable such as BusinessDate to an existing or to a new Job Resource. Users  can then assign the Job Resource to a Workflow to make it available to all jobs or limit its scope by assigning it to an individual Job.

Download (.json upload)pdBusinessDate.jobresource.json

The Job Resource can be configured with the Arguments tab like this:

  • An argument with the name businessDate is introduced that holds a business date value that will later on be updated automatically.


For the same Job Resource switch to the tab Environment Variables to complete the configuration like this:

  • An environment variable with the name BUSINESS_DATE is using the value of the $businessDate argument.
  • The environment variable is available for any jobs that are assigned this Job Resource



Then deploy the above Job Resource.

Use with Jobs

Environment variables from Job Resources are automatically available for job scripts.

  • For jobs executed with Unix Agents the environment variable is available from its name, e.g. $BUSINESS_DATE.
  • For jobs executed with Windows Agents the environment variable is available from the syntax %BUSINESS_DATE%.

Job Resources can be assigned at workflow level to be available for all jobs in a workflow and they can be assigned at job level. The same Job Resource is used for Unix and Windows platforms.

Job for Unix

Download for Unix (.json upload)pduVariableBusinessDateGet.workflow.json

The job is assigned the Job Resource with the given name. In the job script the environment variable $BUSINESS_DATE is used which is available from the Job Resource.

Job for Windows

Download for Windows (.json upload)pdwVariableBusinessDateGet.workflow.json

The job is assigned the Job Resource with the given name. In the job script the environment variable %BUSINESS_DATE% is used which is available from the Job Resource.

Updating the Business Date

The final task includes updating the business date at a regular basis. This is achieved by use of the JS7 - REST Web Service API.

  • The JS7 REST Web Service API is available for any scripting languages and programming languages that implement a REST client.
  • This allows the business date to be set by an individual application that triggering the date change.
  • This allows the business date to be set automatically from a JS7 job.

The proposed approach is to update the value of the global businessDate variable by a job.

  • Users can create a workflow with a single job that updates the businessDate variable.
  • The workflow is triggered by an order from JS7 - Schedules to switch the business date, for example, at midnight in the relevant time zone and for specific days.

Job for Unix using Shell

Download (.json upload)pduVariableBusinessDateSetShell.workflow.json

The job example for updating a business date uses the shell script explained with the JS7 - How to update a Job Resource using the REST Web Service API from the Shell article.

Users have to download the shell script, make it executable and available in a directory that can be accessed by the Agent.

The job performs the following operations:

  • connect to the JOC Cockpit with the indicated user account.
  • reading the Job Resource.
  • updating the businessDate variable to the current date and specifying the desired date format.
  • storing the updated businessDate variable in the Job Resource.
  • deploying the updated Job Resource.
  • disconnecting from JS7.

Shell implementation to update the business date with a Job Resource variable
#!/bin/sh

$HOME/set_job_resource.sh \
    --url=http://joc-2-0-primary:7446 \
    --controller-id=testsuite \
    --user=root:root \
    --job-resource=/ProductDemo/Variables/pdBusinessDate \
    --key=businessDate \
    --value=$(date +'%Y-%m-%d')

Job for Unix using PowerShell

Download (.json upload)pduVariableBusinessDateSet.workflow.json

The job example for updating a business date uses a PowerShell job script and the JS7 - PowerShell Module.


The job performs the following operations:

  • connect to the JOC Cockpit using the Connect-JS7 cmdlet.
  • reading the Job Resource with the Get-JS7InventoryItem cmdlet.
  • updating the businessDate variable to the current date and specifying the desired date format.
  • using the Set-JS7InventoryItem cmdlet to store the updated businessDate variable in the Job Resource.
  • using the Publish-JS7DeployableItem cmdlet to deploy the updated Job Resource.
  • using the Disconnect-JS7 cmdlet to disconnect from JS7.

PowerShell implementation to update the business date with a Job Resource variable
#!/usr/bin/env pwsh

# Adjust the path to your Job Resource
$jobResourcePath = '/ProductDemo/Variables/pdBusinessDate'

# Consider to use the appropriate URL that matches host and port of the JOC Cockpit instance
$url = "http://joc-2-0-primary:4446"

# Consider to store credentials with a PowerShell profile or with a credential store or to use certificate based authentication as an alternative to user/password
$credentials = ( New-Object -typename System.Management.Automation.PSCredential -ArgumentList "root", ( "root" | ConvertTo-SecureString -AsPlainText -Force) )


Import-Module JS7
Connect-JS7 -Url $url -id $env:CONTROLLER_ID -Credentials $credentials

$jobResource = Get-JS7InventoryItem -Path $jobResourcePath -Type JOBRESOURCE

    if ( $jobResource.arguments.BusinessDate )
    {
        # update the business date
        $jobResource.arguments.BusinessDate = (Get-Date -Format "yyyy-MM-dd")
    } else {
        # add a business date variable to the Job Resource
        $jobResource.arguments | Add-Member -Membertype NoteProperty -Name BusinessDate -Value (Get-Date -Format "yyyy-MM-dd")
    }

# Update and deploy the Job Resource
Set-JS7InventoryItem -Path $jobResourcePath -Type JOBRESOURCE -Object $jobResource
Publish-JS7DeployableItem -Path $jobResourcePath -Type JOBRESOURCE -ControllerID $env:CONTROLLER_ID

Disconnect-JS7

Job for Windows using PowerShell

Download (.json upload)pdwVariableBusinessDateSet.workflow.json

The job includes the same PowerShell script code and performs the same operations as the Unix job example described above.

The only difference with the Windows job is the use of a shebang which is specific for this OS.

  • Consider use of the following shebang in the first line of the job script:
    @@setlocal enabledelayedexpansion & @@findstr/v "^@@[fs].*&" "%~f0" | powershell.exe -NonInteractive -Command - & exit !errorlevel!/b&
  • The PowerShell executable pwsh.exe is available starting from PowerShell 6.0. PowerShell releases 5.x use the executable powershell.exe that can be used accordingly with the shebang.
  • For details about the PowerShell shebang see the JS7 - How to run PowerShell scripts from jobs article.

Schedule for automated job execution

Users can create JS7 - Schedules which generate orders that are executed at a given point in time. These can be used to automate the execution of the JS7 workflow and update the business date.

Download (.json upload)pdsVariableBusinessDateSet.schedule.json

A schedule is created like this:

  • The schedule references the workflow to be executed.
  • The schedule is specified to be planned and to be submitted automatically to the JS7 - Daily Plan.


To specify the point in time at which the workflow is executed, a run-time setting is added to the schedule like this: 

  • A calendar is assigned that specifies the days on which the workflow is executed.
  • A period is assigned which specifies the hour, minute and second when the workflow is to be started.