Dear team,

 

we need to return some user-friendly result from anonymous service method, not Json or Xml. Use case is as follows: end user receives email with link, which is opened in browser. So we need to return some Html page from the method, or link to static content that will inform user about result of his action. Something in a way, as is implemented for the case-rating (see screenshot)

Is there a suggested method to implement such behavior? 

 

Thanks!

Like 0

Like

7 comments

Hi Iuliia, 

 

Alas, this is an unsafe approach to use an anonymous web-service to return an HTML-page. This may do harm to the user's data and safety. Could you please specify if an anonymous web-service is the only preferable method for you? 

 

Here is also an option to perform your task using a configuration web-service. Please find the instruction by the link below:

 

https://academy.creatio.com/documents/technic-sdk/7-16/creating-configu…

 

Please let us know if you need any additional assistence. 

 

Regards, 

Anastasiia

Anastasiia Markina,

for the task at hand it's preferable for us to use anonymous web-service. It will have limited endpoints for sure, and with action validation. Simplified business flow is that internal user receives some question with yes/no selection (two links, with user-specific id's for each case), clicks on one of them => application receives this answer and returns some message to the user that will notify him/her that the answer was stored successfully or not. We want to use anonymous web-service to improve user experience - not to force them to login to system for such actions. 

Thanks for you suggestion, but unfortunately I can't seem to the answer for my question here.  In example there is  ResponseFormat = WebMessageFormat.Json (or Xml) which is not suitable for task at hand - they are parsed in not user-friendly response by browser. 

What I was asking,  if there is a possibility to return any user-friendly response from the service method(could be as well redirection link to some statically stored image which will hold the message that user should receive). 

 

Best regards, Iuliia

Iuliia Diakiv,

 

We strongly discourage you from using an anonymous web-service to return any data as this may threaten the safety of the whole system. 

 

To show a user any readable page (HTML or an image), you can easily store it at the directory of your instance and call it from there as usual. 

 

Regards, 

Anastasiia

Anastasiia Markina,

ok, I got your consern about using anonymous web service. But how can I return link to html page from general service, which you've suggested to use in your first comment? I can't seem to find the solution myself

 

Regards, Iuliia

Iuliia Diakiv,

 

We have been looking for the correct solution for your purpose. The best way to return the HTML-page without authentication and without threatening to system safety, at the same time, is to create a static HTML page.

 

Please put it to your root project directory: Terrasoft.WebApp > Nui

Then, a user will be able to open it as a standard HTML web page.

 

Regards, 

Anastasiia

Hi Anastasiia Markina,

 

Could you please let me know how to call/ return the HTML page from the anonymous service?



Edit : Adding below code worked.

 

WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Redirect;

WebOperationContext.Current.OutgoingResponse.Headers.Add("Location", "http://localhost:97/0/Nui/ThankYouPage.html" );

Shivani Lakshman,

 

According to Anastasiia explanation we don't have practical examples of such implementation.

 

https://academy.creatio.com/documents/technic-sdk/7-16/creating-anonymo…

 

As mentioned in this article you may use couple of web services.

 

Alternatively, OData will be the most flexible to achieve most of required scenarios:

 

https://documenter.getpostman.com/view/10204500/SztHX5Qb?version=latest

 

As for example check this article how to get some data like files and you may change it according to your needed: 

 

https://community.creatio.com/questions/how-download-attachments-section

 

Hopefully it will be useful for you!

 

Regards, 

 

Bogdan L.

Show all comments

Hi there,

 

Based on the account and contact lookup I have to filter Product lookup which is working fine.

 

But I can see the same product(Battery Back-up.....) two times, because more than one record has the same account and contact in the other section.

 

But I want to show it only one time. Attaching the screenshot.

 

Code : 

 

Like 0

Like

3 comments

Hi Akshit,

 

I've tried the code you've sent and unfortunately it didn't work on my end. But here is an example of my custom code that worked perfectly:

 

attributes: {
			"UsrProduct":{
				"dataValueType":Terrasoft.DataValueType.LOOKUP,
				"lookupListConfig": {
					"filters": [
					function() {
						var filterGroup = Ext.create("Terrasoft.FilterGroup");
						filterGroup.add("AccountFilter",Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
						"[Account:Id:UsrAccount].Name",
						this.get("UsrAccount").displayValue));
						filterGroup.add("ContactFilter",Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
						"[Contact:Id:UsrContact].Name",
						this.get("UsrContact").displayValue));
						return filterGroup;
					}
					]
				}
			}
		},

I have a Product section where I can select an account and a contact for the product and I've created a "Test section" section where the "UsrProduct" column represents the Product section. As a result I receive this result in this lookup:

since there are only two products in the products section that have "Our company" specified as an account and "123" specified as a contact:

As for using the DISTINCT statement - it's way more better to have products being connected to one contact and one account per one product since it reduces the possibility that incorrect product is chosen in the lookup.

 

Best regards,

Oscar

Hi Oscar,

 

Thanks for your response, below is my case

 

I have to perfrom filtration in section A , product(is a lookup on section B) column based on the selection of Account and contact. 

In section B, I have Account, contact and product (is a lookup on Product section).

Using BP I am updating the name column in section B from the product selected. The case is that there will be more than one record where I can have same account, contact and product selected in section B as you can see [A-B-C] in the screenshot. 

In this case, In section A if I select A as account, B as contact then I got C two times.

 

Hope you got the scenario. 

 

Regards

 

Akshit.

Akshit,

 

You will need to use esq instead where distinct can be used in filtration like in the example below:

esq.isDistinct = true;
esq.addColumn("UsrCandidatesId");

Please create such a filtration you've performed using filter groups, but using esq instead.

 

Best regards,

Oscar

Show all comments

Hi All,

 

I have a requirement to show a PreConfiguration page only to the set of people confined to an organizational role.



The users with this role coudn't be able to view the page. The page can be able to view when we mapped only to specific contact.



In that case how to attain that requirement. 



Regards,

Adharsh S

Like 0

Like

2 comments

Dear Adharsh,

 

Such pages can be opened only for users. However, you can create a cycle that will read all users and show page to each of them. Also, you can use collections and add the page to sub-process, forward collection of users in role to process. This will create as many pages as users in the role.  

 

Best regards,

Angela

Angela Reyes,

Thanks.

Show all comments

Hi Community,

 

Lot of times I see people talking about asyncValidate method for resolving asynchronous calling issues.

For ex.

 

I understand callback concept in javascript but I found it very difficult to understand the use of callback in asyncValidate base method.

I have gone through BaseEditPage, DocumentPageV2 and many more where base asyncValidate has been implemented, but still I didn't understand how these callback and scope are working here specifically.

 

Can someone refer me to any video/article where someone from creatio(creatio developer) are explaining this?

 

Like 1

Like

2 comments

Hi Akshit,

 

I'm not "someone from Creatio (Creatio developer)", but I'll mention that a page in Creatio has many layers each layer might have fields they need to validate. For example, let's say you customize the Account page and add an asyncValidate. Your customized version of the Account page is a layer on top of the base Account page. If the base Account page also needs to use asyncValidate, there needs to be some way to chain all of these async functions together, so it knows when they are all done and can continue with the save or not. So, when one of the asyncValidate functions complete, it executes the callback so that the next "layer" of the  page can run it's asyncValidate. This is how it chains these async functions together, by passing the callback of the next one to the function, so it can tell the next one when they can run (by executing the callback). Does that make sense?

 

Ryan

Hi Ryan,

 

Thanks, Yes It makes sense : )

 

 

Show all comments

Hi Team,

 

 

Based on the values of  location(lookup) and category(lookup) I want to auto populate Approval Budget, Budget Code & Budget Amount.

 

I need to perform this on frontend by writing code on Edit page.

 

I have tried setValidationConfig but it didn't worked.

 

Is there any other base method which I should used to acheive this ?

 

 

Many thanks!

Like 0

Like

1 comments

Hi Akshit,

 

Please try using this code for your purposes:

 

if (this.get("Location").value == 'YOUR_VALUE' && this.get("Category").value == 'YOUR_VALUE') {
    this.set("UsrApprovedBudget", id_here);
this.set("UsrBudgetCode", id_here);
this.set("UsrBudgetAmount", id_here);
 }

Where id_here is a lookup value id or a string if you have a hard-coded value.

 

Regards, 

Anastasiia

Show all comments

Hi Community,

 

In my case we have two developers and one dedicated development creatio instance.

I want Is it good to create separate workspaces (like we have Default workspace by default) for two developers?

 

Like 0

Like

1 comments

Hi Akshit,

 

It is better to enable development in the file system for the dev-app in case your dev-application is deployed locally or use SVN to commit changes to the app (please note that you need to have some internal task system so to get sure that two developers don't save changes to the same schema at the same time or that two developers compile the app at the same time).

 

Best regards,

Oscar

Show all comments

Dear team, 

we are preparing to upgrade to version 7.16.x, and as stated in update guide before update to versions 7.16.1 and 7.16.2 we are tryin to remove any customization using the MailBee library and the Terrasoft.Mail.SmtpClient class.

I am following the guide to set up email sending using explicit account credentials but receive errors when trying to compile the process

Using of Terrasoft.Mail.Sender and Terrasoft.Core.Factories

Could you please, help me? Which namespase\class should I additionally include?

 

Best regards, Iuliia

Like 0

Like

8 comments

Hello Iuliia,

 

Please also get sure that you are using System.Linq along with Terrasoft.Mail.Sender and Terrasoft.Core.Factories. Also please provide us with your code since the code from the article you've sent works correctly and the process can be published.

 

Best regards,

Oscar

Oscar, thanks for your reply. Yes, I did include System.Linq, and code that I am using is exact copy of the code in example, no deviations. Please, note my current version is 7.14.0 - could this be an issue? I noticed that this guide is not available for documentation for 7.14

Regards, Iuliia

Iuliia Diakiv,

 

Yes, you are right, we've reproduced the same publishing error in the clean 7.14.0 version and double-checked with the developers and this approach is acceptable for 7.15.* versions applications and higher. This approach won't work in 7.14.0 and please update your app to 7.16.4 version so to implement the functionality described in the article.

 

Best regards,

Oscar

Oscar Dylan,

Thanks for clarification. One last question: in the update guide it says 

"Before you update to versions 7.16.1 and 7.16.2 make sure you do not have any customization using the MailBee library and the Terrasoft.Mail.SmtpClient class", so does it mean that in versions 7.16.x using mentioned classes is impossible (e.g. they are removed) or just deprecated? 

I am just wondering whether I will receive error upon trying to update to higher version with the current logic implemented, if those classes were removed completely.

 

Regards, IUliia

Iuliia Diakiv,

 

you need to remove this process from the system since the system compiles itself once it is updated so as a result you will receive a compilation error and the update process will be unsuccessful. To make sure that the update is correct you need to remove the process and compile the app after that. In case you receive no errors (warnings are acceptable) then you can process with an update.

 

Best regards,

Oscar

Oscar Dylan,

sorry, I did not understand your last response. What i am asking is this: are  MailBee library and the Terrasoft.Mail.SmtpClient class completely deleted or just deprecated starting from version 7.16.1?

If they are deleted, I need to delete my currently working code that uses them before version update and then re-setup all processes for email sending from scratch? - this will be really inconvenient.

 

Best wishes, Iuliia

 

Iuliia Diakiv,

 

They were completely removed so that's why the update guide tells to remove using this library and class. You can use the SQL script provided there to find all the processes where they are used and modify all the processes according to the articles that are mentioned there.

 

Best regards,

Oscar

Oscar Dylan,

thank you very much for clarification!

Show all comments

I have a business process that, when in a Case the Assignees Group is set, must send an email to the Manager ot that group.

The Assignees Group is an Organizational Role where we set a Manager User (see image: for "Team Engineering" group the manager is contact "VAR").

Our Business Process must read the Manager of the Assignees Group of the case so we can send an email.

I didn't find the objects to obtain the needed informations in "Read data" elements in our Business Process.

Please.. can somebody help me?

Thank you

Like 0

Like

1 comments

Dear Massimiliano,

 

Due to the system architecture, it is not possible to read this data via the business process. Instead, you can create as many flows as Assignees Groups, specify manager role for each assignee group role and send an email via script task as described here: https://community.creatio.com/questions/send-email-organizational-role-…;

 

Best regards,

Angela

Show all comments

Hi I am getting this error while installing creatio7.16.2 on my local system.

 

 

Please help me to understand the issue!

Like 0

Like

1 comments

Hello,

 

The error usually appears if the server uses old version of the .Net Framework.

Please make sure to update you Windows components. You can find them here:

https://dotnet.microsoft.com/download/thank-you/net472-developer-pack

https://dotnet.microsoft.com/download/dotnet-core/thank-you/sdk-3.1.301…

 

Regards,

Dean

Show all comments

Hello,

I want to add custom button to add new record of case. I added custom button to contact edit page, made onClick event handler and using this function to open add record page of case:

 

_contactObject.openCardInChain({
	"schemaName": "CasePage",
	"operation": "add",
	"defaultValues": [{
		"name": "Contact",
		"value": _contactObject.get("Id"),
		"displayValue": _contactObject.get("Name")
	}]});

It works only when I am on Contact edit page, reload page and clicked my button. or if I entered directly on Contact edit page using url.

 

But if I entered from Contact list page, this function is not working. It shows infinite loader and never stops. If I reload page while loader, it loads add record page of case, exactly what I want.

 

Unfortunately, it doesn't shows any error in console. I tried to debug this function and trace how it works, but at the and, it fires event and I can't understand why its handler not handling it.

 

We are using Bpm Online 7.14.1.935

Like 0

Like

3 comments

Dear Luka,

 

Looks like the issue is related to combined mode Please, try this approach of adding logic to the section and to the page - https://academy.creatio.com/documents/technic-sdk/7-16/how-add-button-edit-page-combined-mode.

 

Best regards,

Angela

Angela Reyes,

we had that problem, but now we added button on ContactPage, so its button and onClick handler works fine. also that function openCardInChain is executed, but there is no result. 

Resolved:

I added property in config param which is passing to openCardInChain function. param is moduleId.

Show all comments