Время создания
Filters
Portfolio_Insights
Matrix
Grid_views
now_available
Syntech_Portfolio

We have released Syntech Portfolio Insights for Creatio 1.2.0, adding Matrix and Grid views for portfolio planning and analysis.

The new views allow users to visualize:

  • team and project capacity;
  • current workload;
  • resource allocation;
  • utilization by team, project, role, or time period.

Why we added the new views

Project lists are useful for accessing individual records, but portfolio decisions often require a broader perspective.

Portfolio managers need to understand not only the status of each project but also how resources and workloads are distributed across the organization.

Matrix and Grid views make it easier to compare planning data, identify capacity constraints, and analyze resource utilization without exporting information to separate spreadsheets.

Portfolio management inside Creatio

Syntech Portfolio Insights provides a centralized workspace for managing strategic initiatives, programs, projects, and investments.

In addition to the new Matrix and Grid views, the component includes:

  • Executive Portfolio Visibility - monitor initiatives, delivery status, risks, and investment allocation;
  • Portfolio Hierarchy View - navigate portfolios, programs, and projects using an interactive hierarchy;
  • Project Summary Preview - access progress, status, budget utilization, project manager information, and health indicators without opening the full record;
  • Contextual Team Communication - discuss portfolio updates, tasks, and project activities in one workspace;
  • No-Code Setup - configure the component inside Creatio and connect it to existing Portfolio, Program, and Project sections.

Release details

  • Version: 1.2.0
  • Release date: September 16, 2026
  • Compatibility: Creatio 8.3.0 and later
  • Deployment: cloud and on-site

Learn more and install the new version on the Marketplace:
https://syntech.digital/en/products/syntech-portfolio-insights-for-creatio 

We welcome your feedback on the new planning views.

Like 0

Like

Share

0 comments
Show all comments

Hello community,

the 10x version enable the list-base time selection for "Time" and "Date/Time" type fields.

Do you know how I can enable it?

 

Like 0

Like

0 comments
Show all comments
auto
filter
Studio_Creatio
8.0

Hi All, question please, so I want to auto filter (not static value) in List, filtered by field with data type Text. How to do that in Creatio, need advice please, thank you.

Capture :

I already tried, but I can not found the way. The only way I can found is Apply static filter from Properties, but it is not my expected. Capture :

I already tried with Business Process too, but the value is not my expected also, because it can not read specific filter result, the result is : showing all data.
Capture :

Need advice please, how to auto filter in List by parameter data type Text (not static filter) ?

Thank you.

Like 0

Like

1 comments

Hello!

The no-code designer cannot do this. The "Apply static filter" dialog only accepts constants or current-user macros, and a business process can populate data but cannot filter a list on a page. To filter a list by a Text field of the current record, you need a few lines of code in the page schema. This is the documented Creatio approach for dynamic list filters.

Every list on a Freedom UI page has a data source attribute in viewModelConfig.attributes with a filterAttributes array. You add your own filter attribute there, then set that attribute to a sdk.FilterGroup in a handler. Whenever the attribute changes, the list reloads with the new filter.

Step 1. Add the SDK dependency

At the top of the page schema (UsrPreScreening_FormPage or whatever your form page is named):

define("UsrPreScreening_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {

Step 2. Register a filter attribute on the list's data source

Find the data source for your Application list in viewModelConfig.attributes. It will look something like GridDetail_xxxx_DS or DataGrid_xxxx_DS. Add a new entry to its filterAttributes:

"GridDetail_Application_DS": {

    "isCollection": true,

    "modelConfig": {

        "path": "GridDetail_Application_DS",

        "filterAttributes": [

            { "name": "GridDetail_Application_PredefinedFilter", "loadOnChange": false },

            { "name": "GridDetail_Application_ActiveFilter", "loadOnChange": true },

            { "name": "UsrCustomerNameFilter", "loadOnChange": true }

        ]

    }

}

Keep the existing entries; only the last line is new. Also declare the attribute itself next to the others:

"UsrCustomerNameFilter": {}

 

Step 3. Build the filter in handlers

Add two handlers to the handlers array. The first sets the filter when the page opens. The second rebuilds it when the user edits Customer Name. Replace the attribute names with the real ones from your page (PDS_UsrCustomerName_xxxx and PDS_UsrApplicationNumber_xxxx), and the column names with the real Application object column codes.

handlers: /**SCHEMA_HANDLERS*/[
    {
        request: "crt.HandleViewModelInitRequest",
        handler: async (request, next) => {
            await next?.handle(request);
            await applyCustomerNameFilter(request.$context);
        }
    },
    {
        request: "crt.HandleViewModelAttributeChangeRequest",
        handler: async (request, next) => {
            if (request.attributeName === "PDS_UsrCustomerName_xxxx" && !request.silent) {
                await applyCustomerNameFilter(request.$context);
            }
            return next?.handle(request);
        }
    }
]/**SCHEMA_HANDLERS*/,

 

Then define the helper above the return { ... } of the schema module:

async function applyCustomerNameFilter(context) {
    const customerName = context.PDS_UsrCustomerName_xxxx;
    const appNumber = context.PDS_UsrApplicationNumber_xxxx;
    const filter = new sdk.FilterGroup();
    filter.logicalOperation = sdk.LogicalOperation.And;
    if (customerName) {
        await filter.addSchemaColumnFilterWithParameter(
            sdk.ComparisonType.Equal, "UsrCustomerName", customerName);
    } else {
        // no name yet: show nothing instead of everything
        await filter.addSchemaColumnFilterWithParameter(
            sdk.ComparisonType.Equal, "Id", "00000000-0000-0000-0000-000000000000");
    }
    if (appNumber) {
        await filter.addSchemaColumnFilterWithParameter(
            sdk.ComparisonType.NotEqual, "UsrApplicationNumber", appNumber);
    }
    // required workaround: the filter must be a plain object to trigger reload
    const plainFilter = Object.assign({}, filter);
    plainFilter.items = filter.items;
    context.UsrCustomerNameFilter = plainFilter;
}

 

The last three lines are not optional. The list only reloads when the attribute receives a new plain object, so copying the FilterGroup this way is the standard trick.

Notes

  • Use sdk.ComparisonType.Contain instead of Equal if you want partial matches on the name.
  • Column codes in addSchemaColumnFilterWithParameter are Application object column codes, not page attribute names.
  • If you also want Date of Birth or ID Card matching, add more conditions the same way.
  • The static filter you configured in the designer can stay or be removed. Your code filter combines with it through the PredefinedFilter attribute.

Alternative without code

If you can change the data model, make Customer a lookup object instead of a Text field and reference it from both the pre-screening record and the Application object. Then the standard list-to-page binding by lookup column filters automatically. That is the only no-code option, but it only works if a shared lookup makes sense for your data.

Show all comments

test

Like 0

Like

0 comments
Show all comments
calculate
summary
Studio_Creatio
8.0

Hi All, question please.

I already googling also searching in Creatio document, but I can not find the answer.

So, how to calculate total summary from all currencies values in Business Process?
There is no summary function there.


Capture :

 

Need advice please, thank you.

Like 0

Like

1 comments

Hello,

First of all you read only 1 record in the "Read Insurance" read data element (it can be seen from the "First item of resulting collection" macro value). The sum of this will always be the value you read. I think something else was intended here.

Next, you can use Enumerable.Sum method, but you need to get an enumerable. Or introduce a method that can be called inside a script task like (and add Terrasoft.Core.DB to the process usings):

protected decimal GetInsurancePremiTotal(Guid insuranceTypeId) { //or any other argument suitable
    var query = (Select)new Select(UserConnection)
        .Column(Func.Sum("UsrPremi")).As("TotalPremi")
        .From("UsrInsurance").As("usrInsurance").WithHints(new NoLockHint())
        .Where("usrInsurance", "UsrTypeId").IsEqual(Column.Parameter(insuranceTypeId));
    decimal totalPremi = 0;
    using (DBExecutor executor = UserConnection.EnsureDBConnection()) {
        totalPremi = query.ExecuteScalar<decimal>(executor);
    }
    return totalPremi;
}

And set the result to process parameter and then use this parameter value to proceed in the business process.

Show all comments