How did we improve lease and platform performance?


Improvements in IBM TRIRIGA Performance

By Rick Rhea & Jay Manaloto

What has the IBM TRIRIGA performance team been up to? Over the last few years and last few releases, our performance team has focused on areas that aren’t normally covered by our standard benchmark tests, and on tools that can help customers to resolve performance issues on their own. If you’re interested, here are a few of our recent improvements in lease and platform performance.

  • Lease Benchmark Testing: Not only are database server and process server resources especially important, but using multiple process servers improves performance.
  • New Recommended Indexes: Several additional indexes were identified and added to the best practices to obtain the best response times and resource utilization of the database server.
  • Lease Journal Entries: By redesigning journal entry processing with parallel and batch processing, and multiple process servers, our test results took only about 2.5 hours instead of over 90 hours.
  • Platform Enhancements: Dynamic workflows can now pass and return parameters, the Query task can now return the number of records instead of the actual records, and the Trigger Action task can now run the asynchronous event that occurs after the transition by a user other than the currently logged-in user.
  • BIRT Reporting & Lease Disclosure Reports: In Version 3.6.1, the reporting was modified to improve running on a separate BIRT server, and to avoid the problematic “params.displayText”.
  • Performance Analyzer Tool: In Version 3.5.3, this tool was introduced to allow a customer to run specific logging types without using the Admin Console, and to view easy-to-read reports.
  • Module Level Associations, Early Adopter Feature: In Version 3.7.0, the platform was enhanced to support Module Level Associations (MLA) tables where the records in the IBS_SPEC_ASSIGNMENTS table are distributed into smaller tables that are created by module type.

By applying the above finding and tools, our recent IBM TRIRIGA 10.7.0 / 3.7.0 release has demonstrated a significant improvement in performance over previous releases. But we’re not done yet! Our performance team will continue to dig deeper into weaker areas or potential opportunities to make our products stronger or faster. So stay tuned for any upcoming developments!

Note: For future releases, “Module Level Assignments” will be renamed “Module Level Associations”.

References:

[Admin: This post is related to the 07.27.17 post about the Performance Analyzer. To see other related posts, use the Performance tag.]

Continue reading

How do you check several values in the Switch task of a workflow?


How can I check if a field has one among a set of values in the switch task of a workflow? For example, whether the field cstNameTX has either “a” or “b” or “c”? I tried the Switch task with the expression similar to the following, but it doesn’t work: cstNameTX == (“a” || “b” || “c”). Should I try the following expression: cstNameTX == “a” || cstNameTX==”b”, etc.? Is there a system function for this?

You can nest the switches instead of trying to have multiple entries in the expression…

[Admin: To see other related posts, use the Switch tag.]

Continue reading

UX: How do you create and save a record in UX via a workflow?


I’ve got most of this worked out. So I can trigger a workflow from a UX web page. But I am stuck on how to take data created in the UX application, feed it to the workflow, place that data into record fields, and then create a draft record. This is the UX code that is feeding data back to TRIRIGA. The data is valid. I am just stumped on how to feed it into a workflow. Any ideas?

var newRec = {
triHoursNU: vFixedTotal,
triControlNumberCN: triControlNumberCN,
triDateTX: mm + “/” + dd + “/” + yyyy, 
triIdTX: triIdTX,
triNameTX: fName + ” ” + lName
};
console.log(newRec);
this.$.timeLogQueryDs.createRecord(newRec, TriPlatDs.RefreshType.BOTH, 
“createLog”, “create” ) 
.then(function(){
this.$.toastBlue2.show(); 
}.bind(this));

When you create a record, let’s say you have a data source called “peopleDs”, you create an object and then pass it to the create method of the data source. The names should match the data source exposed field names. I also recommend looking at the documentation for your TRIRIGA instance at: /p/web/doc.

[Admin: The same question is also posted in the main UX Framework forum. To see other related posts, use the UX Framework tag or Perceptive tag.]

Continue reading

How do you restrict special characters in a text field?


I want to be able to restrict the user from entering special characters like !@#$% in a text field in a form. I could not find any such utility in the Form Builder or Data Modeler. If my understanding is correct, I should be using a workflow for this. But I am not sure how to do it. Any suggestions?

Do you want the field to disallow spaces and numeric characters, as well as special characters like !@#$%? If yes, then Validation > “Alpha Only no Spaces” through Data Modeler may help you…

If you opt to go the workflow route, you could have a switch that uses a few Contains() statements to check for the individual characters you don’t want, but I don’t know how well that function will work with special characters. You may want to look at using the isStringPatternMatch() function, as described in this thread.

[Admin: To see other related posts, use the Character tag.]

Continue reading

How do you configure rights for admin to create new workflows?


Is there a way to configure the rights for an admin account to create new workflows in Workflow Builder?

The user must have the LICENSE_IBM_TRIRIGA_Application_Builder license. This license is required to create a new workflow or BO. The core licenses can modify workflows and BOs, but not create new ones.

[Admin: To see other related posts, use the License tag or Workflow tag.]

Continue reading

How do you use fields that refer to Current Date or System Date?


What is the best way to handle calculated fields that need to reference the Current Date or System Date? For example, I have a number field in the Building BO called Building Age. To calculate the Building Age, I had to create another field called “cstCurrentDateDA” to store the current date the Building record was created.

From there, I take the Current Date minus the In Service Date of the building. However, let’s say I wanted the Building Age field to get updated daily. In my current design, I would have to probably create an asynchronous workflow to update the “cstCurrentDateDA” field and then trigger a Save action to get the extended formula against the Building Age field to fire.

Is there a better approach to dealing with field variables that rely on the Current Date or System Date? Instead of creating a custom field to store the Current Date to act as a constant factor?

[Admin: To see other related posts, use the Date tag.]

Continue reading

How do you use Dynamic Workflow settings in Call Workflow task?


I am looking for some explanations for the “Dynamic Workflow” property settings in the Call Workflow task. When should I use it?

The Dynamic Workflow property and fields allows you to pull the workflow name to execute from a task > field, instead of the workflow name being hard-coded in the workflow. The field must contain the workflow name to execute.

Excerpt from the “Application Building” (3.5.3, PDF) user guide:

Dynamic Workflow: The values of this field are used to dynamically define the name of the workflow that this task will launch. For the “Task with Workflow Name” drop-down list, select the task record that contains the workflow name. For the “Workflow Name Field”, select the field on the task record that contains the workflow name. This record field must contain the workflow name that you want to launch.

[Admin: To see other related posts, use the Workflow tag or Workflow Builder tag.]

Continue reading

Is there a way to clear server caches without Admin Console?


Is there a way to clear server caches without logging into the Admin Console?

Beginning in IBM TRIRIGA Platform 3.5.1, TRIRIGA delivered an enhancement for this to be done via workflow. The pertinent release notes can be found from this wiki page. Here is an excerpt from the release notes on the topic:

A custom task class has been added for workflow which triggers a global cache clear across all servers. 

You can create a custom task and specify the following in the class field: com.tririga.platform.admin.cache.web.CacheProcessingCustomTask $RefreshAllCache

The custom task will perform a global cache clear on the server where the workflow runs as if it were triggered from that server’s Administrator Console. (Tri-211723)

[Admin: To see other related posts, use the Admin Console tag or Cache tag.]

Continue reading

Can you get the Cleanup Agent to remove record data in chunks?


In one of our environments, we have a large amount of records that have been transitioned to the null state. When the Cleanup Agent runs, it runs out of DB2 transaction log space executing the following:

DELETE FROM IBS_SPEC_ASSIGNMENTS WHERE EXISTS (SELECT ‘X’ FROM IBS_SPEC_CA_DELETE WHERE IBS_SPEC_CA_DELETE.SPEC_ID=IBS_SPEC_ASSIGNMENTS.SPEC_ID)

For workflow instance saves, the Cleanup Agent now seems to remove the data in small chunks (of 1000 rows each). But for the record data cleanup, it still seems to (try to) remove all data in one huge SQL statement/transaction. Is it possible to get the Cleanup Agent to remove record data in chunks, like it does for workflow instance saves?

Otherwise, I’m thinking of writing a small util that would run the statement above, but in smaller chunks, since it seems we still have the list of record IDs that it tries to remove in the IBS_SPEC_CA_DELETE table. Any obvious issues with that?

As of 3.5.3, there have been no changes for the data to be deleted in chunks for IBS_SPEC_ASSIGNMENTS. This sounds like a good PMR. It is rarely recommended to delete records directly from the database, but in this circumstance, you might be okay. However, the IBS_SPEC_CA_DELETE only exists during the time the Cleanup Agent is running. It is dropped when the agent goes back to sleep.

[Admin: To see other related posts, use the Cleanup tag or SQL tag. As a side note, starting with version 3.4, the Cleanup Agent name was changed to Platform Maintenance Scheduler.]

Continue reading

Why is the lease record stuck in “Processing” during activation?


We are running TRIRIGA 10.5.2 and 3.5.2.2. Some of our lease records are getting stuck in “Processing” status after we try to activate the record. Since it is processing, we have no buttons at the top to Revise, Save, etc. This only happens sometimes, and only to lease records that have payment schedules. From the looks of it, all the payment line items do get created. A couple questions:

  • (1) Is there a fix to this to keep it from happening again?
  • (2) Can these records that are stuck in processing be pushed to active or do they have to be re-entered?

I was actually able to apply a workflow fix provided by IBM so that this will not happen going forward. So far, it has been working as planned…

With regards to getting the leases “unstuck”, I created an editable query, imported the State Transition Actions (on the Advanced tab in the query form), and ran the report to select and process the “stuck” leases. This worked with no issues and I did not have to delete or retire the leases. They were functioning properly after getting them out of the “Processing” state.

[Admin: This post is related to the 01.12.16 post about records getting stuck. To see other related posts, use the Performance tag or Workflow tag.]

Continue reading