Hi Creatio community,

I need to make a request to a custom handler whenever a specific integer field changes its value in a Freedom UI page. The field can be 0, 1, or 2, and it’s modified by a business rule (not by the user), so it’s read-only.

I’ve been trying to achieve this using crt.HandleViewModelAttributeChangeRequest, but it doesn’t seem like the most effective way. My goal is to execute custom logic in my handler whenever this field’s value changes.

Use case details:

  • The field is read-only and changes internally (via business logic).
  • I need to detect when its value changes (0 → 1, 1 → 2, etc.) and trigger my handler.

Has anyone faced a similar scenario? What’s the recommended way to handle this in Creatio? Any examples or suggestions would be greatly appreciated!

Thanks in advance!

Like 1

Like

5 comments

What issues are you having with crt.HandleViewModelAttributeChangeRequest that make you want to use an alternative? This is the handler I would use.

If you want to encapsulate your logic into a custom handler, you can do so and then call that custom handler from the crt.HandleViewModelAttributeChangeRequest handler, which can allow more readable code, if that's the issue you're facing.

If the issue is that the handler is triggered when opening an existing record but you don't want it to be, you can use the request.silent property to only run your handler when the change is not silent (i.e. that it was caused by an actual state change rather than just the page loading).

I think the reason for why you aren't having success with the attribute change handler is key for understanding the requirement.

Harvey Adcock,

Thanks for your input Harvey,

To explain my use case in more detail, my main issue is the following: I have an identification number field, and when this field changes, a custom handler should be triggered (currently I’m using crt.HandleViewModelAttributeChangeRequest). In this handler, I run a process that calls a web service to check whether the number is valid. If it’s not valid, a validation message should be triggered.

The problem I’m facing with crt.HandleViewModelAttributeChangeRequest is that the validation is triggered every time the user enters a single digit. So, if the ID is 10 digits long, the validation runs 10 times — once for each keystroke — because at each moment the number is still incomplete and therefore considered invalid.

Additionally, when a the validation field (the one mentioned before) changes, the same handler should be triggered.

So my current idea is to use a blur event on the identification number field to trigger a custom handler only when the field loses focus — avoiding premature validation on every keystroke. Then, for the read-only validation field, I want to call the same custom handler programmatically when that field’s value changes. I can’t use the blur event in because, this validation field is read-only.

My question now is: how can I detect changes in a read-only field and trigger a custom handler in that case?

A couple of thoughts:

  1. Could the checking be done on record save rather than whenever the data is changed? In which case, the following guide is useful: https://customerfx.com/article/adding-code-to-the-save-event-of-a-creatio-freedom-ui-page/
  2. If going via the blur event route, could you write a custom request handler like I suggested, trigger that request handler on the blur event (see here for triggering a request handler on field blur here: https://community.creatio.com/questions/which-are-events-field-can-be-handled-freedomui , not sure how to do any generic HTML DOM event unfortunately) and then also trigger that request handler from crt.HandleViewModelAttributeChangeRequest for just when the read only field changes?

Harvey Adcock,

Regarding the first option, it wouldn’t be possible because the field needs to be validated before saving—if it’s invalid, the save operation should be blocked.

As for the second option, that might actually work. If there’s no other way to trigger a custom handler when the field changes—other than using crt.HandleViewModelAttributeChangeRequest—then the approach you mentioned in point two could be a viable solution.

Thanks Harvey! 

Valerie Bsereni,

With the first option you can block the saving if the data is invalid - from within the SaveRecordRequest handler, if you don't call next?.handle(request) and instead just return false, then the save will be cancelled. In your case, you would perform the checks in the code and based on the result of them you would return false if they're invalid, or return the usual next?.handle(request) otherwise. You can combine this with showing a notification to the user or similar so they understand that the record hasn't saved & why. See this post for an example of cancelling the save (this one is for the progress bar/DCM stage change cancelling, but it works via the same mechanism): https://community.creatio.com/questions/freedom-ui-dcm-cancel-transitio…

But glad I could help!

Show all comments

Hello all,

I am currently trying to update the standard Invoice object record's field; "payment amount" with a calculated sum collected from a custom object called: "Payments" from it's "Amount" field.

-Payments Record Added has the filter conditions of, "Amount is filled in"
- Payments Record Deleted has no filters
- Payments Record Modified has the, "Changes expected in any selected fields = 'Amount'"
 

 

 


 


And this is the current Invoice Record:

 

The Payment Amount field AND the test payment amount field I created show no input despite refreshes and alterations. I would appreciate any suggestions on my wrongdoings, as this is a more fundamental business process I have used before.

Thank you in advance for any help you can provide.

Like 0

Like

4 comments

Additionally, I found that the "read data" element is not actually picking up the invoice. Below is the trace data of the process log:


{
    "Element parameters": [
        {
            "Parameter": "Data source of filters",
            "Value": {
                "Before execution": "{\"className\":\"Terrasoft.FilterGroup\",\"serializedFilterEditData\":\"{\\\"className\\\":\\\"Terrasoft.FilterGroup\\\",\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\",\\\"displayValue\\\":\\\"Payments Record Added.Unique identifier of record\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\",\\\"displayValue\\\":\\\"Payments Record Deleted.Unique identifier of record\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\",\\\"displayValue\\\":\\\"Payments Record Modified.Unique identifier of record\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\",\\\"key\\\":\\\"\\\"}\",\"dataSourceFilters\":\"{\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\"}\"}",
                "After execution": "{\"className\":\"Terrasoft.FilterGroup\",\"serializedFilterEditData\":\"{\\\"className\\\":\\\"Terrasoft.FilterGroup\\\",\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\",\\\"displayValue\\\":\\\"Payments Record Added.Unique identifier of record\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\",\\\"displayValue\\\":\\\"Payments Record Deleted.Unique identifier of record\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"className\\\":\\\"Terrasoft.CompareFilter\\\",\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"className\\\":\\\"Terrasoft.ColumnExpression\\\",\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"isAggregative\\\":false,\\\"key\\\":\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\",\\\"dataValueType\\\":0,\\\"leftExpressionCaption\\\":\\\"Id\\\",\\\"rightExpression\\\":{\\\"className\\\":\\\"Terrasoft.ParameterExpression\\\",\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"className\\\":\\\"Terrasoft.Parameter\\\",\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\",\\\"displayValue\\\":\\\"Payments Record Modified.Unique identifier of record\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\",\\\"key\\\":\\\"\\\"}\",\"dataSourceFilters\":\"{\\\"items\\\":{\\\"e9bc0ff2-a863-446d-8673-b7c8a71ae2c3\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{293bb23f-d16f-4c7a-ad45-9499a22ce47c}].[Parameter:{86b49173-d922-4022-b289-93b2acf6e683}]\\\"}}}},\\\"704c93a5-e747-4fcf-86b6-b14f1398ffe0\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{32a3cb4b-4109-4978-84ae-e4f236ffddc6}].[Parameter:{a8f68505-7f8e-4e33-ac3d-3c9116eb1915}]\\\"}}}},\\\"d3db370d-afe3-49c5-a121-571f02715f64\\\":{\\\"filterType\\\":1,\\\"comparisonType\\\":3,\\\"isEnabled\\\":true,\\\"trimDateTimeParameterToDate\\\":false,\\\"leftExpression\\\":{\\\"expressionType\\\":0,\\\"columnPath\\\":\\\"Id\\\"},\\\"rightExpression\\\":{\\\"expressionType\\\":2,\\\"parameter\\\":{\\\"dataValueType\\\":26,\\\"value\\\":{\\\"value\\\":\\\"[IsOwnerSchema:false].[IsSchema:false].[Element:{335bd2a9-757f-4750-adb1-a6d1a23e05f1}].[Parameter:{c6326280-12ce-424f-830a-9659100f8272}]\\\"}}}}},\\\"logicalOperation\\\":0,\\\"isEnabled\\\":true,\\\"filterType\\\":6,\\\"rootSchemaName\\\":\\\"IWPayments\\\"}\"}"
            }
        },
        {
            "Parameter": "Read first",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        },
        {
            "Parameter": "Columns order",
            "Value": {
                "Before execution": "",
                "After execution": ""
            }
        },
        {
            "Parameter": "First item of resulting collection",
            "Value": {
                "Before execution": {},
                "After execution": {}
            }
        },
        {
            "Parameter": "Read uncommitted data",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        },
        {
            "Parameter": "Consider time in the filter",
            "Value": {
                "Before execution": true,
                "After execution": true
            }
        }
    ],
    "Process parameters": [
        {
            "Parameter": "IWPayments Amount",
            "Value": {
                "Before execution": 0,
                "After execution": 0
            }
        }
    ]
}

In the first read where you use the Id values from the start signals, change the AND to OR (if you click the AND it will toggle it to OR).

Ryan

Ryan Farley,

Thank you Ryan. I must have overlooked that detail while reviewing other work! I am now having a new issue where the calculation element shows an incorrect sum.

For instance, when setting the Calculate Element to, "OR" I will have one record with an amount of $4500. When modified, it will then show a sum of $94,500.

But if I set it to, "AND", then the Calculate Element will show $0 for both the input and output.

Any idea on what could be causing this?

 

I am going to answer my own question here for my reply, as I discovered that my filters were not working correctly and the calculated sum was adding ALL records of the Payments object:

 

I found that for the "Calculate Element" filters, not only did I not need the 

 

"id ≠ Payments.Record Deleted.Unique identifier of record" 

 

But that the filter of:

 

"Invoice = Read Invoice from IWPayments.First item of resulting collection.Invoice"

 

Should be:

 

"Invoice.Id = Read Invoice from IWPayments.First item of resulting collection.Invoice"

 

I thought I had set it to that already, but I must have overlooked it while troubleshooting other solutions. 

Thank you to anyone who took a look at this!

Show all comments

Hi, I am trying to add a custom field in Activity task minipage: 

I tried to edit ActivityMiniPage, but it does not add the new field.

Where should I add this field?

Like 0

Like

4 comments

Hello,

You need to make sure that you are making changes in the view mode of the activity mini-page.

Hi Pavlo Sokil,

Thank you for your response.

I have added the new field in all three modes, but the new field doesn't show on the mini page, as I have shown in the photo. The new field shows on the mini page that opens on the click of the pen:

 

 

Maybe you have some custom Activity types which are not related with this Mini Page in SysModuleEdit.

Run the sript:
Select * from "SysModuleEdit" where "SysModuleEntityId" in (select "Id" from "SysModuleEntity" where "SysEntitySchemaUId" in (select "UId" from "SysSchema" where "Name" = 'Activity' and "ExtendParent" = 'false'));

And check if for your type Mini page and Mini Page Modes are defined.


For a more detailed analysis, we recommend contacting Creatio technical support.

 

Best regards,
Pavlo!

Pavlo Sokil,

After executing the query you sent, I get these values for the columns you pointed out:

Show all comments

Hello,

 

Is there a way to create a field where the user can attach documents?

Something like this:

Or like this, where, after I click browse, my folder is open and after select the name of the file will be inside:

Thank you!

Like 1

Like

1 comments

Hello,

You can add Attachments component on the needed page, to manage record attachments. Here is the detailed instruction: https://academy.creatio.com/docs/8.x/no-code-customization/customization-tools/ui-and-business-logic-customization/element-setup-examples/components/set-up-an-attachments-component

Best regards,
Malika

Show all comments

Hi I have faced with issue, that I want to add a gif of a loader to the left side of the caption to inform  user that this field is calculating and change it depending on its content For example if it is empty there should be loader gif if it is not it should be like a green tick.

 

Let's say I have already added MyIcon.png and I have field with this data:

 

{
				"operation": "insert",
				"name": "AgbRegisterFormMessage",
				"values": {
					"layout": {
						"colSpan": 23,
						"rowSpan": 1,
						"column": 1,
						"row": 1,
						"layoutName": "AgbIssuanceTabGridLayout"
					},
					"bindTo": "AgbRegisterFormMessage",
					"enabled": false
				},
				"parentName": "AgbIssuanceTabGridLayout",
				"propertyName": "items",
				"index": 3
			},

 

Like 0

Like

1 comments

Hello Behruzbek Mardonqulov,

Thank you for your question. Could you please provide more details to your question: like what business logic should this perform, what exactly you cannot achieve etc. I would like to help, but i do not think that i fully understand your question.

Show all comments

Hello. Is there a way to fill the field values ​​from the master window in which you opened the lookup (lookup field) and clicked the "New" button? Something similar to how adding a record in a datagrid detail works. When you click add a record, a window with fields opens and these fields can automatically pull values ​​from the master page.

Like 0

Like

1 comments

Hello,
As far as I know, there are no methods to transfer data from the master record to a one created via a lookup window. But, the sandbox messaging should help you resolve this task. More on it here https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…

Show all comments

Hi Community,

Can you provide a code example for the following scenario:

When a record to a detail is added, make a field in the Parent Page visible.

Example

When a record is created in Detail 'Opportunity Team' make the Description field (of Opportunity_Form_Page) visible

Regards

Sasor

Like 0

Like

2 comments
Best reply

Hey,
So you can  fetch the count of records under the detail object through code.If the count is greater than 0 then you can make it visibile.
EG below:

for the visibilty logic refer - https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…


 

Hi Community,

Any update regarding scenario?

Sasori

Hey,
So you can  fetch the count of records under the detail object through code.If the count is greater than 0 then you can make it visibile.
EG below:

for the visibilty logic refer - https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platfor…


 

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

Hi. 

 

I'm trying to find some information about the field service, but I can't find it. The only information I had found is in the Product info of Service module but is just a little paragraph. Can you help me to know if there is more information about field service? 

Like 0

Like

1 comments

Hello,

 

You can find all of the instructions regarding this addon in this Academy article:

https://academy.creatio.com/docs/8.x/creatio-apps/category/field-manage…

Show all comments

Hello,

 

I am trying to add a popup message that displays a lookup field where the user selects a value from it.

 

Unfortunately, the lookup doesn't appear. I have no error in the console. The lookup is from the same page (Lead).

 

This is the code:

 

I tried to modify the example of inserting a text box in a popup message.

 

Thank you!

Like 0

Like

2 comments

Ryan Farley,

Thank you so much, it works great!

Show all comments