Добрый день, есть такая задача:

На странице есть две вкладки "Позиции заказа" и "Документы по заказу". На этих вкладках есть детали, названия деталей соответствуют вкладкам. Детали основаны на разных объектах.

Я реализовала кнопку у детали "Документы по заказу", при нажатии на которую, обновляется значение определенной колонки у этой детали и должно обновляться значение определенной колонки (имя колонки прописано в коде, пусть будет "NameColumn") в детали "Позиции заказа".

Вопрос: Как обновить значение колонки (какой-либо) в первой детали "позиции заказа"? 

Пыталась сделать это так:

Колонка в детали "Документы по заказу" обновляется через UpdateQuery, нашла инструкцию в документации.

С обновлением колонок детали в первой вкладке наткнулась на трудность. 

Я пыталась сделать коллекцию через esq по позициям заказа. Устанавливаю значение через инструкцию this.set("NameColumn",value);

Однако это не работает. Подскажите, пожалуйста, как правильно в такой ситуации заполнить значение колонки? И возможно ли так вообще сделать?

Нравится

2 комментария
Лучший ответ

Здравствуйте,

 

Ниже можно посмотреть пример кода для обновления двух колонок, которые смотрят на разные объекты, при нажатии на кнопку.

var value = this.get('UsrChange') – новое значение, которое вы хотите записать в необходимую колонку;

updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT) – в значение "Name" ("Notes" во втором запросе) подставьте название поля из объекта, в которое хотите записать изменения;

Удостоверьтесь, что вы добавили в дизайнере нужные поля на страницу. "detailColumn" - “Where detail column”, "masterColumn" - “Equals to page column”, "entitySchemaName"  - “Detail”.

 

...
details: /**SCHEMA_DETAILS*/{"UsrTabSecond": {
        "schemaName": "OpportunityHistoryActivityDetail",
        "entitySchemaName": "Activity",
        "filter": {
        "detailColumn": "Priority",
        "masterColumn": "UsrLookup2"
        }
    },
    "UsrTabFirst": {
        "schemaName": "AccountContactsDetailV2",
        "entitySchemaName": "Contact",
        "filter": {
        "detailColumn": "Job",
        "masterColumn": "UsrLookup1"
        }
    }
}/**SCHEMA_DETAILS*/,
    businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
             onMyButtonClick: function() {
                   var value = this.get('UsrChange');
                   var IdValue = this.get('UsrLookup1');
                   var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Contact"});
                   var filters = updateQuery.filters;
                   filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Job", IdValue));
                   updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT);
                   updateQuery.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabFirst"});}, this);                                 
                                                          
                   var value1 = this.get('UsrChange');
                   var IdValue1 = this.get('UsrLookup2');
                   var updateQuery1 = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Activity"});
                   var filters1 = updateQuery1.filters;
                   filters1.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Priority", IdValue1));
                   updateQuery1.setParameterValue("Notes", value1, this.Terrasoft.DataValueType.TEXT);
                   updateQuery1.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabSecond"});}, this);
        }
},
...

 

С уважением,

Ангелина

Здравствуйте,

 

Ниже можно посмотреть пример кода для обновления двух колонок, которые смотрят на разные объекты, при нажатии на кнопку.

var value = this.get('UsrChange') – новое значение, которое вы хотите записать в необходимую колонку;

updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT) – в значение "Name" ("Notes" во втором запросе) подставьте название поля из объекта, в которое хотите записать изменения;

Удостоверьтесь, что вы добавили в дизайнере нужные поля на страницу. "detailColumn" - “Where detail column”, "masterColumn" - “Equals to page column”, "entitySchemaName"  - “Detail”.

 

...
details: /**SCHEMA_DETAILS*/{"UsrTabSecond": {
        "schemaName": "OpportunityHistoryActivityDetail",
        "entitySchemaName": "Activity",
        "filter": {
        "detailColumn": "Priority",
        "masterColumn": "UsrLookup2"
        }
    },
    "UsrTabFirst": {
        "schemaName": "AccountContactsDetailV2",
        "entitySchemaName": "Contact",
        "filter": {
        "detailColumn": "Job",
        "masterColumn": "UsrLookup1"
        }
    }
}/**SCHEMA_DETAILS*/,
    businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
             onMyButtonClick: function() {
                   var value = this.get('UsrChange');
                   var IdValue = this.get('UsrLookup1');
                   var updateQuery = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Contact"});
                   var filters = updateQuery.filters;
                   filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Job", IdValue));
                   updateQuery.setParameterValue("Name", value, this.Terrasoft.DataValueType.TEXT);
                   updateQuery.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabFirst"});}, this);                                 
                                                          
                   var value1 = this.get('UsrChange');
                   var IdValue1 = this.get('UsrLookup2');
                   var updateQuery1 = Ext.create("Terrasoft.UpdateQuery", {
                       rootSchemaName: "Activity"});
                   var filters1 = updateQuery1.filters;
                   filters1.addItem(this.Terrasoft.createColumnFilterWithParameter(
                       this.Terrasoft.ComparisonType.EQUAL, "Priority", IdValue1));
                   updateQuery1.setParameterValue("Notes", value1, this.Terrasoft.DataValueType.TEXT);
                   updateQuery1.execute(function(result){
                       if(result.success) this.updateDetail({detail: "UsrTabSecond"});}, this);
        }
},
...

 

С уважением,

Ангелина

Anhelina, 

большое спасибо за помощь!

Показать все комментарии

Добрый день, столкнулся с ситуацией, нужно сохранить настройку колонок детали для портальной страницы.

Если страница обычная, тут понятно, настраиваем колонки - сохраняем настройку для всех пользователей, привязываем данные SysProfileData фильтруя по ключу.

А как правильно сохранить настройку на портальной странице, у портального пользователя нету кнопки сохранить настройку колонок для всех.

Подменой названия страницы в URL адресе, тогда под супервизором можно попасть на страницу портала, единственное ли это решение?

Нравится

2 комментария
Лучший ответ

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Смотреть в таблицу SysProfileData, твой настройке нужно поставить в поле ContactId значение null

 

Приведу пример как я скриптом делал "настройки колонок" для всех, скопировав настройки у супервизора. Возможно еще что потребуется, сейчас не помню.

--удалял все настройки кроме тех, которые не пустые и не под пользователем супервизор. В вашем примере в key нужно подставить настройку этой самой детали. А id пользователя твоего пользователя, от которого копировать на всех
	/*	
		delete from SysProfileData where "Key" in (
		select "Key" from SysProfileData
		where ("Key" like 'Usr%GridDataView' or "Key" like '%Detail%') and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03'
		and (ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00' or ContactId is null)
		group by "Key"
		having count(*) >=2
		) and ContactId is null
	*/
--	в тут обновляем contactId на null (для системы если стоит null, то это считается настройкой по умолчанию.
 /*	
	update SysProfileData set ContactId = null
	where "Key" like 'Usr%GridDataView' or "Key" like '%Detail%' and SysCultureId = '1A778E3F-0A8E-E111-84A3-00155D054C03' and ContactId = '410006E1-CA4E-4502-A9EC-E54D922D2C00'
  */

 

Трефилов Павел Сергеевич,

Большое спасибо!

Показать все комментарии