Skip navigation
Share This:

Hello Everyone, In recent months, I have been publishing blogs for FootPrints, reflecting the kinds of queries we are dealing with in support, After going through the data from problem management, We have decided to talk about service analytics reporting in Footprints.


                                                                                                         Service Analytics best practices

1. Verify that frequently executed Service Analytics Reports are configured in an optimal way. It is always preferable to use a saved search to filter the set of content items that a report will analyze to the smallest set necessary. If you do not specify a saved search, all container items will be loaded into the report even if only a subset is shown because the filtering will be done in the report itself. This can cause a relatively simple report to be much slower than filtering using a saved search first and then using the report filters only for final adjustments to the shown data.


2. Verify that any widgets that load a chart from Service Analytics are not referencing slow loading reports. Having several chart widgets all executing large reports at the same time can cause a significant load on the application server CPU.


3. In-Service Analytics, after adding a new field to a report and clicking on “Apply Changes” the report page may turn blank (i.e. not show anything.) The reason may be that in the communication with the FootPrints server, the size of the HTTP headers has been exceeded. To address this situation,


         AWhen Accessed via Tomcat-based URL:

               The size of the HTTP Header Size may have been exceeded. To address this situation, update the value of the maxHttpHeaderSize parameter in the Tomcat's server.xml. First set the value to "8192". If the problem persists then try increasing the value to "16384", "32768" or "65536".


               Note that increasing the maxHttpHeaderSize will allocate 2 buffers (one for input and one for output) of the specified amount of memory (i.e. 8kb, 16kb, 32 kb, or 65kb) per connection. The communication with the server will use up a bit more memory in this configuration but considering that connections are usually short-lived it should not be of a  significant issue.



         B. When Accessed via IIS-based URL: This can be caused by the 'Request Filtering' module in IIS, when using IIS Integration.

               1. Open IIS and expand Sites -> Default Web Site

               2. Open Request Filtering from the feature panel.

               3. Click on Edit Feature Settings… link in the Actions panel to the right.

               4. Change the value of “Maximum URL length” and “Maximum query string” to be 65536.

               5. Click 'OK'.

               6. Restart IIS.


4. How to debug Service Analytics errors in FootPrints 12  :

When working with Service Analytics in Footprints 12, errors may occur, such as when deleting a Service Analytics report. The steps below detail a method of enabling debugging for Service Analytics in order to determine the nature of the error. Access to the server where FootPrints 12.X or 20.X is installed is required for this process.



5. The data for Calculated Field within Service Analytics is not displaying or appears to be incorrect. How do I correct this? (Rebuild the FootPrints 12 Datamart)

There are exceptions in the Footprints log showing the datamart incremental load is failing.


The Calculated Field's within Service Analytics uses calculated data that is stored in the Datamart. Occasionally the data for Calculated fields can stop displaying and the datamart may need to be rebuilt. Below are steps that explain how to do this:


6. In version 20.19.03 and above, Functionality added which gives the ability to export grid contents in CSV and HTML format (users no longer need to create reports for simple ticket data extract).



7.  If data for calculated fields shows 0.00 value in reports:


Make sure to turn on Time Tracking and add required status in Life Cycle.

1. Go to Administration-->Main-->Workspace-->Ticket Item

2. On the left side Go to Time Tracking and click on the radio button to turn it on.

3. Go to Administration-->Main-->Workspace-->Ticket Item

4. On left side Go to LifeCycle-->add all status under the 'Count For Time' section.


Now create a custom report and select any of the calculated fields, this show gives the non-zero value.


8. How to create a formula to pull the Assignee name or Team Name from the Assignee field?

When setting up a report to use these formulas, include the "Assignee" field in the report.  You can hide this column later after the formulas are created.

Note:  You may need to change the formula field names to match your field names.

Note:  These formulas are designed for Assignee type fields that allow only one assignee, with or without teams.


Assignee Name when not using teams:


Example: jsmith (John Smith)

Results: John Smith


Assignee Name when there is no open parenthesis "(" on some records:


Example: Infrastructure.jsmith(John Smith)

Results: John Smith

Example: Sally Jaynes

Results: Sally Jaynes


Team Name only, checking for team name with "." search:

IIF(INStr([Assignees],".")=0,"No Team",(MID([Assignees],1,(INStr([Assignees],".")-1))))

Example: Infrastructure.jsmith(John Smith)

Results: Infrastructure


The formulas used the following functions, INSTR and MID to gather the data to pull the name from the text.

Using the "InStr" function to look for the position of the "(", ")", and "." characters in the [Assignees] field.

This information is used to set the starting point of the characters to be extracted using the MID function, and the length of the name.  The team name always starts as the first character in the Assignees field.


Thanks for reading the article. Please rate the blog and add comments to share your experiences.

Share This:

Hi Everyone, Today we are going to discuss the final blog on business rules, As we all know the business rule is the never-ending topic so if you feel we need anything to add, please comment on the blog so we can improve or add the topics.


We used to get a lot of questions on How to setup Dynamic Linking data copy for tickets in FootPrints 12 from workspace A to workspace B. so let's find the below steps:


Example: Workspace A= IT Helpdesk, Workspace B=Pricing, We will create a ticket under IT helpdesk and then clicked on action tab> Copy> Select destination of the container i.e Pricing and then save. Now update a ticket of the IT helpdesk filed and that will be copied automatically on Pricing ticket.

In Workspace A


1. Create a "Related Tickets (Dynamic)" relationship in the item to be used. 


User-added image


2. Edit the item itself and select Fields.   A new checkbox/boolean field. "Updated by User" to identify a user edit will be needed.  The permissions will need to be Optional, but the field will not need to be added to the form.

3. Create the first after save business rule, "Set Flag Updated by User", in the item to check the "Updated by User" field whenever a user edits a ticket.  The following details are needed.

  • Trigger: After Save / On Update by User
  • Criteria: field Updated by User equal to [false]
  • Actions: Set field value: Set field value Updated by User to [true]

User-added image



In Workspace B


1. Create a "Related Tickets (Dynamic)" relationship in the item to be used. 

User-added image

2. Edit the item itself and select Fields.   A new checkbox/boolean field. "Updated by User" to identify a user edit will be needed.  The permissions will need to be Optional, but the field will not need to be added to the form.


3. Create the second after save business rule, "Dynamic Linking", that will run on the linked tickets and copy the user's changes. Also the action to Copy all Fields From Linked only copies data for the fields with the same name and data types.

  • Trigger: On Linked Item Update : [ Related Tickets (Dynamic) : Related Ticket ]
  • Criteria:
    field: Generic Linking Any [ Related Tickets (Dynamic): Related Ticket ]
    field: Updated by User equal to [ true ]
  • Actions:
    Set field value: Set field value Copy all fields from linked
    Set field value: Set field value Updated by User to [false]


User-added image


Note: Save each rule, then Save & Publish Both workspaces.

Tips and tricks for Business rules:

Generic linking conditions

The following conditions are available for Generic Linking type rules:

  • Any
  • Every
  • Participates-in


For the Any and Every condition, operators are selected for applicable fields. "Participate in" means if there is a link to a subtask or another item type, apply the rule.

Make sure to set the trigger to run when a specific update occurs.

Defining rules to execute an external action:

You can define rules to run an executable program or script and perform other actions external to FootPrints—actions that you can also reach from a command prompt. The action simply runs the specified program or script; it does not automatically interact with the operating system’s command interpreter or shell.


If the action that you want to be performed requires a command interpreter (for example, to run an operating system command or redirect standard input/output), the action must explicitly call the appropriate command interpreter for your operating system (for example, cmd or command for Windows or sh for Linux).


An example of an external action that requires a command  interpreter: cmd /c “ipconfig > ipconfig.txt”. . (Full paths were omitted here for brevity.)

An example of an external action that does not require a command interpreter is: myprogram.exe.


NEVER delete Workflow business rule from the business rule:


We have seen lots of customers deleting workflow business rules from the Business rules section instead of workflow-business rules. This causes an issue while publishing workspace as a business will not completely remove. We always recommend customers if they want to remove any rule from workflow then it should be from the workflow business section only.


Renamed or deleted fields cause errors:

If you rename or delete a field used in a business rule, errors are generated when you next publish the container that includes that rule. To correct this error, you must modify the part of the rule that included the "missing" field. You can select the correct field (if the field was renamed) or remove the statement that refers to the field (in either case).


Thanks for reading the article. Please rate the blog and add comments to share your experiences.

Share This:

Hi Everyone, As discussed in the last blog, We will continue with the topic of business rule, In this topic, we will cover On-screen and On-Page load triggers.


Understand the processing of business rules having After Save trigger:

This topic explains how the system processes business rules having the After Save trigger.

  • The following diagram illustrates how After Save rules process when a Ticket is created manually, through email, through web services, or through another automated process.



  • The following diagram illustrates how After Save rules process when a Ticket is updated manually or updated by a rule in a previous round.




When the On Update By User Or Rule option is selected instead of the On Update By User option, if the last update was made by a user and not by a rule, the system performs around to evaluate the criteria of all such rules. After the system has gone through all the rules once, the system stops, because there would be no further updates by a user, but only by rules.



Consider a scenario where there are 10 rules. Out of the 10 rules, five rules have the On Create option and five rules have the On Update By User Or Rule option.

When you create a new ticket, the business rules are processed. If one of the rules containing the On Update By User Or Rule option is evaluated, which results in updating a ticket, the system checks all the rules one by one again. The system stops this process only when no updates are made to a ticket.

If one of the rules using the On Create option runs and causes an update, then a new round of rules will run and all rules will be evaluated again from top to bottom. Only those using the On Update By User Or Rule option will possibly run in the 2nd or subsequent rounds.


Triggering sequence considerations:


You can have rules defined and associated with different parts of your workflows (states, transitions, groups, and entire workflows).

The order in which the system processes rules depends on the internal ordering of rules based on triggers and on administrator-defined ordering.

It is important to order your rules properly, taking into account how the rules relate to each other.

Triggers are processed in the following order.

On UpdateOn Create

1. On Exit (for State)

1. On Enter

2. On Exit (for Group)

2. On Create as part of a copy/move operation

3. On Transition

3. After Save (On Create)

4. On Enter (for Group)


5. On Enter (for State)


6. Updated in State or Group (for State)


7. Updated in State or Group (for Group)


8. Updated in any State


9. Updated in any Group


10. On any Transition


11. After Save (On Update By User Or Rule)


For linked records, the system processes rule in production as shown in the following table. In addition, Administrators should set the order for rules attached to the same part of a record definition. The best way to update the triggering order is on the Business Rules page. View the rules in the Expanded View, expanding the nodes to see the rules you want to re-order and then change the settings in the Order column.


OperationOn Source ItemOn Linked Item
Linked item create in state A as a result of copying
  1. Upon Item Copy
  2. On Linked Item Create
  1. On Enter (on A)
  2. On Create as part of a copy/move operation
  3. After Save (On Create)
Linked item update in state A and group G
  1. On Linked Item Update
  1. Updated in State or Group (on A)
  2. Updated in State or Group (on G)
  3. Updated in any State
  4. Updated in any Group
  5. After Save (On Update By User Or Rule)
Linked item update with transition A-B and in group G
  1. On Linked Item Update
  1. Updated in State or Group (on A)
  2. Updated in State or Group (on G)
  3. Updated in any State
  4. Updated in any Group
  5. After Save (On Update By User Or Rule)
Linked item update with transition A-B and between groups G-H
  1. On Linked Item Update
  1. On Exit (on A)
  2. On Exit (on G)
  3. On Transition (on A-B)
  4. On Enter (on H)
  5. On Enter (on B)
  6. On any Transition
  7. After Save (On Update By User Or Rule)




On-Screen business rule:

Select On Create, On Update, or both. This trigger is useful for assigning tickets based on category, setting field values based on other field values, giving the user informative messages based on selections they made, or changing field visibility as a user fills out a form.

Ex. Auto Assignment


On-Page Load

Select On Create, On Update, or both. This trigger is useful for defining default values, identifying assignees, or changing field visibility immediately when the page loads to hide fields that don't pertain to the situation or maybe revealed later while the user fills out the form. When you apply a quick template to a record, the record page refreshes and the business rule is fired based on the selected trigger.

Ex. Default Assignment


Best Practice for On-screen and On page load rules:

  • On-Screen business rule with On Update trigger loops and the actions are performed multiple times. Make sure that the defining criteria set on the business rule do not match after an Action has been triggered.  An action should change a value in the ticket so the rule no longer executes against that ticket.
  • Our recommendation for On-screen or On-Page load business rule is to apply of dropdown fields. If we apply On-screen rule on a simple text field with large text in it, It will give you performance issues. We should avoid applying On-screen business rule on a single line or Multiline text field if the value is not pre-populated.
  • When a field is used as Criteria in an On-Screen business rule, the rule can not apply a 'Set Field' action to that field.



We will continue to publish the next blogs on the business rule so we get more insights. So stay tuned and thanks for reading the article. Please rate the blog and add comments to share your experiences.

Share This:

Hello Everyone, In recent months, I have been publishing blogs for FootPrints, reflecting the kinds of queries we are dealing with in support. I will continue to publish those around the 20th of each month. This time we will be discussing more on the very important and most exciting topic Business rule.


Any time that you want the system to take action on a ticket or other item based on specific criteria, you can create a business rule. For example, you can create a rule that changes the priority of a ticket based on the subject of a request or the title of a ticket. You can also set up email reminders and set field values using formulas. You can create business rules for any type of container except address books.


A rule consists of three parts:

  • The trigger that defines a frequency or event causes the criteria of a rule to be checked.
  • Criteria that determine if the action should be performed (such as "Title contains 'Printer'" or "Cost is greater than 100"). Multiple criteria can be defined and are connected by AND or OR operators.
  • Actions that are performed when the criteria are met. Multiple actions can be defined and are connected by the AND operator.


So in the blog, we will discuss the Time-based rules and Escalation rules.


Defining time-based rules:


You can define rules that run at specific intervals and perform an action based on the results. For example, you can define a rule to run every day and check for tickets that resolved at least 14 days and status is already not equal to close.



Best Practice for Time-based rules:

  • Design time-based rules to not update a large number of tickets at the same time.
  • When you define a time-based rule, consider how the rule might affect the application data in the production instance.
  • If you have an existing time-based rule that might impact a significant number of tickets, consider defining additional business rules to achieve the same end result. If too many tickets are updated at the same time during the business hours, it might cause performance issues.
  • If possible, schedule time-based rules to run outside of business hours, especially the ones that might impact a lot of tickets. Updating too many tickets at the same time can cause performance problems for other users of the system.
  • Do not schedule multiple time-based rules to run at the same time.
  • Ensure that you configure the right schedule to run a business rule. For example, do not configure to run a business rule every 15 minutes if you can meet the business need by running it once a day.


Additional considerations:

  • Rules are based on the time zone of the system server.
  • Hour values are expressed in military format, that is, 1600 hours represents 4 p.m. However, 16 hours represents 16 hours from the start of the work schedule day.
  • Triggers scheduled for every other day or every other week, start fresh on the first day of the month. In production, this means that the first report of a month may occur sooner than expected based on the last report of the previous month. For example, if you run a report every other day and the last report runs on the last day of a month, the next report will run on the first day of the next month because the cycle begins fresh every month.


Defining Escalation rules:


Escalation rules can be applied in several ways: when a ticket is created or edited, after a ticket has remained open or unedited for a specified amount of time, or both. When defining escalation rules, you can base them on age or status changes or on other fields, or create special conditions (such as configuring a Generic Linking condition). For example, Once all Sub-task tickets are resolved, the Master ticket will resolve automatically.



Recurring age-based escalations are allowed. Each escalation will only run once when the ticket sufficiently ages. For example, you can create separate age-based recurring escalation rules for 5 minutes, 10 minutes, 1 hour, 2 hours, and 1 week, and each escalation rule will be applied only once to a ticket when it is sufficiently aged for that rule. You can see the (Image 1) for this example.


To use follow-the-sun criteria


For any business rule, you can specify which work schedule to use such as the Normal Work Week schedule. Rules that are assigned a schedule are not triggered outside of the work hours defined for that schedule. You may find that a rule has not run for tickets that arrive after the normal work weekends or tickets that stay in the Created state after normal work hours end.


To use follow-the-sun criteria, select Run any time in the Schedule Type field.


Configure the options for the business rule as needed to trigger the required action.




As the business rule is a vast concept and we need to focus on multiple areas, We will be publishing next blogs on the business rule so we get more insights. So stay tuned and thanks for reading the article. Please rate the blog and add comments to share your experiences.

Share This:

Welcome back to the first blog of the new year 2020, and this time I will be discussing the tips and tricks to improve the performance of the Footprints application. Below are the points



Influence of Time-Based Rules against a large data set:


Consider increasing the number of threads available for processing Time-Based Rules if the total number of Time-Based Rules that execute at the same time is large or there are many Time-Based Rules that perform complex tasks like creating new tickets. The number of threads available for processing Time-Based Rules can be configured in the Administration Console under System Management / System Settings / Miscellaneous. The default value is 10 threads and should be sufficient for typical deployments. Increasing this number does not necessarily guarantee that all Time-Based Rules will be executed faster; it depends on how many rules actually end up executing concurrently and their complexity.


Depending on when specific Time-Based Rules are set up to run, the number of rules whose execution schedule happens to coincide is divided amongst the number of threads specified. For example, if a deployment has 3 workspaces with a total of 40 Time-Based Rules, and at a given time 30 of those rules need to execute then 30 rules divided into 10 threads result in 3 rules executed in each thread. The number of threads that can be specified depends on an operating system, platform and available hardware resources (i.e. CPUs and memory) allocated to the FootPrints application server (i.e. Tomcat.)


Use caution when increasing the number of threads for it may in turn negatively impact the performance of other parts of the application if hardware resources allocated to the FootPrints application server (i.e. Tomcat) are insufficient to deal with the increased processing load.


Introduce an archiving process as a good practice:


In version 12.X/20.X, all business rules; Time-Based ones included; are executed for all existing tickets in a workspace. The automated process is only checking for each and every ticket, if it is compliant with the business rule's criteria you have set in place. If you do this against a handful of tickets, let's say a few hundred, then no problem at all, the system can cope with it.


If you have thousands, tens of thousands, or even hundreds of thousands of tickets in a single workspace, then you start having a performance problem and sometimes cause delays in other rules to be applied to your tickets...


For time-based ones, this happens every XX minutes (it is recommended not to set below 15 minutes) and takes a really long time.

We need to archive the older tickets.


Tickets will remain accessible, but we stop the automation on them.


Please find below the article for the archive process.

How to create an archiving process for Footprints 12.1.X - 20.XX ?




Below are some pointers which need to check-points for better performance:


1.) Has your SQL server been configured as per this article? The setting shown in the article is required for FP to operate optimum condition. Failing to this setting will lead to SQL deadlocks.


2.) Did you optimize your Antivirus/Malware Tool not to interfere with Tomcat and Footprints app folders and files? If yes then we need to exclude and Tomcat and Footprints folder from      Antivirus/Malware scanning. It is not recommended though to exclude the attachment folder.


3.) Did you alter/customize your Tomcat server.xml? Or do you use the out-of-the-box configuration?

     How to configure Tomcat for FootPrints 12.X and 20.X onwards


4.) Did you optimize your java options? I assume you still use the out-of-the-box configuration?

     How to install Java for usage in FootPrints Service Core 12.X and 20.X onwards


5.) When was the last time the database was properly backed up and re-indexed?


6.) I assume the instance is virtualized?  If so, is the hardware/hypervisor under strain in memory and disk IO? The FootPrints application server by default is configured to use up to 450    connections. The database server and application server must be configured accordingly; otherwise, performance will be affected. Note that by increasing the number of connections on the database server, the database host will experience increased CPU, memory and I/O activity so make sure the hosting hardware adequately supports the additional processing load.


7.) Are you sure that the CPU allocated to the server at least 2GHz or higher?  Consider that system requirement minimum requirement mentioned in the article, for better-performing application and database server it is crucial to understand that having more CPU is more beneficial.

       System requirements - Documentation for BMC FootPrints Service Core 12.1 - BMC Documentation

Share This:

          As a member of the Customer Support Team, We are starting a new blogging section for trending topics in each month for Footprints, And that's the reason I thought it would be good to look at what has been trending over the last couple of months since we released of supporting OpenJDK and Tomcat 8.5. I used this data to identify areas and I would like to share some tips I’ve learned from working closely with our Footprints user base.


Install OpenJDK and Tomcat 8.5 for an upgrade or a fresh install of Footprints 20.XX


The following Apache Tomcat versions are supported.


FootPrints VersionTomcat Version
FootPrints 20.18.03 , 20.19.XApache Tomcat Version 8.5.x (64-bit)


Footprints and supported JAVA versions:


FootPrints VersionJava Version
FootPrints 20.19.03OpenJDK 13.0.2
FootPrints 20.19.02OpenJDK 12.0.2
FootPrints 20.19.01OpenJDK 11.0.2


How to install OpenJDK for usage in FootPrints Service Core 20.19.X onwards:



  • Open a command window with admin rights and run the following commands to set the JAVA_HOME and PATH environment variables to point to the correct Java Version

                   setx -m JAVA_HOME "C:\Progra~1\Java\jdk-11.0.2"          

                   setx -m PATH "%PATH%;%JAVA_HOME%\bin";           


Note :-The SETX -m PATH command does not work correctly if the PATH has more than 1024 characters. If you have a larger path you will need to make sure that the path is correct by editing your entire path. Set JAVA_HOME environment variable and add it to the path variable too (make sure in Path variable the location is added at the beginning)

Install and Configure Tomcat 8.5 :


Post-installation steps to configure Tomcat by following these steps:

  • Go to the Tomcat installation folder e.g. “C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin”
  • Start the Tomcat Service Wrapper (Tomcat8w.exe)
  • Select JVM from C:\Program Files\Java\jdk-11.0.2\bin\server\jvm.dll.
  • The options that you should set and the values they are set to depend on your version of Java and the application server that you use (check below table)
  • In the Initial memory pool box, enter a value of 4096.
  • In the Maximum memory pool box, enter a value not more than 80% of your maximum server memory.


FootPrints VersionJava OptionsJava 9 Options
FootPrints 20.19.X-Dfile.encoding=UTF-8



User-added image



For all advanced configuration settings please go through the below article.



Some issues and troubleshooting steps:


1. “unable to find the Catalina/localhost folder” FootPrints 2018 Release 3 requires that administrators manually upgrade Tomcat to version 8.5  If the Tomcat service is not started immediately after installation, the Catalina/localhost folder will not be created under the /conf folder. The absence of the said folder would lead to the failure of the FootPrints upgrade/install. If you have attempted the upgrade and it failed, the subsequent attempts would fail, since the installer attempts to “move” the footprints#servicedesk.xml (or footprints.xml, depending on the name you had given) file. Due to the initial failure, this file will not be available in subsequent attempts. In this scenario, please follow the steps to install Tomcat 8.5 and copy the sample footprints#servicedesk.xml file, with modifications to suit the current setup (installed location, application name, etc) File is attached below.



2. Tomcat service must be configured to use Local System service account

  1. Click Start, point to Administrative Tools, and then click Services.
  2. Right-click on Apache Tomcat service, and then click Properties.
  3. Click the Log On tab, select Local system radio button, and then click Apply.
  4. Click the General tab, and then click Start to restart the service.


User-added image



3. High HTTP traffic and performance issue.


Sometimes you may notice that there is high HTTP traffic, and you may determine that it's because the server is attempting to return high volumes of data back to the browser. In this case, if you are running Tomcat, you have the added option of turning on compression at the application server level. To enable compression adding following attribute in server.xml file in the Connector port="8080"


compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"





Thanks for reading the article. Please rate the blog and add comments to share your experiences.

Filter Blog

By date:
By tag: