Hello

I have a business case were the managers need to extract a report to identify the accounts and/or contacts group by user, where the user is either the owner of the record or the user to whom the record has been shared with. Please note that the records are visible by owner, that said, is a private model.

i.e

  • Contact A is owned by Sales Rep 1 (only that sales rep has visibility on it)
  • Sales Rep 1 shares contact A with the Sales Rep 2 granted read-only rights (now both Sales Rep 1 and Sales Rep 2 can see the record)
  • Both sales reps have the same manager
  • Manager wants to have a list grouped by sales rep to track which are the records they have to work on. Expected result should be as follows:
    • Sales Rep 1: Contact A, Contact M, Contact Z
    • Sales Rep 2: Contact A, Contact X, Contact L

Any help on how to achieve above will help me a lot! 

 

Thanks!

 

Like 0

Like

2 comments
Best reply

Hi Adriana, 

 

You can create VIEW in the database (Access rights to Contact are stored in the table SysContactRight) and object based on that view. Then you can use this object for report or for tagging records.



A little bit more complicated situation is when record has access rights for group (e.g. All Employees). That means that this record is shared with more users and you need to calculatate all of them

 

Hi Adriana, 

 

You can create VIEW in the database (Access rights to Contact are stored in the table SysContactRight) and object based on that view. Then you can use this object for report or for tagging records.



A little bit more complicated situation is when record has access rights for group (e.g. All Employees). That means that this record is shared with more users and you need to calculatate all of them

 

Hello Vladimir

Thank you so much for your reply, I have also consulted internally and I got the same solution so I guess thats the best alternative!

Show all comments

We're looking for a way to link a document that is loaded into Creatio in an email template that is sent. 

 

For example, a contract is uploaded into the Attachments section of an Opportunity. The Opportunity is won, and a notification email goes out to specified users. The email includes information from the record, but also a link to the document within the Attachments section. 

Like 2

Like

1 comments

Hello Susan,

 

Your business task can be achieved via custom business process. You'd need to use [Process file] and [Send email] elements to achieve this business task. 

More detailed information about these elements can be found on our Academy:

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

https://academy.creatio.com/docs/7-17/user/bpm_tools/process_elements_r…



Best regards,

Anastasiia

Show all comments

Hi Team,



In Order section, we can place an order against an "Account".

In "Account" we can set a price list for a particular account.



While adding products in the Order section for a corresponding account, the products are displayed based on the price list column set in that account. This is achieved by calling a web service "PriceListService".

PriceListService.cs

	[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
			ResponseFormat = WebMessageFormat.Json)]
		public Guid GetPriceList(Guid accountId) {
			var priceListPicker = ClassFactory.Get<IPriceListPicker>(new ConstructorArgument("userConnection",
				UserConnection));
			var	preSetPriceList = priceListPicker.GetPriceList(accountId);
			return preSetPriceList != default(Guid)
				? preSetPriceList
				: priceListPicker.GetPriceList(UserConnection.CurrentUser.AccountId);
		}



But which client module is calling this web-service while adding products?



The responsible module must be an order product detail schema or page or the base page in this hierarchy. Please guide me on the module and the place where the web service is called.







BR, 

Bhoobalan Palanivelu.

Like 0

Like

5 comments

That service is being called from BaseOrderPage. In that schema there is a function that calls it named "initializePredefinedPriceList" (the actual service being called is defined in "getPriceListServiceConfig")

Ryan

Ryan Farley,



Thanks, Ryan!



Hopefully, this Base Order page is allowed in Replacing View model. It can override the getPriceListServiceConfig calling method and define a custom web service to filter the products with custom parameters.





BR,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

Yes, you should have no issue creating a replacing schema for BaseOrderPage and then override the methods as needed.

Ryan

Ryan Farley,



Thanks!



When the (+) is clicked in Product detail (in the order section) it opens a Product List page though the detail is editable. Where is the code for add record icon and it's not available in "OrderProductDetailV2" ? and how does this product list page is opened (ProductSelectionSchema).



Step 1: Which client schema page has this add event?



Step 2: How does the Account & Price List filter is applied to Product List page.





Insight on the Schema's name and the place where the code triggering the corresponding action will be helpful.





BR,

BHoobalan Palanivelu.

Bhoobalan Palanivelu,

Hello Bhoobalan

Please do you have a suggestion on how to implement the Product Catalog that appears in the order Section, for opportunity Products in Opportunity section. Your suggestions are much appreciated !

Show all comments

Dear,

I would like to display a field on the timeline of email activity on the account page.

On my activity custom object, i have add fields : dateRead, dateClick, dateBounce…

For example i would like to display dateClick if it is filled in.

So to know more about the account tile :

select *, [Data], cast('' as xml).value('xs:base64Binary(sql:column("Data"))', 'varchar(max)')

from TimelinePageSetting

if i decode the base64 account page result :

[
                                 {
                                               "entityConfigKey": "706f803d-6a30-4bcd-88e8-36a0e722ea41",
                                               "entitySchemaName": "Activity",
                                               "referenceColumnName": "Account",
                                               "masterRecordColumnName": "Id"
                                 },
                                 {
                                               "entityConfigKey": "09a70391-b767-40ab-97b8-6d1b538adbe6",
                                               "entitySchemaName": "Activity",
                                               "typeColumnName": "Type",
                                               "typeColumnValue": "e2831dec-cfc0-df11-b00f-001d60e938c6",
                                               "referenceColumnName": "Account",
                                               "masterRecordColumnName": "Id"
 
                                 }, …

I have two activity results.

The email tile activity seems to be the second line.        

select Name, [Data],cast('' as xml).value('xs:base64Binary(sql:column("Data"))', 'varchar(max)')
from TimelineTileSetting

 

After decode, here’s the json in the db :

{
 
                "entitySchemaName": "Activity",
                "typeColumnValue": "e2831dec-cfc0-df11-b00f-001d60e938c6",
                "viewModelClassName": "Terrasoft.UsrEmailTimelineItemViewModel",
                "viewClassName": "Terrasoft.UsrEmailTimelineItemView",
                "orderColumnName": "SendDate",
                "authorColumnName": "SenderContact",
                "messageColumnName": "Body",
                "filters": {
                               "ownerFilter": {
                                               "comparisonType": 15,
                                               "existsFilterColumnName": "[ActivityParticipant:Activity].Id",
                                               "subFilterColumnName": "Participant"
                               }
                },
                "columns": [{
                               "columnName": "Title",
                               "isSearchEnabled": true,
                               "columnAlias": "Subject"
                },{
                               "columnName": "Sender",
                               "columnAlias": "AuthorEmail"
                },{           "columnName": "Recepient",
                               "columnAlias": "RecipientEmail"
                },{           "columnName": "Contact",
                               "columnAlias": "Recipient"
                }]
}

I have changed

"viewModelClassName": "Terrasoft.EmailTimelineItemViewModel",

"viewClassName": "Terrasoft.EmailTimelineItemView",



by

"viewModelClassName": "Terrasoft.UsrEmailTimelineItemViewModel",

"viewClassName": "Terrasoft.UsrEmailTimelineItemView",

(to update :

UPDATE TimelineTileSetting
SET
Data=convert(varbinary(MAX),'{VAR json}')
WHERE Id='{VAR Id}'

)

I copied objects EmailTimelineItemViewModel and EmailTimelineItemView to UsrEmailTim…

But modifications i do on this two new objects are not displayed in the tile.

Did i do something wrong ?

Thank you !

Nico

Like 0

Like

2 comments

Sorry for the inconvenience, but it actually works fine.

it would be nice to have an interface to manage the tiles

Hi Nicolas, 

Thank you for this example and a new idea, we will give it to our developers.

Thank you for helping us make the system better.

Show all comments

Dear Creatio Community,

 

when linking a mail to a record a pop-up shows up and asks the user if he wants to "Link all emails from the conversation with this record?".

We don't seem to fully understand the meaning of this message. If the user clicks "yes" it appears like all e-mails from this e-mail address are also linked with the same record...

Could someone please explain the function of this pop-up?

Is it possible to disable it when linking a mail to a record?

 

Kind regards,

Markus Kumpfmüller

Like 0

Like

1 comments

Dear Marcus,

 

Thanks for your question.

 

The pop-up message 'Link all emails from the conversation with this record?' should show the emails that are on the thread only.

 

If it appears that all the user's emails are linked with a record, please contact us at support@creatio.com and provide us with access to:

 

the website the issue occurred;

 

examples of emails that appeared in the record which are in and not in the thread.

 

This functionality is a part of the core logic that is not connected to any feature or system setting, and as for now, there is no way to disable it in the application. 



We've created a problem for our R&D team so they could add either a feature or a system setting that could allow disabling this functionality. Thank you for reporting this issue to us and for helping us to make our application better!

 

Best regards,

Anastasiia

Show all comments

Hi,

 

We need to notify the admin if any user exports data using Export to Excel option. I have created a small business process to create the notification. I need to call this business process when someone exports the data. I see the exportToExcelFile() in Data Utilities that calls ReportService to generate the report, but not sure how to override this function to call the process after the service is called. Any help is much appreciated. 

Like 1

Like

4 comments

Hi,

You can add replacing module to the schema BaseDataView and call your business-process in the method exportToExcel.

 define("BaseDataView", [], function() {
	return {
		messages: {},
		mixins: {},
		methods: {
			exportToExcel: function() {
				this.callParent(arguments);
 				console.log("Test!!!!");
			}
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

Example of how to run a process you can find here.

Dmytro Vovchenko,

Thank you Dmytro! 

I already tried this. But the problem is that if the user does not have the Export Permission, this function still executes and the process runs to notify the admin that the user exported when in reality he could not. 

I saw the exportToExcelFile() in Data Utilities where the actual service ReportService is getting called. Will probably need to add the process call there to ensure the process is called only when the file is downloaded. But I'm not sure how to replace that module. I am unable to find that in the parent list in Replacing View Model. Please provide your insights. 

 

Regards,

Nirupama Mohan Latha,

 

hello! You can add your own operation permission check using the RightUtilities module and the checkCanExecuteOperations method inside the replaced exportToExcel method and trigger or not trigger the process as a result of this check.

Oleg Drobina,

Thank you Oleg! I can try that but will it also work when trying to export from Detail grids? When I tested I did not see this function getting executed. Let me know if I'm missing something.

Show all comments

I Have a detail where the copy ,edit and delete options must be hidden to all users except for the system administrator. Can someone help?

Thanks

Like 0

Like

1 comments

Hello Yasaswini,

 

This can be achieved only by means of development. You can find some examples here on our Community posted by other participants: 

https://community.creatio.com/questions/hide-detail-grid-menu-options

https://community.creatio.com/questions/hide-bunisess-process-option-de…

 

Best regards,

Bogdan S.

Show all comments

I need to make it open a panel with Open Street Map on it but my code is not working, when I click on the button I added, it gets the loading screen but doesn't show anything and the console shows an error.

My Code:

{
    showMapContainer: function() {
		var mapsConfig = {
			mapsData: []
		};
 
		mapsConfig.mapsData.push(
			{
				address: "0.0, 0.0",
				content:"<h2>Check-In</h2>",
				gpsE: "0.0",
				gpsN: "0.0",
				isCoordsItem: true,
				useCurrentUserLocation: true
			}
		);
		MapsUtilities.open({
			mapsConfig: mapsConfig,
			scope: this
		});
	}
}

Error:

Like 1

Like

1 comments
Best reply

I solved it, I needed to add the GetMapsConfig in messages:

I solved it, I needed to add the GetMapsConfig in messages:

Show all comments

Hello,

 

I have a detail in which I have added a column from another table using the "diff" array. Please see below Code. I would like the "Link" column to get hyperlinked. Unfortunately, the code I added does not seem to add hyperlink.

Can someone help please?

getShareLink: function(value) {
 
                return {
                        url: value,
                        caption: value,
 
                };
        	},
        	onShareLinkClick: function(url) {
                if (url != null) {
                        window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + 								this.get("WindowWidth"));
                        return false;
                }
   },
 
//diff array
{
	"operation": "insert",
	"name": "PsgDataGrid",
	"parentName": "Detail",
	"propertyName": "items",
	"index": 0,
	"values": {
			"itemType": Terrasoft.ViewItemType.GRID,
			"listedZebra": true,
			"collection": {"bindTo": "Collection"},
			"activeRow": {"bindTo": "ActiveRow"},
			"primaryColumnName": "Id",
			"isEmpty": {"bindTo": "IsGridEmpty"},
			"isLoading": {"bindTo": "IsGridLoading"},
			"multiSelect": {"bindTo": "MultiSelect"},
			"selectedRows": {"bindTo": "SelectedRows"},
			"sortColumn": {"bindTo": "sortColumn"},
			"sortColumnDirection": {"bindTo": "GridSortDirection"},
			"sortColumnIndex": {"bindTo": "SortColumnIndex"},
			"linkClick": {"bindTo": "linkClicked"},
			"type": "listed",
			"useListedLookupImages": true,
			"visible": {
				"bindTo": "isImageManagerDetailView",
				"bindConfig": {"converter": "getDataGridVisible"}
					},
					"listedConfig": {
						"name": "DataGridListedConfig",
						"items": [
							{
 
								"name": "Link",
								"bindTo": "Link",
								"position": {
									"column": 16,
									"colSpan": 8
								},
								"caption": Resources.localizableStrings.Link,
								"values":
								{
 
									"config": {
											"className": "Terrasoft.TextEdit",
											"linkclick": { bindTo: "onShareLinkClick"},
											"showValueAsLink": true,
											"enabled" : true,
											"href": {
											"bindTo": "Link",
											"bindConfig": {"converter": "getShareLink"}
										}
									}
								},
							}

 

Like 0

Like

8 comments

Hello,

If you want to make a text fields display as a hyperlink you need to add these parameters to the "values" part of the diff:

"showValueAsLink": true,

 "href": {

        "bindTo": "UsrLink",

        "bindConfig": {"converter": "getLinkFormat"}

 },

 "controlConfig": {

        "className": "Terrasoft.TextEdit",

        "linkclick": { bindTo: "onLinkClick"}

}

Note that "UsrLink" is the Code of the column.

And in the methods part add these methods:

            getLinkFormat: function(value) {

                return {

                    "url": value,

                    "caption": value

                };

            },

 

            onLinkClick: function(url) {

                var link = document.createElement("a");

                link.href = url;

                link.target = "_blank";

                document.body.appendChild(link);

                link.click();

                document.body.removeChild(link);

                return false;

            }

After this, your text should be displayed as a hyperlink.

Dmytro Vovchenko,

 

kindly see the code above. I have pasted the code with href, control config and showvalueaslink. It does not seem to work which is why I would like to check if the team can help here

Shivani Lakshman,

In that case, can you please show a screenshot of the detail so I can see how it looks like with values?

Sure



Shivani Lakshman,

I can see that you have two parameters named "values", inner and outer ones. Can you please try moving parameters "showValueAsLink", "bindConfig" and others to the outer "values" 

Dmytro Vovchenko,

I believe the outer values is for the detailgrid. I anyway tried outside the inner value and it still did not work. I am attaching the code

 define("FileDetailV2", ["FileDetailV2Resources", "PsgCurrentStorageImageConstants", "ViewUtilities", "ConfigurationConstants", "ConfigurationEnums", "ServiceHelper", "ProcessModuleUtilities","terrasoft", "BusinessRuleModule", "ImageListViewModel", "GridUtilitiesV2","ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
function(Resources,PsgCurrentStorageImageConstants, ViewUtilities, ConfigurationConstants, ConfigurationEnums, ServiceHelper, ProcessModuleUtilities,Terrasoft, BusinessRuleModule) 
		{
	return {
		rules: {
		},
		attributes: {  
			"ShareButtonMenuItems": {
				dataValueType: Terrasoft.DataValueType.COLLECTION
			}
		},
 
		messages: {
		},
 		mixins: {
         ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
        },
		methods: {
 
				init: function() {
						this.callParent(arguments);
						this.loadSPConfiguration();
 
					},
 
 
 
			initLoadFilesQueryColumns: function(esq) {
				this.callParent(arguments);
				esq.addColumn("[PsgFileLink:PsgFileId].PsgCurrentStorage", "CurrentStorage");
				esq.addColumn("[PsgFileLink:PsgFileId].PsgShareableLink", "ShareLink");
 
			},
 
			getImageByCurrentStorage: function() {
 
				var imageUrl = PsgCurrentStorageImageConstants.Icons.DataBase;
				var storageType = this.get("CurrentStorage");
				if(storageType) {
					if(storageType.displayValue === "SharePoint") {
						imageUrl = PsgCurrentStorageImageConstants.Icons.Cloud;
					}
 
				}		
 
				return imageUrl;
			},
 
			decorateItem: function(item) {
				this.callParent(arguments);	
				item.columns["CurrentStorage"] = {
					caption: "",
					columnPath: "CurrentStorage",
					dataValueType: Terrasoft.DataValueType.LOOKUP,
					isLookup: true,
					name: "CurrentStorage"
				};
 
				item.defGetLookupImageUrlMethod = "getIconByCurrentStorage";
				item.getIconByCurrentStorage = this.getImageByCurrentStorage;
			},
 			addColumnLink: function(item, column) {
                this.callParent(arguments);
            },
 
			getShareLink: function(value) {
 
                return {
                        url: value,
                        caption: value,
 
                };
        	},
        	onShareLinkClick: function(url) {
                if (url != null) {
                        window.open(url, "_blank", "height=" + this.get("WindowHeight") + ",width=" + 								this.get("WindowWidth"));
                        return false;
                }
        	}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "remove",
				"name": "DataGrid",
			},
 
			{
				"operation": "insert",
				"name": "PsgDataGrid",
				"parentName": "Detail",
				"propertyName": "items",
				"index": 0,
				"values": {
					"itemType": Terrasoft.ViewItemType.GRID,
					"listedZebra": true,
					"collection": {"bindTo": "Collection"},
					"activeRow": {"bindTo": "ActiveRow"},
					"primaryColumnName": "Id",
					"isEmpty": {"bindTo": "IsGridEmpty"},
					"isLoading": {"bindTo": "IsGridLoading"},
					"multiSelect": {"bindTo": "MultiSelect"},
					"selectedRows": {"bindTo": "SelectedRows"},
					"sortColumn": {"bindTo": "sortColumn"},
					"sortColumnDirection": {"bindTo": "GridSortDirection"},
					"sortColumnIndex": {"bindTo": "SortColumnIndex"},
					"linkClick": {"bindTo": "linkClicked"},
					"type": "listed",
					"useListedLookupImages": true,
					"visible": {
						"bindTo": "isImageManagerDetailView",
						"bindConfig": {"converter": "getDataGridVisible"}
					},
					"listedConfig": {
						"name": "DataGridListedConfig",
						"items": [
							{
								"name": "NameListedGridColumn",
								"bindTo": "Name",
								"position": {
									"column": 0,
									"colSpan": 4
								},
 
							},
							{
								"name": "VersionListedGridColumn",
								"bindTo": "Version",
								"position": {
									"column": 5,
									"colSpan": 2
								}
							},
							{
								"name": "CurrentStorage",
								"bindTo": "CurrentStorage",
								"position": {
									"column": 7,
									"colSpan": 6
								},
								"caption": Resources.localizableStrings.CurrentStorageColumnCaption,
 
							},
 
							{
								"name": "ShareLink",
								"bindTo": "ShareLink",
								"position": {
									"column": 13,
									"colSpan": 11
								},
								"caption": Resources.localizableStrings.Link,
								"values":
								{
											"showValueAsLink": "true",
											//"enabled" : true,
											"href": {
											"bindTo": "Link",
											"bindConfig": {"converter": "getLink"},
											},
 
											"controlconfig": {
												"className": "Terrasoft.TextEdit",
												"linkclick": { bindTo: "onShareLinkClick"},
 
										},
										"viewType":"url"
									}
 
							}
						]
					},
					"tiledConfig": {
						"name": "DataGridTiledConfig",
						"grid": {
							"columns": 24,
							"rows": 3
						},
						"items": [
 
						]
					},
					"linkClick": {"bindTo": "linkClicked"}
				}
			},
 
			{
					"operation": "insert",
					"parentName": "Header",
					"propertyName": "items",
					"name": "Name",
					"values": {
						"generator": "HtmlControlGeneratorV2.generateHtmlControl",
						"htmlContent": {
							"bindTo": "Name"
						},
						"classes": {
							"wrapClass": ["t-label"]
						}
					}
				},
			{
				"operation": "insert",
				"name": "AddToCloudButton",
				"parentName": "Detail",
				"propertyName": "tools",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"tag": "addFileButton",
					"fileUpload": true,
					"filesSelected": {"bindTo": "onFileSelect"},
					"click": {"bindTo": "onAddFileClick"},
					"visible": {"bindTo": "getAddToCloudButtonVisible"},
					"imageConfig": {"bindTo": "Resources.Images.AddToCloudButtonImage"},
					 "hint": { "bindTo": "Resources.Strings.AddToCloudToolTip" } ,
				}
			},
			{
				"operation": "merge",
				"name": "AddRecordButton",
				"parentName": "Detail",
				"propertyName": "tools",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"tag": "addFileButton",
					"fileUpload": true,
					"filesSelected": {"bindTo": "onFileSelect"},
					"click": {"bindTo": "onAddFileClick"},
					"visible": {"bindTo": "getAddRecordButtonVisible"},
					"imageConfig": {"bindTo": "Resources.Images.AddButtonImage"}
				}
			},
			{
				"operation": "insert",
				"name": "UploadToSPRetry",
				"parentName": "Detail",
				"propertyName": "tools",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"click": {"bindTo": "uploadToSPRetry"},
					"visible": {"bindTo": "uploadToSPRetryButtonVisible"},
					"caption": Resources.localizableStrings.UploadToSPRetryButtonCaption
				}
			},
 
 
			]
		/**SCHEMA_DIFF*/
	};
});

for you to look at. Please let me know your suggestions.

Shivani Lakshman,

With the same issue on my end.

Federico Buffa ?,

 

The column that I wanted to hyperlink was from another table. The solution that was provided is as follows

Please try with the specific column that you want to hyperlink with the following method

addColumnLink: function(item, column) {

                const columnPath = column.columnPath;

                if (columnPath ==="[PsgFileLink:PsgFileId].PsgShareableLink") {

                    column.columnPath = "ShareLink";

                    this.callParent(arguments);

                } else {

                    this.callParent(arguments);

                }

            },

Show all comments

How could I customize the Call action in the action panel to show Contacts from respective Account in Action panel of Account, Opportunity, Lead pages?

 

Like 0

Like

0 comments
Show all comments