Can Banner reach eProcurement?
13 Aug 2022
Accountants never work directly with servers running Ellucian’s Integration for eProcurement (IFEP) “middleware” software (syncing Ellucian Banner with Jaggaer a.k.a. SciQuest), but engineers do.
Here are tricks engineers can try to ensure that communications are running smoothly from the Banner ERP database to the eProcurement middleware.
This article shouldn’t exist
Technically, the Banner database server never talks to the eProcurement server. Banner couldn’t care less whether or not the eProcurement server exists. Banner never sends eProcurement any messages directly.
Instead, there’s a table in the Banner database, usually called something like “EVENT_SYNC_TABLE
,” that Banner writes a lot of data to every time data changes inside the Banner database. eProcurement queries the Banner database very frequently, asking it for the latest contents of this table. In other words, eProcurement walks up to Banner’s community bulletin board every few seconds/minutes, checking for news like “At 9:32 AM, someone updated a vendor’s address – here’s the vendor ID and the new address.”
Networking
From a networking perspective, this means that should be safe to lock down firewalls (and firewall-like settings) so that the Banner database server is never allowed to initiate TCP network traffic to the eProcurement server.
(The Banner database server’s TCP _replies need to be able to return to eProcurement, of course, but usually firewall configurations only bother to restrict permission to initiate network connections, not permission to reply.)_
Quality assurance
From a quality assurance perspective, this fact adds complexity to testing connections with accountants who serve as Banner and Jaggaer power-users.
Remember, accountants don’t think about eProcurement’s existence. They just think of “Banner and Jaggaer being in sync.” It’s magic. And for their own protection, they only have access to use Banner and Jaggaer, not eProcurement.
If you’re the Help Desk, you’re going to be needing to context-switch the way you talk a lot.
When you’re talking to an accountant, you’ll probably want to say, “Let’s update a vendor’s address in Banner and see if it updates Jaggaer.”
I’ve organized my testing advice by the “least-technical” involved user’s perspective, so you’ll find details about updating vendor addresses in this article, not in the “Can eProcurement reach Banner?” article.
However, when you’re talking to an engineer, it’s important to know that Banner doesn’t “update” anything. Certainly not Jaggaer, and technically not even eProcurement. eProcurement updates itself by querying Banner’s “community message board of recent Banner data changes,” and then in turn, eProcurement sends Jaggaer a message over Jaggaer’s HTTP API.
AWS CloudWatch
https://www.epochconverter.com/timestamp-list
aws logs start-query --log-group-name "/erpprod/ec2/catalina.out" --query-string "com_sct_Procurement_Supplier_Update" --limit 2 --start-time "1664582400" --end-time "1667260800" --profile "erpprod"
{
"queryId": "5a2f8912-3f58-4c0c-a9f8-5bbb24bc7ed9"
}
aws logs get-query-results --query-id "5a2f8912-3f58-4c0c-a9f8-5bbb24bc7ed9" --profile "erpprod"
{
"results": [],
"statistics": {
"recordsMatched": 0.0,
"recordsScanned": 1850930.0,
"bytesScanned": 537276370.0
},
"status": "Complete"
}
{
"results": [
[
{
"field": "@timestamp",
"value": "2022-10-14 14:48:11.966"
},
{
"field": "@message",
"value": "</com_sct_Procurement_Supplier_Update>\n"
},
{
"field": "@ptr",
"value": "CmUKKgomODIzNzE1NTM3NDc4Oi9lcnBwcm9kL2VjMi9jYXRhbGluYS5vdXQQBxI3GhgCBhj7Kx0AAAAConndRQAGNJdowAAABdIgASia+9y3vTAwsKPet70wOIIGQMnqCEjaYFCDXRD7BRgB"
}
],
[
{
"field": "@timestamp",
"value": "2022-10-14 14:48:11.965"
},
{
"field": "@message",
"value": "<!DOCTYPE com_sct_Procurement_Supplier_Update SYSTEM \"3.ka79vd76.bwxnc.4\">"
},
{
"field": "@ptr",
"value": "CmUKKgomODIzNzE1NTM3NDc4Oi9lcnBwcm9kL2VjMi9jYXRhbGluYS5vdXQQBxI3GhgCBhj7Kx0AAAAConndRQAGNJdowAAABdIgASia+9y3vTAwsKPet70wOIIGQMnqCEjaYFCDXRDrAxgB"
}
]
],
"statistics": {
"recordsMatched": 598.0,
"recordsScanned": 1481168.0,
"bytesScanned": 426610359.0
},
"status": "Running"
}
aws logs get-log-record --log-record-pointer "CmUKKgomODIzNzE1NTM3NDc4Oi9lcnBwcm9kL2VjMi9jYXRhbGluYS5vdXQQBxI3GhgCBhj7Kx0AAAAConndRQAGNJdowAAABdIgASia+9y3vTAwsKPet70wOIIGQMnqCEjaYFCDXRD7BRgB" --profile "erpprod"
{
"logRecord": {
"@ingestionTime": "1665758896265",
"@log": "823715537478:/erpprod/ec2/catalina.out",
"@logStream": "eproc1_i-091455bc44438d0d7",
"@message": "</com_sct_Procurement_Supplier_Update>\n",
"@timestamp": "1665758891966"
}
}
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7" --query "com_sct_Procurement_Supplier_Update" --limit 2 --start-time "1664582400" --end-time "1667260800" --profile "erpprod"
null
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7"--start-time "1664582400" --end-time "1664582500" --profile "erpprod"
{
"events": []
}
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7" --query "com_sct_Procurement_Supplier_Update" --limit 2 --start-time "1664582400" --end-time "1667260800" --profile "erpprod"
{
"events": []
}
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7" --limit 2 --profile "erpprod"
{
"events": [
{
"timestamp": 1665764467451,
"message": "[BannerAQGateway] 2022-10-14 11:21:07,255 com.sct.messaging.gateways.MessagingObject INFO [Thread-287] - BannerEventCommand.execute, completed processing...",
"ingestionTime": 1665764472251
},
{
"timestamp": 1665764471523,
"message": "[BannerAQGateway] 2022-10-14 11:21:07,256 openeaiObjType.EPROC INFO [Thread-287] - EPROC - Done with MessageTransaction 49",
"ingestionTime": 1665764472251
}
],
"nextForwardToken": "f/37147789040199443175505905458967462571334922693388468281/s",
"nextBackwardToken": "b/37147788949390808727089208026634017765110794641036214328/s"
}
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7" --query "com_sct_Procurement_Supplier_Update" --limit 2 --profile "erpprod"
null
Oh, I think my timestamps were off. These come from the ones returned by AWS.
aws logs get-log-events --log-group-name "/erpprod/ec2/catalina.out" --log-stream-name "eproc1_i-091455bc44438d0d7" --start-time "1665758891866" --end-time "1665758891980" --profile "erpprod"
Yup, that returns stuff. No more pleasant to look through than the web, but anyway, there it is.
Posts In This Series
- Part 1 - Jaggaer - Banner Sync Series
- Part 2 - Can eProcurement reach Banner?