Hi Community,

 

I have created a custom package and added all the necessary modules required for applying business rules in it.

 

 

I have then created a custom module with the business rule and added this module inside the ModelExtension attribute of required model[UsrPurchaseOrders] in MobileApplicationManifestDefaultWorkplace.

 

Business rule : 

 

Please help me with this issue.

 

Many Thanks.

 

Akshit

 

Like 0

Like

1 comments

Hello Akshit,

 

I've used the same code on my side:

Terrasoft.sdk.Model.addBusinessRule("Case", {
    ruleType: Terrasoft.RuleTypes.Activation,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: ["UsrContact"],
    conditionalColumns: [
        {name: "UsrContact", value: "c4ed336c-3e9b-40fe-8b82-5632476472b4"} //Andrew Baker
    ],
    dependentColumnNames: ["UsrStringColumn"]
});

and the logic is that if the contact specified in the UsrContact column is not Andrew Baker (sample) then the UsrStringColumn column should be deactivated. And the only difference between our scenarios is that the application pool for the app should be restarted once you apply all the changes in your custom module and include this module into the manifest. So please restart the application pool in IIS if this is on-site app or contact us at support@creatio.com if this is a cloud app. On my side the rule works as expected (using 7.16.4 version):

Best regards,

Oscar

Show all comments

Following this post  I was able to set most fields i needed to rich text however no matter what I try the case description field will not change to rich text. Any ideas on what to try to make it rich text?

Like 0

Like

8 comments
Best reply

Hi Michael,

I've found that if your element in the diff is a merge, changing the contentType doesn't always work. Since the case description is a field that already exists on the case page, I assume it's in the diff with "operation": "merge". Try this instead, delete the description field from the page, then re-add it again. Now, it will show as an insert in the diff. Add your

"contentType": Terrasoft.ContentType.RICH_TEXT

and it should now work.

 

Ryan

Hi Michael,

I've found that if your element in the diff is a merge, changing the contentType doesn't always work. Since the case description is a field that already exists on the case page, I assume it's in the diff with "operation": "merge". Try this instead, delete the description field from the page, then re-add it again. Now, it will show as an insert in the diff. Add your

"contentType": Terrasoft.ContentType.RICH_TEXT

and it should now work.

 

Ryan

Ryan Farley,

Your solution worked, Thanks

 

 

Ryan Farley,

Thanks Ryan, I have the same problem. In the merge element to this field, I modify my DIFF block to the Symptom column, but nothing happens in the app, it continue receiving data as clear text, not Rich Text

The whole block I have for this field in my DIFF is:
{ // JFALCON, enable Rich Text?
	"operation": "merge",
	"name": "Symptoms",
 
	"contentType": this.Terrasoft.ContentType.RICH_TEXT,
	"controlConfig": {
		"imageLoaded": {
			"bindTo": "insertImagesToNotes"
		},
		"images": {
			"bindTo": "NotesImagesCollection"
		}
	},
	"values": {
		"layout": {
			"colSpan": 24,
			"rowSpan": 3,
			"column": 0,
			"row": 1
		},
		"enabled": true,
		"labelConfig": {
			"visible": true
		}
	}
},	 // FIN	

What could be wrong?

 

 

Hello Julio,

Changing the content type for a merge in the diff never seems to work for me. The only way I can get this to work for existing fields such as Symptoms is to remove the out of the box field from the page, then re-add it again. This way, it's no longer a merge and instead an insert (which does work).

Ryan

Ryan Farley,

Thanks Ryan, it didn't works to me :-(, so I open a Ticket with Creatio support, they are testing, you can see what I'm getting now here https://prnt.sc/YafjMFjshHdJ, they change the DIFF code I had by this one, but not results

			{
				"operation": "insert",
				"name": "Symptoms14a57ab4-4b0f-42ff-a61a-467308dff56d",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 3,
						"column": 0,
						"row": 1,
						"layoutName": "CaseInformation_gridLayout"
					},
					"bindTo": "Symptoms",
					"enabled": true,
					"tip": {
						"content": {
							"bindTo": "Resources.Strings.Symptoms14a57ab44b0f42ffa61a467308dff56dTip"
						}
					}
				},
				"parentName": "CaseInformation_gridLayout",
				"propertyName": "items",
				"index": 1
			},

They delete your suggestions, fragment

	"contentType": this.Terrasoft.ContentType.RICH_TEXT,
	"controlConfig": {
		"imageLoaded": {
			"bindTo": "insertImagesToNotes"
		},
		"images": {
			"bindTo": "NotesImagesCollection"
		}
	},

 

Also I have a rowSpan = 3, and I had just oine line...

 

I didn't understand what's wrong, as soon I had Creatio Support news I share them here to contribute

 

Thanks in advance

 

Best regards

Julio

Julio.Falcon_Nodos,

If you add this back in, make sure it is in the values part. It should look like this: 

{
   "operation":"insert",
   "name":"Symptoms14a57ab4-4b0f-42ff-a61a-467308dff56d",
   "values":{
      "layout":{
         "colSpan":24,
         "rowSpan":3,
         "column":0,
         "row":1,
         "layoutName":"CaseInformation_gridLayout"
      },
      "bindTo":"Symptoms",
      "enabled":true,
      "contentType":"this.Terrasoft.ContentType.RICH_TEXT",
      "controlConfig":{
         "imageLoaded":{
            "bindTo":"insertImagesToNotes"
         },
         "images":{
            "bindTo":"NotesImagesCollection"
         }
      }
   },
   "parentName":"CaseInformation_gridLayout",
   "propertyName":"items",
   "index":1
}

Note, I removed the tip since I don't know if that is supported for rich text fields.

I have an article on this topic here that might help: https://customerfx.com/article/adding-custom-rich-text-editors-to-a-pag…

Ryan

Thanks Ryan, I already see the code must be inside Values... I corrected and works

Ryan Farley,

Thanks, Ryan another question regarding this.

 

In the case registration where I'm implementing the rich text to Case Description, it just works when I register a case manually, and paste a rich text to Case description.

 

But when I receive an email to open a case, the email body is not stored in Rich text, at least with the implemented configuration.

 

What else need to configure to enable email body store in rich text in Case Description?

 

Thanks in advance

 

Best regards

Show all comments

Hi community,

 

I am using ReportService to generate a report in pdf format Below is my script

when I set ConvertToPdf = true it shows the below error to me

I am sure below is the service method I am calling.

 

I have to do this urgently, please suggest me some solution for this.

Many Thanks.

 

Akshit.

Like 0

Like

4 comments

Hello Akshit,

 

Can you please specify the version of your application? Also, can you check if you have Aspose package installed in the website configuration?

If the package is not installed, you can use this Marketplace app to achieve your goal.

 

Best regards,

Bogdan S.

Hi Bogdan ,

 

We are using version 7.16, we don't have the Aspose package installed on our application.

 

I can install Aspose package but my concern is I don't want to pay for this functionality, but If I am not wrong Aspose service is not free.

 

Is there any alternative solution or am I wrong about this Aspose feature

 

 

Many  Thanks,

 

Akshit.

Akshit,

 

Yes, you can also achieve it by means of FastReports.

Please check the instruction on our Academy.

 

Best regards,

Bogdan

Bogdan Spasibov,

FastReports and Aspose is not the answer for a functionality that was before available on Creatio.  In every project is a must have feature.

https://community.creatio.com/questions/convert-pdf

Show all comments

Hi Community,

 

I want to ask how to get a  job at creatio?

Like 0

Like

1 comments

Hello Akshit,

 

Thank you for being interested in our company!

You can find open vacancies on the next resources and apply for a position that fits your goals the best:

 

https://www.creatio.com/company/career

 

https://www.linkedin.com/company/creatioglobal

 

https://www.glassdoor.com/Jobs/Creatio-Jobs-E1101217.htm

 

Best regards,

Roman

Show all comments

Is it possible to create an email template (email templates lookup) that has fixed attachments such as a ms word or ms excel file? For my use case this would be for emails being sent OUT of Creatio from a synced mailbox TO external customers who do not access Creatio, instead they just receive an email to their normal email service such as gmail or outlook. 

Like 0

Like

1 comments

Dear Mitch,

 

Unfortunately, it cannot be done since email templates do not have required architecture for storing attachments. As a workaround, you can use this application: https://marketplace.creatio.com/template/send-email-attachments

 

Best regards,

Angela 

Show all comments

Hi All,

 

I have attached the web-Link of the Pre-Configuration page in the email body. Able to get the desired link on the page.

I am able to open the Pre-Configuration page successfully on clicking it from the Business Process Task in Communication panel window.





 

When I tried to access the link, or tried to open the same url in another tab the page is not rendering and throws an error,





Any idea or solution over this!



Regards,

Adharsh S

Like 0

Like

6 comments

Hi Adharsh,

 

Can you please give some more screenshot how do you open the page through the email body?

 

Thank you.

 

Regards,

Dean

Dean Parrett,



I got a mail containing weblink of the Pre-Configuration page,







On clicking of the link the page dosen't render and throws an error stating that,







When I am trying to open this page from Business Process Task Notification panel it renders properly , both the URL are similar one.



Also, found a difference with version in 7.14 - The pre-configuration page renders with its own page name, 

Eg : 

http://localhost:86/0/Nui/ViewModule.aspx#ProcessCardModuleV2/UsrClientUnit1/add/ab8c2a64-22f8-41e3-97b0-16782351ba54



where, UsrClientUnit1 is the name of the Pre-Configuration page.



But in version 7.16, - The pre-configuration page gets rendered from the base page where we are tring to open it,







You can see the preconfiguration page renders from the basepage url from which I am accessing it.





Regards,

Adharsh S

 

Hi Adharsh,

 

It seems like the url to the page is not correct that is why you get the error. Could you please explain how do you get this url http://localhost:86/0/Nui/ViewModule.aspx#ProcessCardModuleV2/UsrClientUnit1/add/ab8c2a64-22f8-41e3-97b0-16782351ba54 ?

Thank you.

 

Regards,

Dean

Dean Parrett,

No, I have checked with the URL, it's correct.

I am able to get the Url on when the Preconfiguration page opens.

(Note: This Url I could see when I tried in Version 7.14.0.597, not in 7.16)



I have attached a image for your reference :







You can find the URL of the Pre Configuration.



Regards,

Adharsh S 

Hi Adharsh,

 

Thanks for clarification. 

There is no option to get the url of the preconfigured page anymore due to the error we had in earlier versions. The new versions do not generate the url on purpose to prevent the pages from being opened in different browser window as there users would get this error.

 

Regards,

Dean 

Dean Parrett,

Thanks for the confirmation.

Show all comments

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