Симптомы

Кейс воспроизведения:

1) открыть задачу в расписании, на детали "Связи" которой заполнен лид, счет, проект и т.д.;

2) перейти по гиперссылке в карточку связанного объекта;

3) открыть вкладку "История" и деталь "Активности";

4) добавить на деталь новую задачу.

В результате получаем ошибку в консоли с сообщением: 

message: Cannot read property 'replaceCls' of null.

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

Причина

Происходит это из-за того, что в ActivitySectionV2 перекрыт метод openCardInChain следующим образом:

openCardInChain: function(config) {
   if (this.isSchedulerDataView() && (config.operation === ConfigurationEnums.CardStateV2.ADD)) {
      var historyStateInfo = this.getHistoryStateInfo();
      if (historyStateInfo.workAreaMode === ConfigurationEnums.WorkAreaMode.COMBINED) {
         this.closeCard();
      }
   }
   return this.callParent(arguments);
},

Этот код присутствует начиная с версии 7.3.0.

Решение

В версии 7.7.0 данное поведение должно быть исправлено.

Для быстрого исправления в конфигурации необходимо заместить схему ActivitySectionV2 и переопределить в ней метод openCardInChain так:

openCardInChain: function(config) {
   if (config.isLinkClick) {
      return false;
   }
   this.saveCardScroll();
   this.scrollCardTop();
   this.showBodyMask();
   var historyState = this.sandbox.publish("GetHistoryState");
   var stateObj = config.stateObj || {
            isSeparateMode: config.isSeparateMode || true,
            schemaName: config.schemaName,
            entitySchemaName: config.entitySchemaName,
            operation: config.action || config.operation,
            primaryColumnValue: config.id,
            valuePairs: config.defaultValues,
            isInChain: true
 };
   this.sandbox.publish("PushHistoryState", {
      hash: historyState.hash.historyState,
      silent: config.silent,
      stateObj: stateObj
   });
   var moduleName = config.moduleName || "CardModuleV2";
   var moduleParams = {
      renderTo: config.renderTo || this.renderTo,
      id: config.moduleId,
      keepAlive: (config.keepAlive !== false)
   };
   var instanceConfig = config.instanceConfig;
   if (instanceConfig) {
      this.Ext.apply(moduleParams, {
         instanceConfig: instanceConfig
 });
   }
   this.sandbox.loadModule(moduleName, moduleParams);
   return true;
}

 

Нравится

Поделиться

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

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



Так же не отображается вопрос пользователю, только сама активность.




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

Нравится

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

Данное поведение встречается на сборке 7.3.0.2567. Для исправления необходимо обновление на более позднюю сборку.

Добрый день!

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

В чем, как вы думаете, заключается данная проблема, если не в сборке?

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

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

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

Добрый день.
Столкнулся со следующей проблемой:
После создания поля в новом разделе (в Мастере разделов) оказалось, что в нём нет необходимости. Поле удалил в объекте - опубликовал. Почистил redis, перезагрузил пул сайта.
После этого захожу в Мастер раздела - поле на месте

В карточке редактирования поле отображается, но при попытке внести в него данные выдаёт

Что самое интересное, в странице редактирования (Page) кода для этого элемента нет.
Также поля нет и в таблице раздела
Подскажите пожалуйста, что упускаю из вида.

Нравится

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

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

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

Не совсем корректно было её удалить из объекта сразу. После чего сохраните изменения. Перед повторным входом очистите кеш браузера.

"Резниченко Сергей" написал:Попробуйте удалить колонку непосредственно в "мастере".

Пробовал и удалить из "мастера". Потом очищал кэш и перезаходил в BPMOnline. Поле остаётся на том же месте

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

"Lymar Maxim" написал:Вам необходимо закоментировать\удалить добавленное Вами поле в блоке diff: .

В это и загвоздка. В странице редактирования этого поля в diff нет, а в мастере оно отображается.

Игорь, можете предоставить схему объекта и страницы редактирования, для анализа и воспроизведения ошибки?

Спасибо за оказанное внимание, разобрался. Проблема была тривиальная: Перед внесением изменений в "мастере" не поменяли системную настройку "Текущий пакет" и замещающий модуль карточки раздела и объекта были созданы в другом пакете. Вот и возникла путаница.
Извините за беспокойство.

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

Добрый день!
Возникла задача скрыть новые созданные вкладки на карточке в зависимости от выбранного типа Контрагента. Я пробовал использовать правила BusinessRuleModule, как для строк, но эффекта никакого нет.
Подскажите, пожалуйста, возможно ли такое решение?
Заранее спасибо!

Нравится

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

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

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

Алгоритмически данную задачу можно решить так:
Добавить атрибут на странице контрагента например:

"AccountType": {
			dependencies: [
				{
					columns: ["Type"],
					methodName: "typeChanged"
				}
			]
		},

По изменению значения поля "Тип" будет выполнятся метод typeChanged()

typeChanged: function() {	
	// получить коллекцию вкладок
	var tabsCollection = this.get("TabsCollection");
	...
        /*для tabsCollection доступны методы add(), removeByKey(), insert() с помощью которых можно управлять коллекцией вкладок в зависимости от необходимых Вам условий. *.
	...
	}

Спасибо, Максим. Обязательно попробую.
:smile:

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

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

 onDeleteAccept: function() {
                    var activeRowId = this.get("ActiveRow");
                    this.isClient(activeRowId);
                    this._refreshGrid();
                },
                isClient: function(activeRowId){
                    var gridData = this.get("GridData");
                    var rootSchemaName;
                    var selectedClient = gridData.get(activeRowId);
                    var selectedClientType = selectedClient.get("UsrType");
                    if (selectedClientType.value === "dcf866af-2bd9-49fc-9fa8-6ad9b26b0b56"){
                        rootSchemaName = 'Account';
                        var dq = Ext.create('Terrasoft.DeleteQuery', {rootSchemaName: rootSchemaName });
                        dq.filters.add('IdFilter',
                            dq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
                                'Id',activeRowId));
                        dq.execute();
                    }
                    else if(selectedClientType.value === "1634f125-6c8e-4fe4-8804-9181a29009ec"){
                        rootSchemaName = 'Contact';
                        var dq = Ext.create('Terrasoft.DeleteQuery', {rootSchemaName: rootSchemaName});
                        dq.filters.add('IdFilter',
                            dq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
                                'Id',activeRowId));
                        dq.execute();
                    };
                },
                _refreshGrid: function(){
                    var shema = "UsrClient";
                    var esq = this.getChartsSelectQuery(shema);
                    esq.getEntityCollection(function(response) {
                        var entities = response.collection;
                        if (response.success) {
                            var collection = this.get("GridData");
                            collection.clear();
                            this.reloadGridData();
                            collection.loadAll(entities);
                        }
                    }, this);
                }

ошибка:

Нравится

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

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

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

Александр, по фотографии в этом случае трудновато будет вылечить, но, думаю, что неправильно реализован метод "_refreshGrid". Как я понял, Вы выбрали реализацию через создание объекта - развязки. В этом случае, Вам, в принципе, не нужно полностью переопределять базовый метод удаления. Вам нужно сначала запомнить выделенную запись, вызвать родительский метод, который удалит запись из объекта-развязки - "UsrClient" и обновит грид. А Вам нужно определить метод onDeleted, который вызывает базовый метод "onDeleteAccept" после выполнения удаления и передает в него результат. См. GridUtilitiesV2:

onDeleteAccept: function() {
				this.showBodyMask();
				this.callService({
					serviceName: "GridUtilitiesService",
					methodName: "DeleteRecords",
					data: {
						primaryColumnValues: this.getSelectedItems(),
						rootSchema: this.entitySchema.name
					}
				}, function(responseObject) {
					var result = this.Ext.decode(responseObject.DeleteRecordsResult);
					var success = result.Success;
					var deletedItems = result.DeletedItems;
					this.removeGridRecords(deletedItems);
					this.hideBodyMask();
					if (!success) {
						this.showDeleteExceptionMessage(result);
					}
					this.onDeleted(result);
				}, this);
 
			},
 
			/**
			 * Действие, которое будет выполнено после удаления
			 * @Virtual
			 */
			onDeleted: this.Ext.emptyFn

Здравствуйте, Андрей!
Спасибо большое за совет, я переопределил этот метод только заменив значение rootSchema, в зависимости от типа Клиента (Контрагент или Контакт), и все заработало как надо.
И грида обновляется тоже нормально.

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

Добрый день!
Столкнулся с такой проблемой, после редактирования клиентских модулей, выполняю действие "Зафиксировать клиентские модули в БД". После этого меняю настройки Web.conf ( ) и открываю клиентский модуль в конфигурации - изменения не фиксируются.
Проблему решал копированием кода из *.js файла клиентского модуля, но данный вариант не является панацеей особенно когда клиентских модулей больше десяти.
Продукты: BPMOnline 7.3 и 7.4.

Вопрос: Почему данная проблема возникает и как её исправить?
Заранее Спасибо!

Нравится

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

Здравствуйте, Игорь!
Попробуйте выполнить действие "Компилировать все" после фиксации клиентских модулей в БД. Также прошу уточнить, заблокирован ли пакет, в котором меняются/фиксируются модули.

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

Здравствуйте уважаемые форумчане!

Поставлена задача создать новый раздел "Клиенты" в котором будут отражены записи из 2-х других разделов "Контрагенты" и "Контакты" с типом "Клиент". Так же с возможностью создания/удаления/редактирования записей из всех разделов.

1) Первый вариант было создать свою схему вьюшку и union`ом тянуть данные, но возникает вопрос, как удалять параллельно записи.

2) Создать новый раздел и зависимостями подвязаться к схемам, однако немного не понятно как лучше это осуществить.

Подскажите, пожалуйста, как лучше такой вариант осуществить?
М.б. есть подобное исполнение...

Нравится

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

Здравствуйте, Александр!
Задача нетривиальна, и готовых решений у нас нет, так как предполагается один грид для одного объекта. Но решить можно.
По поводу Ваших способов.
1) Удалять записи можно либо средствами bpm'online, переопределив логику кнопки "Удалить", что в 7.3 довольно просто делается (метод onDeleteAccept в GridUtilitiesV2 - это для раздела), либо с помощью триггера на уровне БД.
2) Тут можно подойти по-разному, зависит от Вашей задачи. Можно попробовать добавить 2 грида на страницу раздела, а можно попробовать переопределить логику загрузки реестра. Ведь реестр отображает содержимое аттрибута "GridData", который является просто коллекцией записей. Загрузка осуществляется методом loadGridData, который определен в GridUtilitiesV2.
Но в обоих случаях непонятно, как быть с колонками, так как набор колонок у контакта и контрагента разный.
Как вариант, можно сделать отдельный объект или вьюху с двумя лукапными полями: ContactId и AccountId, а в реестр выводить колонки по связям базовыми средствами настройки колонок.

Спасибо Андрей!
Обязательно попробую!

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

Здравствуйте!
Возникла следующая проблема: при попытке зафиксировать в хранилище возникает ошибка
Фиксация в хранилище уже не первая. Раньше все корректно работало. В чем может быть проблема?

Нравится

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

Александр, а настройки SVN не менялись?

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

Александр, не могли бы Вы еще предоставить логи сервера IIS за время, когда воспроизвелась ошибка?

Александр, не могли бы Вы еще предоставить логи сервера IIS за время, когда воспроизвелась ошибка?

Здравствуйте, уже разобрался.
Кому интересно: При фиксации в хранилище ревизия завершилась неудачей.
В базе нарастился счетчик ревизий. Таблица SysWorkspace колонка RepositoryRevisionNumber.
Т.е. фактически у меня не совпадал номер ревизии в базе и в репозитории, из-за этого и были проблемы.
решилось все простым update номера ревизии в базе.

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

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

Нравится

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

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

Здравствуйте, Александр. Можно реализовать отображение полей по условию, но они не могут располагаться на одном и том же месте. На странице будет рендериться тот контрол, который был расположен последним.

А в текущей 7.16 так и не появилось этой возможности?

Владимир, тут месяц назад спросили. Пишут, что работают над этим и будет в новых версиях. Идея добавления возможности скрывать/показывать поля вместо друг друга на одном и том же месте страницы тоже уже заведена.

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

Добрый день!
Задача: Перенести Группы ролей пользователей (SysAdminUnit) в установочном пакете на другую конфигурацию BPMOnline 7.3
На вкл. Данные Создан набор данных SysAdminUnit c необходимыми данными.
Однако при установке пакета отображается ошибка(см.Скриншот).

использую такую строку при установке пакета

Terrasoft.Tools.WorkspaceConsole.exe -workspaceName=Default -operation=InstallFromRepository -sourcePath= Путь_к_ресурсу -destinationPath=Путь_назначения -continueIfError=true -logPath=Путь_к_логу -packageName=Название_пакета

Также не перенеслись данные с привязанных справочников, но на вкл. Данные пакета они отображаются, и есть возможность установки в БД, но при этом данные добавляются с другими идентификаторами.
Создавал справочники как указано в посте https://community.terrasoft.ua/blogs/9885.

Заранее спасибо за любую информацию!

Нравится

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

Здравствуйте, Игорь!
Сложно сказать, по какой причине возникла данная ошибка. Для проведения работ по данной проблеме было бы идеально получить базу данных, на которой формируете пакеты, и номер сборки 7.3.
Вы можете предоставить данную информацию, обратившись в службу технической поддержки посредством e-mail.
Спасибо!

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