Пытаюсь сделать так

var update = this.Ext.create("Terrasoft.UpdateQuery", {rootSchemaName: this.entitySchemaName});
update.filters.add("IdFilter", this.Terrasoft.createColumnFilterWithParameter("Id", selectedRows));
update.setParameterValue("B2BClient", Terrasoft.GUID_EMPTY, Terrasoft.DataValueType.GUID);
update.execute(function() {
	this.updateDetail({reloadAll: true});
}, this);

Упорно ничего не работает. 

Даже если писать вместо Terrasoft.GUID_EMPTY null или  Terrasoft.DataValueType.LOOKUP, выдает Uncaught Идентификатор GUID должен содержать 32 цифры и 4 дефиса (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Нравится

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

Лёш, проблема не там где ищешь.



Ты фильтр добавляешь selectedRows а тип фильтра используешь как для this.get("Id").

Ошибка в том что фильтр ожидает от тебя не array а GUID.



Для массива измени тип фильтра на createColumnInFilterWithParameters.



А в исходниках кстати указано что апдейте надо Null передавать, а не GuidEmpty

Добрый вечер.

 

Попробуйте написать таким образом:

update.setParameterValue("B2BClient", null, Terrasoft.DataValueType.LOOKUP);

 

Лёш, проблема не там где ищешь.



Ты фильтр добавляешь selectedRows а тип фильтра используешь как для this.get("Id").

Ошибка в том что фильтр ожидает от тебя не array а GUID.



Для массива измени тип фильтра на createColumnInFilterWithParameters.



А в исходниках кстати указано что апдейте надо Null передавать, а не GuidEmpty

В конфигурации встречается и работает нормально null и с Terrasoft.DataValueType.GUID тоже. Например, в FileDetail:

var update = Ext.create("Terrasoft.UpdateQuery", {
	rootSchemaName: this.entitySchema.name
});
update.enablePrimaryColumnFilter(itemId);
update.setParameterValue("LockedOn", currentDateTime, Terrasoft.DataValueType.DATE_TIME);
if (isLocked) {
	update.setParameterValue("LockedBy", Terrasoft.SysValue.CURRENT_USER_CONTACT.value,
		Terrasoft.DataValueType.GUID);
} else {
	update.setParameterValue("LockedBy", null, Terrasoft.DataValueType.GUID);
}
update.execute(function(response) {
...

 

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

Добрый день!

Появляется ошибка при добавлении почты Exchange в профиле BPM. При этом происходит бесконечная загрузка и почта не добавляется.

Ошибка на скриншотеИзображение удалено.

Нравится

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

Здравствуйте, Николай!

Если у Вас версия 7.16.1, то IMAP-почта может не добавляться из-за ошибки использования STARTTLS в пакете OldEmailIntegration. Возможно, и с Exchange причина та же. 

Исправление включено в  7.16.2.

Для версий 7.16.1 нужно установить новую версию пакета OldEmailIntegration через Дизайнер системы - Установка и удаление приложений. Пакет можно получить, обратившись в службу поддержки.

Мотков Илья,

Добрый день!

Спасибо за ответ.

У нас установлена версия 7.13

Здравствуйте, Николай!

В  таком случае, у Вас причина в другом.

Николай, судя по версии, у Вас сайт развёрнут локально. Значит, можно зайти в логи сервера в Error.log за нужный день и посмотреть, что там происходит в момент 500 ошибки. Может быть более подробная информация об ошибке и стек функций.

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

Всем привет!

 

Столкнулся со странным поведением: не всегда отрабатывает метод this.reloadEntity(); в карточке. Заметил, что при открытии страницы в режиме редактирования он отрабатывает корректно, но если создавать новую сущность и сохранить карточку ("тихое" сохранение без выхода их карточки через isSilent) метод не отрабатывает: поля не обновляются, ошибок в консоле нет. Вижу, что контекст отличается от контекста страницы в режиме редактирования, но как это победить непонятно. Кто-нибудь сталкивался?

 

Заранее благодарен за ваши ответы.

Нравится

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

Дмитрий, а если воспользоваться вместо reloadEntity способом из дополнения, упомянутого в этой теме? Там в итоге получили нужное поведение.

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

Добрый день!

В среде разработки команда ClassFactory.Get("Word"); вылетает с ошибкой. 

Команда ClassFactory.Get(); успешно выполняется.

Подскажите, пожалуйста, как устранить ошибку в первом случае. Спасибо!

Нравится

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

Возможно кто-то сталкивался с таким кейсом - в бизнеспроцессе открывается страница редактирования, в ней кнопка "Сохранить" при нажатии сразу закрывает страну. Про не закрывание страницы при добавлении на делать даных есть описание кейса на странице академии https://academy.terrasoft.ru/documents/technic-sdk/7-16/kak-sohranyat-ne-zakryvaya-otkrytuyu-biznes-processom-stranicu-redaktirovaniya , но ножно ли сделать что бы поля на странице можно быть сохранить не закрывая страницу? Другими словами при нажатии "Сохранить" страница не закрывалась а кнопка заменялась на "Закрыть"?

Нравится

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

Александр, в статье по той ссылке в начале предлагается, как такое сделать:

Если необходимо сохранить запись несколько раз, не закрывая страницу редактирования, то необходимо методу this.save() в качестве аргумента передавать конфигурационный объект со свойством isSilent равным true. Например:

this.save({isSilent : true});

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

Александр, в статье по той ссылке в начале предлагается, как такое сделать:

Если необходимо сохранить запись несколько раз, не закрывая страницу редактирования, то необходимо методу this.save() в качестве аргумента передавать конфигурационный объект со свойством isSilent равным true. Например:

this.save({isSilent : true});

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

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

Доброго времени суток!

Допустим, у меня есть раздел "Автомобили" с возможностью добавления новых автомобилей. В клиентской части мне необходимо отловить событие после добавления новой записи в этот раздел и добавить дополнительную логику на фронте. Думаю, должно быть что-то вроде "onItemInserted". Подскажите, пожалуйста,  как это лучше реализовать или какое название метода, который отрабатывает после вставки. Заранее благодарен.

Нравится

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

Добрый день!

 

На клиентской части в карточке редактирования Вы можете переопределить метод BasePageV2#onSaved

onSaved: function() {
	this.callParent(arguments);
},

Обратите внимание, если Вам нужно производить какие-то манипуляции с данными (пересчеты/обновления в других объектах и т.д.), то лучше использовать подход сигналов/событий объекта, тк при обработке на клиенте обрабатываться будет только "ручной" ввод, а во время импортов/интеграций/БП это логика останется "за бортом"

Добрый день!

 

На клиентской части в карточке редактирования Вы можете переопределить метод BasePageV2#onSaved

onSaved: function() {
	this.callParent(arguments);
},

Обратите внимание, если Вам нужно производить какие-то манипуляции с данными (пересчеты/обновления в других объектах и т.д.), то лучше использовать подход сигналов/событий объекта, тк при обработке на клиенте обрабатываться будет только "ручной" ввод, а во время импортов/интеграций/БП это логика останется "за бортом"

Если учитывать изменения на объекте процессами, интеграциями (или одновременно разными пользователями), лучше реализовать логику на событии вставки на уровне БП, а затем на сторону браузера передавать по ClientMessageBridge.

Лопатин Константин, Благодарю за совет! 

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

Подскажите как вывести следующую аналитику с типом "Показатель" (можно каким либо другим):

Есть объект, в котором 2 поля с типом данных "дата": "Плановая дата" и "Фактическая дата".

Нужно вывести следующую информацию:

1) Количество записей, которые не были просрочены ("Фактическая дата"< "Плановая дата")

2) Количество записей, которые были просрочены ("Фактическая дата"> "Плановая дата")

 

Я предполагал, что можно в разделе "Как отфильтровать" указать поле "Фактическая дата" знак "<" и выбрать поле: "Плановая дата", но там можно выбрать только текущий год/месяц/ день.... :((((((

Нравится

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

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

 

Тут нужны обходные подходы: либо через view, как выше советует Алла, либо сделать дополнительное поле (логическое или числовое) и на уровне БП (обычного или встроенного) писать туда признак, что первая дата больше или разницу в днях. БП запускать на событии вставки записи или изменения одного из полей с датами. И затем итоги строить по этому полю.

Добрый вечер.

 

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

 

Как создать такое представление подробнее читайте в этом посте.

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

 

Тут нужны обходные подходы: либо через view, как выше советует Алла, либо сделать дополнительное поле (логическое или числовое) и на уровне БП (обычного или встроенного) писать туда признак, что первая дата больше или разницу в днях. БП запускать на событии вставки записи или изменения одного из полей с датами. И затем итоги строить по этому полю.

Зверев Александр,

Алла Савельева,

Спасибо за ответы

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

Добрый день!

Подскажите, пожалуйста, мы хотим, чтобы у нас в Итогах раздела был расчетный показатель, который пересчитывается при перемещении по папкам в соответствии с условием, накладываемым фильтром папки. Реализовано ли это для элемента «Расчетный показатель»?

 Версия 7.15.1.1295

 Спасибо!

Нравится

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

Ольга, в стандартном блоке итогов «Показатель» выбранная группа учитывается. Правда, проверял на 7.16.1, но в 7.15.1 должно быть тоже.

Или Вы имели в виду «Расчетный показатель» из дополнения «Calculated metrics»? Там не так?

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

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

1. В основном приложении настроен каталог продуктов с числом категорий 38

2. В мобильном приложении в режиме off-line на странице подбора товаров в заказ, под кнопкой Продукты в заказе -> Фильтры видны только 10 категорий из 38. При этом в мобильное приложение импортированы все 38.

Никак не могу понять причины. Записи категорий ничем не отличаются.

Написала в поддержку, но ответа пока нет.

Может кто-то знает особенности этого функционала? спасибо за помощь

 

 

Нравится

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

Марина, возможно, у Вас не offline, а гибридный режим? Там как раз фигурирует ограничение в 10 штук:

Гибридный режим является частным случаем online режима и предназначен для того, чтобы пользователи могли работать с данными в отсутствие стабильного соединения с сервером. Он включается автоматически, когда у пользователя пропадает доступ к сети Интернет. В гибридном режиме есть возможность:

  • Работать с недавними записями во всех разделах. Недавними считаются последние 10 записей, с которыми взаимодействовал пользователь.

  • Создавать новые записи.

  • Работать с расписанием

Зверев Александр,

 

Александр, большое спасибо за пояснения. У нас выставлен режим off-line и пакет Полевые продажи. В описании мобильного приложения Полевых продаж написано, что у нему не применим гибридный режим. После попытки внести изменения в перечень Категорий и Типов продуктов, в мобильном приложении стало отображаться всего 7 категорий. Но возможно, причины именно в этом. Благодарю. Если ситуация проясниться напишу)

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

Зверев Александр,

 

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

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

Добрый всем. Заметил странное поведение детали "Стадии" во вкладке "История продажи".

У меня три страницы для разных типов продаж, на двух из них при переходах со стадии на стадию в истории стадий за один переход прописывается 6 стадий (при этом только последняя относится к этому типу продаж). Но интересное что на одном виде продаж такого нет.

Запускается только один бизнес-процесс, так что влияние сторонних исключено, это проверил.

Видимо в логике именно добавления именно в таблицу что-то.

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

Нравится

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

Проверьте, не установлено ли "Показывать в воронке" в True для этих стадии в справочнике стадий продаж

Было похожее, но единоразово, когда сайт был сильно загружен. Тогда, вероятнее всего, проблема была в том, что не создался DCM-процесс из-за перезагрузки одной из нод.

 

Если воспроизводится стабильно, то где-то в коде реализовано: или во встроенном БП, или в отдельных, или в событийном слое, или в кейсах этого раздела, или в коде карточки на JS, или, что наименее вероятно, вообще в триггерах.

 

Тут ещё нужно понять, только ли деталь стадий менялась, или реально каждый раз менялось поле «стадия» продажи. Это можно выяснить, настроив стандартный механизм журнала изменений для раздела.

Владимир Соколов,

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

Зверев Александр,

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

Нужно смотреть во встроенном БП объекта «Продажа» в функции SynchronizeOpportunityStage:

  public virtual void SynchronizeOpportunityStage() {
   if (UserConnection.GetIsFeatureEnabled("DisableOldOpportunityStageSynchronizers")) {
    return;
   }
   if (UserConnection.GetIsFeatureEnabled("NewOpportunityStageManager")) {
    var opportunityStageRepository =
     Terrasoft.Core.Factories.ClassFactory.Get&lt;Terrasoft.Configuration.OpportunityStageRepository&gt;(
      new Terrasoft.Core.Factories.ConstructorArgument("userConnection", UserConnection));
    var opportunityInStageRepository =
     Terrasoft.Core.Factories.ClassFactory.Get&lt;Terrasoft.Configuration.OpportunityInStageRepository&gt;(
      new Terrasoft.Core.Factories.ConstructorArgument("userConnection", UserConnection));
    var opportunityStageManager =
     Terrasoft.Core.Factories.ClassFactory.Get&lt;Terrasoft.Configuration.OpportunityStageManager&gt;(
      new Terrasoft.Core.Factories.ConstructorArgument("userConnection", UserConnection),
      new Terrasoft.Core.Factories.ConstructorArgument("opportunityStageRepository", opportunityStageRepository),
      new Terrasoft.Core.Factories.ConstructorArgument("opportunityInStageRepository", opportunityInStageRepository));
    opportunityStageManager.SynchronizeStage(StageOldValue, OldOwnerId, Entity);
   } else {
    var oppInStageSchema = UserConnection.EntitySchemaManager.GetInstanceByName("OpportunityInStage");
    var stageHelper = Terrasoft.Core.Factories.ClassFactory.Get&lt;Terrasoft.Configuration.OpportunityStageHelper&gt;(
     new Terrasoft.Core.Factories.ConstructorArgument("userConnection", UserConnection),
     new Terrasoft.Core.Factories.ConstructorArgument("oppInStageSchema", oppInStageSchema));
    stageHelper.SynchronizeStage(StageOldValue, OldOwnerId, Entity);
   }
  }

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

Зверев Александр,

 

К сожалению настройка "DisableOldOpportunityStageSynchronizers" по умолчанию включена, значит синхронизацию стадий реализовали в другом совершенно методе, возможно даже через какой-то бизнес процесс, так как весь метод только начавшись заканчивается сразу return. Так и не нашел как. Самое интересное:

- во первых, что проблема появилась после обновления с 7.12.4 до 7.15.2 (да, много пропустили потому массово пришлось обновлять), на 7.12.4 проблемы не было

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

 

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

А в кейсах для этого раздела проверяли, может, логика там реализована?

 

Если есть доступ к базе, проверьте, что за записи в момент такого поведения появляются в SysProcessLog и SysProcessElementLog, там видно все выполняющиеся процессы (включая кейсы) и шаги.

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