Hi all, 

I'm migrating from Classic UI to Freedom a screen that has an Info button, as described in the following post:



https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/platform-customization/classic-ui/record-page/field/examples/attach-an-info-button

 

How can we do that in FreedomUI?

Like 0

Like

4 comments

Hi,

 

Have you tried the tooltip in the page designer at field level ?

Yes, but how can we format that text?

I'd like to add bullets in the text and breaklines

You can add add HTML to a tooltip in Freedom UI. .

If you need some dynamic content for the tooltip, you can add an attribute and bind it to the tooltip property, then set the tip at runtime by setting the attribute.

Ryan

Awesome! thanks

Show all comments

Hi guys! I was wondering if there's a direct way to connect Creatio with Airtable...

 

Thanks in advance,

ALfredo

Like 0

Like

2 comments
Best reply

Hello,

 

In the basic version, there is no integration with Airtable.

However, you can integrate using other option - https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

 

Best regards,

Yuliya

Hello,

 

In the basic version, there is no integration with Airtable.

However, you can integrate using other option - https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

 

Best regards,

Yuliya

Thank you!

Show all comments

 

Hi all, 



Just wondering whether is there any way that we can run some javascript code / callback function upon completion of business process execution in client module?

 

If so, could you provide the sample code for reference?

 

Thank you very much.

Like 0

Like

2 comments

Hello,

 

If this is needed for versions lower than 8.0.6 (version when the LiveEditing feature was added out-of-the-box that will reload entity automatically in case changes to it were applied by a process) - you can always send a socket message to the client-side logic (like in the example but the message sending mechanism should be in the last script-task of the business process, on the client-side create a method that is triggered upon receiving the message)  or use an already-developed marketplace addon for it.

To elaborate more on what Oleg mentioned. There's no way to have a callback for when the process completes (the callback commented in your code is a callback for the completion of *starting* the process). A process can have things that wait for a period of time, so not really possible to wait for completion.

The approach to take is for the process to notify the client-code that it has completed by sending it a message. This article shows how to send the message: 

https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

If needed, this article shows how to receive the message in a Freedom UI page: 

https://customerfx.com/article/receiving-server-side-messages-in-a-crea…

However, if the page is Freedom UI, a better approach is to enable live data updates for the object so the refresh happens automatically when the data changes in the process. More about that here: 

https://customerfx.com/article/automatically-refreshing-a-creatio-freed…

From the code you posted, it looks like this is a classic page, so you'd have to go the first route for sending a message from the process to the client page.

Ryan

Show all comments

I changed the SQL Server Authentication settings to Windows Authentication Mode. But when I login to Creatio I get a Login Failed error.

What do I need to set in the Connection String?

 

Like 0

Like

1 comments

Hey guys,

 

I have a ComboBox that I would need to have a dynamic list of values. Is there a way in Freedom to make it so that the values do not come from a specific lookup dataset, and are only manually populated?

 

Lyle

Like 2

Like

1 comments

Hello!



Currently it's not possible to achieve using handlers or basic Freedom UI wizard. We've already created a suggestion to our R&D team to make it possible in future application versions and once it's done we will inform everyone in the Academy and Release notes. Thank you for helping us in making the app better!



Best regards,

Anton

Show all comments

Hello,

 

I have read through on locking fields using client module in Creatio. I have found that we can simply setting the "isModelItemEnabled" to true/false. And for more complex situation, we can create a function named "isModelItemEnabled" and write our code logic and return boolean value conditionally.

 

At the same time, I noticed that "isModelItemEnabled" is triggered before "onEntityInitialized" is triggered. This results to some of the values required to be used in "isModelItemEnabled" undefined.

 

Is there anyway to workaround this?

Like 0

Like

2 comments
Best reply

Rather than create a function, use an attribute. Then in the onEntityInitialized you can read any values and then set the attribute to true/false. See an example here: https://customerfx.com/article/completely-locking-a-page-via-code-inclu…

Also, just to point out, you mention locking a single field. If all you need is to lock a single field, there's no need to use IsModelItemsEnabled. Instead you can bind the visible for the field to an attribute and set as true/false as needed. See https://customerfx.com/article/how-to-enable-or-disable-a-field-on-a-pa…

Ryan

Rather than create a function, use an attribute. Then in the onEntityInitialized you can read any values and then set the attribute to true/false. See an example here: https://customerfx.com/article/completely-locking-a-page-via-code-inclu…

Also, just to point out, you mention locking a single field. If all you need is to lock a single field, there's no need to use IsModelItemsEnabled. Instead you can bind the visible for the field to an attribute and set as true/false as needed. See https://customerfx.com/article/how-to-enable-or-disable-a-field-on-a-pa…

Ryan

Okay, I will try it out. Thank you very much Ryan, best as always😄

Show all comments

Hello,

 

I have a page with the progress bar (cases) on Studio 8.1.0.6827. To simplify the explanation, let's say there are two stages based on a status field: New Request and Completed and I have business rules stating that the request description is required if the status is Completed. 



If the 'Save record on stage change' is off, when I click on the Completed bar, the description field becomes require and I cannot save without entering. But of 'Save record on stage change' is on the record is saved and the status changes to Completed even if the description was not entered. 



Any ideas on how to make it work where the 'Save record on stage change' is on but the business rules are applied, and the record is not saved if the required fields for that status are missing?



Thanks,

Jose

 

Like 1

Like

1 comments

Hello!

 

To provide you with an answer, we need to investigate it deeper. Please contact the Support Team directly via support@creatio.com and provide all these details.

 

Best regards, Mariia

Show all comments

Hello, 

 

Could someone please explain me how I can modify the answers that a task/activity can have. I mean, once I have completed a task (to do), I get a lot of options as a result of the task, I would like to reduce the result options.

Attached is an image with all the options I am currently getting and the ones I would like to simplify to 2 or 3. 

 

All answers will be welcome.

Thank you in advance.

File attachments
Like 0

Like

2 comments

Hello, 

These are in the "Activity results" lookup. It won't let you delete these choices if they've been used. Also, an easy way to remove them from the list of choices is to just check the "Available in process only" checkbox. If you check that they will no longer appear in the dialog.

Ryan

Thank you so much for your feedback Ryan, it has been very useful!

Show all comments

please help me what is causing this error   

#docker logs b6f87859e923

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.

   at Terrasoft.EventSourcing.Configuration.EventStoreUtitities.GetEventSourcingConfiguration(Configuration configuration) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.EventSourcing/Configuration/EventStoreUtitities.cs:line 70

   at Terrasoft.WebHost.ApplicationModule.SetupEventStore(IServiceCollection services) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/ApplicationModule.cs:line 227

   at Terrasoft.WebHost.ApplicationModule.Configure(IServiceCollection services) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/ApplicationModule.cs:line 351

   at Terrasoft.Core.DI.AutofacContainerBuilder.Build() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core.DI/AutofacContainerBuilder.cs:line 63

   at Terrasoft.Core.DI.ContainerBuilder.Build() in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core.DI/ContainerBuilder.cs:line 100

   at Terrasoft.Core.DI.ServiceProvider.ServiceProviderFactory.CreateServiceProvider(ContainerBuilder containerBuilder) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.Core.DI/ServiceProvider/ServiceProviderFactory.cs:line 23

   at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder)

   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()

   at Microsoft.Extensions.Hosting.HostBuilder.Build()

   at Terrasoft.WebHost.Program.StartWebApplication(String[] args) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 26

   at Terrasoft.WebHost.Program.<>c__DisplayClass2_0.b__0(StartOptions _) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 62

   at CommandLine.ParserResultExtensions.MapResult[T1,T2,TResult](ParserResult`1 result, Func`2 parsedFunc1, Func`2 parsedFunc2, Func`2 notParsedFunc)

   at Terrasoft.WebHost.Program.Main(String[] args) in /opt/buildagent/work/ApplicationCoreLinux/TSBpm/Src/Lib/Terrasoft.WebHost/Program.cs:line 59

Like 1

Like

1 comments

Hello,

 

Please check your binary files and connection string.

 

To get started, run the application outside of Docker directly on Linux.

Show all comments

Hello,

 

I have a web service that generates a file. I need to attach that file to a record. I see there is an option to the Process File Component passing a File as parameter, but the Parameter is Expecting a IFileLocator. How can I use a script to create a IFileLocator from a full file path on Creatio Studio version 8.1? 

 

Thanks,

Jose

File attachments
Like 0

Like

2 comments
Best reply

Hello,

You should use a script task to work with files from the web service.

 

More details about the API file:



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

Hello,

You should use a script task to work with files from the web service.

 

More details about the API file:



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

Thanks Cherednichenko. Using the information provided I wrote the C# below to attach a generated file to a record.



public void AttachFile(string schemaName, Guid recordId, string fullFilePath) {

            /* Create a unique ID for the new file. */

            Guid fileId = Guid.NewGuid(); 

            /* Create a file locator for the new file. */

            var fileLocator= new EntityFileLocator("SysFile", fileId); 

            /* Get an IFile object for the new file. */ 

            IFile file = UserConnection.CreateFile(fileLocator); 

            /* There is no file metadata or file content in the available file storages. Specify the file name in the file metadata. */

            file.Name = (new System.IO.FileInfo(fullFilePath)).Name; 

            /* Set an attributes for the new file: */

            file.SetAttribute("RecordSchemaName", schemaName); 

            file.SetAttribute("RecordId", recordId);             

            /* Save the file metadata Do this BEFORE saving the content. */

            file.Save(); 

            using (var sourceStream = new FileStream( fullFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true)) {

                file.Write(sourceStream, FileWriteOptions.SinglePart);            

            }

        }

Show all comments