Kernel Tech has introduced its web development and software development services, focusing on building reliable systems for business use. The company works on custom web applications, system improvements, and practical solutions that support daily operations. These services are designed to help businesses manage their processes more effectively and maintain stable performance over time.
iTop SAML SSO session expires after ~45 minutes – how to extend session duration?
Figured it out. Was missing the "Model management" section.
Figured it out after. Was missing the "Model management" section.
Hello! We're changing the way we process pull requests from the community so that they can be reviewed more efficiently :D We won't be conducting technical reviews as we used to. New PRs will be reviewed every two weeks by a PM, PO, QA and developer. If it's relevant and can be part of a sprint (PO's decision), they will be added to sprints as "normal" bugs ticket. Depending on the sprint to which the PR is linked, we will add a comment indicating when we will work on the sprint, so the PR author...
Hello, I'm configuring the data collector for Intune. The login and retrieval of information from Intune is working as I can see computers and phones retrived and added to the "raw" CSV files in the data directory of the plugin. The problem i'm facing which is probably easy to figure out is that only some of the computers are beeing added to ITOP. The "iTopPCInTuneCollector-1.csv" file only has a limited amount of computers found but the "iTopPCInTuneCollector raw-1.csv" file as all. Also I see some...
Thank you @jeffrey_bostoen! iTOP upgraded to 3.2.2 :)) GDPR attribute solved.
Solution: https://github.com/Combodo/itop-object-copier/pull/8
Last!
more images 2
more images
Hi everyone, I'd like to share a project I've been working on: a native Android mobile app for iTop field technicians, built with React Native (Expo). What it does: View assigned tickets (UserRequest & Incidents) with status filters and search Full ticket detail: description, public log, attachments, service/subcategory Add notes to the public log directly from the app Change ticket status via stimuli (assign, pending, resolve) Attach photos (camera/gallery) and files to tickets View requester contact...
In case of my custom logic maybe I wouldn’t even need an extra field like "is_being_updated_by_parent" because I add a heading to log entries that I could use to filter them. But I just tested the jb-ticket-merge extension and came across came across this behaviour too. When it creates the new log entries, the notification is triggered again. So instead of modifying all occurrences of log update functions, a more generic solution would be nice. Like a suitable context for the trigger.
Thanks, that was helpful. I have tried a lot and peeked/poked around. My search abilities should be better, because I didn't find a example in the documentation. But using your example I am on to it. Best and thanks again /Jan
Since you're using a user token, did you also assign the "REST User" profile to this account? Where did you see the authorization header format? The documentation provides the following example: curl --location -g --request POST 'https://localhost/itop/Develop/webservices/rest.php?version=1.3&json_data={ "operation": "core/get", "class": "Person", "key": "SELECT Person WHERE email LIKE '\''%.fr'\''", "output_fields": "friendlyname, email" }' \ --header 'Auth-Token: YOURTOKEN' ( Mind that the word...
Hi I am trying to connect to iTop using REST/Web service but do not have a success. I got an Invalid login. I have tried using username(admin)/password (can login) and tokens. I do not think that it is username/password but maybe some other access stuff somewhere: The test call look like this: curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: UserToken $token" \ -d '{ "operation": "core/get", "class": "Change", "key": "", "output_fields": "id, friendlyname, title, status, description",...
CSV Import spacing error.
Thanks for all the help. It seems the error was related to our Azure tenant setup. When requesting access token I got the popup window that said the application needed admin consent even though I have granted it from within the app registration. The user specified in the oauth is just a standard user. Managed to get around this with granting the said account temp access role.
Thanks for all the help. It seems the error was related to our Azure tenant setup. When requesting access token I got the popup window that said the application needed admin consent even though I have granted it from within the app registration. The user specified in the oauth is just a standard user.
Hi Bjarte, A follow-up to Jeffrey's suggestions, also check if the user you used to create the token (the email address you used to log into Microsoft Azure) is the same as the one you use as the mailbox user
Verify in Microsoft Entra (Azure) - Apps (the place where you registred the application) whether the 3 APIs mentioned above, are configured for this application. Verify if the mailbox user (linked to the OAuth client) needs proper permissions on the mailbox. Verify if the mailbox folder name is fully correct. It may appear with a different/localized name in Microsoft Outlook.
Struggling to setup OAuth authentication with Exchange Online. I seem to get the "Access token generated" but when I try to fetch email is shows "Failed to initialize the mailbox: xxxx@xxxx.xx. Reason: cannot change folder, maybe it does not exist". Service principal is created and permission is added to mailbox folder. I've tried all different names for the folder but always end up with the same error message. Any help is appreciated. Thanks in advance. Error log shows: 2026-03-19 14:54:12 | Debug...
I suppose you could "hack" around it. Adjust the logic where it updates the log entries of the child tickets to first set an attribute value (custom attribute maybe) that indicates it's updating from the parent ticket. Adjust the notification trigger to consider excluding this value ("is_being_updated_by_parent") Then in the same function as the first step, at the end, update the attribute value of the child ticket to something else again ( is_being_updated_by_parent > "no" )
We intentionally propagate log entries from tickets to their parent project. We need this logic.
First things first - do you even want this kind of propagation of the log entry? If not, this can be removed.
Hello, I use TriggerOnObjectMention on class Ticket. If someone writes @NameOfPerson, an e-mail is sent. When I mention a person in a public log entry in a ticket (user request), the entry is copied to logs of all child tickets. Every copy, every automated log update, triggers the notification too. What filter or other setting could I use do avoid multiple notification from child or parent objects?
Hello, We are using the Approval Process Automation extension 2.3.2 Approval Process Automation iTop Documentation and we have just discovered that when we specify the reason for a validation refusal in the portal, it is not recorded in the Approval_scheme table in the abort_comment column. This is what the SDMs do. Within the ticket in the console, in the "Approval Status" tab, we do see the tooltip with the message submitted in the portal, so it is recorded somewhere, but not in the correct location....
Hello, We are using the Approval Process Automation extension 2.3.2 Approval Process Automation iTop Documentation and we have just discovered that when we specify the reason for a validation refusal in the portal, it is not recorded in the Approval_scheme table in the abort_comment column. This is what the SDMs do. Within the ticket in the console, in the "Approval Status" tab, we do see the tooltip with the message submitted in the portal, so it is recorded somewhere, but not in the correct location....
Hi, thanks for this! is it still necessary in 2026 or this option is possible in itop last version without extension ?
What I did: Add an AttributeExternalKey and a 1:1 relationship to class WBS (project management) pointing to class Ticket Change a couple of attributes of WBS to AttributeExternalField to show the contents of the coupled ticket. Creating a new WBS object using the large plus works fine. The relationship and all logic works. But when the WBS creation form is opened from a user action (object-copier) the create button becomes unavailable/grey as soon as I type in a ticket in AttributeExternalKey field...
I finally made it. For anyone who needs to export and import objects to overcome the difficulties of changing a class' parent class, I ran into the following issues: When deleting the objects that are to be migrated: While inline images seem to stay in the database for the configured lifetime, attachments are deleted immediately. I had to export and import attachments too and had to update the IDs of the objects they belong to. As the docs say https://www.itophub.io/wiki/page?id=latest:advancedtopics:rest_json#how_to_specify_a_value...
Hi @cisou, thanks for the reply. But I have a question. Considering that when the user clicks on a subcategory in the portal, the ticket probably doesn't yet exist in the database, will this approach be able to fill out the form? I noticed that the form is partially rendered on the server, but it wasn't very clear to me.
Hi @cisou, thanks for the reply. But I have a question. Considering that when the user clicks on a subcategory in the portal, the ticket probally doesn't yet exist in the database, will this approach be able to fill out the form? I noticed that the form is partially rendered on the server, but it wasn't very clear to me.
Hi, I would have simply add a callback event on EVENT_DB_COMPUTE_VALUES, and a dependency between the UserRequest description field and the servicesubcategory_id . This callback method would do this public function EvtComputeValues(Combodo\iTop\Service\Events\EventData $oEventData) { if ($oEventData->Get('is_new')) { $iSubcategory = $this->Get('servicesubcategory_id'); if ($iSubcategory >0) { $oSubcategory = MetaModel::GetObject('ServiceSubcategory', $iSubcategory, true, true); $this->SetIfNull('description',...
Hi, I would have simply add a callback event on EVENT_DB_COMPUTE_VALUES, and a dependency between the UserRequest description field and the servicesubcategory_id . This callback method would do this public function EvtComputeValues(Combodo\iTop\Service\Events\EventData $oEventData) { if ($oEventData->Get('is_new')) { $iSubcategory = $this->Get('servicesubcategory_id'); if ($iSubcategory >0) { $oSubcategory = MetaModel::GetObject('ServiceSubcategory', $iSubcategory, true, true); $this->SetIfNull('description',...
Hi, I would have simply add a callback event on EVENT_DB_COMPUTE_VALUES, and a dependency between the UserRequest description field and the servicesubcategory_id . This callback method would do this public function EvtComputeValues(Combodo\iTop\Service\Events\EventData $oEventData) if ($oEventData->Get('is_new')) { $iSubcategory = $this->Get('servicesubcategory_id'); if ($iSubcategory >0) { $oSubcategory = MetaModel::GetObject('ServiceSubcategory', $iSubcategory, true, true); $this->SetIfNull('description',...
Hello, I'm developing an extension for iTop to preload a text template into the description field of a new ticket on the portal. Currently, my approach is: Add a new field of type AttributeHTML to the ServiceSubcategory class. Using a hook, inject a JavaScript file into the portal. The JavaScript file subscribes to the 'shown.bs.modal' event, which is the event called by the portal to open the new ticket modal. When the event is triggered, the script searches for the subcategory select value in the...
My Idea to preserve inline images is to delay the garbage collector by making a configuration entry: draft_attachments_lifetime = 86400. Maybe this will work but I'm already struggling with REST API: When I export WorkOrder the json structure of logs is like this: "log": { "entries": [ { "date": "2026-03-09 16:22:52", "user_login": "Hans Wurst", "user_id": "550", "message": "And another image:", "message_html": "<p>And<b>another<b> imgage:</p><figure class=\"image\"><img style=\"aspect-ratio:291/243\"...
Ah, a common mistake when downloading off github! I'm glad you fixed it! Take care, Stephen
thanks @Stephen I have installed the extension on itop-3.2.1 and after i upgraded to 3.2.2 but still the same error ho sorry i found my mistake !! i download the extension and unzip it, it has the version inside the directory name so i have .../env-production/itop-portal-new-look-for-3.2-lts-1.0.1 and it ask for a directory without the version ! correcting this and it works, sorry for this !
Hi Johan, I've never seen this error before, can you tell me which iTop version you use ? Do you have any extra portal or customization to the portal/extra brick ? Can you confirm me that the file /var/www/html/cmdb/web-test/env-production/itop-portal-new-look-for-3.2-lts/templates/helpers/loader.html.twigexists ? Did you get the extension from iTop Hub or through a git clone? Thanks Stephen
Hello, i have installed the extension Portal new look for 3.2 LTS (version 1.0.1) since i can't use anymore the portal it works for cmdb but not the portal i have an error The server returned a "500 Internal Server Error". in error log i see : 2026-03-05 16:27:36 | Error | 1 | Unable to find template "itop-portal-new-look-for-3.2-lts/templates/helpers/loader.html.twig" (looked into: /var/www/html/cmdb/web-test/env-production) in "itop-portal-base/portal/templates/layout.html.twig" at line 370. |...
bump.
I'm glad you fixed it! Thanks for sharing your solution Take care Stephen
Hi, thank you for your feedback. I've found the issue: after renewing the secret in Entra, I've regenerated the access token in iTop, but I did this with my own account in stead of the account of the mailbox. After regenerating the access token with the mailbox account, it was working again. I've found this by adding the debug level and analyzing the access token in https://jwt.ms/. It showed my own upn as upn, while in acceptance environment (where it was still working), it was the upn of the mailbox...
Hi NOC, Indeed oAuth IMAP mail is a bit slower than basic auth IMAP and should be used with folders that are cleaned regularly. Regarding your issue, did you create a new OAuth client in iTop objects or did you modify the previous one ? Your initial issue with IMAP was likely an expired token that could not refresh itself. Your new issue with SMTP could be: Your OAuth client object have wrong scopes (SMTP scope is needed) You have none or multiple OAuth client objects with Used for SMTP value as...
We're using IMAP and SMTP with oAuth for a mailbox in Exchange Online. Service Desk reported that the mail to ticket import (with IMAP) was not working anymore. As part of the troubleshooting, I've created a new client secret and added this to the OAuth Mail Access for Microsoft Azure config. After that, sending from iTop (with SMTP) did not work any more. In the mean time, we've found that the ticket import was still working, but with a delay. This was caused by the number of mails in the mailbox...
I just finished a deliverable (WBS) and it moved to yesterday in Gantt chart. This seems strange to me.
I just finished a deliverable (WBS) and it moved to yesterday in Gantt chart. This seems strange to me. !
Gantt chart - inaccurate alignment of bars to time axis
This extension received some major love the last couple of weeks! It now features a GUI, with additional help texts to make it more user friendly at the same time. You can now set up Automation Scenarios. A scenario applies to one or more objects meeting a condition (OQL query). A scenario can be triggered in different ways: Menu action (on object details page or list view) Event listener (on object creation, modification) Through an action linked to an iTop trigger Through an API endpoint Trigger...
bump
I am afraid that this is not planned to be modified. I understand your point to move the "Log off" as the last option. Do you want to propose a more logical order and grouping for this User menu?
The dictionary entries to use are the following (remove tab and fieldset) <?php Dict::Add('EN US', 'English', 'English', array( 'vpc_main' => 'General information', 'vpcVirtualMachines' => 'Instance List', ));
Interesting question, not sure there is a mean to do this. I suspect that it is using the alphabetic order of the final classes and choose the first one. A workaround is to propose one creation menu per type of Change.
I got it! here is the working version: <item id="tab:tabCustomer"> <rank>50</rank> <items> <item id="orgFullName"><rank>20</rank></item> <item id="orgName"><rank>30</rank></item> </items> </item> 'tabCustomer' => 'Customer', Thanks for your help.
Sorry Vicent, I don't get the point... Are you suggesting to remove field-set and tab keyword from id of the item element? Like this: <item id="General Information"> not working.... Thanks
The dictionary entries to use are the following (remove tab and fieldset) 'General information', 'vpcVirtualMachines' => 'Instance List', )); ?>
Unfortunately is not working. The label of tha tab is Customer not General information My code: Tab Customer <item id="tab:Customer"> <rank>50</rank> <items> <item id="orgFullName"><rank>20</rank></item> <item id="orgName"><rank>30</rank></item> </items> </item> </items> Dictionary ... Class:vpcVirtualMachines/Attribute:tab:Customer' => 'General information',
It is simple you have to do like this 'Class:vpcVirtualMachines/Attribute:tab:vpc_mainn' => 'General information', 'vpcVirtualMachines' => 'Instance List',
It is simple you have to do like this Item always should bi Attrubute in dictonary 'Class:vpcVirtualMachines/Attribute:tab:vpc_mainn' => 'General information', 'vpcVirtualMachines' => 'Instance List',
Hello, I was able to add a new tab, on a custom class, but I cannot rename the labels of the tab and fieldset using dictionary. datamodel.classname.xml <details> <items> <item id="tab:vpc_main"> <rank>10</rank> <items> <item id="fieldset:vpcVirtualMachines"> <rank>10</rank> <items> <item id="name"><rank>10</rank></item> <item id="org_id"><rank>20</rank></item> </items> </item> </items> </item> </items> </details> dictionary/en.dict.classname.php <?php Dict::Add('EN US', 'English', 'English', array(...
It is called en.dictionary.itop.ui.php and is located in the itop root folder /var/www/html/itop/dictionaries. https://github.com/Combodo/iTop/compare/develop...adamberndt47:iTop:develop blox fruits
Hi Peter, Thank you for sharing this! have you continued to work on it? FYI, our partner ITOMIG has created a dedicated n8n node for iTop which might be helpful for the implementation of your workflow. We are looking for workflow use cases to implement, so I would be interested in your feedbacks (why you did it, if you have other needs, etc.) If you agree, I'll send you a private message.
I want to know if there is a way to modify the search widget type for an attribute. In our case, we made a new class for all enum values, and using an AttributeExternalKey and the filter tag, we are able to return only the relevant enum fields for a given class. The issue comes with the search widget type, it will behaves as the normal ExternalKey one, and return all EnumValues. We want to modify it so for these "custom" enum externalkeys, it would return the filter set on the field, over a simple...
It's solved now, thanks!
Hi there! I have awuestion related to the OpenID extension. I already make the basic configuration for the extension and the azure environment, but when Im trying to login in the platform I receive the message "User Not Allowed", I verify the login information, extension configuration, but I dont found the issue. The application make the valiation with AD and its working, but I think iTOP have a problem with the mapping. Do you have any suggestions for this issue?
How to change the default 'Emergency change' to 'Normal change' when creating new change?
Hello, Thanks a lot for your feedback I'm creating a bug. Best regards,
This icon is a reminder of your user preference, it is always displayed. It might be easier to understand if it was only displayed when the class has an obsolescence logic.
SAML extension - Libxml2 Canonicalization error can bypass Digest/Signature validation
Ok, but why does it show an icon in the right top that it filters obsolete data? It is at least inconsitant or a gui bug.
in itop 3.2.2-1 obsolete data is shown but it should be filtered based on my preference
The Service class has no "obsolescence" logic defined in iTop standard. It's a class property which is not equivalent to status=obsolete, also it is often the case.
in itop 3.2.2-1 obsolete data is shown but it should be filtered based on my preference
This is the USER_MENU (bottom left click on Avatar) and not the standard OQLMenuNode.
Yes you can change sorting by custom extension where you change rank of manual as per sorting <menu id="UserRequest:MySupportRequests" xsi:type="OQLMenuNode" _delta="must_exist"> <rank>9</rank> </menu> <menu id="UserRequest:EscalatedRequests" xsi:type="OQLMenuNode" _delta="must_exist"> <rank>10</rank> </menu>
Yes you can change sorting by custom extension where you change rank of manual as per sorting <rank>9</rank> <menu id="UserRequest:EscalatedRequests" xsi:type="OQLMenuNode" _delta="must_exist"> <rank>10</rank> </menu>
Is there any way to reorder or reorganize the User menu (Without having to customize the core code)? The existing framework functions (iPopupMenuExtension) allow for adding an item or changing the text label via a dictionary string, but nothing to redo it… iTop is great. Amazing. But there are so many little UI issues, inconsistencies and inefficiencies all over the application, causing a few seconds here and there that really add up when a team of 20-30 people uses the web application all day. The...
Hii Team, I am facing an SLA issue in iTop. Problem: SLA TTO/TTR is not calculating. In the ticket it shows: SLA tto passed: no SLA tto over: 0s SLA ttr passed: no SLA ttr over: 0s Cron status: When running cron manually: /usr/bin/php8.1 /var/www/html/webservices/cron.php --auth_user=admin Message shows: "Already running..." Environment: iTop version: 3.x PHP: 8.1 OS: Ubuntu DB: MariaDB What I checked: SLA policy is attached to ticket Resolution delay is visible Cron job configured but SLA not updating...
Hi Team, I am getting below issue , please help me to resolve Resolution delay 25min 4s SLA report SLA tto passed no SLA tto over 0s SLA ttr passed no SLA ttr over 0s I closed ticket 25min 4s. but its taking delay resolution and sla also not working Thanks Bhaskar
Hi Team, I am getting below issue , please help me to resolve Resolution delay 25min 4s SLA report SLA tto passed no SLA tto over 0s SLA ttr passed no SLA ttr over 0s I closed ticket 25min 4s. but its taking delay resolution and sla also not working Thanks Bhaskar
Hi, it's been a while. I had to move on to other things and this topic got left hanging. I appreciate the help I received at the time, Jeffrey. Getting back to the topic, the final XML looks like this and it still doesn't hide the buttons <?xml version="1.0" encoding="UTF-8"?> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3"> <module_designs> <module_design id="itop-portal" xsi:type="portal"> <bricks> <brick id="url-nuevo-ticket" xsi:type="Combodo\iTop\Portal\Brick\UrlBrick"...
Hi, it's been a while. I had to move on to other things and this topic got left hanging. I appreciate the help I received at the time, Jefreey. Getting back to the topic, the final XML looks like this and it still doesn't hide the buttons <?xml version="1.0" encoding="UTF-8"?> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3"> <module_designs> <module_design id="itop-portal" xsi:type="portal"> <bricks> <brick id="url-nuevo-ticket" xsi:type="Combodo\iTop\Portal\Brick\UrlBrick"...
Hi, it's been a while. I had to move on to other things and this topic got left hanging. I appreciate the help I received at the time, Jefreey. Getting back to the topic, the final XML looks like this and it still doesn't hide the buttons <?xml version="1.0" encoding="UTF-8"?> <itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3"> <module_designs> <module_design id="itop-portal" xsi:type="portal"> <bricks> <brick id="url-nuevo-ticket" xsi:type="Combodo\iTop\Portal\Brick\UrlBrick"...
Take your approvals to the next level with this new extension for iTop by Combodo . Not only does it allow you to configure multiple approval levels; it also brings brand new options to make approval as efficient as possible. Wait for all votes; continue as soon as a majority vote has been reached; or after a predefined number or percentage of approvals, rejections, votes. More info: https://jeffreybostoen.be
You have my vote for backlog #4933
You'd have to start from your backup, I'm afraid. You can dive through the database to restore specific info with some luck. But deleted data is just deleted.
hi I was trying to delete a template that was attached /connected to an incident, I didn't know deleting it would also delete all the incidents that was using the template.. is there away to restore the deleted incidents witjout having to make a full backup recovery of a whole working day? please help
Take your approvals to the next level with this new extension for iTop by Combodo . Not only does it allow you to configure multiple approval levels; it also brings brand new options to make approval as efficient as possible. Wait for all votes; continue as soon as a majority vote has been reached; or after a predefined number or percentage of approvals, rejections, votes. More info: https://jeffreybostoen.be
Take your approvals to the next level with this new extension for iTop by Combodo . Not only does it allow you to configure multiple approval levels; it also brings brand new options to make approval as efficient as possible. Wait for all votes; continue as soon as a majority vote has been reached; or after a predefined number or percentage of approvals, rejections, votes. More info: https://jeffreybostoen.be
Provide the AddCheckIssue message on create error in portal
The tooltips added are for the admin side, examples of additions: 'Class:ServiceSubcategory/Attribute:requesttemplates_list+' => 'If they are multiple, the end user will pick and fill a single template, but not all', 'Class:RequestTemplate/Attribute:servicesubcategory_id+' => 'A request template applies to one and only one service subcategory', 'Class:TemplateField/Attribute:input_type+' => 'Date: A pure date Date and time: A date and time Drop-down list: A value to select within \'Values (OQL or...