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

Столкнулись с задачей, когда необходимо переделать базовую фильтрацию "FixedFilters" для расписания. Идея в том, чтобы вместо кнопок "Сегодня" и "Текущая неделя" сделать 4 кнопки, которые будут показывать определенные недели в году (например кнопка "1" будет показывать неделю, по которой была зарегистрирована 1ая запись для данного объекта). Подскажите, пожалуйста, как лучше всего будет организовать подобное?

Нравится

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

Никита, добрый день!

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

Как пример, можете посмотреть реализованный функционал (фиксированный фильтр по ответственному и фиксированный фильтр по периоду) в базовой версии и сделать по на подобии:

this.fixedFilterConfig = {
entitySchema: Activity,
filters: [
{
	  name: 'PeriodFilter',
	  caption: resources.localizableStrings.PeriodFilterCaption,
	  dataValueType: Terrasoft.DataValueType.DATE,
	  startDate: {
			   columnName: 'StartDate',
			   defValue: Terrasoft.startOfWeek(new Date())
	  },
	  dueDate: {
			   columnName: 'DueDate',
			   defValue: Terrasoft.endOfWeek(new Date())
	  }
},
{
	  name: 'Owner',
	  caption: resources.localizableStrings.OwnerFilterCaption,
	  columnName: 'Owner',
	  defValue: Terrasoft.SysValue.CURRENT_USER_CONTACT,
	  dataValueType: Terrasoft.DataValueType.LOOKUP,
	  filter: BaseFiltersGenerateModule.OwnerFilter,
	  appendFilter: function(filterInfo) {
			   var filter;
			   if (filterInfo.value && filterInfo.value.length > 0) {
						 filter = Terrasoft.createColumnInFilterWithParameters(
								  '[ActivityParticipant:Activity].Participant',
								  filterInfo.value);
			   }
			   return filter;
	  }
}
]
};

Дмитрий, спасибо за совет! Попробуем на основе этого что-то придумать.

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

Необходимо реализовать деталь средства связи для Лида, аналогично средствам связи контрагента и контакта. Буду очень благодарен за подробный алгоритм действий.

Нравится

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

1. Создать объект с названием LeadCommunication, указать в качестве родительского объекта "Базовое средство связи"

Добавить в объект колоку Lead, опубликовать.

2. Добавить схему представления детали с полями с названием LeadCommunicationDetail, в качестве родительского объекта указать "Базовая схема детали средств связи"
Исходный код детали:

define("LeadCommunicationDetail", ["LeadCommunicationDetailResources", "terrasoft", "Lead",
        "ConfigurationEnums", "ConfigurationConstants"], function(resources, Terrasoft, Lead, ConfigurationEnums,
        ConfigurationConstants) {
    return {
 
        /**
         * Имя сущности
         */
        entitySchemaName: "LeadCommunication",
 
        methods: {
 
        }
    };
});

Сохранить деталь.

3. Добавить замещающий объект CommunicationType, в качестве родителя указать "Тип средства связи"
Добавить колонку с типом "Логическое", названием "UseforLeads" и заголовком "Использовать для лидов".
Опубликовать объект.

4. Зарегистрировать деталь, выполнив следующий sql скрипт:

declare @DetailSchemaUid uniqueidentifier = (select Uid from SysSchema where Name = 'LeadCommunicationDetail')
declare @EntitySchemaUid uniqueidentifier = (select Uid from SysSchema where Name = 'LeadCommunication')
insert into SysDetail(Caption, DetailSchemaUId, EntitySchemaUId)
values('Средства связи Лида', @DetailSchemaUid, @EntitySchemaUid)

5. Через местер раздела на странице Лид добавить деталь "Средства связи Лида"

Спасибо, деталь добавить получилось.
Как мне теперь отобразить на ней поля Лида с телефонами?

"Сафонов Олег" написал:

Как мне теперь отобразить на ней поля Лида с телефонами?

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

Вам необходимо настроить колонки для отображения.

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

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

Добрый день.
После объединения схем из нескольких пакетов в один, пытаюсь удалить старые пакеты из вкл. "Зависит от пакетов" нового пакета, в который перенес схемы.
Долго крутится загрузка после чего появляется список ошибок вида: "Колонка типа справочник название колонки> зависит от недоступной по связям схемы название объекта> пакета Название пакета>".
При этом все пакеты, по которым есть ошибки, уже добавлены в связи нового пакета.

Нравится

5 комментариев

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

"Мария Ватулина" написал:

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


Я это и пытаюсь сделать.

Здравствуйте, Игорь.
Попробуйте удалить информацию о том, что от этого пакета кто-то зависит на закладке "Зависимые контакты". После этого повторите попытку удалить "лишний" пакет. Если это не поможет. Можно выполнить это напрямую через базу. Там есть две таблицы "SysPackage" и "SysPackageDependency". В первой таблице содержатся, собственно, пакеты, а во второй - их связи. Так вот, удалите из второй таблицы информацию о том, что от пакета, который нужно удалить, кто-то зависит (в поле DependOnPackageID - ID пакета, который нужно удалить). Потом попробуйте удалить пакет из таблицы "SysPackage".

P.S.: предварительно обязательно сделайте бэкап.

Предоставили Backup базы со схемой зависимости пакетов

Здравствуйте. Вопрос передан соответствующей команде разработки.

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

Здравствуйте. Есть задача запускать процесс по расписанию в ночное время или с определенной периодичностью (включая ночное время), когда пользователи в системе не активны.
Подскажите пожалуйста, как правильно запускать процесс(от фиксированного имени пользователя или текущего) и как настроить пул на iis, чтоб была возможность запускать процессы в любое время?

Планировал процесс следующим образом:

// Задание интервала запуска процесса (в минутах).
        int minutleyInterval = IntervalContentEngine;
        var jobName="sxContentEngineProcessJob";
        var jobGroup="RefreshFromContentEngineProcessGroup";
       
if(!AppScheduler.DoesJobExist(jobName,jobGroup)){

        // Добавление задания по запуску процесса в планировщик.
        AppScheduler.ScheduleMinutelyProcessJob(jobName, jobGroup, "sxContentEngineProcess",
            UserConnection.Workspace.Name, UserConnection.CurrentUser.Name, minutleyInterval);
}

Нравится

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

Здравствуйте, Александр!

Если у Вас on-demand, то следующий абзац можно упустить.
Для того, чтобы процессы постоянно, а главное вовремя, запускались, должны быть выполнены два условия:
1) Пул приложения должен быть запущен
2) Сайт должен работать

Чтобы выполнялось первое условие, установите таймаут простоя IIS равным 0:

Второй пункт выполняется практически всегда. У IIS есть особенность - он раз в сутки перезагружает пулы и, соответственно, сайт останавливается до следующего входа пользователя. Процессы тоже не запускаются.
Для того, чтобы после перезагрузки пула, процесс продолжал работать, в msdn создана эта тема.
В данной теме есть ссылка на бесплатную утилиту, которая постоянно опрашивает работает ли сайт.
Таким образом можно обеспечить постоянную работу сайта, а соответственно и запуск процессов.

Процессы имеют те же права, что и пользователи, под которыми они запущены. В зависимости от целей, Вам выбирать от чьего имени запускать процесс.
Например, процесс интеграции с чем либо логично было бы запускать под пользователем, обладающим правами системного администратора.
Процессы по созданию задач подчиненным лучше все же запускать под именем руководителя (автором задачи будет руководитель):).

Алексей, вроде бы получилось, спасибо!
Полностью проверить удастся завтра.
Также, если кому-то пригодится, smarterPing нужно устанавливать через имеющийся bat-файл из командной строки,запущенной от имени администратора.

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

Добрый день.
Переношу пакет с доработками 7.4 на 7.5 средствами SVN и MD файлами.
В процессе переноса выявлена, что для замещающих клиентских модулей ActPageV2,
CorrespondencePageV2 отсутствует родитель.
Как быть в этой ситуации? Как переносить доработки с версии на версию, если от версии к версии изменяются схемы ядра?

Нравится

5 комментариев

Здравствуйте, Игорь.

Спасибо за Ваш вопрос.
Действительно, ранее в системе были отдельные страницы для различных типов документов. В версии 7.5 данных схем не должно быть, вместо них реализована страница DocumentPageV2.

В утилите и пакетах обновления на версию 7.5 предусмотрен учет данного изменения.
Прошу детализировать проблему и описать шаги, которые выполнялись Вами в письме на адрес support@tscrm.com.

Постараемся Вам помочь.
Заранее спасибо.

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

Игорь, здравствуйте!

Вариантом решения Вашего вопроса будет выгрузить пакеты с доработками через WorkspaceConsole и накатить их на другую базу. Для этого:

1) Сначала важно указать параметры подключения к БД, которые будет использовать WsC. WsC использует строку подключения из конфигурационного файла Terrasoft.Tools.WorkspaceConsole.exe.config (должен находиться в каталоге с WsC).
В секции указывается используемая строка подключения
В секции указываются значения строк подключения к БД.
...............................................................

2) Выполнить 1, 3 и 4 пункты из прикреплённой инструкции.
3) Сделать выгрузку пакетов из первой базы с помощью WorkspaceConsole, запустив файл update.bat со следующими параметрами:
Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -workspaceName=Default -destinationPath=D:\Temp\Repository\ -contentTypes=Repository
4) Выполняем первый пункт, указав теперь путь к базе, на которую накатываются пакеты.
5) Выполняем полностью прикрепленную инструкцию. Накатятся пакеты с доработками на другую базу.

Инструкцию по накатке пакетов прикрепляю.

Спасибо!

Не будет ли конфликта при обновлении, т.к. необходимый пакет будет выгружен со всеми наследуемыми им пакетами, а эти пакеты в целевой BPM 7.5 уже есть?

Игорь, добрый день!

Перед выполнением инструкции обязательно сделайте бэкап базы данных.
Конфликтов возникнуть недолжно, так как устанавливатся только пакеты новее уже установленных.

Спасибо!

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

Есть задача считать кол-во переносов задачи.
Сделал поле "кол-во переносов" и когда у задачи дата завершения меняется, то +1 к переносам.
Потом может быть будет получена задача выводить список переносов (кто, на какой срок). Поэтому подумал, что может сделать в рамках аудита, но не понятно как в bpm сделать поле с запросом с sql (как в тройке можно было). Такое можно сделать в bpm?

Начал копать в сторону на событие перед сохранением записи. Но не понятно как получить старое значение колонки. Есть ли какое-нибудь свойство OldValue и как его получить?

Если нет, думаю над двумя костылями:
1) После загрузки данных, записывать значение в переменную и сравнивать с ней
2) В скрипте делать запрос к БД к этой активности (перед сохранением запись еще не изменена и там находится старое значение)

Какие есть пути решения?

Нравится

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

Добрый день, Александр Владимирович!

Для решения Вашей задачи используйте следующие возможности:
1) Создайте деталь с полями:

  • Старая дата начала
  • Новая дата начала
  • Старая дата окончания
  • Новая дата окнончания
  • Активности

Поля "Создал" и "Дата создания" - системные
Колонка связи с объектом Активности - Деталь.Активность=Активность.Id.
2) Создайте бизнес процесс с двумя входами:

  • При добавлении записи "Активность"
  • При изменении записи "Активность" в полях "Дата начала", "Завершение"

Логика следующая:
1) Первая запись будет создаваться при добавлении активности
2) Узнать старую дату начала Вы сможете в поле "Новая дата начала", старую дату окончания - в поле "Новая дата окончания", отсортировав записи на детали по дате создания по убыванию.
3) Количество переносов = (количество записей на детали - 1)

А в объекте Contact в процессе есть следующий метод NamePartColumnChanged, в котором как раз отслеживается старое значение:

return changedColumns.Any(column => {
return
column.Name == namePart &&
column.Value != null &&
!string.IsNullOrEmpty(column.Value.ToString()) &&
!column.Value.Equals(column.OldValue);
});

Так же в событии Saving доступно значение Entity.GetTypedOldColumnValue("FieldName"), которое можно записать в параметр, а потом в событии Saved уже сравнивать с текущим значением

Владимир, данный вариант предполагает хорошие навыки программирования. Мой вариант подойдет для пользователей, которые не владеют программированием.

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

Добрый день, создал объект, добавил ему все необходимые поля, через мастер деталей пытаюсь создать деталь для этого объекта и получаю следующую ошибку
1
Причем создаю один в один с другим объектом, с предыдущим проблем не было

Нравится

7 комментариев

Олег, в базовой версии не удалось воспроизвести ошибку.
Попробуйте, пожалуйста, пересоздать объект.
Ждем обратной связи!

Пересоздание объекта не дало результатов - та же ошибка, создал тестовый пустой объект, для него деталь создалась нормально, в итоге создал объект и в качестве родительского объекта выбрал аналогичный объект, деталь создалась

Здравствуйте, Олег!
Вы создаете в системе новый объект не наследуясь от базового объекта?
Скажите, пожалуйста, в данном объекте кроме системных полей и двух справочных полей есть еще какие-то поля? Например, название и описание.

Создавал новый объект, наследуясь об базового объекта, проблема собственно решилась уже, так что не смогу найти и глянуть подробнее поля

А я после странных творений мастера в английской версии 7.6 с ним завязал.
Делаю объект в конфигурации. Дальше на его основе генерирую мастером деталь без вообще каких либо полей, правок... главная его задача в нынешнем виде - зарегистрировать мою деталь в системе, и за это ему большое спасибо. Потом иду в конфигурацию и полностью (!) переписываю текст модулей, им созданных :smile:
Вот выйдет новый красивый и правильный мастер в 7.7...

Вынужден огорчить на 7.8 такая же проблема!
Создал новый объект, унаследовался от Базового. Набросил 2 поля: 1 для связи и 2 целое.
Забежал в Мастер Деталей. Попытался создать.
Создает запись в SysModuleEntity на шаге Регистрация детали и на этом этапе висит.

Хотя по инструкции должен был бы создать записи в таком порядке:

  1. SysDetail
  2. SysModuleEntity
  3. SysModuleEdit

Я и сам бы зарегал но не работает же :(
4 детали создал руками в Конфигурациии, а 5ый ну никак. Ни мастером ни руками(

Лечится созданием нового объекта и все по новой

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

Добрый день, подскажите, хотя бы алгоритмично, как создать деталь с древовидной структурой, вроде ProjectStructureDetail, хотел сделать по аналогии, но так и не нашел никакого упоминания о ней в ProjectPageV2

Нравится

11 комментариев

Олег, здравствуйте!

К данному комментарию прикрепил наглядный пример по реализации иерархической детали.

realizaciyaierarhicheskoydetali.doc

Приятного дня!

Добрый день, спасибо за оперативный ответ, попробовал сделать по инструкции, но иерархичность грида не работает http://goo.gl/yCvmBG, кнопка добавления подчиненной записи вообще не активна, добавляются только по кнопке родительской записи, как обычные записи детали
В принципе не могу найти даже в базовой схеме детали метод getAddChildButtonEnabled

Пришлите список сервисов и сами сервисы в которые Вы вносили изменения на support@bpmonline.com для того чтобы мы детально проанализировали Вашу конфигурацию.
В тему письма впишите номер инцидента 0255638.

Отправил на почту письмо с детальным описанием проделанных действий.
P.S. с форума письмо на восстановление пароля содержит в теме [*****SPAM 4.1 *****] странно как то

Добрый день, по итогу общения по почте:

Согласно предоставленному файлу, в схеме детали после строки:
- "hierarchical": true
следует добавить:
- hierarchicalColumnName: "Parent"

Это как бы итак оговаривается в примере, причем там написано обратное, но я все же пробовал еще до подобного совета, результат тот же, деталь строится обычная, с обычным гридом

Олег, здравствуйте!

Для отображения кнопки «Добавить подчинённый элемент» добавьте в код детали:

getAddChildButtonEnabled: function() {
   return true;
},

Попробуйте в код детали подключить следующий миксин:

define("HierarchicalSectionUtilities", ["HierarchicalSectionUtilitiesResources", "GridUtilitiesV2"],
    function(resources) {
        Ext.define("Terrasoft.configuration.mixins.HierarchicalSectionUtilities", {
            extend: "Terrasoft.BaseObject",
            alternateClassName: "Terrasoft.HierarchicalSectionUtilities",
 
            expandedElements: {},
            expandHierarchyLevels: {},
            ExpandItemId: null,
            ExpandedLevels: null,
 
            changeSorting: function() {
                this.clearExpandHierarchyLevels();
                this.callParent(arguments);
 
            },
 
            /**
             * Обработчик загрузки дочерних элементов. Осуществляет проверку загружености
             * дочерних элеметов выбранной записи. Запускает загрузку нового уровня.
             * @protected
             * @virtual
             * @param {String} primaryColumnValue Уникальный идентификатор записи
             * @param {Boolean} isExpanded Признак того, разворачивает или сворачивает пользователь дочерние элеметы
             * true - если разворачивает, false в обратном случае
             */
            onExpandHierarchyLevels: function(primaryColumnValue, isExpanded) {
                if (!isExpanded || this.isItemExpanded(primaryColumnValue)) {
                    return;
                }
                this.setExpandedItem(primaryColumnValue);
                this.set("ExpandItemId", primaryColumnValue);
            },
 
            /**
             * Удаляет логику постраничности если загружаются дочерние объекты
             * @protected
             * @overridden
             */
            initCanLoadMoreData: function() {
                var parentItem = this.get("ExpandItemId");
                if (!parentItem) {
                    this.callParent(arguments);
                }
            },
 
            /**
             * получает коллекцию развернутых уровней
             * @returns {*}
             */
            getExpandedItems: function() {
                return this.get("expandedElements");
            },
 
            /**
             * Устанавливает новый уровень развернутости иерархии
             * @param primaryColumnValue
             */
            setExpandedItem: function(primaryColumnValue) {
                (this.getExpandedItems()[primaryColumnValue]) = { "page": 0 };
            },
 
            /**
             * Проверяет, были ли загруженны дочерные элементы выбранной записи
             * @protected
             * @virtual
             * @param primaryColumnValue Уникальный идетификатор записи
             * @return {boolean}
             */
            isItemExpanded: function(primaryColumnValue) {
                return !!(this.getExpandedItems()[primaryColumnValue]);
            },
 
            /**
             * Очищет информацию о загруженных и развернутых уровнях
             * @protected
             * @virtual
             */
            clearExpandHierarchyLevels: function() {
                this.set("expandedElements", {});
                this.set("expandHierarchyLevels", []);
                var grid = this.getCurrentGrid();
                if (grid) {
                    grid.expandHierarchyLevels = [];
                }
            },
 
            /**
             * Убирает информацию о том, что элемент развернут из системных параметров
             * @protected
             * @virtual
             * @param {String} itemId Уникальный идентификатор записи
             */
            removeExpandHierarchyLevel: function(itemId) {
                var expandHierarchyLevels = this.get("expandHierarchyLevels");
                this.set("expandHierarchyLevels", Terrasoft.without(expandHierarchyLevels, itemId));
                var grid = this.getCurrentGrid();
                if (grid) {
                    grid.expandHierarchyLevels = Terrasoft.without(grid.expandHierarchyLevels, itemId);
                }
            },
 
            /**
             * Дополнительная обработка после удаления записи
             * Очищает иерархию и перезагружает реестр
             * @overridden
             * @protected
             */
            onDeleted: function(result) {
                this.callParent(arguments);
 
                if (result.Success) {
                    this.clearExpandHierarchyLevels();
                    this.loadGridData();
                    this.reloadGridData();
                }
            },
 
            reloadGridColumnsConfig: function(doReRender) {
                var profile = this.get("Profile");
                var propertyName = this.getDataGridName();
                var gridProfile = profile[propertyName];
                if (!this.Ext.Object.isEmpty(gridProfile)) {
/**
* очень важны две следующие строки, благодаря им при перерисовке реестра в виде вертикального, не разрушаются стили иерархии, и она нормально отображается в вертикальном реестре.
*/
                    gridProfile.isTiled = false;
                    gridProfile.type = "listed";
                    var grid = this.getCurrentGrid();
                    if (!grid) {
                        return;
                    }
                    grid.type = gridProfile.type;
                    var viewGenerator = Ext.create("Terrasoft.ViewGenerator");
                    viewGenerator.viewModelClass = this;
                    var gridConfig;
                    var bindings = this.Terrasoft.deepClone(grid.bindings);
                    if (gridProfile.type === Terrasoft.GridType.LISTED) {
                        gridConfig = {
                            listedConfig: Ext.decode(gridProfile.listedConfig),
                            type: gridProfile.type
                        };
                        viewGenerator.actualizeListedGridConfig(gridConfig);
                        grid.captionsConfig = gridConfig.listedConfig.captionsConfig;
                        grid.columnsConfig = gridConfig.listedConfig.columnsConfig;
                        grid.listedConfig = gridConfig.listedConfig;
                        grid.initBindings(gridConfig.listedConfig);
                    } else {
                        gridConfig = {
                            tiledConfig: Ext.decode(gridProfile.tiledConfig),
                            type: gridProfile.type
                        };
                        var isVertical = (propertyName.indexOf("VerticalProfile") > -1);
                        gridConfig.isVertical = isVertical;
                        grid.isEmptyRowVisible = !isVertical;
                        viewGenerator.actualizeTiledGridConfig(gridConfig);
                        grid.columnsConfig = gridConfig.tiledConfig.columnsConfig;
                        grid.tiledConfig = gridConfig.tiledConfig;
                        grid.initBindings(gridConfig.tiledConfig);
                    }
                    grid.bindings = bindings;
                    if (doReRender) {
                        grid.clear();
                        grid.prepareCollectionData();
                        if (grid.rendered) {
                            grid.reRender();
                        }
                    }
                }
            }
        });
        return Terrasoft.HierarchicalSectionUtilities;
    }
);

В результате деталь должна отобразиться нужным образом.
Также подобную реализацию можете посмотреть в разделе «Контрагенты» (деталь «Структура организации»).

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

details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
mixins: {
	HierarchicalSectionUtilities: "HierarchicalSectionUtilities"
},
diff: /**SCHEMA_DIFF*/[

и при открытии страницы где расположена деталь в консоль выбивает ошибку

Добрый день, Олег!
Если нужно подключить указаный выше по комментариям мексин HierarchicalSectionUtilities, то нужно подключить/зарегистрировать модуль содержащий мексин в define и подключить его в секции mixins, как показано ниже:

define("SchemeModuleName", ["HierarchicalSectionUtilities"], function() {
                return {
                               messages: {},
                               /**
                               * Классы-миксины, расширяющие функциональность данного класа.
                               */
                               mixins: {
                                               /**
                                               * @class HierarchicalSectionUtilities
                                               */
                                               HierarchicalSectionUtilities: "Terrasoft.HierarchicalSectionUtilities"
                               },
                               methods: {},
                               diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
                };
});

Добавил миксин, ситуация не изменилась, деталь так же имеет обычную структуру...
http://goo.gl/dexq8R

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

Огромное спасибо за помощь, понял свои ошибки

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

Добрый день!
Версия 7.5.0.627
Проблема в следующем
Переношу репозиторий с новыми пакетами на базу клиента.
Нажимаю Восстановить из хранилища. Операция завершается успешно, но новые пакеты не появляются в списке пакетов.
Перенёс рабочую копию, повторил действия - результат тот же.
Пытаюсь создать одноименный пакет в списке пакетов - пишет, что такой пакет уже есть в репозитории.

Вопросы:
1. Как восстановить из хранилища новые пакеты
2. Как восстановить отдельно взятый пакет из репозитория.

Нравится

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

Добрый день, Игорь!

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

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

Коллеги, подскажите, как можно управлять обязательностью полей на детали "Связи"?
Например в Активности, типа Задача, есть деталь "Связи", там контрагенты, контакты и прочее.
Но при открытии в дизайнере страницы, поля этой детали недоступны, и соответственно, не получается проставить их обязательность.

Подскажите, как можно решить этот банальный кейс?

Нравится

10 комментариев

Фариз, здравствуйте!

Деталь, например, «Связи» не является стандартной деталью и вшита базовую логику приложения (Рис. 1). Это даже не деталь, а можно сказать группа полей.

Редактирование таких деталей (объектов) необходимо осуществлять на уровне схемы (через конфигурацию).
Согласно Вашей задачи обязательность колонки Вы можете реализовать на уровне объекта. Для этого необходимо заместить соответствующий объект и проставить обязательность поля (Рис. 2).

Так как признак обязательности поля/ ссылается на сам объект, а не на схему.

"Вильшанский Дмитрий" написал:Деталь, например, «Связи» не является стандартной деталью и вшита базовую логику приложения (Рис. 1). Это даже не деталь, а можно сказать группа полей.

А не планируется пересмотреть такой подход? Каждый раз, стандартно создавая новый раздел, приходится делать нестандартные вещи. А уже "пользователь без программиста" вообще не сможет добавить свою колонку в Связи

"Владимир Соколов" написал:
Вильшанский Дмитрий пишет:

Деталь, например, «Связи» не является стандартной деталью и вшита базовую логику приложения (Рис. 1). Это даже не деталь, а можно сказать группа полей.

А не планируется пересмотреть такой подход? Каждый раз, стандартно создавая новый раздел, приходится делать нестандартные вещи. А уже "пользователь без программиста" вообще не сможет добавить свою колонку в Связи

Владимир, здравствуйте!

Здесь скорее вопрос не о пересмотре подхода, а том, что Вы пытаетесь изменить базовую схему, которая лежит в верхнем пакете. Поэтому необходимо замещать, чтобы можно было внести изменения.
Предполагается, что приложение кастомизирует пользователь, который знает функционал и понимает, что он делает (для этого у нас есть обучение и SDK).

Примечание. В ближайших версиях (ориентировочно 7.8) планируется убрать кнопку «Настроить», которая отображает данное сообщение у некоторых базовых деталей.

"Вильшанский Дмитрий" написал:Предполагается, что приложение кастомизирует пользователь, который знает функционал и понимает, что он делает

Да, пользователь предполагает, что он добавит стандартное Lookup-поле (связь с новым разделом) в карточку Activity с помощью стандартного мастера раздела, а затем в своем разделе с помощью мастера добавит деталь Activity. И всё - так работает со всеми другими разделами, за исключением Activity.

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

"Вильшанский Дмитрий" написал:Предполагается, что приложение кастомизирует пользователь, который знает функционал и понимает, что он делает (для этого у нас есть обучение и SDK).

Кстати, не могу найти в SDK (может, стоит добавить), как в Activity добавить поле в "Связи", и как в карточку настройки Activity в БП добавить настройку этого поля

"Владимир Соколов" написал:

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

Владимир, это не стандартная деталь. Она строиться динамически.

"Владимир Соколов" написал:
Вильшанский Дмитрий пишет:

Предполагается, что приложение кастомизирует пользователь, который знает функционал и понимает, что он делает (для этого у нас есть обучение и SDK).

Кстати, не могу найти в SDK (может, стоит добавить), как в Activity добавить поле в "Связи", и как в карточку настройки Activity в БП добавить настройку этого поля

Ниже приведен алгоритм (для решения данной задачи необходим доступ к БД):
1. В замещенном объекте «Activity» добавляете колонку, который ссылается на Ваш раздел (необходимо указывать объект раздела, например «Объекты») (Рис. 1). Опубликовать объект.

Рис. 1

2. Затем необходимо узнать Uid колонки в замещенном объекте «Activity» (для дальнейших действий). Узнать можно через метаданные (Рис. 2). Uid является уникальным.

Рис. 2

3. Затем необходимо добавить запись в таблицу «EntityConnection» с помощью команды INSERT INTO, где SysEntitySchemaUId = ‘C449D832-A4CC-4B01-B9D5-8A12C42A9F89' (это ID схемы активностей) и ColumnUId = Uid колонки, который я описал во 2 пункте (например, ‘fbbd60dc-beec-4eb4-96ed-6a18037b1bd9’):

Пример:

Insert into EntityConnection (SysEntitySchemaUId, ColumnUId) values ('C449D832-A4CC-4B01-B9D5-8A12C42A9F89', 'fbbd60dc-beec-4eb4-96ed-6a18037b1bd9')

4. Очистить кэш браузера и почистить Redis приложения.

"Вильшанский Дмитрий" написал:Ниже приведен алгоритм (для решения данной задачи необходим доступ к БД):

Спасибо! Добавил через SQL, так как система on-demand, а ради одного поля не хотелось разворачивать среду разработки

Извините указанные выше действия это для добавления полей в Задачу в БП (см рис ниже)?

"ЮМарат" написал:

Извините указанные выше действия это для добавления полей в Задачу в БП (см рис ниже)?

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

20160412_activity.png
22.81 кб

Речь изначально идет про раздел Активности. То что Вы спрашиваете это - ActivityUserTask.

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