Hi,

Is there a way to configure what displays in noteworthy events?  I want to hide employee birthdays and only show customer birthdays.

Is there somewhere I can make these changes?

 

Looking forward to any help on this !

 

Thanks!

Like 0

Like

1 comments

Hello Anjum,



You can only disable it for all employee and customer birthdays. 

 

You just need to create a system setting (UseGenerateAnniversaryRemindings) and save it in a disabled state:

Show all comments

How do I implement this example as a module?

 

Now I wrote like this: 

Ext.define("HmbCapturizePhotoModule", [], function() {
    Ext.define("Terrasoft.configuration.HmbCapturizePhotoModule", {
        extend: "Terrasoft.BaseModule",
        alternateClassName: "Terrasoft.HmbCapturizePhotoModule",
 
        init: function() {
            this.callParent(arguments);
        },
 
        render: function(renderTo) {
            this.callParent(arguments);
            var config = this.generateConfig();
            Ext.create(config, renderTo);
        },
 
        generateConfig: function() {
            var width = 750;
            var height = 500;
            var video;
 
            return {
                xtype: "panel",
                title: "Сделать фото клиента",
                height: height,
                width: width,
                draggable: true,
                closable: true,
                floating: true,
                layout: {
                    type: "vbox",
                    pack: "center",
                    align: "stretch"
                },
                items: [{
                    html: "<video id='video'></video>",
                    flex: 1,
                    listeners: {
                        afterrender: function() {
                            video = document.getElementById("video");
                        }
                    }
                }],
                bbar: [{
                    xtype: "button",
                    text: "Запустить камеру",
                    itemId: "startbutton",
                    enableToggle: true,
                    toggleHandler: function(btn, state) {
                        var streaming = false;
                        var stream;
                        if (state) {
                            navigator.mediaDevices.getUserMedia({ video: true, audio: false })
                                .then(function(stream) {
                                    stream = stream;
                                    video.srcObject = stream;
                                    video.play();
                                })
                                .catch(function(err) {
                                    window.console.error("An error occurred: " + err);
                                });
                            video.addEventListener("canplay", function(ev) {
                                if (!streaming) {
                                    height = video.videoHeight / (video.videoWidth / width);
                                    if (isNaN(height)) {
                                        height = width / (4 / 3);
                                    }
                                    video.setAttribute("width", width);
                                    video.setAttribute("height", height);
                                    streaming = true;
                                }
                            }, false);
                        } else {
                            video.pause();
                            video.src = "";
                            if (stream) {
                                stream.getTracks().forEach(function(track) {
                                    track.stop();
                                });
                            }
                            video.srcObject = null;
                        }
                        this.ownerCt.down("#takePhoto").setDisabled(!state);
                    }
                }, {
                    xtype: "button",
                    text: "Сделать снимок",
                    disabled: true,
                    itemId: "takePhoto",
                    handler: function() {
                        var canvas = document.createElement("canvas");
                        canvas.width = width;
                        canvas.height = height;
                        var context = canvas.getContext("2d");
                        context.drawImage(video, 0, 0, width, height);
 
                        var imageSrc = canvas.toDataURL("image/png");
                        Terrasoft.utils.log(imageSrc);
                        canvas = null;
                    }
                }]
            };
        }
    });
 
    return Terrasoft.HmbCapturizePhotoModule;
});

 

Like 0

Like

1 comments

I made a separate mixin: 



 

define("CameraPageMixin", [], function() { 
    Ext.define("Terrasoft.configuration.mixins.CameraPageMixin", {
        alternateClassName: "Terrasoft.CameraPageMixin",
 
		afterRender: function() {
            this.callParent(arguments);
            this.webcamStarted = false;
        },
 
	    videoWidth: 500,
	    videoHeight: 380,
	    videoStream: null,
	    containerId: "WebCamModuleContainer",
	    photoContainerId: "PhotoModuleContainer",
 
	    openWebCamClick: function() {
	           try {
	               var videoElement = document.createElement("video");
	               videoElement.setAttribute("autoplay", "true");
	               videoElement.width = this.videoWidth;
	               videoElement.height = this.videoHeight;
 
	               navigator.mediaDevices.getUserMedia({ video: true })
	                   .then(function(stream) {
	                       videoElement.srcObject = stream;
	                       this.videoStream = stream;
 
	                     var container = this.Ext.get(this.containerId);
	                     if (container) {
	                          container.dom.appendChild(videoElement);
	                          this.webcamStarted = true;
	                      } else {
	                          window.console.error("Ошибка: элемент с идентификатором " 
	                          + this.containerId + " не найден в DOM.");
	                }
	                   }.bind(this))
	                   .catch(function(error) {
	                       window.console.error("Ошибка при получении доступа к веб-камере:", error);
	                   }); 
	           } catch (e) {
	                 window.console.error("Произошла ошибка при инициализации веб-камеры:", e);
	           }
	    },
 
	    takePhoto: function() {
	        var videoElement = document.querySelector("video");
	        if (videoElement.srcObject) {
	            var canvas = document.createElement("canvas");
	            canvas.width = this.videoWidth;
	            canvas.height = this.videoHeight;
	            var context = canvas.getContext("2d");
	            context.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
 
	            var photoData = canvas.toDataURL("image/png");
 
	            this.closeWebCamAndRemoveContainer();
	            this.showModalWindow();
 
	        }
	    },
	    closeWebCamAndRemoveContainer: function() {
	        if (this.videoStream) {
	            this.videoStream.getTracks().forEach(function(track) {
	                track.stop();
	            });
	        }
	        var container = this.Ext.get(this.containerId);
	         if (container) {
	             container.dom.remove();
	         }
 
	    },
	    showModalWindow: function() {
	        this.showConfirmationDialog("Не пройдена по техническим причинам?", 
	            this.showModalCallback, 
	            [this.Terrasoft.MessageBoxButtons.NO.returnCode, this.Terrasoft.MessageBoxButtons.YES.returnCode], 
	            null);
	    },
 
	    showModalCallback: function(returnCode) {
	        if (returnCode === this.Terrasoft.MessageBoxButtons.YES.returnCode) {
	            Terrasoft.showInformation("Нажата кнопка ДА");
	        } else if (returnCode === this.Terrasoft.MessageBoxButtons.NO.returnCode) {
	            Terrasoft.showInformation("Нажата кнопка НЕТ");
	        }
	    }
	 });
    return Ext.create(Terrasoft.CameraPageMixin);
});

 

Show all comments

Hi All,

 

Is there any possibility to hide a page (as highlighted below) from the new button in an old UI section?

 

 

Kindly help us resolve this issue.

 

Thank you

Geeviniy.

Like 0

Like

6 comments
Best reply

Hi Oleg,

 

This works like a charm. Thank you very much for the solution.

 

I have also added a code snippet, just in case if anybody needs to remove multiple pages from the dropdown of the new button,

{
				"operation": "merge",
				"name": "SeparateModeAddRecordButton",
				"parentName": "SeparateModeActionButtonsLeftContainer",
				"propertyName": "items",
				"values": {
					"controlConfig": {
						"menu": {
							"items": {
								"bindTo": "EditPages",
								"bindConfig": {
									"converter": function(editPages) {
										if (editPages.getCount() &gt; 1) {
											var valuesToRemove = [];
											for (var i = 0; i &lt; editPages.getCount(); i++) {
												var caption = editPages.getItems()[i].values.Caption;
												if (caption === "Returned Mail" || caption === "Default" || caption === "Posting Restriction" || caption === "KYC Review") {
													valuesToRemove.push(i);
												}
											}
											for (var j = valuesToRemove.length - 1; j &gt;= 0; j--) {
												editPages.removeByIndex(valuesToRemove[j]);
											}
											return editPages;
										} else {
											return null;
										}
									}
								}
							}
						}
					}
				}
			},

 

We only need to modify the captions according to our requirements.

 

Thank you

Best Regards,

Geeviniy

Dear Jana,



The same questions were asked on the community previously, and you can find those questions hereherehere, and here. Please refer to those articles so to be able to hide a button.



And 

There were a couple of  similar requests on our community. You can find the solutions here: 

 

https://community.bpmonline.com/articles/how-can-i-hide-button-portal-users

https://community.bpmonline.com/questions/how-hide-button-existed-record

https://community.bpmonline.com/questions/removing-new-case-button-portal-case-section

https://community.bpmonline.com/questions/hide-section-button-edit-page 





Best regards,

Orkhan

Hi Orkhan,

 

I referred to all the articles that you have shared above. In fact, the question I raised is similar to the below article.

https://community.creatio.com/questions/how-hide-page-new-button

 

But seems like, the shared community articles are irrelevant to what we raised. Those articles describe hiding the new button itself. But the requirement for us is to keep the new button and just hide one or more pages from the new button drop-down when there are more pages in that particular section. Kindly double-check and help us resolve this issue.

 

Thank you

Geeviniy.

Geeviniy Vazavan,



Thank you for your feedback, give us some time so we can help you with this problem.

 

Best regards,

Orkhan

 

Geeviniy Vazavan,

 

Hello,

 

Here is a fast and working example: in the section schema you need to create a replacement of the SeparateModeAddRecordButton element in the diff:

define("OrderSectionV2", [], function() {
	return {
		entitySchemaName: "Order",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "SeparateModeAddRecordButton",
				"parentName": "SeparateModeActionButtonsLeftContainer",
				"propertyName": "items",
				"values": {
					"controlConfig": {
						"menu": {
							"items": {
								"bindTo": "EditPages",
								"bindConfig": {
									"converter": function(editPages) {
										if (editPages.getCount() &gt; 1) {
											var valueToRemove;
											for (var i = 0; i &lt; editPages.getCount(); i++) {
												if (editPages.getItems()[i].values.Caption == "Website") {
													valueToRemove  = i;
												}
											}
											if (valueToRemove || valueToRemove == 0) {
												editPages.removeByIndex(valueToRemove);
											}
											return editPages;
										} else {
											return null;
										}
									}
								}
							}
						}
					}
				}
			},
		]/**SCHEMA_DIFF*/,
		methods: {}
	};
});

You only need tp modify the "Website" in the code with the caption of the edit page you need to remove from the "New" option. After that refresh the page and the menu item will be removed. Debug the execution of the example above and add your own logic if needed.

Hi Oleg,

 

This works like a charm. Thank you very much for the solution.

 

I have also added a code snippet, just in case if anybody needs to remove multiple pages from the dropdown of the new button,

{
				"operation": "merge",
				"name": "SeparateModeAddRecordButton",
				"parentName": "SeparateModeActionButtonsLeftContainer",
				"propertyName": "items",
				"values": {
					"controlConfig": {
						"menu": {
							"items": {
								"bindTo": "EditPages",
								"bindConfig": {
									"converter": function(editPages) {
										if (editPages.getCount() &gt; 1) {
											var valuesToRemove = [];
											for (var i = 0; i &lt; editPages.getCount(); i++) {
												var caption = editPages.getItems()[i].values.Caption;
												if (caption === "Returned Mail" || caption === "Default" || caption === "Posting Restriction" || caption === "KYC Review") {
													valuesToRemove.push(i);
												}
											}
											for (var j = valuesToRemove.length - 1; j &gt;= 0; j--) {
												editPages.removeByIndex(valuesToRemove[j]);
											}
											return editPages;
										} else {
											return null;
										}
									}
								}
							}
						}
					}
				}
			},

 

We only need to modify the captions according to our requirements.

 

Thank you

Best Regards,

Geeviniy

Geeviniy Vazavan,

Hi Oleg,

 

Quick clarification. Can we disable the options in the new button drop-down? (Make it not clickable, but it should be visible)

Show all comments

Hello!

Need your help

On the specific step of the process I want to display list of contacts on the page and user have to have an opportyniti to filter this list.

How can i do it and what BPMN element i should use?

Like 0

Like

4 comments

 

Hi Anna,



Do you mean that you want to filter a list of contacts on the specific step of the DCM stage

I want to display this list to users and user shold have possibility to filter this list. All this i want to get using BPMN process

Anna,

 

Could you please detailly describe your business task with the screenshots?

Sure,

I got a process

 

At this step(highlighted in the square) I would like to display list of contacts for example 

Show all comments

Hello!

I got a business need to send the users dashboard in xls format according to the schedule.

How can i do that using BPMN functional in Creatio?

Like 0

Like

1 comments

Hello!



We have consulted with the product owners of this feature and we are certain that this task can only be achieved by the means of development.

Also, we have created a request for our developers in order to bring this functionality in future releases.

 

Thank you for this suggestion, this helps to make our product better!

In the meantime, as a workaround, we recommend creating a Word report and generating it within a business process, followed by sending it via email. This approach should help you achieve the desired outcome. 

For detailed instructions on setting up this business process, please refer to the following articles on the Creatio Academy:

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

https:/academy.creatio.com/docs/user/bpm_tools/process_elements_reference/system_actions/process_file/process_file_element?check_logged_in=1

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

 

Please note that a Word report is generated for each section record separately.

I hope this information helps you resolve your business task.

 

Best regards,

Kate

Show all comments

Hello everyone.

Can you help me, what Creatio tools we can use to solve the following issue:

We want to implement in Creatio functional that will help our operators effectively help solve the client's problems by tooltips.

depending on the responses, the page should change dynamically

below you can find a picture how we imagine this functional

 

Like 0

Like

1 comments

Hello,

 

Please describe in more detail what features you want to add to Creatio? 

 

Thank you!

Show all comments

Our external system(DWH) would like to load large number of records from Creatio, no matter how big the data upload limit is, it will end.

We want to use pageing functional to divide data.

If there is such functionality in creatio, if so, how to enable it

Like 0

Like

6 comments

Hello,

 

Please note that we do not have such an integration in the system and we advise using the basic export functionaliy, as it does not have any limits.

As an alternative option, you can use Integrations & APIOdata web service for this.

Can you please tell me how to process such a case: we have a table with 21 000 records and we can't load it because after 20 000 records an error appears, how can we solve this problem?

Anna,

 

In this case I recommend you contacting our Support team directly at support@creatio.com so we could check this issue on your site.

Thanks , but links are not active

Can you be more specific as to what you are trying to do?  Are you trying to load data from your DWH to a Cloud instance?  Is this a one time thing? Are the inserts or updates?  How are trying to load?  Odata DataService?  Are you using an app or self coded? 

Show all comments

Hi Community,



How to convert the following SQL query into ESQ so that it can be used in the Script task Process element. 

 

SELECT TOP 1 SalesOwnerId 

FROM [Lead] 

WHERE SBLBranchLocationId ='060183EE-C2F3-4EDF-853C-59E28026EAD6' 

  AND LeadTypeId='669BC3A8-DFDB-4E53-8AAE-B643C2D6C677' 

  AND SalesOwnerId IS NOT NULL 

GROUP BY SalesOwnerId 

ORDER BY COUNT(SalesOwnerId) ASC

Like 0

Like

1 comments

Hi,

If you specifically need to use ESQ then take a look at this discussion where this topic was discussed.

However, in your case you can use Select class, with it you can easily use expressions like GROUP BY or ORDER BY.

Show all comments

Hi,

How can I use esq or a business process to determine a user's organizational role and its associated functional role from the employee section?

 

File attachments
Like 0

Like

1 comments
Best reply

This article will show you how to retrieve a user's roles using an ESQ. See https://customerfx.com/article/determining-if-a-user-has-a-specific-rol…

Ryan

This article will show you how to retrieve a user's roles using an ESQ. See https://customerfx.com/article/determining-if-a-user-has-a-specific-rol…

Ryan

Show all comments

Hi Team,

 

I have deleted on Column from the backend and published the object, but on the frontend when I am trying to create and save a new record, a message displayed that no null value allowed in that column (which I already deleted from backend)

 

Below is the error message when I try to save new record -

 

Below is when I try to search Column "Usrave" (I already deleted) in the object - 

 

I tried to Generate the source code and the compiling the applicaiton but it doesn't work.

 

Please help here.

 

Thanks.

 

 

Like 0

Like

2 comments

hi Akshit,



Please check this link Foreign Key Violation to find out where are all the places the column is being referred.



And make sure to check is there any trigger is created for table dbo.FinAppliation (With the column name) UsrSave. In that case delete the invalid triggers that uses the 'Column name of table which is deleted from DB'.





BR,

Bhoobalan Palanivelu.



 

Bhoobalan Palanivelu,

Thanks Brother :)

 

I resolved this by changing this column "Nullable" property = True and then Dropping the column from the table using SQL executor console.

Show all comments