Hi Team, I have a amount field in the mobile up that is update by business process once the details are modified. Something like Order and Products, once the product is added or modified the total of the order is updated. 

The problem is once the detail is modified and the process impact the changes, the main page is not refresh until I change the section and go back. 

There is any way to force the refresh of that controller/preview from the detail controller?

Like 0

Like

6 comments

Hello Federico,



If I understood your request correctly, the next examples should be helpful for resolving your business task:

Kind regards,

Bogdan

Thanks Bogdan, is the same funtionality  but for the mobile app.

Dear Federico, 



Could you please your product (Sales, Service, Marketing, etc.)? 

And the name of the Workplace in the mobile application (Main workplace, etc.)? 

 

Thanks in advance!



Kind regards,

Bogdan

The product is sales 7.18.5 and the workspaces is the main workspaces.

Federico Buffa,

 

Unfortunately, there is no such functionality for the mobile application to avoid additional loading.



Best regards,

Bogdan

Refreshing the view page is not enough.

It is still necessary to wait for the completion of data synchronization with the server, which can take a long time or even stop due to a bad connection.

If the business logic is not very complicated, then as an option you can repeat it in a mobile application. But, for this you have to write JS code 

Show all comments

Hi team. There is a option to make this message multiline?

 

Terrasoft.MessageBox.showMessage("asdasf \r\n sdfs")

Like 0

Like

2 comments
 onMyMainButtonClick: function(){
  this.showInformationDialog(" clicked \r\n new line here");
}

Works for me to add a new line. Could you browser be caching something? 

 

keith schmitt,

Is for the mobile schema no for web. Your function is in a web schema.

Show all comments

Hi Team, 

 

There is a way to add a style to the row in the details depend of a column value?

Example:

Like 0

Like

1 comments

Hi Federico,

 

It's theoretically possible. Please study the MobileActivityGridPageViewV2 module and the logic of styles applying there.

 

Best regards,

Oscar

Show all comments

Hello Team,

 

There is a equivalent of this implementation in mobile?

 

https://community.creatio.com/questions/disable-link-lookup-field

 

Thanks,

 

Like 0

Like

0 comments
Show all comments

Hi Team, Somebody know how to update data from the button in the mobile app?

 

Like 0

Like

5 comments
Best reply

Federico Buffa ?,

 

Hi,

 

Try using the following code to save the record value (for example using the following code I've renamed a contact):

 

var name = record.get("Name");
var columnName = record.self.PrimaryDisplayColumnName;
record.set("Name", name + " renaming method");
record.save({
			queryConfig: Ext.create("Terrasoft.QueryConfig", {
				modelName: record.self.modelName,
				columns: [columnName]
			}),
			failure: this.onViewError
		}, this);

Please note that columns from the queryConfig is an array and you can pass an array of column names here (and column names are stored inside the record.self.ColumnConfigs.keys).

 

As for refreshing the page - not sure if it's possible in the context of the button click handler function execution.

 

Best regards,

Oscar

Hello Federico,



Could you please elaborate more on this question? 



Best regards,

Bogdan 

Hi Bogdan, Sure. I have a button created in the preview page and I want to change a value of that record once the button is press, in this case is to change the status to pending to approval. I have my button like this but I don't know how to save the update record and refresh the page.

 Ext.define("Terrasoft.controls.CustomRecordPanelItem", {
    extend: "Terrasoft.RecordPanelItem",
    xtype: "cftestrecordpanelitem",
    config: {
        items: [
            {
                xtype: "container",
                layout: "hbox",
                items: [
                    {
                        xtype: "button",
						cls: "btn",
                        id: "clickMeButton",
                        text: '<div style="color: white; background-color: #8ecb60;  padding-top: 2%;  padding-bottom: 2%;">SUMMIT FOR APPROVAL</div>',
                        flex: 5
                    }
                ]
            }
        ]
    },
    initialize: function() {
        var clickMeButton = Ext.getCmp("clickMeButton");
        clickMeButton.element.on("tap", this.onClickMeButtonClick, this);
    },
    onClickMeButtonClick: function() {
        var record = this.getRecord();
 
	// I need to update here the record.
        Terrasoft.MessageBox.showMessage(record.getPrimaryDisplayColumnValue());
    }
});

 

Federico Buffa ?,

 

Hi,

 

Try using the following code to save the record value (for example using the following code I've renamed a contact):

 

var name = record.get("Name");
var columnName = record.self.PrimaryDisplayColumnName;
record.set("Name", name + " renaming method");
record.save({
			queryConfig: Ext.create("Terrasoft.QueryConfig", {
				modelName: record.self.modelName,
				columns: [columnName]
			}),
			failure: this.onViewError
		}, this);

Please note that columns from the queryConfig is an array and you can pass an array of column names here (and column names are stored inside the record.self.ColumnConfigs.keys).

 

As for refreshing the page - not sure if it's possible in the context of the button click handler function execution.

 

Best regards,

Oscar

Thanks Oscar. Is working perfect.

var record = this.getRecord();
if (record.data.AgilizExpenseStatus.data.Id != "0bbc321a-77cd-4d20-a929-b5bbb34c74bc") {
			record.set("AgilizExpenseStatus", "0bbc321a-77cd-4d20-a929-b5bbb34c74bc");
			record.save({ 
				queryConfig: Ext.create('Terrasoft.QueryConfig', { 
					modelName: record.self.modelName,
					columns: ['AgilizExpenseStatus']
				}),
				success: function() {
					Terrasoft.MessageBox.showMessage(LocalizableStrings.SummitForApproval); 
				},
				failure: function(exception) { 
					Terrasoft.MessageBox.showException(exception); 
				}
			}, this);
		}

 

Show all comments

Hi Team,

 

I'm trying to extend a base function in my custom controller. And the code is loading once I open the page but is not triggering the function. Is this the correct way? What I'm doing wrong in this case?

So I have the custom controller created in this way:

Ext.define("Terrasoft.configuration.controller.SMAgilizExpenseManagementGridPage", {
	extend: "Terrasoft.controller.BaseGridPage",
 
	statics: {
		Model: AgilizExpenseManagement
	},
 
	config: {
		refs: {
			view: "#AgilizExpenseManagementGridPage"
		}
	},
 
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
		getChangeModeOperations: function() {
		var detailConfig = this.getDetailConfig();
		if (detailConfig) {
			var parentRecord = detailConfig.parentRecord;
			if (parentRecord.get("IsNonActualEmail") === false) {
				return {
					canCreate: false,
					canUpdate: false,
					canDelete: false
				};
			}
		}
		return this.callParent(arguments);
	},
	initializeQueryConfig: function() {
		this.callParent(arguments);
		var gridQueryConfig = this.getQueryConfig();
		gridQueryConfig.addColumns(this.startDateColumnName, this.endDateColumnName);
		if (Terrasoft.FeatureUtils.isHybridMode()) {
			gridQueryConfig.setIsBatch(false);
		}
	},
 
});

And is added in the MobileApplicationManifestDefaultWorkplace as well:

 

 

Like 0

Like

7 comments
Best reply

 Hi Oscar, I solve it with this code. We change the extend for override. Of course this override for the entire app but works for me :)

Ext.define("Terrasoft.controller.AgilizExpenseManagement", {
	override: "Terrasoft.controller.BaseModelPage",
 
	statics: {
		Model: AgilizExpenseManagement
	},
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
		getChangeModeOperations: function() {
		var detailConfig = this.getDetailConfig();
		if (detailConfig && detailConfig.parentRecord.data.AgilizExpenseStatus.id) {
			var parentRecord = detailConfig.parentRecord;
			if ( parentRecord.data.AgilizExpenseStatus.id && parentRecord.data.AgilizExpenseStatus.id !== "f50b9fd6-21ed-47ff-8450-e7f5f9c82c5f") {
 
				return {
					canCreate: false,
					canUpdate: false,
					canDelete: false
				};
			}
		}
		return this.callParent(arguments);
	}
 
});

 

​Hi Federico,



This method is a part of the BaseModelPage controller:

Try extending the Terrasoft.controller.BaseModelPage. Also please check if the extended module is added to the CustomSchemas sync option in the manifest.

Best regards,

Oscar

Hi Oscar Dylan,

I try to add the BaseModelPage in extended but still is calling the base one. The schema is loading in the debbuger but is not trigged the function. I added in the customschemas as well.

 

Something is missing in my code?

 

Ext.define("Terrasoft.controller.SMAgilizExpenseManagement", {
	extend: "Terrasoft.controller.BaseModelPage",
 
	statics: {
		Model: AgilizExpenseManagement
	},
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
		getChangeModeOperations: function() {
			window.alert("Test");
		var detailConfig = this.getDetailConfig();
		if (detailConfig) {
			var parentRecord = detailConfig.parentRecord;
			if (parentRecord.get("IsNonActualEmail") === false) {
 
				return {
					canCreate: false,
					canUpdate: false,
					canDelete: false
				};
			}
		}
		return this.callParent(arguments);
	}
 
});

 

 

I tried to extend the controller in many ways but looks is not working. Somebody have a example to share?

Federico Buffa ...,

 

Hi,

 

I am studying the base AccountPreviewPage code to give you an example of the controller extension. Please give me a couple of days and I will return to you with an update.

 

Meanwhile if someone has an example - it would also help us much!

 

Best regards,

Oscar

 Hi Oscar, I solve it with this code. We change the extend for override. Of course this override for the entire app but works for me :)

Ext.define("Terrasoft.controller.AgilizExpenseManagement", {
	override: "Terrasoft.controller.BaseModelPage",
 
	statics: {
		Model: AgilizExpenseManagement
	},
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
		getChangeModeOperations: function() {
		var detailConfig = this.getDetailConfig();
		if (detailConfig && detailConfig.parentRecord.data.AgilizExpenseStatus.id) {
			var parentRecord = detailConfig.parentRecord;
			if ( parentRecord.data.AgilizExpenseStatus.id && parentRecord.data.AgilizExpenseStatus.id !== "f50b9fd6-21ed-47ff-8450-e7f5f9c82c5f") {
 
				return {
					canCreate: false,
					canUpdate: false,
					canDelete: false
				};
			}
		}
		return this.callParent(arguments);
	}
 
});

 

Looks the function is working for the fields but no for the button edit. I can't find the logic for that.

this solutions works to hide the edit button if the permission canUpdate is false

Ext.define("Terrasoft.controller.AgilizExpenseManagementPreviewPage", {
	override: "Terrasoft.controller.BasePreviewPage",
 
 
	initNavigationButtons: function() {
		this.callParent(arguments);
		let view = this.getView();
		if (this.getChangeModeOperations().canUpdate && view.getEditButton()) {
			let editButton = view.showEditButton(true);
			editButton.on("tap", this.onEditButtonTap, this);
		} else {
			view.showEditButton(false);
		}
	}
 
});

 

Show all comments

Hi Team,

Would be great to have the possibility to add the business rules from the Mobile application wizard like we can do right now in the edit pages on web,

 

Thanks,

 

1 comments

Hello Federico,



Thank you so much for your idea. We've registered it in our R&D team backlog for consideration and implementation in the future application releases.

 

Thank you for helping us to improve our product. 

 

Best regards,

Bogdan

Show all comments

Hi Team!

In mobile fields by default in the section list or view page mode is only showing the fields completed or not null. There is a way to change that? Show all the fields even if are null?

 

For example here in activities is not showing call notes, only when you are in edit mode.

 

Like 0

Like

3 comments
Best reply

Hello Federico,

 

Hope you're doing well.

 

This is default mobile application behavior. Empty fields always remain invisible in case they are not filled in. This logic can be changed with the help of development only. It would be necessary to override the Terrasoft.controller.BasePreviewPage of the method doChangeField in all pages like this:

doChangeField: function(field, newValue, executeRulesCallback) {
                       this.callParent(arguments);
                       field.show();
}

Best regards,

Roman

Hello Federico,

 

Hope you're doing well.

 

This is default mobile application behavior. Empty fields always remain invisible in case they are not filled in. This logic can be changed with the help of development only. It would be necessary to override the Terrasoft.controller.BasePreviewPage of the method doChangeField in all pages like this:

doChangeField: function(field, newValue, executeRulesCallback) {
                       this.callParent(arguments);
                       field.show();
}

Best regards,

Roman

Roman Rak, Thanks, that can be apply only for a specific object?

I just create a new controller for the specific schema and works. Thanks

 

Show all comments

Hello,

I'm setting up the Mobile App with VERY FEW sections (contact, accounts, activities)

 

Since we have areas with no connection....I need to set the OFFLINE mode (using 7.17).

 

When I first start the APP, it seems to be loading ALL objects (orders, products, etc...) which take a lot of time/resources.

 

Can we RESTRICT some objects to be loaded when I don't use the section in the App ?

 

Hope I'm clear enough.

Thanks

 

Like 0

Like

2 comments

Hi Francois,

 

This usually happens if there are more than 1 workplace set for the Mobile App. The best way is to check your Mobile wizard and see if any of those sections linked to any of the workplaces.

I double checked and nothing is refering to the order. (I only kept Account/Contact/Activity/Lead.  The data that I'm showing does not call ORDERs or Products in Orders) 



But I still see :  Importing data (OrderProduct) = over 2 Millions records.

 

Can we limit the amount of Order records  (Today's data ONLY) ?

 

Show all comments

Dear community,

 

I have generated a custom detail on my mobile app. 

The detail contains a name for the object and other fields: such as a field with the year. 

In the same detail more items can be collected. In the web platform these items can be ordered by the column that I choose: name, year, status, ecc.

In the mobile app these items appear in a random order (they are not sorted alphabetically or by year) and I am not able to set the order rule anywhere. 

 

How can I change the order on which these items appear on the mobile app? 

 

Best regards, 

Clara 

Like 0

Like

4 comments

Dear Clara,

 

Sorting is present only in the out-of-the-box sections and only in the out-of-the-box workplace “Main workplace”. Sorting is implemented at the code level that can be inspected in mobile%sectionname%moduleconf.js file. As for now, any changes to sorting functionality can be done only with development. 

 

I'll inform our R&D team about this issue and suggest they implement it. Thank you for helping us to make our application better!

 

Best regards,

Bogdan

Hi Bogdan,

 

I am trying to order the detail with javascript. I have generated a new module with the following code:

Terrasoft.sdk.RecordPage.setOrderByColumns("VTaDossierFeeDetailEmbeddedDetail", [{
    column: "VTaName",
    orderType: Terrasoft.OrderTypes.DESC
}]);

The "VTaDossierFeeDetailEmbeddedDetail" is my detail in the mobile app regarding the custom object "Entity_Fee" that I want to be ordered by the Name.

 

Then I inserted my code in the "MobileApplicationManifestDefaultWorkplace". First I tried to call the module in the "PageExtensions" of my object "VTaDossier" and after I also tried to call it in the "ModelExtensions" but it didn't work.

On the mobile the record are ordered as they compare in the DB.

 

I tried also to add a similar code to the "Entity_Fee" like this:

Terrasoft.sdk.GridPage.setOrderByColumns("VTaEntity_Fee", [{
    column: "VTaName",
    orderType: Terrasoft.OrderTypes.DESC
}]); 

In this case I wanted to change the order of the object in the Grid Page, but the same the list was not ordered by name. 

 

I wonder if I'm adding it in the wrong place. 

Can you give me some suggestions?

 

Thanks,

Clara

 

 

Clara Fioranzato,

 

The code seems to be correct.

 

The schema with the code should be added to the "PagesExtension". 

 

Also, please try to restart your application after these changes, some 

metadata may have been cached.

 

Best Regards, 

 

Bogdan L.

 

Bogdan,

I am also trying to order the mobile app lists.  This is necessary functionality!

Show all comments