Hello,

We want to disable the ability to use the "New" City/State option in the City/State lookup fields of an address. What is the best way to accomplish this?

Like 0

Like

3 comments
Best reply

Hi Allen Dsouza,

 

This button is displayed if the Lookup has an edit page. If we are talking about a selection card from a lookup, the "getSelectionControlsConfig" method in the "LookupPageViewGenerator" schema is responsible for loading the list of edit pages.

 

There is no instruction, but the "BaseLookupPageV2" schema is responsible for this page \ window, the "Add" button name is: "SeparateModeAddRecordButton", the "ActionsButton" - it's action button. You can replace and customize the visibility of these buttons as you need.

 

P.S. If you have an option to hide it without using code, I'm suggesting you to do it, just by changing "Lookup view" from "Selection window" to "List" and there will be no option to add "New" City/State. (Example attached below)







Best Regards, 



Bogdan L.

Dear Allen,

 

Thank you for your question!

 

The best way to accomplish the restrictions to add new records to a lookup without development would be to update the Object Permissions.

 

Navigate to the [Object Permissions], find there the required lookup, and disable the "Create" option for "All employees" (or for a different group if you are using them):

 

And save. Make sure to "Update the record permissions" in the Action drop-down menu.

 

The result would be like in the screenshot below:

 Hope this helps!

 

Thank you, hope you have a great day!

 

Regards,

Danyil

Danyil Onoprienko,

Thank you for the suggestion! Due to some complex security setup in the system, we are considering using code disable/hide the "NEW" option on the lookup. Is there a way to do this?

Hi Allen Dsouza,

 

This button is displayed if the Lookup has an edit page. If we are talking about a selection card from a lookup, the "getSelectionControlsConfig" method in the "LookupPageViewGenerator" schema is responsible for loading the list of edit pages.

 

There is no instruction, but the "BaseLookupPageV2" schema is responsible for this page \ window, the "Add" button name is: "SeparateModeAddRecordButton", the "ActionsButton" - it's action button. You can replace and customize the visibility of these buttons as you need.

 

P.S. If you have an option to hide it without using code, I'm suggesting you to do it, just by changing "Lookup view" from "Selection window" to "List" and there will be no option to add "New" City/State. (Example attached below)







Best Regards, 



Bogdan L.

Show all comments

Hi, community.

 

When you click an activity on the calendar page, you get this mini page where you can complete the activity or cancel it. I need to remove the "cancel activity" button highlighted here in red:

 

I figure I can use the remove operation like in this example:


 
diff: 
/**SCHEMA_DIFF*/[ 
{ "operation": "remove", "name": "CopyButton" }, 
{ "operation": "remove", "name": "DeleteButton" }, 
{ "operation": "remove", "name": "OpenButton" } }

 

But I can't find  the schema I have to modify.... Does anyone know which one it is?

 

Thanks!

Like 1

Like

2 comments
Best reply

Hello,

 

It is ActivityMiniPage of UIv2 package. You need to re-define the insert operation of CancelButton

Regards,

Dean

Hello,

 

It is ActivityMiniPage of UIv2 package. You need to re-define the insert operation of CancelButton

Regards,

Dean

dean parrett, Thank you very much for your answer! It works as intended.

Cheers from Mexico

Show all comments

hello community,



in the Account section page, i'm trying to change the display of some timeline tiles (the Order one for example). I can hide some fields i don't need by modifiying the TimelineTileSetting data ('0ef5bd15-f3d3-4673-8af7-f2e61bc44cf0' for Order).



Fine, but if i also want to add new fields in the tile : i then added my own UsrTimelineItemViewModel and UsrTimelineItemView for that.

Then i added a corresponding TimelineTileSetting and finally changed TimelinePageSetting to make it match .

 

Unfortunately, i can't make it to work. The displayed tile keep to be the old one,

it's like the updated TimelinePageSetting is not read by the system.

No matter what i do, logging out, clear cache...

 

What am i missing, please ?

 

best regards.

Patrice

Like 0

Like

2 comments

Dear Patrice,

 

Try to follow this guide on how to add a custom object to the timeline

https://academy.creatio.com/documents/technic-sdk/7-13/timeline-tab

 

Regards,

Dean

Hello Dean,

thanks for the answer.

In my case, i use 7-17 so i went to https://academy.creatio.com/documents/technic-sdk/7-16/introduction-17



So in AccountPageV2's TimelinePageSetting, i changed the original data, from 

          {

            "entityConfigKey": "0ef5bd15-f3d3-4673-8af7-f2e61bc44cf0",

            "entitySchemaName": "Order",

            "referenceColumnName": "Account",

            "masterRecordColumnName": "Id"

          },

to

          {

            "entityConfigKey": "9843b156-452f-463c-8cb6-7e9b3e3d5499",

            "entitySchemaName": "Order",

            "referenceColumnName": "Account",

            "masterRecordColumnName": "Id"

          },



which hold my new TimelineTileSetting Id.

is it not supposed to work like that ?



am i supposed to add a whole new TimelinePageSetting for my AccountPageV2 section like described in documentation ? or can i modify the existing one ?



Regards,

Patrice

Show all comments

How would I go about summing the costs of related attendee (table) price field for an order and then place that total back into the custom Order->AttendeePrice field. Then additionally sum Order->Total + Order->AttendeePrice into the custom field, Order->GrandTotal?

This would be similar to the Out-of-Box sum of the product sales price for an order where it places the total in the Order->Total field and manages the product total as items are added, edited, or deleted.

Like 0

Like

1 comments

Dear Dick,

 

Thank you for your question!

 

The best solution for this would be using a Business Process with parameters.

 

Hope this helps!

 

Regards,



Danyil

Show all comments

Hi,

 

How is it possible to set only the author of the record to be able to delete their record? Beside the roles that are mentioned in the operation permissions, for example System admin.

 

Thanks,

Like 0

Like

3 comments
Best reply

Kavian Abhari,



Yes, you are correct, you can use this.

And if you remove everything from the Record Permissions, by default all rights will be given to the person, who creates the record and System Administrator.

Also, you will need to create a business process to give read/edit rights to all other users as they will not be able to perform these actions using the logic above.

I'm sorry if I misunderstood you, I thought that you do not wish to use Permissions at all.

You can check this article for more information:



https://academy.creatio.com/docs/user/setup_and_administration/user_and…



Best Regards,

Ivanna

Dear Kavian,



If you do not wish to go with Operation Permissions, you can debug onDelete method logic in GridUtilitiesV2 schema.

You need to replace it with your own custom logic.

Unfortunately, your business task can be performed using our base tools.



Best Regards,

Ivanna

Ivanna Yatsura,

Thanks. But not even by using "Record permissions"? 

In the picture below, doesn't it mean that each employee can delete the record that they created?

Kavian Abhari,



Yes, you are correct, you can use this.

And if you remove everything from the Record Permissions, by default all rights will be given to the person, who creates the record and System Administrator.

Also, you will need to create a business process to give read/edit rights to all other users as they will not be able to perform these actions using the logic above.

I'm sorry if I misunderstood you, I thought that you do not wish to use Permissions at all.

You can check this article for more information:



https://academy.creatio.com/docs/user/setup_and_administration/user_and…



Best Regards,

Ivanna

Show all comments

Hello. I'm working with the Multiple choice field setup for Creatio (https://marketplace.creatio.com/app/multiple-choice-field-setup-creatio) add-on but I'm not getting it to save the selected values.

 

I've followed the guide here: https://marketplace.creatio.com/sites/marketplace/files/app-guide/Multi…

 

I have the Lookup object that I select. I have the link table (which is equivolent to ActivityParticipant which is used in the guide-example)

 

I get the values correctly on the page, and they are selectable. But nothing is saved to the database when i Save the record

 

Object: Contact

Lookup: ChessInterest

Link-object: ChessContactInterest

define("ContactPageV2", ["MultiChoiceMixin"], function() {
	return {
      entitySchemaName: "Contact",
      attributes: {
        "ChessInterests": {"dataValueType": Terrasoft.DataValueType.LOOKUP}
      },
      mixins: {MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"},
      modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		}
 
...
methods: {
		init: function() {
          this.callParent(arguments);
          this.mixins.MultiChoiceMixin.init.call(this, arguments);
        },
        getMultiChoiceEntitiesConfig: function () {
          const items = {
            ChessInterests: {
              mainEntitySchemaName: "ChessContactInterest",
              mainColumnName: "Contact",
              relatedEntitySchemaName: "ChessInterest",
              relatedColumnName: "ChessInterest"
            }
          };
          return items;
        }
      },
 
...
 
      diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "ChessInterests",
				"values": {
					"className": "Terrasoft.MultiChoiceCombobox",
					"bindTo": "ChessInterests",
					"dataValueType": 11,
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 5
					},
					"labelConfig": {
						"caption": "Select interests"
					}
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
}



 

Like 0

Like

9 comments
Best reply

Fixed it with another one. Last one was wrong

              mainEntitySchemaName: "ChessContactInterest",
              mainColumnName: "ChessContact",
              relatedEntitySchemaName: "ChessInterest",
              relatedColumnName: "ChessInterest"

Explanation as I understand it:

mainEntitySchemaName: "My Link Table",
mainColumnName: "Property in Link table matching current record Id (In my case ContactId)", 
relatedEntitySchemaName: "Object to select", 
relatedColumnName: "Objects column name in Link table"

Bumping this

Hi Julius,

 

I recommend double-checking the following parameters: mainEntitySchemaName, mainColumnName, and relatedColumnName. They all are responsible for data storage.

 

Also, could you please provide a screenshot of the settings for the 'ChessContactInterest' object with added fields? This would help investigate the issue further.

Alexander Demidov,

Alexander Demidov,

I managed to solve it.

        getMultiChoiceEntitiesConfig: function () {
          const items = {
            ChessInterests: {
              mainEntitySchemaName: "ChessContactInterest",
              mainColumnName: "ChessContact",
              relatedEntitySchemaName: "ChessContactInterest",
              relatedColumnName: "ChessInterest"
            }
          };

Now my next issue is that I don't have a Displayed Value on my link-object (ChessContactInterestChess). I can't select one in the drop-down

Fixed it with another one. Last one was wrong

              mainEntitySchemaName: "ChessContactInterest",
              mainColumnName: "ChessContact",
              relatedEntitySchemaName: "ChessInterest",
              relatedColumnName: "ChessInterest"

Explanation as I understand it:

mainEntitySchemaName: "My Link Table",
mainColumnName: "Property in Link table matching current record Id (In my case ContactId)", 
relatedEntitySchemaName: "Object to select", 
relatedColumnName: "Objects column name in Link table"

Hi Julius,

 

It's great to hear that you resolved these issues! We will add your findings to the app description to help streamline the field setup.

Hi,

I get this problem too, that values are not being saved.

I checked the above elements and they are good!

What else can cause that issue?

 

I managed to solve it.

I deleted the name field that was automatically created when I create the object through the detail wizard. It's required and probably that couldn't be save missing that field.

Hello. I'm working with the Multiple choice field setup for Creatio (https://marketplace.creatio.com/app/multiple-choice-field-setup-creatio) add-on but I'm not getting it to save the selected values.

I've followed the guide here: https://marketplace.creatio.com/sites/marketplace/files/app-guide/Multi…

I get the values correctly on the page, and they are selectable. But nothing is saved to the database when i Save the record

Object: UsrContactLabels

Lookup: UsrLabels

Link-object: UsrContact

Show all comments

Dear, In account, there is the visual schema in the ConnectedTo tab: https://prnt.sc/10q02hg How can I add a relation in this schema from a business process? I cannot find the existing connections in any object and if I try to add a new relationship to the Relationship object, nothing is changed. Kind regards, Vincent

Like 0

Like

1 comments

Hello Vincent,

 

Hope you're doing well.

 

To be able to add or modify relationships via business process please use the object Relationship. It contains a connection for both contacts and accounts and can be used for adding any possible relations between those objects.

 

Also, the links below can be useful for further working with relationships:

Best regards,

Roman

Show all comments

Hi,

 

Is it possible to create Data entry compliance for Leads section? Or any of the custom sections?

 

Thanks

Like 0

Like

3 comments
Best reply

HI Kavian,

 

Yes, it's possible. Here are the steps;

 

1) Add a "Completeness" field into your section object. This one should be an integer.

 

2) Add a record about your section into the "Completeness" table. You can do it with the following SQL script:

INSERT INTO Completeness (Name, EntitySchemaName, ResultColumnName, Scale)
    VALUES ('Quotes', 'VistQuotes', 'VistCompleteness', '{"sectorsBounds":{"min":0,"middleFrom":50,"middleTo":80,"max":100}}')

You should specify Name, EntitySchemaName, ResultColumnName and Scale columns.

 

3) Create replacing client module for your page (for example VistQuotes1Page in my case).

 

4) Add dependencies on following schemas: "CompletenessIndicator", "CompletenessMixin", "css!CompletenessCSSV2", "TooltipUtilities".

 

5) Add two attributes into the "attributes" area:

CompletenessValue: {
    dataValueType: Terrasoft.DataValueType.INTEGER,
    value: 0
},
MissingParametersCollection: {
    dataValueType: Terrasoft.DataValueType.COLLECTION
}

6) Add two mixins (CompletenessMixin, TooltipUtilitiesMixin) into your schema.

mixins: {
    CompletenessMixin: "Terrasoft.CompletenessMixin",
    TooltipUtilitiesMixin: "Terrasoft.TooltipUtilities"
},

7) Add the following methods:

methods: {
    init: function() {
        this.set("MissingParametersCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
        this.callParent(arguments);
    },
    onDetailChanged: function() {
        this.callParent(arguments);
        this.calculateCompleteness();
    },
    onEntityInitialized: function() {
        this.callParent(arguments);
        if (this.isEditMode()) {
            var collection = this.get("MissingParametersCollection");
            collection.clear();
            this.set("CompletenessValue", 0);
            this.calculateCompleteness();
        }
    },
    onSaved: function() {
        var callParentOnSaved = this.get("CallParentOnSaved");
        this.callParent(arguments);
        if (!callParentOnSaved && !this.isNewMode() && !this.get("IsProcessMode")) {
            this.calculateCompleteness();
        }
    },
    calculateCompleteness: function() {
        var config = {
            recordId: this.get("Id"),
            schemaName: this.entitySchemaName
        };
        this.mixins.CompletenessMixin.getCompleteness.call(this, config, this.calculateCompletenessResponce, this);
    },
    calculateCompletenessResponce: function(completenessResponce) {
        if (this.Ext.isEmpty(completenessResponce)) {
            return;
        }
        var missingParametersCollection = completenessResponce.missingParametersCollection;
        var completeness = completenessResponce.completenessValue;
        var scale = completenessResponce.scale;
        if (!this.Ext.isEmpty(missingParametersCollection)) {
            var collection = this.get("MissingParametersCollection");
            collection.clear();
            collection.loadAll(missingParametersCollection);
        }
        if (this.Ext.isObject(scale) && this.Ext.isArray(scale.sectorsBounds)) {
            this.set("CompletenessSectorsBounds", scale.sectorsBounds);
        }
        if (this.Ext.isNumber(completeness)) {
            this.set("CompletenessValue", completeness);
        }
    }
},

8) Insert completeness bar into your page with code like following:

diff: /**SCHEMA_DIFF*/[
    {
        "operation": "insert",
        "parentName": "MetricsContainer",
        "propertyName": "items",
        "name": "CompletenessContainer",
        "values": {
            "itemType": Terrasoft.ViewItemType.CONTAINER,
            "items": []
        }
    },
    {
        "operation": "insert",
        "parentName": "CompletenessContainer",
        "propertyName": "items",
        "name": "CompletenessValue",
        "values": {
            "generator": "ConfigurationRectProgressBarGenerator.generateProgressBar",
            "controlConfig": {
                "value": {
                    "bindTo": "CompletenessValue"
                },
                "menu": {
                    "items": {
                        "bindTo": "MissingParametersCollection"
                    }
                },
                "sectorsBounds": {
                    "bindTo": "CompletenessSectorsBounds"
                }
            },
            "tips": [],
            "layout": {
                "column": 0,
                "row": 0,
                "rowSpan": 1,
                "colSpan": 1
            }
        }
    },
    {
        "operation": "insert",
        "parentName": "CompletenessValue",
        "propertyName": "tips",
        "name": "CompletenessTip",
        "values": {
            "content": {"bindTo": "Resources.Strings.CompletenessHint"}
        }
    }
]/**SCHEMA_DIFF*/

A full example of code can be found below:

define("VistQuotes1Page", ["CompletenessIndicator", "CompletenessMixin", "css!CompletenessCSSV2", "TooltipUtilities"],
    function() {
    return {
        entitySchemaName: "VistQuotes",
        attributes: {
            CompletenessValue: {
                dataValueType: Terrasoft.DataValueType.INTEGER,
                value: 0
            },
            MissingParametersCollection: {
                dataValueType: Terrasoft.DataValueType.COLLECTION
            }
        },
        modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
            init: function() {
                this.set("MissingParametersCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
                this.callParent(arguments);
            },
            onDetailChanged: function() {
                this.callParent(arguments);
                this.calculateCompleteness();
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
                if (this.isEditMode()) {
                    var collection = this.get("MissingParametersCollection");
                    collection.clear();
                    this.set("CompletenessValue", 0);
                    this.calculateCompleteness();
                }
            },
            onSaved: function() {
                var callParentOnSaved = this.get("CallParentOnSaved");
                this.callParent(arguments);
                if (!callParentOnSaved && !this.isNewMode() && !this.get("IsProcessMode")) {
                    this.calculateCompleteness();
                }
            },
            calculateCompleteness: function() {
                var config = {
                    recordId: this.get("Id"),
                    schemaName: this.entitySchemaName
                };
                this.mixins.CompletenessMixin.getCompleteness.call(this, config, this.calculateCompletenessResponce, this);
            },
            calculateCompletenessResponce: function(completenessResponce) {
                if (this.Ext.isEmpty(completenessResponce)) {
                    return;
                }
                var missingParametersCollection = completenessResponce.missingParametersCollection;
                var completeness = completenessResponce.completenessValue;
                var scale = completenessResponce.scale;
                if (!this.Ext.isEmpty(missingParametersCollection)) {
                    var collection = this.get("MissingParametersCollection");
                    collection.clear();
                    collection.loadAll(missingParametersCollection);
                }
                if (this.Ext.isObject(scale) && this.Ext.isArray(scale.sectorsBounds)) {
                    this.set("CompletenessSectorsBounds", scale.sectorsBounds);
                }
                if (this.Ext.isNumber(completeness)) {
                    this.set("CompletenessValue", completeness);
                }
            }
        },
        mixins: {
            CompletenessMixin: "Terrasoft.CompletenessMixin",
            TooltipUtilitiesMixin: "Terrasoft.TooltipUtilities"
        },
        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "parentName": "MetricsContainer",
                "propertyName": "items",
                "name": "CompletenessContainer",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTAINER,
                    "items": []
                }
            },
            {
                "operation": "insert",
                "parentName": "CompletenessContainer",
                "propertyName": "items",
                "name": "CompletenessValue",
                "values": {
                    "generator": "ConfigurationRectProgressBarGenerator.generateProgressBar",
                    "controlConfig": {
                        "value": {
                            "bindTo": "CompletenessValue"
                        },
                        "menu": {
                            "items": {
                                "bindTo": "MissingParametersCollection"
                            }
                        },
                        "sectorsBounds": {
                            "bindTo": "CompletenessSectorsBounds"
                        }
                    },
                    "tips": [],
                    "layout": {
                        "column": 0,
                        "row": 0,
                        "rowSpan": 1,
                        "colSpan": 1
                    }
                }
            },
            {
                "operation": "insert",
                "parentName": "CompletenessValue",
                "propertyName": "tips",
                "name": "CompletenessTip",
                "values": {
                    "content": {"bindTo": "Resources.Strings.CompletenessHint"}
                }
            },
            {
                "operation": "insert",
                "name": "VistStatusa33f682a-dd58-4739-919d-cb84b9d2fc70",
                "values": {
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 12,
                        "row": 10,
                        "layoutName": "Header"
                    },
                    "bindTo": "VistStatus",
                    "enabled": true
                },
                "parentName": "Header",
                "propertyName": "items",
                "index": 46
            }
        ]/**SCHEMA_DIFF*/
    };
});

 

Best regards,

Oscar

HI Kavian,

 

Yes, it's possible. Here are the steps;

 

1) Add a "Completeness" field into your section object. This one should be an integer.

 

2) Add a record about your section into the "Completeness" table. You can do it with the following SQL script:

INSERT INTO Completeness (Name, EntitySchemaName, ResultColumnName, Scale)
    VALUES ('Quotes', 'VistQuotes', 'VistCompleteness', '{"sectorsBounds":{"min":0,"middleFrom":50,"middleTo":80,"max":100}}')

You should specify Name, EntitySchemaName, ResultColumnName and Scale columns.

 

3) Create replacing client module for your page (for example VistQuotes1Page in my case).

 

4) Add dependencies on following schemas: "CompletenessIndicator", "CompletenessMixin", "css!CompletenessCSSV2", "TooltipUtilities".

 

5) Add two attributes into the "attributes" area:

CompletenessValue: {
    dataValueType: Terrasoft.DataValueType.INTEGER,
    value: 0
},
MissingParametersCollection: {
    dataValueType: Terrasoft.DataValueType.COLLECTION
}

6) Add two mixins (CompletenessMixin, TooltipUtilitiesMixin) into your schema.

mixins: {
    CompletenessMixin: "Terrasoft.CompletenessMixin",
    TooltipUtilitiesMixin: "Terrasoft.TooltipUtilities"
},

7) Add the following methods:

methods: {
    init: function() {
        this.set("MissingParametersCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
        this.callParent(arguments);
    },
    onDetailChanged: function() {
        this.callParent(arguments);
        this.calculateCompleteness();
    },
    onEntityInitialized: function() {
        this.callParent(arguments);
        if (this.isEditMode()) {
            var collection = this.get("MissingParametersCollection");
            collection.clear();
            this.set("CompletenessValue", 0);
            this.calculateCompleteness();
        }
    },
    onSaved: function() {
        var callParentOnSaved = this.get("CallParentOnSaved");
        this.callParent(arguments);
        if (!callParentOnSaved && !this.isNewMode() && !this.get("IsProcessMode")) {
            this.calculateCompleteness();
        }
    },
    calculateCompleteness: function() {
        var config = {
            recordId: this.get("Id"),
            schemaName: this.entitySchemaName
        };
        this.mixins.CompletenessMixin.getCompleteness.call(this, config, this.calculateCompletenessResponce, this);
    },
    calculateCompletenessResponce: function(completenessResponce) {
        if (this.Ext.isEmpty(completenessResponce)) {
            return;
        }
        var missingParametersCollection = completenessResponce.missingParametersCollection;
        var completeness = completenessResponce.completenessValue;
        var scale = completenessResponce.scale;
        if (!this.Ext.isEmpty(missingParametersCollection)) {
            var collection = this.get("MissingParametersCollection");
            collection.clear();
            collection.loadAll(missingParametersCollection);
        }
        if (this.Ext.isObject(scale) && this.Ext.isArray(scale.sectorsBounds)) {
            this.set("CompletenessSectorsBounds", scale.sectorsBounds);
        }
        if (this.Ext.isNumber(completeness)) {
            this.set("CompletenessValue", completeness);
        }
    }
},

8) Insert completeness bar into your page with code like following:

diff: /**SCHEMA_DIFF*/[
    {
        "operation": "insert",
        "parentName": "MetricsContainer",
        "propertyName": "items",
        "name": "CompletenessContainer",
        "values": {
            "itemType": Terrasoft.ViewItemType.CONTAINER,
            "items": []
        }
    },
    {
        "operation": "insert",
        "parentName": "CompletenessContainer",
        "propertyName": "items",
        "name": "CompletenessValue",
        "values": {
            "generator": "ConfigurationRectProgressBarGenerator.generateProgressBar",
            "controlConfig": {
                "value": {
                    "bindTo": "CompletenessValue"
                },
                "menu": {
                    "items": {
                        "bindTo": "MissingParametersCollection"
                    }
                },
                "sectorsBounds": {
                    "bindTo": "CompletenessSectorsBounds"
                }
            },
            "tips": [],
            "layout": {
                "column": 0,
                "row": 0,
                "rowSpan": 1,
                "colSpan": 1
            }
        }
    },
    {
        "operation": "insert",
        "parentName": "CompletenessValue",
        "propertyName": "tips",
        "name": "CompletenessTip",
        "values": {
            "content": {"bindTo": "Resources.Strings.CompletenessHint"}
        }
    }
]/**SCHEMA_DIFF*/

A full example of code can be found below:

define("VistQuotes1Page", ["CompletenessIndicator", "CompletenessMixin", "css!CompletenessCSSV2", "TooltipUtilities"],
    function() {
    return {
        entitySchemaName: "VistQuotes",
        attributes: {
            CompletenessValue: {
                dataValueType: Terrasoft.DataValueType.INTEGER,
                value: 0
            },
            MissingParametersCollection: {
                dataValueType: Terrasoft.DataValueType.COLLECTION
            }
        },
        modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
            init: function() {
                this.set("MissingParametersCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
                this.callParent(arguments);
            },
            onDetailChanged: function() {
                this.callParent(arguments);
                this.calculateCompleteness();
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
                if (this.isEditMode()) {
                    var collection = this.get("MissingParametersCollection");
                    collection.clear();
                    this.set("CompletenessValue", 0);
                    this.calculateCompleteness();
                }
            },
            onSaved: function() {
                var callParentOnSaved = this.get("CallParentOnSaved");
                this.callParent(arguments);
                if (!callParentOnSaved && !this.isNewMode() && !this.get("IsProcessMode")) {
                    this.calculateCompleteness();
                }
            },
            calculateCompleteness: function() {
                var config = {
                    recordId: this.get("Id"),
                    schemaName: this.entitySchemaName
                };
                this.mixins.CompletenessMixin.getCompleteness.call(this, config, this.calculateCompletenessResponce, this);
            },
            calculateCompletenessResponce: function(completenessResponce) {
                if (this.Ext.isEmpty(completenessResponce)) {
                    return;
                }
                var missingParametersCollection = completenessResponce.missingParametersCollection;
                var completeness = completenessResponce.completenessValue;
                var scale = completenessResponce.scale;
                if (!this.Ext.isEmpty(missingParametersCollection)) {
                    var collection = this.get("MissingParametersCollection");
                    collection.clear();
                    collection.loadAll(missingParametersCollection);
                }
                if (this.Ext.isObject(scale) && this.Ext.isArray(scale.sectorsBounds)) {
                    this.set("CompletenessSectorsBounds", scale.sectorsBounds);
                }
                if (this.Ext.isNumber(completeness)) {
                    this.set("CompletenessValue", completeness);
                }
            }
        },
        mixins: {
            CompletenessMixin: "Terrasoft.CompletenessMixin",
            TooltipUtilitiesMixin: "Terrasoft.TooltipUtilities"
        },
        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "insert",
                "parentName": "MetricsContainer",
                "propertyName": "items",
                "name": "CompletenessContainer",
                "values": {
                    "itemType": Terrasoft.ViewItemType.CONTAINER,
                    "items": []
                }
            },
            {
                "operation": "insert",
                "parentName": "CompletenessContainer",
                "propertyName": "items",
                "name": "CompletenessValue",
                "values": {
                    "generator": "ConfigurationRectProgressBarGenerator.generateProgressBar",
                    "controlConfig": {
                        "value": {
                            "bindTo": "CompletenessValue"
                        },
                        "menu": {
                            "items": {
                                "bindTo": "MissingParametersCollection"
                            }
                        },
                        "sectorsBounds": {
                            "bindTo": "CompletenessSectorsBounds"
                        }
                    },
                    "tips": [],
                    "layout": {
                        "column": 0,
                        "row": 0,
                        "rowSpan": 1,
                        "colSpan": 1
                    }
                }
            },
            {
                "operation": "insert",
                "parentName": "CompletenessValue",
                "propertyName": "tips",
                "name": "CompletenessTip",
                "values": {
                    "content": {"bindTo": "Resources.Strings.CompletenessHint"}
                }
            },
            {
                "operation": "insert",
                "name": "VistStatusa33f682a-dd58-4739-919d-cb84b9d2fc70",
                "values": {
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 12,
                        "row": 10,
                        "layoutName": "Header"
                    },
                    "bindTo": "VistStatus",
                    "enabled": true
                },
                "parentName": "Header",
                "propertyName": "items",
                "index": 46
            }
        ]/**SCHEMA_DIFF*/
    };
});

 

Best regards,

Oscar

Oscar Dylan,

Thanks, is it possible to define negative values? For example, if Lead Contact unsubscribe from a Marketing Campaign, a boolean would be triggered and therefore it will reset the data entry compliance to 0.

 

Thanks,

Hi Kavian Abhari,



Please try to use this code.

 



onEntityInitialized: function() {

      var IsUnsubscribed = true;

        this.callParent(arguments);

        if (this.isEditMode()) {

            var collection = this.get("MissingParametersCollection");

            collection.clear();

          this.set("CompletenessValue", 0);

          if(this.get("IsUnsubscribed") == true){

          return;

          } else

          this.calculateCompleteness();

        }

    },





P.S. "IsUnsubscribed" - this is my example of your boolean variable that sets the unsubscribe logic.



Best Regards, 



Bogdan L.

Show all comments

HI,

Currently I have my Creatio set up to use an individual's person mailbox for sending system emails e.g. the Mailbox for sending email with information on approval. This causes issues, as this persons mailbox gets filled up with sent items which are not appropriate.

 

We use Office 365 for mail and therefore I wanted to set up a distribution group mailbox (no license consumption) for no-reply@ or creatio.notification@ and use this, but when trying to add the mailbox to Creatio, I need a valid password, for which this account does not have. I obviously can use the Group Delegation feature to allow a Send As account, but again am unsure how I can configure this in Creatio.

 

Any help is appreciated.

 

thanks

Like 0

Like

3 comments

Dear Mark,

 

For now, distribution group mailboxes are not supported on our platform. I will ask our developers to take into consideration your post and add this functionality in future releases. 

 

Best regards,

Angela

Angela Reyes,

Hi Angela

 

Firstly, thank you for your reply.

 

Are you able to provide guidance on the method to utilise an O365 non-user account as the email account used to send such notification mails? It is really annoying for a user to see so many 'system' mails in their Sent items, when this is something a service account should be configured to use. 

 

Obviously I would rather not pay for an O365 license just for this function.

Mark Roberts,

For now, we can only suggest using a shared mailbox for such emails or use an additional mailbox. 

 

Best regards,

Angela

Show all comments

Hello colleagues,

 

Somebody using this app? 

 

First of all understand if it works with FastReport printables, ad if the case:

 

Could you share, please some tips to populate the parameters? With the documentation provide I have doubt's and, of course, getting errors using it on those parameters specifically:

 

  • In the case of FastReport, "Convert to PDF" which value must have?
  • "File object" is an input parameter or here I get the Id of created attachment? If not which "File object" Id must I provide here?
  • "Master Column name" is a text, any text? Which is the purpose of this parameter?
  • "Master column value", I understand is the Id of the record where we want to attach the report on File & Links, for example to an Email, ActivityId?
  • "Record ID for printable" in the case of an Account printable (for example), the Id of the account from which we need the report?

Thank you very much for your help

Like 0

Like

3 comments

Hi Julio,

 

 

This app only supports .docx printables, therefore the 'Convert to PDF' parameter must always be 'False'.

 

Here is how the correctly set up element should look like:

No description available.

 

 

Thank you for your questions. We will mention that the app only supports .docx printables in its description.

Thanks Ivan, the image looks broken, could you upload again, please?

Ivan Leontiev,

Is also there any way to a new release that consider FastReport reports?

Show all comments