Как в карточку контакта добавить Продукт. Цель - при открытии Истории контакта, чтобы было видно, какие продукты им покупались. (при добавлении детали - в итоге она не отображается.... возможно, неверные привязки "Колонка детали" и "Колонка объекта"?...

Нравится

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

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

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

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

Шаги воспроизведения:

Сайт клиента:

Версия:7.11(onsite)



Здравствуйте подскажите, как решить кейс:

Проблема в том, что расширенный фильтр перебивает,  фильтр определенный  в initQueryFilters.







   //Системный метод в котором задаются условия фильтрации реестра

           initQueryFilters: function(esq) {

                     this.callParent(arguments);

                 

                    //Задаем тип фильтрации

                    esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.OR;



                   //Фильтр по владельцу

                    var filter = Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL,"Owner", userId);

                    esq.filters.addItem(filter);



                    //Фильтр по типу

                      filter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"Type", tDebt);

                      esq.filters.addItem(filter);

                   }

              

                                      

            },

Нравится

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

Добрый день

Роман, для того, чтобы фильтр не перебивал нужно изменять поведение работы расширенного фильтра. Каким образом это сделать - решать вам. Как идея: организовать обмен сообщениями между модулем фильтрации и модулем реестра таким образом, чтобы модуль реестра отдавал свою настроенную фильтрацию, а расширенный фильтр ее к себе применял

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

Здравствуйте! При написании кода в "сценарии" бизнес-процесса, и попытке его отладить, увидел следующую "особенность". Вот код запроса данных:

 

var esqResult = new EntitySchemaQuery(userConnection.EntitySchemaManager, "City");

            esqResult.AddColumn("Name");

            esqResult.AddColumn("CreatedOn");

            esqResult.AddColumn("ModifiedOn"); 

            esqResult.AddColumn("Country");

            esqResult.AddColumn("Country.Code");

            esqResult.AddColumn("TimeZone");

            esqResult.AddColumn("TimeZone.Code");

            var entities = esqResult.GetEntityCollection(userConnection);

Но вот запрос, категорически не хочет видеть мое поле "Code" поля "Country", вот типа того.Изображение удалено.

Нравится

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

Приветствую, Александр!

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

А также, какой обьект Вы исследовали?

Спасибо.

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

Есть sql-запрос вида:

select *

from Table T

where T.ProjectId = @ProjectId

    and not exists (select * from Table T1

                    where T1.ContactId = @ContactId

                        and T1.ParameterId = T.ParameterId)

Использование метода CreateFilterWithParameters() позволяет построить параметризированный запрос, но только exists:

var esqCardBlock = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Table");

esqCardBlock.AddAllSchemaColumns();

var CardBlockFilters = esqCardBlock.Filters;                  CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "Project", projectId));                CardBlockFilters.Add(esqCardBlock.CreateFilterWithParameters(FilterComparisonType.Equal,

                        "[Table:Parameter:Parameter].Contact", contact));

Если же использовать CreateNotExistsFilter(), то не понятно, куда добавлять значение параметра @ContactId.

Какой всё-таки метод использовать для построения параметризированного запроса Not Exists?

Нравится

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

Алла, возможно, такое получится при помощи выставления группе фильтров свойства .IsNot = true;

Как тут:

			var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Activity");
			esq.AddAllSchemaColumns();
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Owner", currentUserId));
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "ModifiedOn", LastSyncDate));
			if (IsFirstSync) {
				esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Greater, "DueDate", Today));
			}
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ShowInScheduler", true));
			var filtersByExisting = new EntitySchemaQueryFilterCollection(esq);
			filtersByExisting.IsNot = true;
			var notExFilter = esq.CreateFilterWithParameters(
				FilterComparisonType.IsNotNull,
				"[ActivityCorrespondence:Activity].SourceActivityId");
			filtersByExisting.Add(notExFilter);
			filtersByExisting.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
				"[ActivityCorrespondence:Activity].SourceAccount.Id", SourceAccountId));
			esq.Filters.Add(filtersByExisting);
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.LessOrEqual, "CreatedOn", CurrentSyncDateTime));
			var entityCollection = esq.GetEntityCollection(UserConnection);

 

Саша,

спасибо за ответ. Я тоже уже думала так сделать, попробую и напишу о результате smiley

Саша,

таким способом, как ты предложил, получилось построить нужный фильтр.

Ещё вопрос: почему в документации на академии написано, что метод CreateFilterWithParameters перегруженный https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-vych…;Что имеется ввиду?

Алла, у меня по этой ссылке нет слов «перегруженный»  и «CreateFilterWithParameters».

Ошибка, речь идет об этой ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-en…

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

А подскажите, пожалуйста, есть ли аналог ".IsNot = true" в entitySchemaQuery на стороне клиента?

И если нет, то как по другому в js можно построить подобный фильтр?

См. верхний ответ тут.

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

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

Нужно иметь опций настройки в Профиле пользователя:

  - автоматическая отметка прочтения уведомление

  - ручная отметка

 

Если ручная, то под уведомлений добавить кнопку, переводящую уведомление в прочтенное.

 

 

Нравится

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

Здравствуйте, Роман

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

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

Как увеличить значение на 1 в огромной таблице, такое не работает, кто может подсказать решение?

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

var update = new Update(userConnection, "Contact")

    .Set("UsrtLastCallCountDay", new Select(userConnection).Top(1)

        .Column("CurrentContact", "UsrtLastCallCountDay")

        .From("Contact").As("CurrentContact")

        .Where("CurrentContact", "Id").IsEqual("Contact", "Id") + 1)

   .Set("UsrtLastWinCallCountDay", new Select(userConnection).Top(1)

        .Column("CurrentContact", "UsrtLastWinCallCountDay")

        .From("Contact").As("CurrentContact")

        .Where("CurrentContact", "Id").IsEqual("Contact", "Id") + 1);

update.Execute();

return true;

Нравится

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

Обычно увеличение или уменьшение значения колонки на число в update делают наподобие такого:

var purchaseId = Entity.GetTypedColumnValue<Guid>(purchaseColumnValueName);
Update productInPurchaseUpdate = new Update(UserConnection, "ProductInPurchase")
	.Set("Position", Column.SourceColumn("Position") - Column.Const(1))
		.Where("Position")
			.IsGreater(Column.Parameter(Entity.GetColumnValue("Position")))
		.And("PurchaseId")
			.IsEqual(Column.Parameter(purchaseId)) as Update;
productInPurchaseUpdate.Execute();

 

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

благодарю, не знал о подобном

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

Добрый день.

Есть задача. Нужно связать 2 справочника - значение в одном должно точно соотноситься со значением во втором. Вопрос не в фильтре, а в том, как сделать автоматическое заполнение второго справочника при выборе значения в первом. Можете подсказать как это реализовать (желательно бизнес процессом, т.к. в программировании не силен)?

Заранее благодарен.

Нравится

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

Добрый день, Станислав!

Опишите на примере ваш кейс. Насколько я понимаю это будет 2 разных справочника с разными значениями, так ? 

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

Станислав, первое что приходит на ум это при создании справочника добавить поле, которое будет связующим. Например

1) Слово, код слова

Во втором справочнике так же

2) Слово, код слова

Где "код слова" буде одинаковым в обоих справочниках.

 

Далее с помощью бизнес процесса выполнить заполнение поля.

БП будет состоять примерно из следующих элементов: 

1) Сигнал на изменение объекта/колонки объекта

2) Чтение данных

3) Изменение данных

4) Завершение БП

Либо выполнить необходимое заполнение с помощью фильтрации

https://academy.terrasoft.ru/documents/technic-sdk/7-11/primenenie-filt…

https://academy.terrasoft.ru/documents/technic-sdk/7-11/primer-primenen…

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

Добрый день, друзья. Создал раздел "Счета" и добавил деталь "Активности Email". Теперь пытаюсь отфильтровать ее, чтобы пропускала только активности с этим типом. Но, когда я добавил фильтр метод, то деталь исчезла вообще из страницы. Прикрепил скрины. Подскажите юному падавану что он делает не так.

Изображение удалено.Изображение удалено.

Нравится

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

Добрый день

Вы выводите все E-mail? Консоль содержит какие-либо ошибки?

 

Артем Гура,

Извините за беспокойство, забыл добавить 

BusinessRuleModule. Теперь все работает, вопрос закрыт.

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

Задание: В карточке в вкладке есть 2 детали(А и Б)

Нужно что бы при выборе записи из детали А обновлялся реестр на детали Б.

Пытался Делать через "filterMethod": "OnLotPeriodInTendersFilter"

и по событию обновлять реестр Б, но OnLotPeriodInTendersFilter Запускается только раз, и при reloadGridData() в детали Б Новы й фильтр не подтягиватся... Подскажите как решить данное бизнес-задание

Нравится

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

Добрый день

Вам нужно при выделении записи делать publish сообщения для другой детали. А в детали "А" сделать subscribe и обновлять все, что вам нужно

Добрый день Виталий.

Советую найти и разобраться как работают детали "BaseOneToManyGridDetail", "BaseManyToManyGridDetail". Именно взяв за основу одну из них можно решить вашу задачу. Поискать примеры можно в конфигурации BPMOnline Service Enterprise. Там есть готовые и реализованные примеры. 

Артем Гура,

Это понятно, не могу найти где именно можно применить новый фильтр

Власов Михаил Викторович,

буду искать

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

Всем доброго времени суток. Версия 7.11.

В бизнес-процессе в рамках задания-сценария создаётся запись в разделе. После чего необходимо создать ещё ряд записей на детали внутри карточки этой записи.

Привязка на деталь осуществляется по id основной записи. Обычно в таких случаях на клиенте создаётся свой guid через функцию Terrasoft.generateGUID();, который затем в insert прописывается в колонку Id также, как и любая другая колонка.

Есть ли аналог этого в сценариях БП?

Нравится

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

Денис, здравствуйте.

Для этих целей есть метод Guid.NewGuid(), подробнее можно найти по ссылке.

Пример использования : 

var contactId = Guid.NewGuid();

Андрей, спасибо! Частично помогло.

Частично - потому что записать сгенерированный таким образом newGiud в другой объект в колонку-справочника невозможно. Возникает ошибка: System.ArgumentException: Отсутствует сопоставление типа объекта Terrasoft.Core.DB.QueryColumnExpression с известным собственным типом управляемого поставщика.

Соответственно вопрос: есть ли callback у insert.Execute(); ? Чтобы можно было гарантированно вызвать продолжение функции уже после того, как запись с id newGiud создана в базе.

Денис

Скорее всего вам не надо создавать новый guid. После создания записи вам надо прочитать в процессе ее id и уже затем использовать его в записях детали.

например

var Id = item.GetTypedColumnValue<Guid>("Id");

Пример можно глянуть здесь https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-zapuskat-pr…

 

Денис,

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

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