Hi Creatio Community,

We're encountering a puzzling issue on a Freedom UI List Page (specifically, our Invoices_ListPage) when trying to run a business process (IWVoid_API_POST) using a custom JavaScript handler. The goal is to test the business process by explicitly passing a hardcoded InvoiceId, as requested for a specific testing scenario where the button is not on the individual record's form page.

Our Setup:

  1. The Button (Menu Item on List Page's ActionButton):

    We've added a crt.MenuItem to the ActionButton on our Invoices_ListPage. This menu item is intended for testing and is configured to trigger a custom handler:

    JSON

     

    // In viewConfigDiff of Invoices_ListPage.js
    {
        "operation": "insert",
        "name": "TargetVoidButton", //
        "values": {
            "type": "crt.MenuItem",
            "caption": "Test Void BP (Hardcoded ID)", 
            "icon": "debug-icon",
            "visible": true,
            "clicked": {
                "request": "crt.HandleButtonClickRequest",
                "params": {
                    "buttonName": "RunTargetVoidProcessHandler" 
                }
            }
        },
        "parentName": "ActionButton",
        "propertyName": "menuItems",
        "index": 3 
    }
  2. The Handler (in handlers array of Invoices_ListPage.js):

    This handler is designed to run the IWVoid_API_POST process with a specific, hardcoded InvoiceId.

    JavaScript

     

    // In handlers array of Invoices_ListPage.js
    {
        request: "crt.HandleButtonClickRequest",
        handler: async (request, next) => {
            if (request.buttonName === "RunTargetVoidProcessHandler") { 
                console.log("RunTargetVoidProcessHandler triggered.");
                Terrasoft.showInformation("Test: Running process with hardcoded ID. Check console.");
     
                const processName = "IWVoid_API_POST";
                const hardcodedInvoiceIdForTest = "3c2b6d9f-4c1e-4364-99f2-53956562b606"; 
                const parameterNameInProcess = "InvoiceId"; 
     
                console.log(`Test: Attempting to run BP '<span class="math-inline">\{processName\}' with EXPLICIT HARDCODED ID '</span>{hardcodedInvoiceIdForTest}' for parameter '${parameterNameInProcess}'.`);
     
                try {
                    const response = await request.$context.executeRequest({
                        type: "crt.RunBusinessProcessRequest",
                        params: {
                            processName: processName,
                            processParameters: {
                                [parameterNameInProcess]: hardcodedInvoiceIdForTest
                            },
                            saveAtProcessStart: false, 
                            showNotification: true 
                        }
                    });
     
                    console.log("Test: BP execution request completed. Response:", response);
     
                    if (response && response.success === true && response.processId && response.processId !== '00000000-0000-0000-0000-000000000000') {
                        const successMsg = `Test: BP '${processName}' (ID: ${response.processId}) initiated. Check Process Log.`;
                        console.log(successMsg);
                        request.$context.showInformationDialog?.(successMsg);
                    } else {
                        let errorMsg = `Test: Failed to start BP '${processName}'.`;
                        let serverDetails = (response && response.errorInfo && response.errorInfo.message) ? response.errorInfo.message : "Details unavailable or process not found (zero ID / success:false).";
                        errorMsg += ` ${serverDetails}`;
                        console.error(errorMsg, "Full response:", response);
                        request.$context.showErrorDialog?.(errorMsg);
                    }
                } catch (error) {
                    console.error(`Test: Exception for BP '${processName}':`, error);
                    let exceptionMsg = (error instanceof Error && error.message) ? error.message : "Client-side exception.";
                    if (error.errorInfo && error.errorInfo.message) {
                        exceptionMsg = error.errorInfo.message;
                    }
                    request.$context.showErrorDialog?.(`Test: Error triggering BP: ${exceptionMsg}`);
                }
                return; 
            }
            return next?.handle(request);
        }
    }

The Problem:

When we click the "Test Void BP (Hardcoded ID)" menu item, the handler triggers, and the client-side logs show the crt.RunBusinessProcessRequest is being prepared correctly with processName: "IWVoid_API_POST" and the hardcoded InvoiceId.

However, the server responds with:

{
  processId: '00000000-0000-0000-0000-000000000000', 
  processStatus: 0, 
  resultParameterValues: null, 
  executionData: null, 
  success: false, 
  errorInfo: {
    errorCode: "ItemNotFoundException",
    message: "Item process schema \"\" not found.", // Note the empty quotes for schema name
    stackTrace: null
  }
}

The key error is <strong>Item process schema "" not found.</strong>

What We've Tried:

  • Confirmed the schematic name (Code) of our business process is indeed IWVoid_API_POST.
  • Confirmed the input parameter in the BP designed to take the ID is named InvoiceId.
  • Repeatedly saved, compiled, and published the IWVoid_API_POST business process and ensured it's marked as "Active."
  • Checked the package containing the process for any errors and recompiled the package.
  • Performed thorough browser cache clearing and hard refreshes (Ctrl+F5).
  • We also have another menu item on the same list page ("VoidInvoice") that uses a declarative crt.RunBusinessProcessRequest with processRunType: "ForTheSelectedRecords" and parameterMappings: { "InvoiceId": "Id" }. When a record is selected and this menu item is clicked, it successfully starts the <strong>IWVoid_API_POST</strong> process (verified in Creatio Process Log with a non-zero instance ID). This makes the current error even more puzzling.

Our Questions for the Community:

  1. Why would the ProcessEngineService report Item process schema "" not found (with empty quotes for the schema name) when the processName: "IWVoid_API_POST" is explicitly and correctly provided in the params of crt.RunBusinessProcessRequest from our custom handler?
  2. Is there any known difference in how process names are resolved or how schemas are looked up by the server when crt.RunBusinessProcessRequest is invoked programmatically from a handler with processParameters explicitly set (using a hardcoded ID), versus when it's invoked declaratively with processRunType: "ForTheSelectedRecords" or processRunType: "ForTheSelectedPage"?
  3. Are there any deeper caching mechanisms (server-side, metadata) or specific registration steps for business process schemas that we might be missing, which could lead to this behavior only for the explicit parameter call?
  4. Has anyone encountered a similar situation where a process is findable/runnable via one SDK invocation method (declarative, context-based) but not another (programmatic handler, explicit parameters) from the same Freedom UI page type?

We are unable to access detailed server-side application logs for this specific environment at the moment, which is hampering deeper diagnosis from our end.

Any insights, suggestions, or similar experiences would be greatly appreciated!

Thank you!

Like 0

Like

1 comments

Hi Andrew,

The behavior you described where the system responds with Item process schema "" not found despite providing the correct process name can occur when certain required parameters are missing during the execution of a business process from a handler. Specifically, when using crt.RunBusinessProcessRequest from a crt.HandleButtonClickRequest handler, the backend expects additional context that is typically provided automatically during declarative invocations.

To ensure that the process schema is correctly identified and executed, it is important to explicitly include the processRunType, the recordIdProcessParameterName. These parameters provide the necessary linkage between the UI context and the process runtime.

Below is an example of a working implementation where a business process is successfully launched from a button on a Freedom UI page. The button configuration and handler explicitly define all required fields:

Button configuration:
{
 "operation": "insert",
 "name": "Button_7y0uys4",
 "values": {
   "layoutConfig": {
     "column": 1,
     "row": 2,
     "colSpan": 1,
     "rowSpan": 1
   },
   "type": "crt.Button",
   "caption": "#ResourceString(Button_7y0uys4_caption)#",
   "color": "outline",
   "disabled": false,
   "size": "large",
   "iconPosition": "only-text",
   "visible": true,
   "clicked": {
     "request": "crt.HandleButtonClickRequest",
     "params": {
       "buttonName": "RunTestProcess",
       "processName": "UsrTestProcessInvoiceAdded",
       "processRunType": "ForTheSelectedPage",
       "recordIdProcessParameterName": "InvoiceId"
     }
   }
 },
 "parentName": "SideAreaProfileContainer",
 "propertyName": "items",
 "index": 1
}

Handler logic:
{
 request: "crt.HandleButtonClickRequest",
 handler: async (request, next) => {
   if (request.buttonName === "RunTestProcess") {
     const handlerChain = sdk.HandlerChainService.instance;
     const result = await handlerChain.process({
       type: "crt.RunBusinessProcessRequest",
       processName: "UsrTestProcessInvoiceAdded",
       processRunType: "ForTheSelectedPage",
       recordIdProcessParameterName: "InvoiceId",
       $context: request.$context
     });

     if (result.success) {
       console.log("The process was successfully executed!");
     } else {
       console.log("Exception: " + (result.errorInfo?.message || "Unknown issue"));
     }

     return;
   }
   return next?.handle(request);
 }
}

Answers to your questions:

1. Why would the ProcessEngineService report Item process schema "" not found (with empty quotes for the schema name) when the processName: "IWVoid_API_POST" is explicitly and correctly provided in the params of crt.RunBusinessProcessRequest from our custom handler? 

- This usually happens if processRunType, recordIdProcessParameterName are not passed when triggering the process from a handler. These parameters are essential for correctly resolving the process schema in the runtime context.

2. Is there any known difference in how process names are resolved or how schemas are looked up by the server when crt.RunBusinessProcessRequest is invoked programmatically from a handler with processParameters explicitly set (using a hardcoded ID), versus when it's invoked declaratively with processRunType: "ForTheSelectedRecords" or processRunType: "ForTheSelectedPage"? 

- Yes. In declarative calls, Creatio automatically adds all required metadata. In programmatic calls (handlers), this metadata must be passed manually, especially processRunType and recordIdProcessParameterName.

3. Are there any deeper caching mechanisms (server-side, metadata) or specific registration steps for business process schemas that we might be missing, which could lead to this behavior only for the explicit parameter call? 

- In general, no special registration is required if the process is active and compiled. However, if the process was recently created or modified, reload the page and make sure that the changes in the process were saved.

4. Has anyone encountered a similar situation where a process is findable/runnable via one SDK invocation method (declarative, context-based) but not another (programmatic handler, explicit parameters) from the same Freedom UI page type?

- Yes, this can happen if the required context parameters are not included in the handler call. Declarative calls handle this automatically, whereas in handlers you must explicitly set them.

Show all comments

Hello,

 

I have an API where I receive some data that I want to insert in a table. The problem is that the table is not in the default schema 'dbo'. The API fails because it says that it cannot find the object 'dbo.LIBRA.MBK_TABLE'. It should read only 'LIBRA.MBK_TABLE'.
 

}
       private int ExecuteInsert(string customerId, DateTime lastConnectionDate)
        {
            var select = new Select(SystemUserConnection)
                               .Column(Func.Count("RecId"))
                               .From("LIBRA.MBK_TABLE")
                               .Where("RecId").IsEqual(Column.Parameter(customerId)) as Select;
           int recordExists = select.ExecuteScalar();
            if (recordExists == 0)
            {
                var insertAccount = new Insert(SystemUserConnection)
                                        .Into("LIBRA.MBK_TABLE")
                                        .Set("RecId", Column.Parameter(customerId))
                                        .Set("LastConnectionDate", Column.Parameter(lastConnectionDate));
                int rowsAffected = insertAccount.Execute();
                if (rowsAffected == 0)
                {
                    throw new Exception("Insert failed: no rows affected.");
                }
                return rowsAffected;
            }
            return 0;
        }

I tried to put .From("LIBRA", "MBK_TABLE") and to put .SchemaName("LIBRA"), but the same error appears.

 

Is there another way of doing this?

Like 0

Like

2 comments

Perhaps you'll need to use direct SQL statements for this? You can see how to do that here: https://customerfx.com/article/executing-direct-sql-statements-in-a-process-or-configuration-web-service-in-creatio-formerly-bpmonline/

Ryan

An additional option to what Ryan proposed - create a table to which you can add data with an API and on the DB level create a trigger that will automatically insert record into the table from the needed namespace in the database.

Show all comments


Hi,
After upgrading Creatio from version 8.1.0 to 8.1.5, I encountered a strange issue. The first symptom is that the calendar stopped working and cannot be displayed at all. The browser console shows the following error: "Uncaught Error: Script error for 'Calendar_ListPage'." While analyzing the issue, I discovered that Calendar_ListPage is not registered in the Terrasoft.configuration.RootSchemaDescriptor object. However, the calendar can still be accessed through the designer.

Another, more serious problem is that performing any actions in the system has become very difficult. Attempting to save any view or object results in the following error:

 

Item with name "Calendar_ListPage" not found

 

I tried to resolve this issue, but in the meantime, I needed to create a new object. I created it through the application hub with the entire section. Then I attempted to rename it. From that moment, I started getting the same error message throughout the system, but this time related to the original name of my object.

I’m not sure if this is important, but the instance works at Linux and has enabled file design mode.

Like 0

Like

2 comments

Hello,
 

In version 8.1.1, the base page Calendar_FormPage was renamed to Calendar_ListPage in the product. 

If you had overrides for this page in your custom packages, the override will not be renamed, which will cause a structure generation error, as the schema inheriting from another schema will now have a different name.
 

You need to check if there is a schema named Calendar_FormPage in your system. If such a schema exists, rename it to Calendar_ListPage and also update the Define block in the page code accordingly.

Example:
Before

After


(Before this changes you need temporary clead SchemaNamePrefix system setting)
 

If the issue is not related to this, please contact our support team for assistance - support@creatio.com


Best regards,
Pavlo!

Hello, it works! Thank you very much :)
Is there any way to stay informed about such changes to avoid similar problems in the future? I didn’t find anything about this in the release notes.

Show all comments

Hi there - I'm trying to figure out where to put this schema in Creatio configuration to allow for a button in mobile.  I've found this article but it isn't clear how/where to apply this:

 

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/mobile-development/customization/freedom-ui/customize-page/references/common-components

 

Thank you!

Like 0

Like

2 comments

Hi!

Please contact our support team at support@creatio.com and describe your situation to us. We will be happy to help you. 

Best regards,
Anton

Hello,

In this article, you can find the description of the page, on which the button component should be added.

Show all comments

Dears

 

Due those schemas usually have the EmailBody binded and this is a large string is very difficult to found the name of the binded templates, this is due Creatio show its names centered in the row where they are.

 

Suggestion, could export the data binded in those schemas or select which columns to see (not binded ones),

 

For example see the image

Thanks

3 comments

Good Idea!

 

Although I do have a strong technical background, I would prefer a more user-friendly "no-code-way" of creating data bindings.

 

I like the flexibility of the existing data binding feature, but it would be awesome for a lot of people to have the functionality to select what they want to bind and the system does the heavy lifting and generates the technically necessary data bindings.

 

For instance, if the element that should be bound to the package is an email template, then you would just select the template and the system creates the bindings for you. The same applies to workplaces, dashboards, reports (incl. reports table and the word template), lookups (including their manager), etc.

Robert Pordes,

 



Yes please !



Very well put. For a nocode tool, there still a lot to be implemented. A lot of great new stuff with Freedom UI but still quite some things missing for it to be truely nocode.



Cheers,



Damien

 

Hello,

 

Thank you for your suggestion, we have registered this idea for our R&D team and such functionality may appear in future.

Show all comments

Where can i see the Schema details in the Creatio to edit it.

Like 0

Like

1 comments

Hello,

 

In Creatio, you can access the Schema details and make edits in the Configuration section

Show all comments

Hi Team,

I have created a simple Dasboard Widget on AccountPageV2 (printscreen from Section Wizard) on Environement 1.

However when i deploy the package, the created dashboard widget doesnt appear in the Environment 2.

I open the section wizard from Environment 2  and the dashboard looks like this:

 

 

Form Console I get:

How can I fix this ?

Sasori

Like 0

Like

2 comments

Hi community!

Any update on this issue ?

Sasori

Hello Sasori,



When dashboards are added to an edit page, the corresponding records are created in SysWidgetDashboard and SysWidgetDashboardLcz tables.



If a dashboard is added not to an edit page but to the "Dashboards" tab, then records will be added in the SysDashboard and SysDashboardLcz tables, respectively.

.

Also, there is also a corresponding binding of these data to the package which was set as a current package when the dashboards were created.



The thing is that dashboards are localizable system objects. When a dashboard is created, records are created in two tables:

- a record about a dashboard created in the localization, which corresponds to the base culture of the system, is created in the [SysWidgetDashboard]/[SysDashboard] table;

-records about dashboards of all other localizations are created in the [SysWidgetDashboardLcz]/[SysDashboardLcz] table and are linked to a record in the [SysWidgetDashboard]/[SysDashboard] table by the [RecordId] column.



So basically, all you need to do is to prepare a package which will contain all the needed data bindings and SQL scenarios which will perform the records' entry to the tables mentioned above.



More information on data binding is on our academy.

Also, knowledge of SQL might be needed in order to find the needed dashboard in the database, although you can always create a lookup and search via UI. 

Show all comments

What schema types CANNOT be configured using the third-party editors in the file system development mode? (Client schemas, Object schemas , schemas with a source code , process schemas)

Can someone explain to me please which can not be configured and why !

Like 0

Like

1 comments

If you think of it this way, which schemas are "text" that are easily understood by any 3rd party text editor? Client schemas are Javascript and source code schemas are C#. Both easily understood and editable by a text editor and can be edited by a 3rd party editor. However, object schemas in Creatio use a UI to add columns etc, it isn't just text. Also processes in Creatio have a complete UI process designer, it is not just text. Both objects and processes cannot be edited by a 3rd party editor since it wouldn't understand all the rest of the stuff the designer UIs in Creatio do. 

Ryan

Show all comments

Hello Creatio team,

How can i activate the Section Wizard option for the followin detail:

This feature is deactivated in the PlanningAccountDetailV2 schema part of Field package

I need to activate the wizard for this task:

Deactivate the filter that filters the accounts based on the selected employee.

Like 0

Like

2 comments
Best reply

Hello Sasori,

 

In order to deactive the filter based on employee it is just needed to click on the cross sign, and you will see all the accounts.

 

Alternatively you can create a replacing view model for the schema PlanningAccountDetailV2 and modify the method getFilters according to your needs.

 define("PlanningAccountDetailV2", [],

    function() {

        return {

            entitySchemaName: "Account",

            attributes: {},

            methods: {

                getFilters: function() {

                     this.callParent(arguments);

                    var filters = this.sandbox.publish("GetSectionFilters");

                    if (!this.Ext.isEmpty(filters.filtersValue)) {

                        this.setFilter(filters.key, filters.filtersValue);

                    }

                }},

            diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

        };

    }

);

 

As for the section wizard, this whole detail was created with code, so it would be not possible to enable it. But the first option by clicking the cross sign would be the more simple one.

 

Best regards,

Dariy

 

Hello Sasori,

 

In order to deactive the filter based on employee it is just needed to click on the cross sign, and you will see all the accounts.

 

Alternatively you can create a replacing view model for the schema PlanningAccountDetailV2 and modify the method getFilters according to your needs.

 define("PlanningAccountDetailV2", [],

    function() {

        return {

            entitySchemaName: "Account",

            attributes: {},

            methods: {

                getFilters: function() {

                     this.callParent(arguments);

                    var filters = this.sandbox.publish("GetSectionFilters");

                    if (!this.Ext.isEmpty(filters.filtersValue)) {

                        this.setFilter(filters.key, filters.filtersValue);

                    }

                }},

            diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/

        };

    }

);

 

As for the section wizard, this whole detail was created with code, so it would be not possible to enable it. But the first option by clicking the cross sign would be the more simple one.

 

Best regards,

Dariy

 

Thank you very much Dariy.

Show all comments

Is it possible to export an existing database schema into a creatio datamodel? Or from an ERD Data export?

 

I use lucidchart to create a model of my database, it has export functions for MySQL, PostgreSQL, SQL Server, Oracle SQL and a similar platform as creatio, Quickbase. 

 

Does creatio support such an import wizard?

Like 1

Like

1 comments

Hello Pascal,

 

unfortunately this is not quite possible.

The thing is that you can export the DB in such way, but you will not have any objects in the system.

So we would recommend sticking to the standard way. Also, we will register this option as a wish for the dev team to implement it in the future.

 

Regards,

Gleb.

Show all comments