Hi all,

I'm looking for a reporting tool for Creatio, where i can also use very complex queries. I'm user to work with tools like Microsoft reporting Services or Chrystal reports.  We're working in the cloud, and i don't find a tool that is comparable to those tools.  How do you all create such reports, and run complex queries  

Like 0

Like

3 comments

Hello!

 

In this case, we recommend exploring the Creatio Marketplace, where you can find a variety of reporting solutions that may meet your requirements, including those supporting advanced analytics and complex data processing.

 

Please follow the link: https://marketplace.creatio.com/catalog?search=report&check_logged_in=1&page=6

 

Have a nice day!

Sadly, no such reporting option currently exists for Creatio. We typically with extend the Word printables using a lot of custom macros for data retrieval and the use of views and have the complex logic performed in the view. For now, that is the best option.

Does anybody has any experience with the Power BI connector? I don't know Power Bi, but i was always under the impression that is was something like Reporting Services....

 

Show all comments

I am trying to open a document in MS Word desktop (like the online version of viewing MS Word can). This is possible by applying a prefix to the document URL on MS Teams. My code in the page already works good:

var docUrl = await request.$context.PDS_UsrColumn1_u8ye1ig;
const wordUrl = `ms-word:ofe|u|${encodeURIComponent(docUrl)}`;

But using the wordUrl variable on a Webinput field, or even a button.click event doing a window.location.ref always results in Creatio still encoding the Url. Creatio always adds the console message:

Launched external handler for 'ms-word:ofe%7Cu%7Chttps%3A%2F%2Fcompany.sharepoint.com%2F%yadayadayada

where it should be ms-word:ofe|u|https://

Does someone know how to bypass the encoding for a specific handler or for this page?

Like 0

Like

6 comments

Can you share the complete handler code and explain how have you disabled the "To protect you from unsafe content office has blocked opening this file" error message?

Sure, here is the handler. It already opens MS Word, but because of the safe url encoding it won't open the correct document... 

handlers: /**SCHEMA_HANDLERS*/[
            {
                request: "usr.PushButtonRequest",
                /* Implementation of the custom query handler. */
                handler: async (request, next) => {
                    this.console.log("Button Open in MS Word pushed...");
                     var docUrl = await request.$context.PDS_UsrColumn1_u8ye1ig;
                      const wordUrl = `ms-word:ofe|u|${encodeURIComponent(docUrl)}`;

                    // scenario 1: use window.location.href
                    //window.location.href = wordUrl;

                    // scenario 2: use the online found solutioon to add a link with a click
                    const link = document.createElement('a');
                    link.href = wordUrl;
                    link.target = '_blank';
                    link.rel = 'noopener noreferrer';
                    document.body.appendChild(link);
                    link.click();
                    document.body.removeChild(link);
                    
                    this.console.log("MS Word Url set to: " + wordUrl);
                    /* Call the next handler if it exists and return its result. */
                    return next?.handle(request);
                }
            },
        ]/**SCHEMA_HANDLERS*/,

Bas Kroes,

well I get the same URL in both cases (using a regular text field and the web link input) and in both scenarios I get this popup:

Maybe I am testing in the wrong manner?

Oleg Drobina,

It looks like it is a browser issue. I am using Ms Edge. What are you using?

Bas Kroes,

I am testing in Chrome, but I get the same error in Edge.

That's odd indeed using the same code 🤔

But your url did not get unwanted modified?

Show all comments

Hello, community, I'm new to Creatio. My client wants the printed order document to have a consistent order, meaning the products added to their order in the itemization area should be: tools at the top, services at the bottom.

Example:
Item 1 - cutter, 1 piece, amount 10
Item 2 - hammer, 1 piece, amount 3
Item 3 - shipping service, 1 piece, amount 10 (always at the bottom)

When capturing and sorting the products in the order, they get jumbled up, and the report doesn't respect the order.

Is there a way to tell Creatio to respect and sort the products and services in my printed report?

Like 0

Like

1 comments

Hello,

The sort column should be presented in the template to keep the sort order in the report and on the UI; in other words, the issue occurs because you have not added the column by which the fields are sorted on the UI to the template of your report. 

When the report is generated, the system ignores all columns that are not presented in the template, so data cannot be sorted by them. 

Our responsible R&D team is already aware of the described behavior and has registered the corresponding task to implement the functionality in the upcoming versions of the application.

Show all comments

While configuring OAuth authentication to call external web services, I cannot find a way to set grant_type=client_credentials. Is there a way to make configuration use client_credentials instead of authorization_code grant_type?

I also tried to configure a web service to directly call the IdP access token endpoint passing the grant_type I need, but I was not able to find a way to send the body content-type in application/x-www-form-urlencoded format.

Do you have any suggestions to get the OAuth token using client_credentials?

Like 1

Like

1 comments
Best reply

Greetings!

There’s no way to get this using the basic method - it doesn’t support sending form requests.
You’ll need to write a task script for that.

It requires writing C# code that uses WebRequest to send the request.
For example:

public bool Execute(UserConnection userConnection)
{
    var tokenUrl = "https://your-creatio-instance.com/connect/token";
    var clientId = "your_client_id";
    var clientSecret = "your_client_secret";
    var request = (HttpWebRequest)WebRequest.Create(tokenUrl);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "application/json";
    var postData = $"grant_type=client_credentials&client_id={HttpUtility.UrlEncode(clientId)}&client_secret={HttpUtility.UrlEncode(clientSecret)}";
    var data = Encoding.UTF8.GetBytes(postData);
    try
    {
        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
        using (var response = (HttpWebResponse)request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var responseText = reader.ReadToEnd();
            var tokenResponse = JsonConvert.DeserializeObject<OAuthTokenResponse>(responseText);
            // if you want you can do something with tokenResponse.access_token            
            return true;
        }
    }
    catch (WebException ex)
    {
        if (ex.Response != null)
        {
            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            {
                var errorText = reader.ReadToEnd();
                // Here also you can log the error or display it
                Console.WriteLine("OAuth error: " + errorText);
            }
        }
        else
        {
            Console.WriteLine("WebException without response: " + ex.Message);
        }
        return false;
    }
}

Regards, 
Orkhan

Greetings!

There’s no way to get this using the basic method - it doesn’t support sending form requests.
You’ll need to write a task script for that.

It requires writing C# code that uses WebRequest to send the request.
For example:

public bool Execute(UserConnection userConnection)
{
    var tokenUrl = "https://your-creatio-instance.com/connect/token";
    var clientId = "your_client_id";
    var clientSecret = "your_client_secret";
    var request = (HttpWebRequest)WebRequest.Create(tokenUrl);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.Accept = "application/json";
    var postData = $"grant_type=client_credentials&client_id={HttpUtility.UrlEncode(clientId)}&client_secret={HttpUtility.UrlEncode(clientSecret)}";
    var data = Encoding.UTF8.GetBytes(postData);
    try
    {
        using (var stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length);
        }
        using (var response = (HttpWebResponse)request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var responseText = reader.ReadToEnd();
            var tokenResponse = JsonConvert.DeserializeObject<OAuthTokenResponse>(responseText);
            // if you want you can do something with tokenResponse.access_token            
            return true;
        }
    }
    catch (WebException ex)
    {
        if (ex.Response != null)
        {
            using (var reader = new StreamReader(ex.Response.GetResponseStream()))
            {
                var errorText = reader.ReadToEnd();
                // Here also you can log the error or display it
                Console.WriteLine("OAuth error: " + errorText);
            }
        }
        else
        {
            Console.WriteLine("WebException without response: " + ex.Message);
        }
        return false;
    }
}

Regards, 
Orkhan

Show all comments

Hello Community,

I'm working on a login page and want to make the password field secure by hiding the input characters (so that they appear as "**" or dots).


What is the best way to do this in Freedom UI?

Any help or code examples would be appreciated. Thanks in advance!

Like 0

Like

1 comments

Open the code for the page and locate the Password field in the viewConfigDiff. Change the line: 

"type": "crt.Input"

To the following: 

"type": "crt.PasswordInput"

Ryan

Show all comments

Hello,

I tried to change the width of one of my Freedom UI mini pages, by adding the code below to the page. When I opened from the designer, it has the width that I want for a few seconds before changing back to the default width. What I'm missing?

Thanks,

Jose

 

          {
                "operation": "merge",
                "name": "Main",
                "values": {
                    "fitContent": true,
                    "layoutConfig": {
                        "width": 840
                    }
                }
            },

 

Like 0

Like

2 comments
Best reply

There's a feature you can add/enable called "EnabledAppearanceSettings" that turns on the ability to choose different sizes for the modal/mini pages. See more here: https://customerfx.com/article/changing-the-size-of-freedom-ui-modal-mi…

  1. Go to https://[creatiourl/0/flags
  2. Search to see if you have the feature named "EnabledAppearanceSettings" (you won't have it, but just to make sure. If not, click Add to add it, enter:
    1. Code = EnabledAppearanceSettings
    2. Enabled = checked
    3. Save, then click Clear Cache
  3. Now when you open the designer for a modal/mini page, you'll see some size options

Ryan

There's a feature you can add/enable called "EnabledAppearanceSettings" that turns on the ability to choose different sizes for the modal/mini pages. See more here: https://customerfx.com/article/changing-the-size-of-freedom-ui-modal-mi…

  1. Go to https://[creatiourl/0/flags
  2. Search to see if you have the feature named "EnabledAppearanceSettings" (you won't have it, but just to make sure. If not, click Add to add it, enter:
    1. Code = EnabledAppearanceSettings
    2. Enabled = checked
    3. Save, then click Clear Cache
  3. Now when you open the designer for a modal/mini page, you'll see some size options

Ryan

Ryan Farley,

Thanks. That's exactly what I was looking for.

Show all comments

I am having issues creating a data item for data stored in an object I created. I am not sure why I am having this issue. I have a data item for the Union lookup and the Union lookup values. I attached an image for reference.



Like 0

Like

2 comments

This is telling you that the record you’re binding references a record in UsrEmployeeJobHistoryUnion with the Id in the message and that record is not bound in the package. To fix, bind data from UsrEmployeeJobHistoryUnion and add that record. 
Ryan

Hi Ryan,

I'm also facing the same issue while binding lookup. In my case, I have tried to create 1:1 relationship between lookups.

Service Type Lookup:
Service Type Lookup

Service Sub Type:
Service SubType Lookup

So while binding these lookups, I'm getting the following error:

Error: Service Type Lookup
Error: Service SubType Lookup

Query:
1. Is there any way to resolve above problem?
2. Is 1:1 relationship is correct?
 

Show all comments

Hi all,

i'm following this guide https://academy.creatio.com/docs/8.x/no-code-customization/base-integrations/microsoft-email-contacts-and-calendar/set-up-the-ms-exchange-and-microsoft-365-services#title-192-1 to configure access to an exchange 365 mailboxy, by oauth authentication.

Exchange side configuration has been already carried out and i have configured clientid and secret on creation (i've configured tenantid too which is not mandatory but i think it should be).

Whenever i try to associate a mail to the mailbox service i've configured i'm redirected to a microsoft page prompting me for a login: https://login.microsoftonline.com/common/oauth2/authorize

This puzzles me because in client credentials authorization no login should be asked to the user. In order to figure out where the issue is i would normaly trace the rest call made by creatio to obtain the token i invoke graph api. Sadly i couldn't figure out at all how to do this or if it is even possible.

Do you have any suggestion on how i can debug this scenario or similar ones where i have to check api call made by creatio?

Thanks

Like 0

Like

4 comments
Best reply

Roberto Binda,

What you're describing will work (having the system start a process every time an email is received in that mailbox or even auto sending emails from that mailbox in the background - all independent of users accessing the system). You just need to add the mailbox first. The credentials is only needed initially add the mailbox. Accessing any mailbox does require credentials, which is what gives the mail server context as to which mailbox is being accessed. 

If this is some system mailbox that will be used for automated messages, there still is a user context to get access to the mailbox. What I often do is add that as an admin level user in Creatio. Once added, Creatio will continue to retrieve or send email via that mailbox regardless of whether that admin level user ever logs into Creatio again. The mailbox will be available to use in processes etc.

When you set up OAuth for Office365/Exchange mailboxes, it doesn't mean that no login info is asked of the user. It only means that Office365/Exchange is who asks for the login info of the user, not Creatio. The expected behavior is that a user adds their mailbox, they get redirected to the Exchange/Office365 login to authorize Creatio to use the mailbox, then redirected back to Creatio. If the user is already logged into their mailbox in the browser, they will not be asked to log in again and will only see the screen to authorize Creatio to use the mailbox.

Ryan

Ryan Farley,

Hi Ryan, thank you for your feedback. I guess i gotta go back to the accademy because i really didn't figure out this mimic. I thought, since we were setting up a client credentials oauth flow, that it was a machine to machine integration. Without the need for a user to input any password (which in my scenario isn't even known). If a user authentication is required to obtain a token that persist in the session i don't see how it would be possible to create automated and unattended processes that receive and sends from this mailbox. Above all what i'm trying to accomplish is to have a business process to start automatically every time a mail is received in the mailbox (independently by the users logged in the system). At this point it's hard for me to understand if it is even possible with out of the box features. 

Roberto Binda,

What you're describing will work (having the system start a process every time an email is received in that mailbox or even auto sending emails from that mailbox in the background - all independent of users accessing the system). You just need to add the mailbox first. The credentials is only needed initially add the mailbox. Accessing any mailbox does require credentials, which is what gives the mail server context as to which mailbox is being accessed. 

If this is some system mailbox that will be used for automated messages, there still is a user context to get access to the mailbox. What I often do is add that as an admin level user in Creatio. Once added, Creatio will continue to retrieve or send email via that mailbox regardless of whether that admin level user ever logs into Creatio again. The mailbox will be available to use in processes etc.

Ryan Farley,

Than you Ryan, i've got a clearer picture now. Your feedback was really helpful

Show all comments

Hello

I'm trying to mark a boolean as required, but that option doesn't appear in the settings.

Does anyone know how I can mark the checkbox as required?

Fig. 1 Set up a Checkbox field

 

Thank you. 

 

Like 0

Like

2 comments

Making a checkbox required would only mean it can be checked (since there's no difference between unchecked and not filled in). Alternative approach is to use a lookup with Yes/No values (since then there is also a not filled in)

Hello Ryan Farley,

What happens is that I have a set of questions with three answer options each, and for each question, only one option needs to be filled out. I have a business rule that marks the boxes as required, but when one of them is selected, it disables the other two and makes them optional. The problem is that once you select a box and uncheck it, the required  disappears, allowing you to save with the three options blank. That's why I want to make the checkboxes required from the configuration.

 

And the reason for the checkboxes is that I require the checkmarks to appear in the Word report.

 

 

 

Show all comments

Hi community,
    I have a use case where i want to include the images in printable reports in which i have to use the images which is uploaded in the attachements. Kindly tell me how to do this.

Thanks

Like 0

Like

2 comments

Hello,

Adding images to a printable form is possible using basic methods — the key is to correctly drill down and select the right column.

You need to create a table part in report with the required object. After that, add a column as follows:

image.png

image.png

image.png

I hope this helps. All the best!

Hanna Shevchenko,

The images are not visible. Would you please re-add them?

Show all comments