У меня есть деталь DocumentsDetail с реестром, отображающая Grid документов. Я реализовал в ней группировку документов по типу и в качестве содержимого каждой группы отображаю Grid с набором документов соответствующего типа. Но возникает вопроса:

Как унаследовать конфигурацию Grid и столбцов из DocumentDetail, чтобы Grid каждой группы выглядел идентично гриду детали? Т.е, 1)Имел идентичный набор столбцов. 2) Имел идентичные настройки внешнего вида, стилизацию.

 Я не знаю как мне внутри грида группы отображать именно те столбцы, которые заданы в настройках детали.

 

//diff:

            {               

                "operation": "merge",

                "name": "Detail",

                "values": {

                    }

                }

            },                        

            {

                "operation": "insert",

                "parentName": "Detail",

                "name": "DocumentsTestList",

                "propertyName": "items",

                "values": {

                    "generator": "ConfigurationItemGenerator.generateContainerList",

                    "idProperty": "Id",

                    "itemPrefix": "BorrowerDocGroup",

                    "collection": "BorrowerDocGroupsCollection",

                    "onGetItemConfig": "getDocsControlGroupConfig"

                }

            }

//methods:

getDocsControlGroupConfig: function (itemConfig, item) {             

               

                var itemId = item.get("Id");

                var testItemGroupConfig = {

                    "className": "Terrasoft.ControlGroup",                    

                    "caption": {

                        "bindTo": "Caption"

                    },

                    "collapsed": true,

                    "id": "DocsGroup" + itemId,

                    "items": [{                        

                        "className": "Terrasoft.Grid",

                        "type": "listed",                        

                        "id": itemId,

                        "idProperty": "Id",

                        "itemPrefix": "Id",

                        "collection": {

                            "bindTo": "Collection"

                        },

//как настроить отображение грида, который реализует функциональность первоначального грида детали и имеет идентичную конфигурацию столбцов? 

//здесь мне хотелось бы написать "columnsConfig": { "bindTo: "...?????"}

                        "columnsConfig": [                            

                            {

                                cols: 1,

                                key: [

                                    {

                                        "name": {

                                            "bindTo": "MDocument"

                                        }

                                    } 

                                ]

                            }

                        ],

                        "captionsConfig": [

                            {

                                cols: 1,

                                name: "document caption"

                            }                            

                        ],

                        //"onGetItemConfig": {

                        //    "bindTo": "getDocItemViewConfig"

                        //},                                               

                        "dataItemIdPrefix": "document-item"                        

                    }]

                };               

                itemConfig.config = testItemGroupConfig;                

            },

   

Нравится

2 комментария

Ты создаешь внутри одной детали несколько гридов?

Думаю, можно создать один общий класс для гридов и переопределить методы, которые принимают конфигурации строк и столбцов.



 

Ext.define("Terrasoft.controls.Название_твоего_грида", {

    alternateClassName: "Terrasoft.Название_твоего_грида",

    extend: "Terrasoft.ConfigurationGrid", // или Terrasoft.Grid

и переопределить методы 

/**
	 * Инициализирует начальное значение конфигурации колонок.
	 * @param {Object} gridConfig
	 * @return {Array}
	 */
	initColumnsConfig: function(gridConfig) {
		var type = gridConfig.type;
		var config = this[type + "Config"];
		var columnsConfig = (config ? config.columnsConfig : gridConfig.columnsConfig) || [];
		if (!gridConfig.columnsConfig) {
			gridConfig.columnsConfig = columnsConfig;
		}
		return columnsConfig;
	},

	/**
	 * Инициализирует начальное значение конфигурации заголовков.
	 * @param {Object} gridConfig
	 * @return {Array}
	 */
	initCaptionsConfig: function(gridConfig) {
		var type = gridConfig.type;
		var config = this[type + "Config"];
		var captionsConfig = (config ? config.captionsConfig : gridConfig.captionsConfig) || [];
		if (!gridConfig.captionsConfig) {
			gridConfig.captionsConfig = captionsConfig;
		}
		return captionsConfig;
	}

Если хочешь ещё и из детали получить конфигурацию, то встроенной реализации механизма сообщений нет. Придется в зависимостях прописать sandbox и инициализировать его в методе конструктора

constructor: function (config) {
    this.sandbox = new sandbox();
    this.sandbox.moduleName = "имя_модуля";

    this.sandbox.registerMessages({
        "имя_сообщения": {
            "direction": Terrasoft.MessageDirectionType.PUBLISH,
            "mode": Terrasoft.MessageMode.PTP
        }

    });

    this.callParent(arguments);
},

Как вариант, можно попробовать перехватить Profile в котором находятся конфиги на отображение в списочном и плиточном отображении (listedConfig и tiledConfig).

К примеру в методе initProfile после вызова this.callParent(arguments) взять this.get("Profile") и динамически изменить listedConfig и tiledConfig для изменения конфигуарации колонок грида.

Но только эхтим не обойтись, так как профайл только изменит внешнее отображение, что не подгрузит значения в эти колонки. Чтобы добавить в запрос также нужные колонки можно переопределить addProfileColumns и добавить в него нужные колонки обьекта.

Для примера вот как можно добавить колонку ответсственного в запрос детали с документами (DocumentDetailV2):

addProfileColumns: function(esq) {
  //берем колонки
  var profileColumns = this.getProfileColumns();
  //добавляем новую
  profileColumns.Owner = {
    aggregationType: undefined,
    caption: "Ответстсвенный",
    dataValueType: undefined,
    path: "Owner",
    subFilters: undefined,
    type: "text"
  };
  //а это взято из метода addProfileColumns из GridUtilitiesV2
  Terrasoft.each(profileColumns, function(column, columnName) {
    if (!esq.columns.contains(columnName)) {
      if (column.aggregationType) {
        this.addProfileAggregationColumn(esq, column, columnName);
      } else {
        esq.addColumn(columnName);
      }
    }
  }, this);
}

Таким образом в запросе уйдет и колонка отвественного.

Изменяя значения в Profile можно динамически поменять отображение колонок и их значений.

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

У меня не получается добавить действие НА ДЕТАЛЬ. Инструкций как это делается я не нашел. Попробовал переопределить метод addToolsButtonMenuItems, но это не помогло(возможно я что-то делаю не так?). Способ решения проблемы описанный в теме https://community.terrasoft.ru/questions/dobavlenie-novoi-detali-bpm-73 не работает.

addToolsButtonMenuItems: function() {

                this.callParent(arguments);

                var tbm = this.get("ToolsButtonMenu"); 

                tbm.addItem(this.getButtonMenuSeparator());

                tbm.addItem(this.getButtonMenuItem({                    

                    "caption": "Approve",

                    "tag": "approveAction",

                    //Click: {"bindTo": "test"},

                    "visible": "true"

                }));

            }

Хотелось бы узнать, как добавлять действие НА ДЕТАЛЬ

Нравится

2 комментария

Добрый день. Тут два момента: 1) этот метод имеет сигнатуру addToolsButtonMenuItems: function(toolsButtonMenu) 2) вы get сделали, а вот set обратно - нет. В итоге локально в методе объект изменен, но на детали ничего не видно. Если указанные места поправить - все работает.

добрый день! можете полный код написать , не получается добавить пункт меню на деталь 

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

При настройке в приложении WebSocket-ов воспользовался  статьей Настройка вебсокетов (websockets)

Внимание вопрос:

В чем разница между Windows Server 2012 и Windows Server 8 или что имел ввиду автор данной статьи, если по определению это синонимы?

Нравится

2 комментария

Скорее всего имелось ввиду Win Server 2008.

Там iis старой ревизии и надо порты явно пробрасывать

Варфоломеев Данила,

"Скорее всего имелось ввиду"... - я пол часа пытался понять: то ли я е...ый, то ли лыжи не едут... Даже "гуглить" полез!

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

Обнаружил одну странность:

При создании объекта и установки параметра "Наследование"->"Родительский объект" = "Базовый объект (Base)"

дерево "Inherited columns" не содержит перечень унаследованных от родителя колонок Id, CreatedOn, CreatedBy, ModifiedOn, ModifiedBy и ProcessListeners

Кто-нибудь сталкивался с таким? Как это можно победить?

Нравится

2 комментария

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

Как вручную через схемы конфигурации добавить в мини-карточку активности вот это http://prntscr.com/gwus67 ?  имейл у меня уже есть

Нравится

1 комментарий

Добрый день, Татьяна.

Вам стоит смотреть на реализацию аналогичного функционала в детали Средства связи. Код создающий контрол и описывающий байндинги:

getIconTypeButtonConfig: function() {

   var iconTypeButtonConfig = {

      className: "Terrasoft.Button",

      classes: {

         wrapperClass: "detail-icon-type-btn-user-class"

      },

      imageConfig: {

         bindTo: "getTypeImageConfig"

      },

      style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT,

      selectors: {wrapEl: "#iconType"},

      click: {

         bindTo: "onTypeIconButtonClick"

      },

      visible: {

         bindTo: "getTypeIconButtonVisibility"

      },

      hint: {

         bindTo: "getTypeIconButtonHintText"

      },

      markerValue: {

         bindTo: "getIconTypeButtonMarkerValue"

      }

   };

   return iconTypeButtonConfig;

},

При клике отрабатывает метод:

onTypeIconButtonClick: function() {

   var value = this.get("Number");

   if (value) {

      var path = this.getLinkUrl(value);

      if (path) {

         this.onLinkClick(path.url);

      }

   }

},

Который получает адрес почты из атрибута Number (к примеру test@test.ru), getLinkUrl преобразует адрес в mailto:test@test.ru и вызывается onLinkClick.

Часть данных методов необходимо реализовать самостоятельно, основываясь на уже присутствующем функционале из схем BaseCommunicationDetail и BaseCommunicationViewModel.

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

При сохранении изменений вот такая ошибка появляетсяИзображение удалено.

Нравится

3 комментария

Добрый день, Богдан! Данная проблема иногда возникала при обработке параллельных транзакций, полностью исправлена в версию 7.10.3. Рекомендуем заново создать раздел, а для глобального решения проблемы - обновить приложение.

Кот Владимир Владимирович,

К сожалению использование более новой версии невозможно. Такая проблема появилась после удаления и восстановления базы данных.

Пробовал пересоздавать приложение в IIS но эффекта не дало.

А при создании нового раздела тоже ошибка

Здравствуйте, Богдан!

Если Вам не удалось самостоятельно исправить данную ошибку, рекомендуем обратиться в службу технической поддержки для дельного анализа и устранения.

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

Хочу дополнительно отфильтровать печатные формы.

В версии 7.2 была функция modifyViewConfig, которая вызывалась в карточке и где я это делал. В 7.10 она не вызывается. 

Как быть?

Нравится

1 комментарий

Можете на уровне секции или карточки переопределить методы:

initCardPrintForms или 

initSectionPrintForms

в зависимости секции или карточки спсписок форм вы хотите отфильтровать.

Изначально эти методы написаны в миксине 

PrintReportUtilities

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

Здравствуйте. На изображении видно, что я добавил дробное число и "дата". Как указать, что дробное число до 4-х знаков после запятой, а "дата" должна отображаться без времени?

Прикрепленные файлы

Нравится

1 комментарий

Добрый день, Анатолий. К сожалению, сделать это непосредственно в мастере у вас не получится, необходимо перейти в конфигурацию, открыть нужный вам объект(например, Contact), в настройках установить галочку "Отображать расширенный список типов колонок", после чего изменить тип колонок на необходимый вам, и опубликовать объект.

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

Как в C# скрипте БП получить URL сайта.

Туда передается (ProcessExecutingContext context), но документации по нему не нашел.

Нравится

3 комментария
string baseUrl = WebUtilities.GetBaseApplicationUrl(HttpContext.Current.Request);

 

Варфоломеев Данила пишет:

<span>string</span> baseUrl <span>=</span> WebUtilities.<span>GetBaseApplicationUrl</span><span>(</span>HttpContext.<span>Current</span>.<span>Request</span><span>)</span><span>;</span>

К сожалению, это работает, если БП вызывается с клиента. Но если вызов происходит, например, по событию добавление/изменение записи, то где-то возникает NullReferenceException. 

есть ещё такое

UserConnection uc = Get&lt;UserConnection&gt;("UserConnection");
string uri = uc.Workspace.RepositoryUri;

 

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

Добрый день.

При выполнении установки пакета из приложения постоянно выпадает ошибка: "Не удалось загрузить файл на сервер". Подозреваю, что отсутствует какая-то настройка или в Web.config или в системных настройках самой базы. Подскажите чего не хватает?

Нравится

1 комментарий

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

Проверьте в ConnectionStrings.config параметр  

<add name="tempDirectoryPath" connectionString="%TEMP%\%APPLICATION%\%WORKSPACE%\" />

Там должен быть указан корректный путь.

 

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