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 to carry variables and to make 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 any Shell Jobs in the workflow are propagated the environment variables of the Job Resource.
- If a Job is assigned the Job Resource then this job can use the propagated environment variables of the Job Resource.
- As a result you can add a variable such as
BusinessDate
to an existing or to a new Job Resource and assign the Job Resource to a Workflow to make it available to all jobs or assign it to an individual Job to limit the scope.
Download: 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 later on will 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 for Unix
Download for Unix: 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 that is available from the Job Resource.
Job for Windows
Download for Windows: 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 that is available from the Job Resource.
Updating the Business Date
The final task includes to update 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 to set the business date from an individual application that triggers the date change.
- This allows to set the business date 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 respective time zone and for specific days.
Job for Unix
Download: pduVariableBusinessDateSet.workflow.json
The job example to update a business date makes use of a PowerShell job script and the JS7 - PowerShell Module.
- The JS7 PowerShell Module is a wrapper for the JS7 - REST Web Service API.
- To install the JS7 PowerShell Module see PowerShell Command Line Interface 2.0 - Introduction
- Consider use of the shebang
#!/usr/bin/env pwsh
in first line of the job script that assigns PowerShell as the shell for the job script.
- The JS7 REST Web Service API can be used with any other scripting language such as Perl, Python, Ruby etc.
The job performs the following operations:
- connect to JOC Cockpit by use of the Connect-JS7 cmdlet.
- read the Job Resource by use of the Get-JS7InventoryItem cmdlet.
- update the
businessDate
variable to the current date and specify the desired date format. - store the updated
businessDate
variable to the Job Resource by use of the Set-JS7InventoryItem cmdlet. - deploy the updated Job Resource by use of the Publish-JS7DeployableItem cmdlet.
- disconnect from JS7 by use of the Disconnect-JS7 cmdlet.
#!/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
Download: pdwVariableBusinessDateSet.workflow.json
The job includes the same PowerShell script code and performs the same operations as the above Unix job example.
The only difference of the Windows job is use of shebang that is specific for this OS.
- Consider use of the following shebang in the first line of the job script:
@@findstr/v "^@@f.*&" "%~f0"|pwsh.exe -&goto:eof
- For details about the PowerShell shebang see JS7 - How to run PowerShell scripts from jobs
Schedule for automated job execution
To automate the execution of the JS7 workflow in order to update the business date users can create JS7 - Schedules that generate orders for execution at a given point in time.
Download: 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 of workflow execution the schedule is added a run-time setting like this:
- A calendar is assigned that specifies the days for which the workflow is executed.
- A period is assigned that specifies the hour, minute and second for start of the workflow.