Hi, I have developed a package in a Creatio environment, now I want to lock this package, so other developers will not be able to modify it? How can I do this? 

I would be grateful for any additional information on how locking of packages works and how it affects other packets that might have dependencies on such a packet, because the information I have been able to find in the creatio academy is limited.

Like 1

Like

10 comments

Hello!
 

Thank you for your question.
You can lock the package for Hotfix. By default, the package opens for hotfix only for 30 minutes, but you can change this value in the "Duration of package hotfix status" system setting.

More details about Package Hotfixes can be found in the following article on Creatio Academy

Hanna Shevchenko,

Thank you for your answer, but in my case, the package is open. I have created it,  now i want to lock it, (example: )

You can execute the following SQL statement to lock the package:

update "SysPackage" set "InstallType" = 1 where "Name" = 'MyPackageName'

Ryan

Thank you for your answer Ryan Farley,

I have tried this, but when I compile the workspace it shows me a list of errors, example: Type 'Team' already defines a member called 'GetData' with the same parameter types. 

Note that before the update of the field "InstallType", there are no compilation errors 

Alba M,

Hmm. There's got to be something else going on. Locking the package doesn't change it's contents in any way - I do this often.

Alba M,

Hi Alba, 

 

Try to Protect a package 

UPDATE "SysPackage"
SET "Maintainer" = 'Customer', "IsChanged" = FALSE, "IsLocked" = FALSE, "InstallType" = 1
WHERE "Name" = 'MyPackageName';

 

To unprotect it

UPDATE "SysPackage" 
SET "Maintainer" = 'Customer', "IsChanged" = TRUE, "IsLocked" = TRUE, "InstallType" = 0 
WHERE "Name" = 'MyPackageName';

Hi Julio.Falcon_Nodos, thank you for your answer

I tried this but it still gives the previous errors.

 

Hi Alba

 

Did you generate all code before compilation? If not, please try

Hi Julio Falcón (NoCode-Services),

Thank you for your answer,

I tried to firstly generated all the code(ACTIONS-> Generate for all schemas), but it still shows me the same errors after compilation

Thank you all for your answers, I fixed it by exporting the package, deleted it in the File System and then installed it in Application Hub. After installing I executed the query: update "SysPackage" set "InstallType" = 1 where "Name" = 'MyPackageName', for the package. The environment was compiled successfully.

Show all comments

Good day, I have a question regarding the tabs in Classic UI. I want to make them disabled, or locked or unclickable in my edit page. If you know how to implement it please could you show it in the following code snippet:

                "operation": "insert",
                "name": "AgbPrimaryDataTab",
                "values": {
                    "caption": {
                        "bindTo": "Resources.Strings.AgbPrimaryDataTabCaption"
                    },
                    "items": [],
                    "order": 0
                },
                "parentName": "Tabs",
                "propertyName": "tabs",
                "index": 2
 
Like 0

Like

1 comments

Hello Behruzbek, 

If you don't want some users to see the existing tabs, use the following article to hide tabs by code based on different conditions.

Also, it's possible to add business rules for some users. Please note that adding the role to the business rule is impossible for now.

Best regards, 

Anhelina!

Show all comments

For Financial Services Creatio product lineup, thre is BaseFieldsDetail schema of the BaseFinance package to set up details with fields. This package is available only in Financial Services Creatio product lineup.

 

I need to enable the Product Parameters Terms using the Field Details in Freedom UI. What is the best way?

 

This is the view of the field detail in Classic I'm trying to replicate

 

image.png

Like 0

Like

5 comments

Hello,

 

Please resend the screenshot, as it is not available on our end.

Second attempt

Mira Dmitruk,

 

Screenshot shared again

Good day, 

We would like to clarify whether you would like to 
1. introduce the adaption of this detail in Freedom UI version of the same page
2. or whether you wish to develop this detail for another section?

The closest element to a detail from Classic UI in Freedom UI is an expanded list that would refer to the elements of the relevant object 

Show all comments


Hello I was attempting to display other attributes of Product in Lead section (except of Duration) , like minimum amount, maximum amount and so on.
Could you please asssist me with this issue 

Like 1

Like

1 comments

Greetings,

 

To realize this business problem, you can check out our documentation on part creation.
 

You can find more details in this article:

https://academy.creatio.com/docs/8.x/no-code-customization/8.0/customization-tools/ui-and-business-logic-customization/page-layout/create-new-detail

Regards,

Orkhan

 

Show all comments

Hello,

I am getting the following error when I set up file system development on my computer. The compile is successful on initial set up but once I enable file system mode via the web.config file, and download packages,the compiler errors out with the following message. Any idea how to resolve this? The errors are related to out of the box packages. FYI I am using Creatio v8.1.2(for financial services)

Like 0

Like

2 comments

Hi Allen! How are you? Try the following:
1) Install/Deploy the application locally
2) Authorize and allow the inner part of the application to initialize (after login, wait for the application to finish loading).
3) Only after that, make changes in the Web.config file to enable development on the file system and follow further instructions.

Regards

Uriel Nusenbaum,

Thank you for the suggestions Uriel! I was using an older Creatio version, so I plan to set up a fresh instance with the latest version and will keep this information in mind during set up.

Good to hear from  you!

Show all comments

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