Hello,

we have succesfully configured identity service and some processess integrating Creatio and other apps through Zapier. The problem is, the integration works in 30-50% of zap runs. In other cases we encounter error like this below:

What we concluded is that Zapier connector connects to our Creatio URL https://creatio.astor.com.pl, where it is redirected to login page and this is somehow the case. W changed the default timeout of login session to unlimited and it didn't changed anything.

 

We asked Creatio support about that and heard that "this connector is not supported by Creatio team so ask DevLabs" but DevLabs says on its Creatio Partner website that I should write a post here, in community. So now I do :) Please help us solve this puzzle, because without Zapier connector we are pushed to reconsider our next moves about Creatio development.

Like 1

Like

1 comments

The Zapier connector for Creatio is somewhat limited and does have some problems. Another option, plus much more reliable route (in my opinion) is to simply use Creatio webhooks. See https://academy.creatio.com/docs/8.x/no-code-customization/base-integrations/webhook-service-integration/overview

Zapier can easily send webhooks to Creatio, plus the use of webhooks is much more flexible and allows for a greater set of objects and fields to be used since the Zapier connector is limited to just a couple of objects (last I checked). 

Since your system looks like it's self-hosted based on the URL, assume you might need to contact support for getting webhooks setup for use.

Ryan

Show all comments

Hi all,

 

Further to the thread below, is it possible to make a button added to the active row of a detail conditional?
Add button into the active row of detail | Community Creatio

I want to make the button enabled on a certain condition but when I add the enabled and visible values to the Diff of the datagrid, I get no result (tried passing "enabled": false to check it wasn't an issue with the CanSplitFlights method)

define("UsrFlightsDetail", ["ProcessModuleUtilities"], function(ProcessModuleUtilities) {
	return {
		entitySchemaName: "UsrFlights",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "DataGrid",
				"parentName": "Detail",
				"propertyName": "items",
				"values": {
					"activeRowActions": [],
					"activeRowAction": {"bindTo": "onActiveRowAction"}
				}
			},
			{
				"operation": "insert",
				"name": "DataGridActiveRowSplitFlights",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.BLUE,
					"caption": "Split flights",
					"tag": "SplitFlights",
					"visible": true,
					"enabled": CanSplitFlights
				}
			}
		]/**SCHEMA_DIFF*/,
		methods: {
            CanSplitFlights: function() {
                var FlightTypeId = this.getActiveRow().get("UsrFlightType");
				var FlightTypeValue =  FlightTypeId  && FlightTypeId.value;
 
				if (FlightTypeValue == '3a0d3b1b-9af5-472a-bac9-e785500ac4e9') {
					return true;
                }
                return false;
            },
			onActiveRowAction: function(SplitFlights) {
				switch (SplitFlights) {
					case "SplitFlights":
						this.onSplitFlights();
						break;
					default:
						break;
				}
			},
			onSplitFlights: function(){
				ProcessModuleUtilities.executeProcess({
					sysProcessName: "UsrSplitFlights",
					parameters: {
						FlightId: this.getActiveRow().get("Id")
					}
				});
			},
Like 1

Like

2 comments
Best reply

I've done some hacky options that sort of worked manipulating the button elements in the dom on row click, but I've never been able to have it work binding an attribute to the visible/enabled of the row buttons and change row by row. That's never worked for me. Instead I typically do a check in the code that executes on click to let the user know if it's not available for the row. I'd love to know if there's some way for this to work, but from experience it doesn't work. 

I've done some hacky options that sort of worked manipulating the button elements in the dom on row click, but I've never been able to have it work binding an attribute to the visible/enabled of the row buttons and change row by row. That's never worked for me. Instead I typically do a check in the code that executes on click to let the user know if it's not available for the row. I'd love to know if there's some way for this to work, but from experience it doesn't work. 

Ryan Farley,

Thanks Ryan. I'll call it quits then and add a check on click.

Honestly, it's more of an aesthetic requirement than a functional one. Ideally I won't offer the user a button that they can't click.

Show all comments

We want to add filters in the same way that you can add them to lookups using code on the page, as there isn't a no-code way to configure additional filters for Timeline components. In our case, it's filtering out non-completed Activity records from the Timeline. We don't seem to be able to using similar methods to lookups though (i.e. adding custom code to the crt.LoadDataRequest handler. Has anyone found a way to add such a filter? It looks like all the Timeline code is in the 9351.xxxxxxx JS file.

Like 0

Like

0 comments
Show all comments

Hello,

 

how is it possible to implement action to create account address by geolocation in mobile app?

 

I see, that Creatio field sales can get location of check-in. So, if we use similar functionality, we have just to find address of these coordinates.

Do you have any idea how to do that?

 

Thank you!

Vladimir

Like 2

Like

4 comments

Hi Vladimir! How are you? It seems you could use for example this service from Google Maps Platform:   https://developers.google.com/maps/documentation/geocoding/requests-rev…

Uriel Nusenbaum,

Thank you for this information. Do you know, does this service require any lincense from Google?

 

Vladimir Sokolov,

You should configure an API Key follow this article: https://developers.google.com/maps/documentation/geocoding/cloud-setup and here you have the pricing information: https://mapsplatform.google.com/pricing/
You have the option to try the service and several requests per month for free.
Regards.
 

Hello Vladimir,
Thank you for your question.

After consulting with R&D team i got some information regarding your case. Mobile phones have build-in API to work with geolocation however currently it is impossible to customize our mobile application directly. Javascript also has some methods to determine user's geolocation like getCoordinates. 
So the possible workaround right now is to create service that will receive coordinates from and send them to an external service like Google Geolocation.

Hope this helps and let me know if you any question left.

Show all comments

We run code on our leads page that when the page is saved with required fields that aren't populated we have pop-ups to prompt the user to collect the data in sequence. The sequence in which these pop-ups happen appears to be based on the business rules of the page... How do we update the order of the business rules (to force an order update of which fields get marked as required, and in turn the pop-up sequence)?

 

Thank you for any insight.

Like 1

Like

1 comments

Good day!

Would it be possible for You to provide us with the code You are attempting to run along with the screenshots of the pop-ups that You end up seeing?

Show all comments

Is it possible to trigger the Freedom UI Live Data Refresh mechanism (LiveEditing feature) for a specific record from C# code? We have a C# process that is updating data directly in the database for performance reasons, but in certain circumstances we may want to trigger the Live Data Refresh of the record(s). Is this possible in any way? Or do we have to implement a workaround by refreshing from JS code when we think we may have to (so would be over-refreshing and not using the Live Data refresh mechanism).

Like 0

Like

1 comments
Best reply

You can see how that feature works by looking at the "LiveEditingBaseEntityEventListener" source code schema. In initial versions you could see they were just using MsgChannelUtilities.PostMessage and the message name, but in 8.1.2 that has been abstracted away. Still you could execute the same way as implemented in that schema.

Ryan

You can see how that feature works by looking at the "LiveEditingBaseEntityEventListener" source code schema. In initial versions you could see they were just using MsgChannelUtilities.PostMessage and the message name, but in 8.1.2 that has been abstracted away. Still you could execute the same way as implemented in that schema.

Ryan

Show all comments

Hi Community,

 

I am currently working on Process elements  in Creatio. However, I find that the Save and Publish process with Script Task Element is taking longer time than expected, and I'm looking for ways to speed up this process.

 

Has anyone faced similar challenges and found effective solutions? If so, please share your experiences.

 

Best Regards,

Ajay Kuthe

 

 

Like 1

Like

7 comments
Best reply

Gareth Osler,

You can add the Creatio NuGet package to your local Visual Studio project for the Creatio/Terrasoft references also (without a local install). https://www.nuget.org/packages/CreatioSDK

Ryan

I have the same question, especially with one instance having a compile time of 10 minutes.

 

There is some documentation on using external IDEs here External IDEs | Creatio Academy.

 

The following looks interesting, but I'm not sure if a local Creatio instance is required:

Develop C# code in a custom project | Creatio Academy

Develop C# code in a custom project | Creatio Academy / Write C# code for Creatio in the cloud

If you turn on the option in your package for it to compile to it's own assembly then it should take less time since it's only compiling your package and not the entire system.

Other than that, developing externally using tools such as clio would speed the process up. 

Some of scripts that are used in many processes can be transformed into User task

Some best practices documentation videos, updated / new e-learning courses would be great in order to maximise the development in nocode and in code with Creatio  (video courses which can also show how to maximize the use of different tools like clio etc...) the amount of information at the moment is still disparate and super light. 

To build an assembly the Terrasoft libraries are needed.  A local Creatio install would be needed (unless there is some other way).

 

Gareth Osler,

You can add the Creatio NuGet package to your local Visual Studio project for the Creatio/Terrasoft references also (without a local install). https://www.nuget.org/packages/CreatioSDK

Ryan

Ryan Farley,

 

Following the instructions from Write C# code for Creatio in the cloud I'm getting the following error running Executor.exe

 

.\Executor.exe

Unhandled Exception: System.Net.CookieException: The 'Value'='Lax,.ASPXAUTH' part of the cookie is invalid.
   at System.Net.Cookie.VerifySetDefaults(CookieVariant variant, Uri uri, Boolean isLocalDomain, String localDomain, Boolean set_default, Boolean isThrow)
   at System.Net.CookieContainer.Add(Uri uri, Cookie cookie)
   at Executor.Program.TryLogin(String userName, String userPassword, String authServiceUri)
   at Executor.Program.Login()
   at Executor.Program.Main(String[] args)


The instructions are essentially to build an assembly locally and then I think upload it to the cloud instance using Executor.exe.  It looks as though it is not able to log in to the cloud instance due to an invalid cookie value.  I can't think of  a way round that.

 

[Edit] Apart from upload the assembly manually, would only take a few seconds!

 

[Edit] Could clio CI/CD be used to automate deployment?

 

Show all comments

Hi Creatio Community,

 

I hope you're all doing well. I have question with managing app updates and would appreciate your insights.

 

Scenario: I have developed an app and released version 1.0 on the Creatio Marketplace. Some clients have installed this version and made custom changes to the app. 

Now, I am preparing to release version 1.1 with new features and bug fixes. My concern is that when clients update to version 1.1, their custom changes overwritten or not?

 

1] What are the best practices to ensure client-specific changes are not lost during the update?

 

2] Are there any tools or features within Creatio that can help manage and merge client customizations with new updates?

 

Thank you in advance for your assistance and suggestions.

 

Best Regards,

Ajay Kuthe

Like 3

Like

1 comments

Hi Ajay,

 

Let's look at how the customization process works in general. 

 

When a customer makes any changes to the installed application, your core logic remains unchanged. Instead, the app is extended with a new package where replaced schemas are created, inheriting your core schemas. When you make new changes to the app and customize these core schemas, after delivering a new version to the client, only those core schemas will be updated. The customer's inherited schemas will remain unchanged.

 

Therefore, custom changes will not be overwritten. However, we recommend supporting backward compatibility to avoid breaking custom changes after delivery.
 

If you are going through the update process together with the client, we suggest using the delivery process article to build a safe delivery process.

Show all comments

Is it possible to intercept using some request handler the event when a user clicks on the green "Complete" button on a Next Steps tile? This is the button in the "next-step-tile-actions" div on the page which only appears when you hover over the next step tile:

 

It would be vey helpful to be able to run some custom code when this button is clicked - in our case, we need it to save the main page record before actioning this next step, as completing the next step might automatically transition the Lead to the next stage, losing any data entered by the user.

Like 220

Like

5 comments

None of the following handlers are triggered by clicking this button, maybe I've missed some candidates but these are the ones I've tried so far:

crt.ChangeNextStepsStateRequest

crt.OpenPageRequest

crt.UpdateRecordRequest

crt.CreateRecordRequest

Also tried "brute forcing" it by overriding every handler I could find in the Creatio code, but literally nothing fires when clicking that button! Not even something like the page's crt.HandleViewModelPauseRequest (since it's a modal popup, I guess the full page doesn't actually pause like it would when navigating to a another page through clicking a lookup for example). Hopefully I've missed something, triggering some action on clicking that button would be useful.

Any thoughts/knowledge on how such a thing could be achieved?

Hi Harvey! 

 

Unfortunately, at the moment, there is no way to intercept the event of clicking on the Next-steps tile buttons. This button can call different requests depending on the type of tile, and these requests are called without the view model context, which will not allow us to intercept them from the card and use them to save card data.

 

We have registered your idea, and the R&D team has already planned the task for this improvement - they will create a special output event for the Next-steps component. This functionality will be available in future releases.

 

Thank you for making our product better!

 

Best regards,

Natalia

Thank you for the information Natalia, this would be a welcome improvement!

Show all comments

Just a quick PSA - either 8.1.2 or 8.1.3 breaks the ability we had before of being able to set Page Parameter values in the crt.HandleViewModelInitRequest request handler, since in the newer versions it appears the value is reset back to the default (similar to how fields based over table columns are) at some time after the init handler runs. This is quite frustrating, as it's reducing the number of options we have for setting values in the code where required (which it still often is with the current options for no code development).

 

A workaround that Ryan Farley has previous mentioned using for setting field values by using a javascript timeout can be used for this too, e.g.

setTimeout(() => {request.$context.TextPageParameter = "Test value";}, 300);
Like 2

Like

7 comments

Hello, Harvey

I also had such an isuue but I resolved it by calling parameter initialization after let result =  await next?.handle(request); And then in the end return result; 

Andrii Orlenko,

 

Mine was already being initialised after awaiting the result of handling the request, so it might be that sometimes this takes long enough to be ok but not always (so would introduce a race condition).

Harvey Adcock,

Thank you for the provided information!
The problem is already registered on the R&D team, and we hope to see the fix in future releases.

Anhelina,

Thank you. 

Just an FYI, I've been reporting this since 8.0.10 (see #SR-01234445). I was told this would be resolved in "the nearest releases (8.1.1-8.1.2)", however, it's still an issue in 8.1.3 without a commitment from Creatio on a specific timeframe for a resolution. This is a pretty huge pain point so it's disappointing that it's still a problem. I do love Freedom UI (and I'll take it any day over classic!) but there's been many instances of my code breaking along the way with new versions and it sometimes seems less urgent for fixes for issues that go beyond the "no code" customizations.

Ryan

Ryan Farley,

I checked that case before replying to Harvey and asked the responsible team to raise the priority for this task. I apologize for the delay and hope to see the fix soon.
Meanwhile, they shared one more workaround, which is better to use with parameters:

add the handler on parameter changing and rewrite it when the default value has appeared:

Example

Anhelina,

Yes, this approach does work if all you need when the form is initialized is to work with a single value on the page. However, that is often not the case and each property initialization can happen at slightly different times, so referencing other attributes in this same handler might not work, depending on the timing of the various attributes being loaded/initialized. Adding a separate handler for each attribute you need to work with can get messy quick.

Ryan

What I think would be nice/match the existing patterns would be to have some new request handler that does the setting of default values on the page, something like "crt.HandleAttributeInitRequest", which would perform the OOTB platform's setting of these values in the next?.handle(request) and then after awaiting the result of that a developer could set their own defaults for fields they need to, which wouldn't be overwritten (since the defaults had already been set).

 

It would also be nice to be able to "silently" set these default values (like you could in Classic UI) so that setting values in that request handler wouldn't cause the "are you sure" dialog to appear if a user closes the page without actually modifying the data themselves. Actually it would be nice to be able to do that generally from within request handler code.

Show all comments