Hi, all!

Is there any known way how to block update of main phone/email fields while adding new phone/email in Contact's communication options? 

 

I mean these fields are updated when one adds new record to comm options with types "phone" or "email" for Contact records and I would like to prevent such behaviour.

 

Is it possible to do that without writing a code?

Like 0

Like

3 comments

Hello,

 

We recommend you to try out this marketplace addon that allows you to manually mark any communication option as primary, which is not overridden by adding new options to the list:

https://marketplace.creatio.com/app/primary-communication-options-creat…

Mira Dmitruk,

Hello, could you please, clarify, if one installed that add-on, whether that option is available in import also? Or only for Contact form?

Artem Evdokimenko,

 

Yes, it is possible to mark the emails as primary with this addon when importing from excel, the column is "IsPrimary" and has values "yes" or "no". 

Show all comments

Hi,

In creatio, I have created a section which has a detail. The section's object has a field named 'Stage'. When 'Stage' value changes I want to refresh grid detail action buttons without page reloading, so that I can remove the + button (for adding) and the actions for copying, editing, deleting and Data Import.

I have tried using 'updateDetail' and 'reloadEntiy' but they don't seem to refresh these buttons

Like 0

Like

2 comments
Best reply

Hello,

 

Not sure about removing buttons (but theoretically it's possible using the "Visible" property), but as for the "Enabled" property, it's possible to control the state of the button. This can be achieved using sandbox messages exchange mechanisms like (control the copy button "Enabled" property in the detail on the case page based on the case category selected):

 

CasePage schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
		...
onCategoryChanged: function() {
				this.callParent(arguments);
				this.sandbox.publish("UpdateActionsStatuses", this.get("Category"), ["ForActionsStatusUpdate"]);
			}

 

Detail schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
....
CopyRecordMenuItemEnabled: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: false
			},
....
getCopyRecordMenuItem: function() {
				return this.getButtonMenuItem({
					Caption: {"bindTo": "Resources.Strings.CopyMenuCaption"},
					Click: {"bindTo": "copyRecord"},
					Enabled: {bindTo: "CopyRecordMenuItemEnabled"},
					Visible: {bindTo: "IsEnabled"}
				});
			},
....
subscribeSandboxEvents: function() {
				this.callParent(arguments);
				this.sandbox.subscribe("UpdateActionsStatuses", this.updateActionsStatus, this,
						["ForActionsStatusUpdate"]);
			},
 
			updateActionsStatus: function(result) {
				var parentCaseCategory = result.displayValue;
				var isCategoryCorrect = parentCaseCategory == "PPE Case (Sales Contract)";
				this.updateCopyRecordMenuItem(isCategoryCorrect);
			},
 
			updateCopyRecordMenuItem: function(isCategoryCorrect) {
				var parentCopyRecordEnabled = this.getCopyRecordMenuEnabled();
				var isEnableCopyRecordMenuItem = isCategoryCorrect && parentCopyRecordEnabled;
				this.set("CopyRecordMenuItemEnabled", isEnableCopyRecordMenuItem);
			}

 

As a result the copy button will be enabled in the detail only if any record is selected in the detail and also if the case category (case page is where the detail is added) is "PPE Case (Sales Contract)".

Hello,

 

Not sure about removing buttons (but theoretically it's possible using the "Visible" property), but as for the "Enabled" property, it's possible to control the state of the button. This can be achieved using sandbox messages exchange mechanisms like (control the copy button "Enabled" property in the detail on the case page based on the case category selected):

 

CasePage schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
		...
onCategoryChanged: function() {
				this.callParent(arguments);
				this.sandbox.publish("UpdateActionsStatuses", this.get("Category"), ["ForActionsStatusUpdate"]);
			}

 

Detail schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
....
CopyRecordMenuItemEnabled: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: false
			},
....
getCopyRecordMenuItem: function() {
				return this.getButtonMenuItem({
					Caption: {"bindTo": "Resources.Strings.CopyMenuCaption"},
					Click: {"bindTo": "copyRecord"},
					Enabled: {bindTo: "CopyRecordMenuItemEnabled"},
					Visible: {bindTo: "IsEnabled"}
				});
			},
....
subscribeSandboxEvents: function() {
				this.callParent(arguments);
				this.sandbox.subscribe("UpdateActionsStatuses", this.updateActionsStatus, this,
						["ForActionsStatusUpdate"]);
			},
 
			updateActionsStatus: function(result) {
				var parentCaseCategory = result.displayValue;
				var isCategoryCorrect = parentCaseCategory == "PPE Case (Sales Contract)";
				this.updateCopyRecordMenuItem(isCategoryCorrect);
			},
 
			updateCopyRecordMenuItem: function(isCategoryCorrect) {
				var parentCopyRecordEnabled = this.getCopyRecordMenuEnabled();
				var isEnableCopyRecordMenuItem = isCategoryCorrect && parentCopyRecordEnabled;
				this.set("CopyRecordMenuItemEnabled", isEnableCopyRecordMenuItem);
			}

 

As a result the copy button will be enabled in the detail only if any record is selected in the detail and also if the case category (case page is where the detail is added) is "PPE Case (Sales Contract)".

Yes, it worked. Thank you

Show all comments

Multi-line fields have a microphone icon - is this the built-in functionality of Creatio or is it the functionality of the browser?

Like 0

Like

6 comments

That is functionality of Creatio

1. What package is it in? 
2. Does this tool require updating or is it updated only by system update? 
3. How to enable or disable this functionality? 
4. 4. Is this functionality isolated and located only in the system itself or is it synchronized with an external source?
1. What package is it in? 
2. Does this tool require updating or is it updated only by system update? 
3. How to enable or disable this functionality? 
4. 4. Is this functionality isolated and located only in the system itself or is it synchronized with an external source?

Ryan Farley,

1. What package is it in? 
2. Does this tool require updating or is it updated only by system update? 
3. How to enable or disable this functionality? 
4. 4. Is this functionality isolated and located only in the system itself or is it synchronized with an external source?

Nikita,

Not sure what package this is in. It started as a devlabs marketplace addon. At that time the js files were bootstrapped from the Files node of the package (meaning you wouldn’t see it in the configuration for the package). I would assume it's now just part of the Terrasoft.controls.MemoEdit or Terrasoft.controls.BaseEdit controls.
As for disabling it, I typically hide it using CSS when needed. 

Ryan Farley,

Thank you :)

Show all comments

I know the Modified By field shows the last to modify a case.

I'm trying to find out how I can track users who may have modified a case multiple times.

 

If User A modifies a case, the User B modifies the same case, I want to be able to track (either exporting to excel or in a graph/dashboard) and record that User A did modify that case, even if User B was the last to do so.

 

Is this possible? Every combination I can come up with seems to only track the last to modify a case.

Like 0

Like

4 comments

You can set logging up on the object (and specific columns) under 'change log' although I am not sure how easy it is to export from there. Alternatively you could create a detail/section linked to Case (Case Audit) and have a business process that writes specific changes (like modified by) when a record is modified.

Hi Jason,

To track multiple modifications by different users in the "Case" section, enable the change log and add all the columns you need to monitor for modifications.

Rob Watson,

Thank you, I'm working with the logging now.

Goparna Nasina,

Thank you, working with the logging now.

Show all comments

I want to know my client secret in creatio studio's system settings, but it is encrypted how can I know what it is to integrate my application with creatio

Like 1

Like

1 comments

Hello!

You cannot decrypt the encrypted field. 
The data in the secret field is hidden because it contains confidential information for a specific system. 
You don't need the secret key from system settings to set up OAuth integration. Please follow the instructions provided to resolve the issue:
https://academy.creatio.com/docs/8.x/setup-and-administration/on-site-d…

Show all comments

Hello,

I have been asked to help with an environment built within the default package of "Custom."

It seems that the previous user did not create a new prefix or package to build out their new objects and fields but rather kept the default prefix of "Usr" and package of, "Custom."

 

As far as I know, they have kept all newly added elements in the environment without external factors for additional dependent packages.

I have attempted to transfer the elements in the configuration section and have accomplished that, but of course, I will run into compilation errors and dependency issues.

My end goal is to upload this project environment to the marketplace safely. So my question is this:

How can I safely transfer the elements of the default "Custom" Package to a new package that can ultimately be exported for the marketplace?

Thank you in advance for any help someone can provide.

Like 2

Like

1 comments

Hello,
 

By default, the "Custom" package is the highest in the package hierarchy and depends on all packages below it. If you want to transfer all schemas from the Custom package to another package, you need to make sure that the new package has dependencies on the required packages.
If the new package has the necessary dependencies, you will be able to successfully transfer the schemas and avoid compilation errors.
The problem is that such a package will likely have many dependencies on other packages (depending on which type of Creatio product it was developed on (for example, Studio has fewer packages, so there will be less dependencies on packages that may not be present in other Creatio environments)). If you want to publish this as an app on the Creatio Marketplace, we recommend following the guidelines described in the Creatio Academy article.
 

Thank you.

Show all comments

Hello creatio community,

 

I have created a column into the object "RegDocumentType" named "Order". This object is used as a foreign key in "DocListInFinApp" which is displayed in "FinAppLendingPage" screen.

 

I want to apply a default sorting by RegDocumentType.Order in FinAppLendingPage as below:

"DocListInFinAppDetail": {
	"schemaName": "DocListInFinAppDetail",
	"filter": {
		"masterColumn": "Id",
		"detailColumn": "FinApplication"
	},
	"sortColumn": "Document",
	"sortColumnDirection": Terrasoft.OrderDirection.ASC,
	"sortColumnIndex": 0
},

 

The filter applied its working when I open the page. Do you have any suggestions on how to fix it?

Like 0

Like

1 comments

Hello,

 

In case you need to modify the default sorting you need to use the initQuerySorting method override (should be done in the detail schema and also replace the "UsrOrderColumn" with the column you need to use for sorting):

initQuerySorting: function(esq) {
                    const sortedColumn = esq.columns.find("UsrOrderColumn");
                    if (!sortedColumn) {
                        return;
                    }
                    sortedColumn.orderPosition = 0;
                    sortedColumn.orderDirection = Terrasoft.OrderDirection.DESC;
                },

Once saved you can refresh the page and the default sorting will be changed.

Show all comments

Hello,

 

Suppose we have the following code:



var fundId = this.get("FundId");



                    var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "FundSchema" });

                    esq.addColumn("FundAmount");

                    esq.getEntity(fundId, function (result) {

                        if (result.success) {

                            var currentamount = result.entity.get("FundAmount");

// empty result.entity for some roles

    }

}

 

And we have two roles A and B.



When I tried with role A, the result.entity is empty.

When I tried with role B, the result.entity has object value inside.



Both has fundId loaded in value and should be getting the same result.entity object.



I am trying to find where might be the root cause that results to this.

 

May I know is there any place in creatio that configures only certain role is able to get the result.entity or is there any other way to find the solution or root cause of this like code sample etc?

 

Thanks for the help!

Like 0

Like

1 comments

Hello,

 

EntitySchemaQuery checks for access rights when retrieving data, so the issue is in the entity's set of access rights for roles A and B. You need to check if users from both roles have access to the object (object permissions) and the record (record permissions) for the record that is returned for one role but doesn't return for another.

Show all comments

It looks like there are some duplication in localization, but it is hard to define the source of error.

2024-04-02 09:47:54,132 [278] ERROR INFRADIM\bpm_db_admin ConfigurationBuild LogErrors - System.ArgumentException: An item with the same key has already been added.

   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)

   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

   at Terrasoft.Core.SchemaResourceManager.PrepareLoadedResources(IEnumerable`1 resources, IEnumerable`1 schemaHierarhy, IEnumerable`1 cultures)

   at Terrasoft.Core.SchemaResourceManager.LoadRuntimeResourcesForSchema(Dictionary`2 localResourceSets, IEnumerable`1 schemaHierarchyIds)

   at Terrasoft.Core.SchemaResourceManager.LoadRuntimeResourcesForSchema(Dictionary`2 localResourceSets)

   at Terrasoft.Core.SchemaResourceManager.InternalGetResourceSet(CultureInfo cultureInfo, Boolean createIfNotExists, Boolean tryParents)

   at Terrasoft.Core.SchemaResourceManager.GetString(String name, CultureInfo culture)

   at Terrasoft.Common.LocalizableValue`1.GetCultureValue(CultureInfo culture, Boolean throwIfNoManager, Boolean useCultureFallback)

   at Terrasoft.Common.LocalizableValue`1.LoadCultureValues(IEnumerable`1 culturesInfo)

   at Terrasoft.Core.Schema.LoadLocalizableValues(IEnumerable`1 culturesInfo)

   at Terrasoft.Core.ClientUnitSchema.LoadLocalizableValues(IEnumerable`1 culturesInfo)

   at Terrasoft.Core.ClientUnitSchema.LoadLocalizableValues()

   at Terrasoft.Core.ClientUnitSchema.InitializePrimaryInfo()

   at Terrasoft.Core.SchemaManager`1.get_DefSchema()

   at Terrasoft.Core.SchemaManager`1.InternalCreateSchema(String name, TSchemaManagerSchema baseSchema, UserConnection userConnection, Guid uid, Boolean fromMetaData)

   at Terrasoft.Core.SchemaManager`1.InternalCreateSchema(String name, ISchemaManagerItem baseSchema, UserConnection userConnection, Boolean fromMetaData)

   at Terrasoft.Core.MetaDataSerializer.d__7.MoveNext()

   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)

   at Terrasoft.Core.SchemaManager`1.DeserializeSchemaManagerItem(Stream metaData, UserConnection userConnection)

   at Terrasoft.Core.SchemaManager`1.DeriveSchemaManagerItem(UserConnection userConnection, EntityCollection orderedSchemas)

   at Terrasoft.Core.SchemaManager`1.CreateRuntimeSchemaFromMetaData(Guid schemaUId, UserConnection userConnection)

   at Terrasoft.Core.ClientUnitSchemaManager.FindInstanceByName(String name)

   at Terrasoft.Core.ClientUnitSchemaManager.GetInstanceByName(String name)

   at Terrasoft.Core.ClientContentGeneration.ConfigurationClientContentFileGenerator.GetClientUnitSchema(ClientUnitSchemaManager manager, String schemaName)

   at Terrasoft.Core.ClientContentGeneration.ConfigurationClientContentFileGenerator.d__27.MoveNext()

Like 0

Like

1 comments

Hello,

 

Thank you for your question. According to the error code, you can see that the error occurs when preparing loaded resources (PrepareLoadedResources).

However, this error can occur in many different cases. Most likely, there are duplicate values in the DB tables.



The best solution would be to open a ticket with the Creatio support team so that we can analyze the issue in detail based on reproducing the error and analyzing the application logs.

 

Thank you.

Show all comments

We use Creatio 7.18.

I am trying to setup a FastReport as part of which I am trying to populate a table with Reportees of the current user.

I used below to get current user id, but it returns “Supervisor” user (reference - https://community.creatio.com/questions/terrasoftsysvaluecurrentuservalue-equivalent-c).

Can anyone help with the correct way to get Current user Id in Source Code for Data Provider class to setup FastReport?

 

var appConnection = HttpContext.Current.Application["AppConnection"] as AppConnection;

var currentUser = appConnection.SystemUserConnection.CurrentUser;

var userId = currentUser.Id;

Like 0

Like

2 comments

App connection always returns "Supervisor" since this user is a system operations user. If you need to get the current user who manually triggered report generation and the custom code you need to use the same approach but with using UserConnection instead of appConnection (as Ryan described in his first example):

var currentUser = UserConnection.CurrentUser;
var userId = currentUser.Id;
var userName = currentUser.Name;

Or maybe I didn't understand the required result:)

Oleg Drobina,

My bad! I misunderstood his statement. Since I was trying it out in a source code schema and not a script task, I only tried using the 2nd method. The 1st method correctly returns the required information. Thanks for pointing that out, Oleg!

Show all comments