Dear sir, madam,

 

I am syncing contacts and orders with their products via a webservice. I am syncing about 100k records. It goes very slow and just stops iterating without an error message. In the execution diagram I see nothing odd. It just hangs on 'Running' and nothing happens. 

 

There are also no logs since there is no error. 

 

What is going wrong and why is it so slow?

Like 0

Like

1 comments

Hello,

 

Typically importing vast amounts does take substantial amounts of resources and time it's inevitable.

 

As for an error, there could be a myriad of possible reasons for it so I would recommend you contact Creatio support so they could take a look.

Just us an email here - support@creatio.com.



Thank you.

Show all comments

Hi everyone,

 

Is it possible to build custom pages and section in freedom UI for Customer Portal users?

 

Thks,

Luis

Like 0

Like

1 comments

Greetings,



Currently, Freedom UI is not support for Customer Portal, but we already have a registered task for the R&D team in regards to this question.

We have linked this post to the beforementioned R&D task to expedite the implementation process.

Show all comments

When I try to uninstall a package I receive a vague "Uninstall application error" message.



Some of the packages I'm trying to delete are empty with no dependencies as well, and this still occurs.



Is there any way to find out what this error is actually about?

Like 0

Like

1 comments

Hello,

 

Please report this issue directly for our support team at support@creatio.com so we could work on the problem directly, since it cannot be resolved over Community.

Show all comments

We're referred by devlabs to the Community for support for the Excel reports builder for Creatio.  Hence I am posting.

 

Is it possible to generate an excel report from within a process?

 

I have looked at this and this post, but have not been able to get the solution suggested to work (specifically I get a 'You do not have permission to view this directory or page using the credentials that you supplied.' error).  I've also tried a process element web service call using basic authentication with the same error.

 

I am using a Creatio trial, v7.18 configuration.

 

Thanks,

Like 0

Like

3 comments

Hi Gareth,

 

The application does not include such functionality out of the box.

Could you please tell us more about the way you implemented this functionality?

Specifically, please provide the source code of the functionality, describe how it works, and specify the steps where you receive an error.

Yevhen Vorobiov,

Thank you for your reply.



I am able to retrieve an authentication cookie.  I am also able to retrieve a filter key.  However when I attempt to download the spreadsheet the WebRequest `GetResponse` call results in "The remote server returned an error: (401) Unauthorized."  It works when I query the API using Postman, but not from within a Creatio script task for some reason.



The C# code I am using to download the excel spreadsheet is as follows:

void TryForData() {
	var url = _authServiceUrl3 + "/" + _excelReportName + "/" + _key;
    // This would be for example, "https://130417-crm-bundle.creatio.com/0/rest/IntExcelReportService/GetExportFilteredData//Test_Report/ExportFilterKey_7e4a40f3-2e89-495d-9a66-91bd4a206dc4"
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.CookieContainer = new CookieContainer();
    string[] cookiesAry = new string[_authCookie.Count];
    int i = 0;
    foreach (Cookie cook in _authCookie) {
	    	cookiesAry[i++] = (cook.Name + "=" + cook.Value);
    }
    _cookieHeader = string.Join("; ", cookiesAry);
    request.Headers.Add("Cookie", _cookieHeader);
    request.Accept="*/*";
    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    request.KeepAlive  = true;
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
        }
        else
        {
        	_output = _output + response.StatusDescription + "\n\n";
        }
    }
}

 

The full C# code for the script task is as follows:

string _output = "";
string _userName = "XXXXXXXXX@XXXXXXXXXXXXXXX.com";
string _userPassword = "XXXXXXXX";
string _authServiceUrl = "https://130417-crm-bundle.creatio.com/ServiceModel/AuthService.svc/Login";
var _authCookie = new CookieCollection();
string _authServiceUrl2 = "https://130417-crm-bundle.creatio.com/0/rest/IntExcelReportService/GetExportFiltersKey";
string _cookieHeader = "";
string _bpmcsrfHeader = "";
string _key = "";
string _authServiceUrl3 = "https://130417-crm-bundle.creatio.com/0/rest/IntExcelReportService/GetExportFilteredData/";
string _excelReportName = "Test_Report";
string _data = "";
byte[] _file;
 
TryLogin();
TryForKey();
TryForData();
 
Set<string>("ProcessSchemarequestResult", _output);
return true;
 
void TryLogin() {
    var authData = @"{
        ""UserName"":""" + _userName + @""",
        ""UserPassword"":""" + _userPassword + @"""
    }";
    var request = CreateRequest(_authServiceUrl, authData);
    request.CookieContainer = new CookieContainer();
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                var responseMessage = reader.ReadToEnd();
                _output = _output + responseMessage + "\n\n";
                if (responseMessage.Contains("\"Code\":1"))
                {
                    throw new UnauthorizedAccessException($"Unauthorized {_userName} for {_authServiceUrl}");
                }
            }
			_authCookie.Add(response.Cookies);
			_output = _output + "_authCookie.Count : " + _authCookie.Count.ToString() + "\n\n";
        }
        else
        {
        	_output = _output + response.StatusDescription + "\n\n";
        }
    }
}
 
void TryForKey() {
	string esqStr = "\"{\\\"rootSchemaName\\\":\\\"Contact\\\",\\\"operationType\\\":0,\\\"includeProcessExecutionData\\\":true,\\\"filters\\\":{\\\"items\\\":{\\\"7cf7bca6-a231-4b19-bde3-44e46b7547cb\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":1,\\\"value\\\":\\\"98dae6f4-70ae-4f4b-9db5-e4fcb659ef19\\\"}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6},\\\"columns\\\":{\\\"items\\\":{\\\"Full name\\\":{\\\"caption\\\":\\\"Full name\\\",\\\"orderDirection\\\":0,\\\"orderPosition\\\":-1,\\\"isVisible\\\":true,\\\"expression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Name\\\"}}}},\\\"isDistinct\\\":false,\\\"rowCount\\\":-1,\\\"rowsOffset\\\":-1,\\\"isPageable\\\":false,\\\"allColumns\\\":false,\\\"useLocalization\\\":true,\\\"useRecordDeactivation\\\":false,\\\"serverESQCacheParameters\\\":{\\\"cacheLevel\\\":0,\\\"cacheGroup\\\":\\\"\\\",\\\"cacheItemName\\\":\\\"\\\"},\\\"queryOptimize\\\":false,\\\"useMetrics\\\":false,\\\"adminUnitRoleSources\\\":0,\\\"querySource\\\":0,\\\"ignoreDisplayValues\\\":false,\\\"isHierarchical\\\":false}\"";
	string callData = "{\"EsqString\":" + esqStr + ",\"RecordCollection\":[\"98dae6f4-70ae-4f4b-9db5-e4fcb659ef19\"],\"ReportId\":\"e01008d5-8b70-4c84-a7a2-aa8b20126030\"}";
    var request = CreateRequest(_authServiceUrl2, callData);
    request.CookieContainer = new CookieContainer();
    string[] cookiesAry = new string[_authCookie.Count];
    int i = 0;
    foreach (Cookie cook in _authCookie) {
	    	cookiesAry[i++] = (cook.Name + "=" + cook.Value);
    }
    _cookieHeader = string.Join("; ", cookiesAry);
    request.Headers.Add("Cookie", _cookieHeader);
    _bpmcsrfHeader = _authCookie["BPMCSRF"].Value;
	request.Headers.Add("BPMCSRF", _bpmcsrfHeader);
    foreach (string key in request.Headers.AllKeys) {
    	_output = _output + key + " : " + request.Headers.Get(key) + "\n";
    }
    _output = _output + "\n";
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                var responseMessage = reader.ReadToEnd();
                _output = _output + responseMessage + "\n\n";
                if (responseMessage.Contains("\"success\":false"))
                {
                    throw new UnauthorizedAccessException($"Unauthorized {_userName} for {_authServiceUrl2}");
                }
                Regex re = new Regex(@".*""key"":""([^""]*)""");
                Match m = re.Match(responseMessage);
                Group g = m.Groups[1];
                _key = g.Value;
                _output = _output + _key + "\n\n";
            }
			_authCookie.Add(response.Cookies);  // There is only one cookie returned
			_output = _output + "_authCookie.Count : " + _authCookie.Count.ToString() + "\n\n";
        }
        else
        {
        	_output = _output + response.StatusDescription + "\n\n";
        }
    }
}
 
void TryForData() {
	var url = _authServiceUrl3 + "/" + _excelReportName + "/" + _key;
	_output = _output + url + "\n\n";
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.CookieContainer = new CookieContainer();
    string[] cookiesAry = new string[_authCookie.Count];
    int i = 0;
    foreach (Cookie cook in _authCookie) {
	    	cookiesAry[i++] = (cook.Name + "=" + cook.Value);
    }
    _cookieHeader = string.Join("; ", cookiesAry);
    request.Headers.Add("Cookie", _cookieHeader);
    foreach (string key in request.Headers.AllKeys) {
    	_output = _output + key + " : " + request.Headers.Get(key) + "\n";
    }
    _output = _output + "\n";
    request.Accept="*/*";
    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    request.KeepAlive  = true;
    _output = _output + "request.RequestUri : " + request.RequestUri + "\n\n";
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            //_authCookie = new CookieCollection();
			//_authCookie.Add(response.Cookies);
			//_output = _output + "_authCookie.Count : " + _authCookie.Count.ToString() + "\n\n";
        }
        else
        {
        	_output = _output + response.StatusDescription + "\n\n";
        }
    }
}
 
HttpWebRequest CreateRequest(string url, string requestData = null)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.ContentType = "application/json";
    request.Method = "POST";
    request.KeepAlive = true;
    if (!string.IsNullOrEmpty(requestData))
    {
        using (var requestStream = request.GetRequestStream())
        {
            using (var writer = new StreamWriter(requestStream))
            {
                writer.Write(requestData);
            }
        }
    }
    return request;
}

 

I've been able to get this working using the higher level `WebClient` API,

        void TryForData()
        {
            var url = _authServiceUrl3 + "/" + _excelReportName + "/" + _key;
            using (WebClient client = new WebClient())
            {
                string[] cookiesAry = new string[_authCookie.Count];
                int i = 0;
                foreach (Cookie cook in _authCookie)
                {
                    cookiesAry[i++] = (cook.Name + "=" + cook.Value);
                }
                _cookieHeader = string.Join("; ", cookiesAry);
                client.Headers.Add(HttpRequestHeader.Cookie, _cookieHeader);
                _data = client.DownloadData(url);
                _output = _output + "_data.Length : " + _data.Length + "\n\n";
                //client.DownloadFile(url, _excelReportName + ".xlsx");
            }
        }

I think the ticket can be closed now.  I'll post the full code at some point.  Thanks for the reply Yevhen.

Show all comments

Is there any way to restrict number of file to be attached in the attachment detail tab.

I need a situation like user have to attach only one file in the section wizard and not more than that

Like 0

Like

2 comments

Hello,

 

Your business task requires additional development, as of now it cannot be achieved with basic tools only. 

 

We've registered a query for our responsible R&D team to implement the described functionality in the upcoming versions of a system.



Best regards,

Anastasiia

Kavya,

 

To achieve your business task follow the below approach,

Create a replacing module for "FileDetailV2" and add the below code,

define("FileDetailV2", [], function() {
	return {
		mixins: {},
		attributes: {},
		methods: {
			onFileSelect: function(files) {
				var fileSchemaName = this.entitySchemaName;
				if(files.length > 1 && fileSchemaName == "UsrCustomObjectFile"){ //Your file object name goes here
					this.showInformationDialog("More than 1 files are not allowed.");
					return;
				}else{
					this.callParent(arguments);
				}
			},
			upload: function(config, callback) {
				var fileSchemaName = this.entitySchemaName;
				if(fileSchemaName == "UsrCustomObjectFile"){ //Your file object name goes here
					this.CustomAttachmentCountValidation(config);
				}else{
					this.callParent(arguments);
				}
			},
			CustomAttachmentCountValidation: function(config, callback){
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
					rootSchemaName: this.entitySchemaName 
				});
				esq.filters.addItem(esq.createColumnFilterWithParameter(
					Terrasoft.ComparisonType.EQUAL, "UsrConnectedColumn", this.get("MasterRecordId")));	//Master entity Connected column
				esq.getEntityCollection(function (result) {
					if (result.success && result.collection.getCount() > 0) {
						this.showInformationDialog("More than 1 files are not allowed.");
					}else {
						this.Terrasoft.ConfigurationFileApi.upload(config, callback);
					}
				}, this);
			},
		}
	};
});

Let me know if this helps in achieving your objective.

 

Warm Regards,

Sourav Kumar Samal

Show all comments

I'm trying to add an object in my local account and add a parent object to the object, but when I try to add it, I get the error that the menu does not appear. I tried typing any name, it still comes up blank. What can I do?

Like 0

Like

5 comments





This is the area I mentioned on another computer, could it be related to the installation files?

Burak Toprak,

 

What is the product version you are using?

 

 

Sourav Kumar Samal,



8.0.6 

Hi!

 

If you are trying to create an object that should inherit properties from other packages, and nothing is being inherited, make sure you have added dependencies to those packages.

 

To do this, you can open the "Dependencies" section on the package creation page and add dependencies to the packages from which you want to inherit properties. If the package has dependencies, the installation of these dependencies is checked during package installation, so make sure you have added all the necessary dependencies for inheriting properties.

 

If the problem still persists, make sure you have added the proper object settings according to your requirements. If necessary, refer to the Creatio documentation https://academy.creatio.com/docs/7-17/developer/development_tools/packa….

To add to what Alla said, whatever object it is that you want to select as your parent, find what package that object is in and then add that package as a dependency to your package. If you're wanting to select BaseEntity, I believe that package is Base.

Ryan

Show all comments
Question

Hi community, 

 

I am looking to place a custom script (widget) to display on all pages. Does anyone know the best way to do this? 



I have adjusted system setting to activate google tag manager, but not having any luck displaying the widget. 





Thanks!

Harry

Like 0

Like

4 comments

Greetings,



Your can implement such behavior by following our guide on the Academy page: https://academy.creatio.com/docs/developer/interface_elements/dashboard…

Hi Mykhailo, I was referring to a chat "widget" or in this exact instance a widget that the team can use to report bugs in Creatio (implementation) or request features. 

Hi Harry,

 

You need to add additional button to the ContextHelpSchema (for example like it's done for the askSupportMenuItem in the schema diff):

{
				"operation": "insert",
				"name": "askSupportMenuItem",
				"parentName": "HelpButton",
				"propertyName": "menu",
				"values": {
					"caption": {"bindTo": "Resources.Strings.AskSupport"},
					"markerValue": {"bindTo": "Resources.Strings.AskSupport"},
					"itemType": this.Terrasoft.ViewItemType.MENU_ITEM,
					"click": {"bindTo": "callMailTo"},
					"tag": "support",
					"imageConfig": resources.localizableImages.Support
				}
			},

and in your custom button you can either use already implemented callMailTo method (so your users could report bugs or features via email) or create your own method (to open some URL or oepn some page). As a result this button will be available on any page and your business task will be achieved.

Hi Oscar, 



Thank you for the input. 



I am actually just simply looking to allow an external script to be run, so my widget can appear at the bottom right of the screen. I am using https://gleap.io , but this is similar to any third party chat app. 



Is there anything stopping this from working as it seems like Google is picking up the G-tag. 

 

Thanks

Show all comments

Hi,



Not sure if I missed it, or if it is not implemented yet. Where can I find the equivalent of "field filter values" in standard UI business rules  (image below) for a Freedom UI Form page ?



Like 0

Like

3 comments

It doesn't exist yet in the page editor. However, you can set it up manually, although it's a bit tedious. If you refer to this thread https://community.creatio.com/questions/filtering-lookup-freedom-ui-hel…;

Oleg outlines how to set it up like a business rule. I also outline how to handle the lookups request to load it's data source and then create the filter t that time (which makes it easier to refer to other values in the page that you want to use in the filter). 

Ryan

Ryan Farley,

 

Hi,



just read the 8.0.7 release notes ""Advanced business rule conditions. It is now possible to set up more advanced business rules using system settings and system variables in business rule conditions. For example, you can set up a rule that displays the [ Results ] field if the current user is the record owner.""



Do you think it covers this functionality ?

 

Damian

 

Is this already available in latest version of freedom UI?

 

Show all comments

Hi community!

have some questions about printables.

I have specified conditions for filtering record for printable. Until I select any record printable is inactive (unable to select it from PRINT list). Does it work only that way? Is it possible to make it active without selecting records as I have filtering conditions.

One more question. When I select several records and choose my printable I receive as many files as records selected. Is it possible to have only one file instead of several?

Like 0

Like

3 comments

Hello!

 

The system cannot recognize what has to be printed. Thus, it is necessary to click on the record in the section, so that it would be selected in the section list and the report button will become active.

 

As for one printable instead of multiple ones, unfortunately, it is not possible to implement your business task using custom methods of printables at the moment.

Word printables are uploaded this way: 1 document per 1 section entry.

Our development team already has a registered issue with your question. We have registered your idea of ​​unloading Word Printables on several section records and it may be implemented in future releases.

 

Best regards,

Yuliya Gritsenko

Yuliya Gritsenko,

Hello, 

Maybe it is possible to implement my business task with fast reporting?

Yana,

Hello,

 

FastReport functionality is not supported starting from version 8.0.3.

Show all comments

Like 0

Like

1 comments

Hello,

 

Could you please elaborate a bit on your business task as it's not quite clear what should be done?

 

Thank you in advance!

Best regards,

Anastasiia

Show all comments