Hi Community,

I have restored a cloud instance, locally. In Cloud the functionality (FileApiService) works.

The problem I am facing is that I can not upload files in the Attachments object (ex AccountFile) in the local instance.

 

Console

Console Response is in the attached file

File attachments
Like 0

Like

2 comments
Best reply

Good day,

 

Is it possible that the cloud instance was set up to upload the files to an S3 storage?

Please try changing the ActiveFileContentStorage setting to the database and compiling the system.



After that please try uploading the file again.

Thank you.

I will re-upload the Console Response , because the text file can not be opened.

{
    "errorInfo": {
        "errorCode": "NullReferenceException",
        "message": "Object reference not set to an instance of an object.",
        "stackTrace": "   at Terrasoft.Core.AppConnection.get_S3ConnectionParameters()\r\n   at Terrasoft.File.S3.Settings.S3ConnectionSettingsProvider..ctor(AppConnection appConnection)\r\n   at DynamicInjectord7776e6fbfbf47f3aaef1f7b3f02b5c5(Object[] )\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)\r\n   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)\r\n   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)\r\n   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)\r\n   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Terrasoft.Core.Factories.ClassFactory.<>c__DisplayClass16_0.<Get>b__0()\r\n   at Terrasoft.Core.Factories.ClassFactory.GetInstance[T](Func`1 action)\r\n   at Terrasoft.File.StorageInstanceFactory.CreateContentStorage(FileMetadata fileMetadata)\r\n   at Terrasoft.File.File`2.<InvokeOnContentStorage>d__32.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at Terrasoft.File.File`2.<WriteAsync>d__45.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at Terrasoft.Common.Threading.AsyncPump.Run(Func`1 asyncMethod)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.Upload(IFileUploadConfig fileUploadConfig)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.UploadFile(IFileUploadConfig fileUploadInfoConfig)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.UploadFile(IFileUploadInfo fileUploadInfo, Boolean isSetCustomColumns)\r\n   at Terrasoft.Configuration.FileApiService.UploadFile(Stream fileContent)"
    },
    "success": false,
    "nextPrcElReady": false,
    "queryId": null,
    "responseStatus": {
        "ErrorCode": "NullReferenceException",
        "Message": "Object reference not set to an instance of an object.",
        "StackTrace": "   at Terrasoft.Core.AppConnection.get_S3ConnectionParameters()\r\n   at Terrasoft.File.S3.Settings.S3ConnectionSettingsProvider..ctor(AppConnection appConnection)\r\n   at DynamicInjectord7776e6fbfbf47f3aaef1f7b3f02b5c5(Object[] )\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)\r\n   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)\r\n   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)\r\n   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)\r\n   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)\r\n   at Ninject.Activation.Context.ResolveInternal(Object scope)\r\n   at Ninject.Activation.Context.Resolve()\r\n   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)\r\n   at Terrasoft.Core.Factories.ClassFactory.<>c__DisplayClass16_0.<Get>b__0()\r\n   at Terrasoft.Core.Factories.ClassFactory.GetInstance[T](Func`1 action)\r\n   at Terrasoft.File.StorageInstanceFactory.CreateContentStorage(FileMetadata fileMetadata)\r\n   at Terrasoft.File.File`2.<InvokeOnContentStorage>d__32.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at Terrasoft.File.File`2.<WriteAsync>d__45.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at Terrasoft.Common.Threading.AsyncPump.Run(Func`1 asyncMethod)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.Upload(IFileUploadConfig fileUploadConfig)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.UploadFile(IFileUploadConfig fileUploadInfoConfig)\r\n   at Terrasoft.Configuration.FileUpload.FileUploader.UploadFile(IFileUploadInfo fileUploadInfo, Boolean isSetCustomColumns)\r\n   at Terrasoft.Configuration.FileApiService.UploadFile(Stream fileContent)",
        "Errors": null,
        "Meta": null
    },
    "rowsAffected": -1
}

 

Good day,

 

Is it possible that the cloud instance was set up to upload the files to an S3 storage?

Please try changing the ActiveFileContentStorage setting to the database and compiling the system.



After that please try uploading the file again.

Thank you.

Show all comments

Hi Everyone. I have a custom Orders screen, in which we assign orders to different catchers. So we simply have a list of catchers from which we can select catchers and then populate them in the below list. But we are looking to further move to an advance level. Our plan is to somehow show list of catchers that are available and not available. Initially we planned to display 2 different lists, one those are available and second that are not available while making a record in our Orders.

 

The availability depends upon the catcher. If the catcher is in a previous order with time less 12 hours. Then he is not available. Is this possible within Creatio? If so, then a short guide to how it is possible would be great! Thanks!

Like 1

Like

1 comments

Hello!

 

For your idea, you could implement 2 different lookups. Below you will find information on how to create a lookup: https://academy.creatio.com/docs/user/setup_and_administration/system_s…

Show all comments

Hi, I have a formula field in my Customer Orders page which is created in Freedom UI. There is Gross value field, that is a multiplication of 2 different other fields. I have tried two different approaches. One with having a Formula in my Business Process but it is giving "Formula value error: Cannot convert type "Decimal" to "Entity" " Error.

 

Additionally, I tried to use Modify Data too, to do the same and it doesn't gives any error but it also doesn't works. It doesn't give the value from formula. How can I make this work?

Like 1

Like

2 comments

BUMP

Hi!

 

The error 'Cannot convert type "Decimal" to "Entity" indicates that you are trying to save the value to the field of entity type. 

It can occur in case you are using the wrong type of parameter.



To make your process work, you need to create a parameter of decimal type to use in the formula. Here you can check the example for Hours values. You can create a formula by comparison.



Please check how the formulae work in our academy and how to work with the parameters: https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

Show all comments

Hi all,

 

I wanted to make a column in a detail list view as a link. So that when I click on that link, it will open that detail record. How can I achieve this?

Please note that this detail is non-editable and created based on a custom object which is not a section also. (Purely a detail created based on a new custom object.)

 

I tried the below articles already, and no luck so far.

https://community.creatio.com/questions/open-section-record-clicking-de…

https://community.creatio.com/articles/how-make-url-string-field-clicka…

 

Kindly help me resolve this issue.

 

Thank you.

Geeviniy

Like 0

Like

1 comments

Hello!

 

Your business task could be achieved only by development. 



The possible ways of accomplishing the task are described here: https://community.creatio.com/questions/convert-text-field-hyperlink#co…. Check it out!

Show all comments

Hi Community,

I have created a detail in a section. Inside the detail I have created a new tab and have added a custom"Attachments" detail.

-I have followed this guide : https://academy.creatio.com/docs/7-16/developer/interface_elements/deta…

- I have also named The entity for the attachments like"ParentEntityFile"

This is what i get

Why is this happening ?

Sasori

Like 0

Like

2 comments

Hi Community,

Any udpate on this issue ?

Hi Sasori,

It looks like you didn't create an attachment detail properly.

In this situation, it is better to create a section via "Section Wizard" based on your detail object, and in there use attachment detail. After creating a section you can just hide it from a workplace and customize the page as you need.

Show all comments

Hello Community, 

 

I have a requirement to design a custom search filter in list page in Freedom UI, so that I have a text field and a button.

Now, on entering a number (Plate Number) in the field and on click of button, I wanted to filter only the records that contain the plate number. 

The filter works perfectly. But now when I navigate to any other section, I am seeing a popup message (Un save popup) as shown below.

To clear this error, I tried to save the number entered in the field and the issue is gone until I search for other number. 

Now I received a system error as shown below. 

How can I resolve this?

 

Any suggestions are really helpful.

File attachments
Like 0

Like

1 comments

Good day,

Please try performing a full compilation of the environment.

It is also worth noting that the issue is atypical and requires further investigation from the support team. If the problem is not resolved, please contact our support service: support@creatio.com.



 

Show all comments

Hi,

I have implemented two different scenarios using PrintReportUtilities mixin methods. The first one (generateCardPrintForm) is to save the printable as an attachment in the Attachment and Note detail, and the other one (initCardPrintForms and preparePrintFormsMenuCollection) is used to filter the printables on the basis of lookup. The code is working fine but after refreshing the page.

 

The code used in OrderPageV2 is as follows

generateCardPrintForm: function(tag) {
	// first get the printable being accessed
	var printFormsCollection = this.get(this.moduleCardPrintFormsCollectionName),
		printForm = printFormsCollection.get(tag);
	var printableId = printForm.values.Id;
	var orderId = this.get("Id");
	ProcessModuleUtilities.executeProcess({
		sysProcessId: '68880f82-xxxx-xxxx-xxxx-xxxxxfb532c2',
		parameters: {
			OrderId: orderId,
			PrintableId: printableId
		}
	});
	this.updateDetail({detail: "Files"});
	this.callParent(arguments);
}

 

initQueryColumns: function(esq) {
	this.callParent(arguments);
 
	if (!esq.columns.contains("UsrDocumentRepositorySubtype")) {
		esq.addColumn("UsrDocumentRepositorySubtype");
	}
},
initCardPrintForms: function() {
	this.callParent(arguments);
	var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
	if (Ext.isEmpty(printMenuItems)) return;
	printMenuItems.each(function(item) {
		item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
	}, this);
},
initSectionPrintForms: function() {
	this.callParent(arguments);
	var printMenuItems = this.get(this.moduleSectionPrintFormsCollectionName);
	if (Ext.isEmpty(printMenuItems)) return;
	printMenuItems.each(function(item) {
		item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
	}, this);
},
preparePrintFormsMenuCollection: function(printForms) {
	printForms.eachKey(function(key, item) {
		if (!item.get("Caption")) {
			item.set("Caption", item.get("NonLocalizedCaption"));
		}
		item.set("Tag", key);
		item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
	}, this);
},
// this is the function will determine if a printable is visible
// it is called for each printable and will return true/false to show or hide
getPrintMenuItemVisible: function(reportId) {
	var type = this.get("Status") || { displayValue: "" },
		printMenuItems = this.get(this.moduleCardPrintFormsCollectionName),
		item = printMenuItems.find(reportId);
	if (Ext.isEmpty(item)) return;
 
	switch (item.get("Caption")) {
		case "Order - Inprocess":
			return type.displayValue === "3. In progress";
		default:
			return type.displayValue != "3. In progress";
	}
}

 

Like 0

Like

4 comments

Hello,

 

It happens because of the combined mode and the fact that logic is triggered not from the page itself, but from the section page (when you open record from the section) until the page is reloaded. It's the same issue as if you add buttons to the page schema, not section schema (as described here). In such case you won't be able to see buttons on the page until the page reload. So you need to modify the logic and apply it in the section schema (OrderSectionV2).

Oleg Drobina,

 

I have added the code to OrderSchemaV2, but the issue is still the same.

Syed Ali Hassan Shah,

 

Unfortunately additional debugging needed here. Also there is a probability that the whole approach should be changed. Here are also two marketplace addons, one of them performs filtration of printables and another one adds printables to attachments:

 

https://marketplace.creatio.com/app/printable-attachments-creatio

https://marketplace.creatio.com/app/opportunity-printables-filtering-roles-creatio

 

You can also review how they work and maybe it will help in implementing your own logic.

Oleg Drobina,

 

I have gone through the mentioned plugins they are using the custom implementation in their own developed buttons and custom library. But we want to override the implementation done by Creatio.

 

Show all comments

Hi,



On our contact page we have business rules regulating the business & mobile phone.



If mobile phone not filled in, business phone is mandatory and vice versa.



On classic UI page, the mandatory " * " signal dynamically disappears when filling in the form.



This does not happen on the new Freedom UI minipage, in the picture here below, the * should have disappeared in front of mobile phone, as the business phone is filled in.



(It will properly save though, in terms of data, the business rules work).



Like 0

Like

1 comments

Hello,

 

Thank you for sharing this information with us. We have created a task to have the responsible R&D team address this behavior in future releases.

Show all comments

Hi,



Is it possible to set a country as default for phones in Freedom UI ?



Always stuck on USA (+1) by default...







Thanks,



Damien

Like 2

Like

10 comments
Best reply

Hello.

In order to set default flags config
{
      "operation": "merge",
      "name": "MobilePhone",
      "values": {
        "displayPhoneMask": true,
/* set view mode with the flags */
        "alwaysShowFlags": true,
/*this block adds required configuration - you should place all parameters here*/
        "countrySelectionConfig": {
          "nationalMode": false,
          "autoHideDialCode": false,
          "excludeCountries": ["ru", "by"],
/*useful feature to set favourites countries - they will be placed at the top */
          "preferredCountries": ["ua", "de", "uk", "pl", "md", "ro", "cz", "sk", "us"],
          "initialCountry":"ua"
        }
      }
    }
BW,
Oleksandr Lisovyi, MasterCRM

Sorry cannot remove the "£", post editing is not working on the community today



Hello Damien,

 

We have checked your request and unfortunately it is not possible to set a phone mask with a certain code by default at the moment, but I registered this idea for our developers so that they would consider the possibility of implementing such functionality in future releases.

Thank you,



This new dropdown list always defaulting to US is actually a decrease towards poorer UI experience vs blank field we used to have (more clicks, slowed down input)



Especially that you cannot type in the country code +41 and it "naturally" goes to the right country, you need to do a manual letter search each time.



On a positive note --> it makes sure  everyone fills in the country codes now and the numbers show in the correct format of the country.

Could you please provide us with updates on this question? May be you have reference for crt.PhoneInput?

Hi, 

Yes, our clients are still asking how can we change the default country, does not make sense for all the international users to be stuck on USA as default. Any update ?

Thanks, 



Damien

When will this functionality be added? Because it's very inconvenient to constantly select a mask. 

Mira Dmitruk,

Good morning

 

Do you know in wich table is the phone codes?, I want in the meantime delete all countries not needed to made easier found the country codes we usually need.

 

Or another way to disable/delete not needed phone codes?

 

Thanks in advance

Julio

Hi everyone. 

 

How can we select the country code by default? 

We must have a system setting to select the country.

luis.goncalves@imdigital.pt,

Hi Luis, the only way I have found is to define, in the object to which the phone numbers belong, the default value with the prefix you need.

 

The problem, is that when saving the record, all phone numbers are saved with that prefix, whether the user has filled them a number or not.

 

Then if you decide to do something with the uncompleted numbers, with a process with a start signal regarding edited record or new record and if the phone numbers have not been filled decide what to do with them, keep as they are or reset to an empty phone number ...

 

Hello.

In order to set default flags config
{
      "operation": "merge",
      "name": "MobilePhone",
      "values": {
        "displayPhoneMask": true,
/* set view mode with the flags */
        "alwaysShowFlags": true,
/*this block adds required configuration - you should place all parameters here*/
        "countrySelectionConfig": {
          "nationalMode": false,
          "autoHideDialCode": false,
          "excludeCountries": ["ru", "by"],
/*useful feature to set favourites countries - they will be placed at the top */
          "preferredCountries": ["ua", "de", "uk", "pl", "md", "ro", "cz", "sk", "us"],
          "initialCountry":"ua"
        }
      }
    }
BW,
Oleksandr Lisovyi, MasterCRM

Show all comments

I am getting a HTTP 403 (Forbidden) error when I call the OData $batch request on my developer instance.  It does not matter what requests I pass to it.  It also occurs when I use the example $batch request provided by the Creatio postman environment.

 

Do developer instances support batch requests?  Is there an option I can enable to allow batch requests?

Like 0

Like

4 comments
Best reply

Mobileforce Support,

 

The answer to the POST request to /AuthService.svc/Login will be a set of session cookies needed for further requests execution. One of those cookies (BPMSCRF cookie) values should be specified as a separate BPMCSRF header value for further POST\PUT\PATCH requests. So once you are authenticated via postman you need to copy the value of the received BPMCSRF cookie and set it as a header value for further requests in the following manner:

After that, you can try calling the OData endpoints via POST requests and they should succeed.







Thank you for contacting the Creatio technical support team. If you have any further questions, please send them as a reply to this email.



Thank you for choosing Creatio!

 

Hello, 

 

I've shared some documentation that will help you: 

 

OData | Creatio Academy



Best regards,

Orkhan

Orkhan,

Thanks, but I've already read the documentation and was able to get other OData calls to work successfully.  It is only the batch request is not working for me. 

 

Typically, a HTTP 403 error means that a user is trying to access a page or API that they do not have permission for.  Hence why I was asking whether there is some system configuration option I need to set.  I am trying to access this as the Supervisor user on my development instance.

 

Mobileforce Support,

 

The answer to the POST request to /AuthService.svc/Login will be a set of session cookies needed for further requests execution. One of those cookies (BPMSCRF cookie) values should be specified as a separate BPMCSRF header value for further POST\PUT\PATCH requests. So once you are authenticated via postman you need to copy the value of the received BPMCSRF cookie and set it as a header value for further requests in the following manner:

After that, you can try calling the OData endpoints via POST requests and they should succeed.







Thank you for contacting the Creatio technical support team. If you have any further questions, please send them as a reply to this email.



Thank you for choosing Creatio!

 

Orkhan,

Thanks, that was the issue.  I did not realize that the BPMCSRF cookie also had to passed in as HTTP header as well.

Show all comments