Время создания
Filters

Many Creatio developers working in Freedom UI face a common, frustrating issue:
Changes made to schemas don’t save in the intended package—even when the CurrentPackageId is set. Instead, Creatio generates random packages like App_u3es9v, introduces unwanted dependencies, and bloats your workspace.

This hidden system feature overrides your CurrentPackageId setting. Disabling it restores control and ensures changes go into the package you’ve selected.

Please follow the link for more details and step by step instruction
Fixing Creatio's Auto-Generated Packages: A Precise, Step-by-Step Guide | AavishkarIT

 

Like 2

Like

Share

1 comments

Wow, that's great! Thank you

Show all comments

Get ready to meet the Creatio 8.3 and its AI Twins! 

On June 25, we’ll officially unveil Creatio 8.3 “Twin” Release – our most intelligent update yet that includes: 
- AI at the Core embedded into all Creatio objects, data, and workflows 
- Natural language as the default UI 
- Role-based AI agents for sales, marketing, and service 
- AI-driven no-code development at speed and scale 

Register: https://www.creatio.com/page/twin-release

Like 21

Like

Share

0 comments
Show all comments

We launched two major platform upgrades: the all-new Creatio Marketplace and Creatio Academy

Learn more about the new tools and UX updates here: https://www.creatio.com/company/news/23912 

Like 23

Like

Share

3 comments

Great redesign!

One exception: Please add the "what's new" in documentation page to the academy (as it was before) asap,

so that one can easily be informed and updated of relevant changes to the documentation

really missing that one!

https://community.creatio.com/questions/creatio-news-page-academy

Cheers,

Luis

Luis Tinoco Azevedo,

Thank you for the feedback Luis, we'll make sure to improve it!

Luis Tinoco Azevedo,

We’re also planning to extend the news section in future releases. At the moment, there’s a small block displaying the three most recent news items at the bottom of the page.


 

Show all comments

We’re excited to welcome Bits In Glass as Creatio’s new Premier Partner! 

As a global consulting leader, Bits In Glass brings unmatched expertise to help industrial manufacturers and distributors across North America scale faster, work smarter, and stay ahead of shifting market demands. 

As a Premier Partner, Bits In Glass truly shares our dedication to transforming how businesses scale, innovate, and serve their customers 

Learn more about how we’re transforming industries together → https://www.creatio.com/company/news/23842  

Like 12

Like

Share

0 comments
Show all comments

Displaying Multiselect Values as Chips in List Pages

Creating a visually appealing display for multiselect values can greatly enhance the usability of your application. Here's a guide on how to transform comma-separated multiselect values into colored chips in your list page.

Step 1: Store Multiselect Values in a Text Field

First, you need to create a text field in your data model to store the multiselect values as a comma-separated string. For example:

 

"Home,Grant,Actual,Business,Home Delivery"

This text field will serve as the data source for your chips display.

Step 2: Implement the View Model Handler

Add the following code to your handler to transform the text values into visual chips:

View Model Handler Code

	{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next, context) => {
		//console.log("Data changed");
 
      const columnId = "d83d0646-68df-e743-f996-e007039be534";
 
      const injectChipStyles = () => {
        const style = document.createElement("style");
        style.innerHTML = `
          .custom-chip {
            display: inline-block;
            padding: 1px 5px;
            margin: 3px 5px 3px 0px;
            border-radius: 20px;
            font-size: 12px;
            font-weight: 500;
            color: white;
            position: relative;
            padding-right: 5px;
            background-color: #666;
          }
          .custom-chip::after {
            font-weight: bold;
            position: absolute;
            right: 5px;
            top: 50%;
            transform: translateY(-50%);
            cursor: default;
          }
        `;
        document.head.appendChild(style);
      };
 
      const stringToColor = (str) => {
        let hash = 0;
        for (let i = 0; i < str.length; i++) {
          hash = str.charCodeAt(i) + ((hash << 5) - hash);
        }
        let color = '#';
        for (let i = 0; i < 3; i++) {
          const value = (hash >> (i * 8)) & 0xFF;
          color += (`00${value.toString(16)}`).slice(-2);
        }
        return color;
      };
 
      const renderChips = () => {
        const cells = document.querySelectorAll(
          `td[crt-data-table-column-id="${columnId}"] .crt-data-table-cell-value`
        );
 
        if (cells.length === 0) return;
 
        cells.forEach(cell => {
          const title = cell.getAttribute("title");
          if (title && cell.children.length === 0) {
            cell.innerHTML = "";
            title.split(",").forEach(value => {
              const trimmed = value.trim();
              const chip = document.createElement("span");
              chip.className = "custom-chip";
              chip.innerText = trimmed;
              chip.style.backgroundColor = stringToColor(trimmed);
              cell.appendChild(chip);
            });
          }
        });
 
        clearInterval(timer);
      };
 
      injectChipStyles();
      const timer = setInterval(renderChips, 500);
      await next?.handle(request);
		}
	}	{
    request: "crt.HandleViewModelAttributeChangeRequest",
    handler: async (request, next, context) => {
		//console.log("Data changed");
 
      const columnId = "d83d0646-68df-e743-f996-e007039be534";
 
      const injectChipStyles = () => {
        const style = document.createElement("style");
        style.innerHTML = `
          .custom-chip {
            display: inline-block;
            padding: 1px 5px;
            margin: 3px 5px 3px 0px;
            border-radius: 20px;
            font-size: 12px;
            font-weight: 500;
            color: white;
            position: relative;
            padding-right: 5px;
            background-color: #666;
          }
          .custom-chip::after {
            font-weight: bold;
            position: absolute;
            right: 5px;
            top: 50%;
            transform: translateY(-50%);
            cursor: default;
          }
        `;
        document.head.appendChild(style);
      };
 
      const stringToColor = (str) => {
        let hash = 0;
        for (let i = 0; i < str.length; i++) {
          hash = str.charCodeAt(i) + ((hash << 5) - hash);
        }
        let color = '#';
        for (let i = 0; i < 3; i++) {
          const value = (hash >> (i * 8)) & 0xFF;
          color += (`00${value.toString(16)}`).slice(-2);
        }
        return color;
      };
 
      const renderChips = () => {
        const cells = document.querySelectorAll(
          `td[crt-data-table-column-id="${columnId}"] .crt-data-table-cell-value`
        );
 
        if (cells.length === 0) return;
 
        cells.forEach(cell => {
          const title = cell.getAttribute("title");
          if (title && cell.children.length === 0) {
            cell.innerHTML = "";
            title.split(",").forEach(value => {
              const trimmed = value.trim();
              const chip = document.createElement("span");
              chip.className = "custom-chip";
              chip.innerText = trimmed;
              chip.style.backgroundColor = stringToColor(trimmed);
              cell.appendChild(chip);
            });
          }
        });
 
        clearInterval(timer);
      };
 
      injectChipStyles();
      const timer = setInterval(renderChips, 500);
      await next?.handle(request);
		}
	}

How This Code Works

  1. Column Identification: Replace the columnId with your specific column ID where the multiselect values are stored.
  2. Style Injection: The injectChipStyles function adds custom CSS to your page that defines how chips will look.
  3. Color Generation: The stringToColor function creates a unique color for each value based on its string content, ensuring visual distinction between different values.
  4. Chip Rendering: The renderChips function:
    • Identifies all cells in the specified column
    • Splits the comma-separated values
    • Creates a chip element for each value
    • Applies the generated color
    • Adds the chips to the cell
  5. Timing: The code uses a timer to ensure cells are found and processed even if they load asynchronously.

Implementation Steps

  1. Locate your list page configuration
  2. Add the handler code to your view model handlers
  3. Make sure to update the columnId with your specific column ID
  4. Test the implementation by viewing the list page

Result

Your multiselect values will appear as color-coded chips instead of a comma-separated string:

  • Instead of: "Home,Grant,Actual,Business,Home Delivery"
  • You'll see: [Home] [Grant] [Actual] [Business] [Home Delivery] (where each value has its own colored background)

This approach not only makes the information more visually appealing but also improves readability and user experience.
images 

 After:

Like 0

Like

Share

0 comments
Show all comments