Hi, new to Creatio and have a very specific need.

 

When our contacts become customers, we manually change their status field value in Creatio to "Active" and assign a "Subscription Level". They are active for one year a time. We have a separate Directory website where we want these Active customers to be listed. 

Questions:

  1. Is there a built-in way to set up an event that is triggered when a record's Status = "Active" and then sends a payload of the User's information immediately (Name, email, phone, Active status, and Expiration date)? We are prepared to write some API endpoints on the Directory if necessary.
  2. There are similar changes we need Creatio to communicate to the Directory:
    Change in expiration date
    Change of "Active" status to "Inactive" independent of expiration date.
    Change in Customer Package Subscription Level
     

The goal is to automate these update events from Creatio to the Directory via API or webhook as quickly as possible and minimize effort duplication. We're not quite sure where to start to implement something like this "in the Creatio way".
 

Thanks in advance,

Adrian 

Like 0

Like

0 comments
Show all comments

Hello everyone,

 

I hope this message finds you well. I am currently facing a challenge in Creatio and would greatly appreciate your expertise and insights.



I am looking to create product bundles within Creatio, but it seems that there is no direct functionality to do so. I have explored various ideas but haven't been able to find a straightforward solution.

 

I'm reaching out to inquire if anyone has experience in implementing product bundles in Creatio. If so, I would love to hear about the approach you took and any tips or best practices you can share. On the other hand, if you attempted this in the past but encountered obstacles or decided against it, I would be interested to learn about the challenges you faced or the reasons behind your decision.



Your input and advice would be immensely valuable to me, and I'm eager to learn from your experiences.



Thank you in advance for any assistance you can provide.



Best regards,

Paulo Figorelli

Like 0

Like

0 comments
Show all comments

When Creating a Campaign from an Event, the Campaign fails to link to the related event

 

See picture

 

Like 0

Like

0 comments
Show all comments

Hello,

 

can we somehow display empty cell if field value is 0 in Classic UI editable detail?

Otherwise it is very difficult for users to find filled values in the detail

Thank you!

Vladimir

Like 3

Like

1 comments

Hello,

 

There is a workaround for this if you don't need to aggregate these metrics. You can create the field as Text and then implement field value validation to accept only decimals. You can find bellow the link to how to implement field value validation. As a result, the field will be empty if not filled in. 

 

https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

 

Mariam

Show all comments
Question

Is there a way to remove from an Application field the link functionality? Some time users click here and there in the application and if the field is configured as a link they open new windows.

File attachments
Like 2

Like

2 comments

Hello,

Unfortunately, this element doesn't have such settings at the moment. However, you can display the Related object's column. For example, in the Contact section, you can add not the Account column, but the Account.Name column, as by default all displayed values of lookup fields for which there is an edit page are displayed as links.

However, using the method described above, you will be displaying only text columns.

 

I hope this helps resolve your task.

Pavlo Sokil,

Thank you very much for your suggestion. It works and we can use it. 

Best Regards

Stefano

Show all comments

Hi!

I need a custom button that will change value in a recaord and then save this record. I've tried it on a OpportunitySectionV2 with this code

 

define("OpportunitySectionV2", [], function() {
	return {
		entitySchemaName: "Opportunity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[ 
            {
                "operation": "insert",
                "parentName": "ActionButtonsContainer",
                "propertyName": "items",
                "name": "MainContactSectionButton",
                "values": {
                    itemType: Terrasoft.ViewItemType.BUTTON,
                    caption: { bindTo: "Resources.Strings.OpenPrimaryContactButtonCaption" },
                    click: { bindTo: "onOpenPrimaryContactClick" },
                    "layout": {
                        "column": 1,
                        "row": 6,
                        "colSpan": 1
                    }
                }
            }]/**SCHEMA_DIFF*/,
		methods: {
			prepareResponseCollectionItem: function(item) {
				this.callParent(arguments);
         		if (item.get("MgtImportantFlg") === false){
					item.customStyle = Ext.apply({}, {
					  "background-color": "#cc081c",
					  "font-family": "cursive"
					}, item.customStyle);		  		
		  		}
			},
			onOpenPrimaryContactClick: function(){
				var activeRow = this.get("ActiveRow");
				var bFlag = this.get("GridData").get(activeRow).get("MgtImportantFlg");
					if(bFlag){
						this.get("GridData").get(activeRow).set("MgtImportantFlg",false);
						this.save();
					}
					else{
						this.get("GridData").get(activeRow).set("MgtImportantFlg",true);
						this.save();
					}
			}
		}
	};
});

it change the value in my field but didn`t save it, so after reload shows old value.

Could anyone help me how should i change code for my purposes?

Like 0

Like

1 comments
Best reply

Hello,

In the section module, it is better to use an UpdateQuery class to change the value of the records. You can find the example here.

Hello,

In the section module, it is better to use an UpdateQuery class to change the value of the records. You can find the example here.

Show all comments

Hi Community,

We want to change the case automatically when the value of the corresponding field for the records changes.

With current version it needs an additional confrimation from user.

Is there any coding example?

Sasori

Like 0

Like

2 comments

Hi Community,

Any update regarding this functionality?

Sasori

Hi Community,

Any update on this?

Show all comments
Question

 

Hello, previously in the CRM, there was a feature for voice input of text into multi-line text fields.

I can't seem to find this functionality in the Freedom UI. Has such functionality been retained, and if not, is there an alternative solution?

File attachments
Like 2

Like

2 comments

Good afternoon!



This option is not currently available in Freedom UI. We have already created a request for the R&D team to add this functionality and hope to see it in the next update.



Best regards,

Anton

Hi Anton,

Thanks for the update. Hope to see it in version 8.1.3 too :) Hopefully we are arriving close to the end of catching up in Freedom UI functionalities that were availble in Classic ui.

Show all comments

Hello community,

We have created a business process that opens the call edit card on an outbound call. If the phone number is associated with multiple organizations, the card opens faster than the manager selects the required organization on the CTI panel. When we select a Counterparty on the CTI, it changes the field in the call card, but these changes are not reflected in real-time in the card that was already opened by the business process. The Enable live data update checkbox for the call object is set. If other actions are performed through the BP, the changes are displayed in real time.

I would appreciate any help if someone has encountered a similar case.

Like 0

Like

1 comments

Dear Vitalii,

The thing is, the business process will only update data in real-time for the page it has already opened (data that was current at the time of opening).

In your case, you need to ensure that the card opens after selecting the necessary organization. To do this, you need to separate the conditional execution flows of the business process for phone numbers associated with one organization and for phone numbers associated with multiple organizations.

Then add an option for selecting the required organization for the corresponding flow.

Best regards,

Andrii

Show all comments

Hi Expert ,

    I am trying to use Creatio api with basic authentication . I am following below links :

    https://documenter.getpostman.com/view/10204500/SztHX5Qb#46f97170-d66d-…;

    

    NotWorking in PostMan : As per documention it's not working  in postman. Stored BPMCSRF value from Response Header Cookie of Token Request and call get api with BPMCSRF / ForceUseSession  headers key with it's value .Removed cookies from get request. Send the the get request it's giving a html response without any error details.

    

    Working in PostMan : In PostMan Send Token request then send get request (https://steuler.creatio.com/0/odata/Product?$top=1) without set any Header keys it's working fine. In this scenario i can see token request response header cookie values are sending bydefault by Postman in the get request.

    NotWorking in Consol Application : As per 2nd scenario i am trying to send a Get api request with token generate Response header cookies values but it's showing html error without any error details

    NotWorking in Consol Application : As per documentation Stored BPMCSRF value from Response Header Cookie of Token Request and call get api with BPMCSRF / ForceUseSession  headers key with it's value .But showing html error without any error details.

    i have attached my screen shots for reference.From my side any configuraration need to be changed Creation envionment for that my scenario  Can you give me any proper documents which i can follow and will be worked ?

    below is my console application code :

                // Create HttpClient

                using (HttpClient httpClient = new HttpClient())

                {

                    // Create HttpRequestMessage

                    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, @"https://steuler.creatio.com/0/odata/Product?$top=1");

                    // Set request headers

                    request.Headers.Add("Accept", "application/json");

                    request.Headers.Add("ForceUseSession", "true");

                    request.Headers.Add("BPMCSRF", "YtuvyS.WPYmW5BChY5anK.");

                    // Send the request

                    HttpResponseMessage response =  httpClient.SendAsync(request).ConfigureAwait(false).GetAwaiter().GetResult();

                    // Check response status

                    if (response.IsSuccessStatusCode)

                    {

                        string responseData =  response.Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult();

                    }

                 }

 

Thanks and Regards

Surajit Kundu

Like 0

Like

2 comments

I don't see in your code the call to authenticate. I assume that you're previously calling /ServiceModel/AuthService.svc/Login somewhere to get the BPMCSRF value? See https://documenter.getpostman.com/view/10204500/SztHX5Qb#46f97170-d66d-…

Note, the BPMCSRF value doesn't last forever, so it does need to be a recently obtained value. 

This article shows the complete steps for executing requests via Postman which might help: https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Ryan

Ryan Farley,

Hi 

      Thanks for your reply . Below is my token generation code from where i have taken cookies value for my 2nd request .Before i have not attached that token generation part as these is working fine. In postman it's working fine using Cookies based authentication.In my Console application i am sending all the Cookies (BPMLOADER, .ASPXAUTH, BPMCSRF, and UserName) as a Header Key and value in further requests to Creatio services that use cookie-based authentication but it's showing Html Error ?

 static async Task<Dictionary<string, string>> TokenGenerateDictionary()

        {

            var headerCookies = new Dictionary<string, string>();                 

                using (var client = new HttpClient())

                {

                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    using (var request = new HttpRequestMessage(HttpMethod.Post, @"https://steuler.creatio.com/ServiceModel/AuthService.svc/Login"))

                    {

                        request.Content = new StringContent($"{{\"UserName\":\"ram\",\"UserPassword\":\"abcd\"}}", Encoding.UTF8, "application/json");

                        var response = client.SendAsync(request).Result;

                        var responseString = await response.Content.ReadAsStringAsync();

                        JObject responseJson = JObject.Parse(responseString);

                        int code = (int)responseJson["Code"];

                        if (code == 0 && response.IsSuccessStatusCode)

                        {

                            foreach (string setCookieHeader in response.Headers.GetValues("set-cookie"))

                            {

                                 string[] cookies = setCookieHeader.Split(';');

                                if (cookies.Length > 0)

                                {

                                    string[] keyValue = cookies[0].Trim().Split('=');

                                    if (keyValue.Length == 2)

                                    {

                                        string key = keyValue[0];

                                        string value = keyValue[1];

                                        if (!headerCookies.Keys.Contains(key))

                                            headerCookies.Add(key, value);

                                    }

                                }

                            }

                         }

                    }

                }

            return headerCookies;

        }



Request Get Operation send cookies in Header Key :

         var tokenHeaderCookiesData = TokenGenerateDictionary().ConfigureAwait(false).GetAwaiter().GetResult(); 

         string requestUri = @"https://steuler.creatio.com/0/odata/Product?$top=1";

         using (HttpClient httpClient = new HttpClient())

                {

                    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri);

                    foreach (string key in tokenHeaderCookiesData.Keys)

                    {

                        //BPMLOADER, .ASPXAUTH, BPMCSRF, and UserName

                        if (key== "BPMLOADER" || key == ".ASPXAUTH" || key == "BPMCSRF" || key == "UserName")

                           request.Headers.Add(key, tokenHeaderCookiesData[key]);

                    }

                    HttpResponseMessage response =  httpClient.SendAsync(request).ConfigureAwait(false).GetAwaiter().GetResult();

                    string responseData =  response.Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult();

                }

   



Html Error Response with status OK:



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" culture="en-US">

<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta name="fontiran.com:license" content="LAXSN" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>

    Creatio

</title>

    <style>

        .font-preload {

            position: absolute;

            opacity: 0;

        }

        .font-preload-open-sans {

            font-family: "Bpmonline Open Sans";

        }

        .font-preload-open-sans-light {

            font-family: "Bpmonline Open Sans Light";

        }

        .font-preload-open-sans-bold {

            font-family: "Bpmonline Open Sans Bold";

        }

    </style>

<script type="text/javascript" src="https://steuler.creatio.com//core/8dc3ccad339641a4ecd1ecb0b57f017d/Terr…"></script>

<script type="text/javascript" src="https://steuler.creatio.com/api/ClientScript/GenerateLoginScripts"></script>

<script type="text/javascript" src="https://steuler.creatio.com//core/057665f97324038f6c7c326b6734de6b/requ…" data-main="https://steuler.creatio.com//core/0fbfa51b1de27f89696f0f8d31da5f16/Terr…" async></script>

<script type="text/javascript"></script>

</head>

<body>

    <div class="font-preload">

        <span class="font-preload-open-sans">_</span>

        <span class="font-preload-open-sans-light">_</span>

        <span class="font-preload-open-sans-bold">_</span>

    </div>

    <form name="IndexForm" method="post" action="./NuiLogin.aspx?ReturnUrl=%2f0%2fodata%2fProduct%3f%24top%3d1&amp;%24top=1" id="IndexForm">

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="+mvmSAOrSFVSNU1VvvnnAv5lt45aMHGRIkN033uMqlv/X2Fn2421RrzZayJqLBBTzwEnVTCtLeOrFnkbGP1c32c1p4dJwgJeute2MMWvNkRY1wHA" />

<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="0BFA92C5" />

    </form>

</body>

</html>

 

Thanks 

Surajit Kundu

Show all comments