Hello Community,

Besides the built-in functionality for data import, I have seen in community posts the possibility to import data to Creatio from ODATA protocol.

Are there any examples regarding this feature, academy article, or what to know before implementing it?

Best regards,

Sasori

Like 1

Like

1 comments

Hello Sasori,

 

Regarding the general function of OData, you can find detailed information in the following resource:

OData Overview

 

For more specific examples and methods, you can refer to this documentation:

OData Methods and Examples

Show all comments

Здравствуйте, поставили на тест 8.0.8 Service Enterprise. Есть какие-то не состыковочки локализации интерфейса. Выбран язык русский, однако половина интерфейса на английском.

Захожу в раздел Переводы в надежде, что там что-то можно поменять, как в старых версиях. Но он не загружается.

Like 1

Like

5 comments

Такабаев Тимур,



Здравствуйте,  мы проверили и увидели, что действительно данная проблема наблюдается в версии 8.0.8. Мы передали данную ошибку на ответственную команду, чтобы исправили в следующих релизах. 



Спасибо, что помогаете делать продукт лучше. 



С уважением, 

Орхан Годжаев. 

Orkhan,

Орхан, здравствуйте! Как сейчас быть? Можем ли мы сами каким-то образом выполнить переводы указанных элементов?

Такабаев Тимур,



Как альтернативный вариант мы можем вам предложить воспользоваться данной документацией: 

 

https://academy.creatio.com/docs/user/customization_tools/ui_and_busine…



С уважением, 

Орхан Годжаев. 

Orkhan,

Указанная вами документация для страниц редактирования. Это всё можно менять в разделе Переводы в настройках системы.

Для элементов UI ядра этот метод не подходит. Например для заголовков пунктов меню при нажатии на кнопку профиля или поля Search или "Drop files here or use" etc...

Show all comments

Hi,



I am scanning around and couldn't fine anyway on how to add/display the new column I added on my schema. It's a File Datatype which meant to be used to upload any file.



I kept getting:

 "Unhandled Promise rejection: Object { message: "DataValueType.BLOB is not supported" }"

Here's the sample DIFF script I added.

{
				"operation": "insert",
				"name": "TCFileObj",
				"values": {
					"layout": {
						"colSpan": 12, "rowSpan": 1, "column": 0, "row": 5
					},
					"bindTo": "TCFile",
                    "controlConfig": {
                            "fileUpload": true
                        }
				},
				"parentName": "ParentName",
				"propertyName": "items",
				"index": 6
			}





 

Like 0

Like

4 comments

Hello,

The data type "File" doesn't mean to be displayed on the page and therefore you cannot upload files to it using the UI.

If you want to work with files, please use the Attachment detail.

Dmytro Vovchenko,



Is it a datatype not meant to be use in Schema/Object level?

Solem Khan Abdusalam,

 

Hi,

 

Please use a standard and working approach with the "Attachments and notes" detail on the page to upload files. There is no particular documentation or example on how to add DataValueType.BLOB fields on the page, but you can review how the column is added to the system setting with "MenuLogoImage" code page:

and implement the same.

Oleg Drobina,



That's actually a very cool way to start somewhere!

I'll check it out.



I'll post the sample code after making it work.

Show all comments

Can we get MFA implemented for Portal access?  The portal may contain private/personal info and would be required for compliance.

Like 2

Like

3 comments

Hi Mike,

 

At the moment there is no possibility to set up a two-factor authentication directly through Creatio.



But I believe your business task could be achieved by SSO integration.

Bogdan,

If Creatio wants this product to be adopted by Enterprise level customers, you will want to have this capability.  In today's world of security, I'm shocked and frankly dismayed that your CISO and CTO don't have this on your roadmap.  unbelievable.

Hi Mike Oliver,



The 2FA is currently in beta testing:

 

Please pay attention to the list of limitations:



1. Integrations only work through OAuth, as the integration cannot pass the second factor.

3. Additional configuration of the mobile application is required - the mobile app utilizes the system setting MobileExtendedAuthenticationUrl.

3. Only one authentication provider is allowed (provider with built-in second factor).

4. The provider must be registered with the name "InternalUserPassword" for the proper functioning of password expiration checks.

5. Not supported for portal users.

6. There is no possibility to specify which users require a second factor. It is enabled for all users.

 

 

Show all comments

Hi all, 

 

Does anyone know if it is possible to send the crt.CreateRecordRequest to a specific page and not to the objects default form? 



I want open the a modal form page rather than the default form. I suppose it will be added in upcoming releases but wondering if there is a workaround now.



Thanks!

Like 0

Like

3 comments

Hello,

 

In the basic code I found this example:

request: "crt.CreateRecordRequest",
                            params: {
                                entityName: a,
                                entityPageName: t.cardSchemaName,
                                defaultValues: o
                            }

try using the same approach, but change entityName and entityPageName. This should open your custom page.

Hi Oleg, that does work, thank you. 



Only trouble is it opens the modal as a full width page. I don't suppose anyway around that in this version?



Harry,

 

I am affraid there is no workaround for it, but I will registed a task for our R&D team on this matter. Thank you in helping us to make the application better!

Show all comments

Hello,

Lookup fields on Freedom UI have a feature that let user create a new record from lookup Field, like on the following screenshot (Owner field on Account Form Page):

I'd like to set some default values on such created record. For example, I'd like to set the new contact's account to current account record. I'm able to do this while using simple buttons, but I don't see such possibility for lookups.

It will be ok, even if the answer requires some coding, I have nothing against :)

 

Like 1

Like

4 comments

Hello,



You can set the default value for the column if the object settings:



 

Hi,

I know that its possible to set default value on the object level, but unfortunately it doesn't solve my problem. Let's see an example:



In Account, I have two important fields: Owner (which is my company employee, who takes care about the customer) and Primary contact (which is my customer, related with the account). Both fields refer to Contact records.

 

In Contact, I have a Type lookup, which I use to recognize whether a contact is my company employee or a customer.

 

I'd like to set Type to my company Employee, when adding record from Owner field, or set it to Customer otherwise. I can't do it by setting a default value on the object level.

 

Anyway, thank you for your answer :)

 

Hello again, do anyone know answer for my question? :)

Maybe try to set value through Business Rules. It can do this as much as I understood your query.

Show all comments

Hello,

some elements like button have "clicked" attribute, where we can configure which request should be emited and which params should be passed to its handler. I try to use this feature, but it doesn't always work I expected.

For example, I created two new elements on Accounts Form Page:

- a button

- a lookup (with adding new record from list control enabled)

 

The first one emit crt.CreateRecordRequest with some params, the second one consists of two viewConfigDiff entries: one of them is a crt.ComboboxSearchTextAction and emits crt.CreateRecordFromLookupRequest

request with no params.

I tried to add my custom param to both elements. You can see it at the source code I've attached to this post. Then, I created two handlers, for handling both types of requests. In the result I can access to my custom param from button click handler (the alert with text "Hello" shows up), but not for the lookup create new record handler (the alert display "undefined").

 

define("Accounts_FormPage", /**SCHEMA_DEPS*/[]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/()/**SCHEMA_ARGS*/ {
	return {
		viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
			{
				"operation": "insert",
				"name": "ComboBox_xj333ko",
				"values": {
					"layoutConfig": {
						"column": 1,
						"row": 9,
						"colSpan": 1,
						"rowSpan": 1
					},
					"type": "crt.ComboBox",
					"label": "$Resources.Strings.LookupAttribute_it9tgfm",
					"labelPosition": "auto",
					"control": "$LookupAttribute_it9tgfm",
					"listActions": [],
					"showValueAsLink": true,
					"controlActions": []
				},
				"parentName": "SideAreaProfileContainer",
				"propertyName": "items",
				"index": 8
			},
			{
				"operation": "insert",
				"name": "addRecord_al7wl16",
				"values": {
					"code": "addRecord",
					"type": "crt.ComboboxSearchTextAction",
					"icon": "combobox-add-new",
					"caption": "#ResourceString(addRecord_al7wl16_caption)#",
					"clicked": {
						"request": "crt.CreateRecordFromLookupRequest",
						"params": {
							"MyParameter": "Hello" // HERE
						}
					}
				},
				"parentName": "ComboBox_xj333ko",
				"propertyName": "listActions",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "Button_93h456o",
				"values": {
					"layoutConfig": {
						"column": 1,
						"row": 10,
						"colSpan": 1,
						"rowSpan": 1
					},
					"type": "crt.Button",
					"caption": "#ResourceString(Button_93h456o_caption)#",
					"color": "default",
					"disabled": false,
					"size": "large",
					"iconPosition": "only-text",
					"visible": true,
					"clicked": {
						"request": "crt.CreateRecordRequest",
						"params": {
							"entityName": "Contact",
							"defaultValues": [
								{
									"attributeName": "Age",
									"value": null
								}
							],
							"MyParameter": "Hello" // HERE
						}
					},
					"clickMode": "default"
				},
				"parentName": "SideAreaProfileContainer",
				"propertyName": "items",
				"index": 9
			}
		]/**SCHEMA_VIEW_CONFIG_DIFF*/,
		viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
			"attributes": {
				"LookupAttribute_it9tgfm": {
					"modelConfig": {
						"path": "PDS.EvColumn1"
					}
				}
			}
		}/**SCHEMA_VIEW_MODEL_CONFIG*/,
		modelConfig: /**SCHEMA_MODEL_CONFIG*/{}/**SCHEMA_MODEL_CONFIG*/,
		handlers: /**SCHEMA_HANDLERS*/[
			{
				request: "crt.CreateRecordFromLookupRequest",
				handler: async (request, next) => {
					alert(request.MyParameter);
					return next?.handle(request);
				}
			},
			{
				request: "crt.CreateRecordRequest",
				handler: async (request, next) => {
					alert(request.MyParameter);
					return next?.handle(request);
				}
			}
		]/**SCHEMA_HANDLERS*/,
		converters: /**SCHEMA_CONVERTERS*/{}/**SCHEMA_CONVERTERS*/,
		validators: /**SCHEMA_VALIDATORS*/{}/**SCHEMA_VALIDATORS*/
	};
});

What can I do to make it's working? I use version 8.0.7 (.NET core).

---------------------

This alert displays after click on the button:

And this alert displays after trying to add new record from the lookup:

 

Like 0

Like

4 comments

Hello Eryk,

 

You did everything correctly according to the basic logic and I was able to reproduce the same behaviour on my end. Additionally I reviewed the request in debugger, its context and other properties and wasn't able to locate the "MyParameter". I will pass this info to our core R&D team so they could make it possible to operate with custom parameters in terms of the CreateRecordFromLookupRequest request handler.

Oleg Drobina,

 

Is this the recommended way to pass custom parameters to a request handler in 8.1.3 and above? i.e. to just specify the parameter within the call to it from e.g. a button, and use it directly in the code? No decorations around the request handler, such as a params: [{"name": "someParamName"}] property similar to how Validators have? Or is there some more recommended way?

Harvey Adcock,

Thank you for your question.

You can read about decorating parameters in request handlers here. It is up to you how you implement the logic of your custom request handler; however, it is recommended to follow the guidelines provided by the Academy.

Let me know if you have any questions left, i will be glad to assist you!

Hello Harvey Adcock,

Update to your question. 
 

We got an answer from the R&D of the platform. There is no need and it is not recommended to decorate your parameters in custom request handler.

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

 

Show all comments

Hi everybody. We'd applied a code from here https://academy.creatio.com/docs/developer/back_end_development/api_for… (Get file content part). The code is the following:

	byte[] data;
	Guid recordId = entities[0].GetTypedColumnValue<Guid>("Id");
	var fileLocator = new EntityFileLocator("KnowledgeBaseFile", recordId);
	IFile file = userConnection.GetFile(fileLocator);
	// Read the contents of the file in the content byte array. Remember to free the stream object by utilizing using! 
	using (Stream stream = file.Read()) {
	   data = stream.ReadAllBytes();
	}
 
	string s1 = Encoding.GetEncoding("Windows-1250").GetString(data);

actually it is the same as in the creatio example on the page:

 

byte[] content;
Guid recordId = Guid.NewGuid();
var fileLocator = new EntityFileLocator("ActivityFile", recordId);
IFile file = connection.GetFile(fileLocator);
 
// Read the contents of the file in the content byte array. Remember to free the stream object by utilizing using! 
using (Stream stream = file.Read()) {
   content = stream.ReadAllBytes();
}

unfortunately if fails with the following:

 

System.NotSupportedException: Specified method is not supported. at Terrasoft.File.Content.FileContentStream.get_Length() at Terrasoft.Common.StreamUtilities.ReadAllBytes(Stream source) at Terrasoft.Core.Process.EonFileProceedingCustom10MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

 

honestly I don't understand the problem because it occurs in the core method :( Does anybody have a solution please?

 

8.0.6 sales team

 

Like 0

Like

1 comments

Hello,

You using ReadAllBytes(), however, even the article you provided used another method ReadToEnd().

Please change the method and see if the problem is still present.

 

using Terrasoft.Common;
 
var content = new byte[]();
Guid recordId = Guid.NewGuid();
 
/* Create a file locator for the new file. */
var fileLocator = new EntityFileLocator("ActivityFile", recordId);
IFile file = UserConnection.GetFile(fileLocator);
 
/* Read the contents of the file in the content byte array. Remember to free the stream object by utilizing using! */
using (Stream stream = file.Read()) {
   content = stream.ReadToEnd();
}

 

Show all comments

Hi,

I am using Case section for portal users but the messages posted by portal users in a case are not being visible to the Studio users, also the messages being posted by studio users are not visible to internal portal users.

Also, the UI for both Portal and Studio users are different.



Appreciate the help.

Like 0

Like

3 comments

Hello,

 

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

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

Bogdan,

Thanks for the reply,

Can you please suggest any workaround/solution that can be used to achieve the above mentioned functionality?

 

Janhav,



Unfortunately, there is no workaround for now.

Show all comments

Hi guys, did anyone try to integrate mapsly to Creatio mobile?

I need some guidance !

Is it only possible with adding Mapsly's Iframe ?

If yes where should i put the iframe ? in which Creatio schema ?

Thank you 

Like 0

Like

1 comments

Hello, in this case, we recommend reaching out to the technical support of Mapsly. You can use this email: help@mapsly.com 

Show all comments