Вопрос

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

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

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

У меня такой же вопрос

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

Добрый день. А администрирование по полям эту задачу не решают?

Иванов Александр А.,

... ну да, получается, что определённые колонки должен видеть только owner... правами надо заморочиться, чтобы такое сделать... к примеру прицепить событийный процесс "Перед сохранением", в котором пользователю из колонки Owner раздать права на чтение колонок, а остальным как-то запретить. Не доводилось подобных задач решать, но, может, как вариант...

 

Добрый день!

Если я правильно понял вопрос, то можно попробовать вклиниться в формирование грида (onGridDataLoaded в GridUtilitiesV2) и кодом делать соответствующие проверки и не показывать ненужные колонки.

Тёскин Дмитрий Валерьевич,

не помогло, к сожалению. Разобрал onGridDataLoaded и связанные функции, как я понял непосредственно генерация таблицы происходит в

addItemsToGridData, то есть в gridData.loadAll(dataCollection, options);

Для примера перед этим в prepareResponseCollectionItem там, где происходит перебор всей коллекции, добавляю

 if (!item.values.Address){
                    item.values.Address = "test";
                }

Просто ради теста. То есть если у меня колонка Адрес (выведена на страницу) пустая, то должно быть отображена строка "test". Это намного проще даже, чем проверка id пользователей.

И всё равно ничего не происходит - на странице загружаются по прежнему пустые блоки (и адреса, если они заполнены). При этом если вывести console.log(dataCollection); уже внутри addItemsToGridData, то есть непосредственно перед генерацией, там будут мои правки.

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

Возможно ли выполнить транспонирование таблицы в отчете / печатной форме? Т.е. поменять местами строки и столбцы, чтобы при создании шаблона детали, записи из этой детали добавлялись не вниз (как строки), а в бок (как столбцы).

У меня такой же вопрос

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.
Необходимо установить сортировку данных пользовательского раздела по умолчанию по определённому полю объекта.
В BaseSectionV2 используются атрибуты: "sortColumn", "SortColumnIndex", "GridSortDirection".

Так же в свойствах объекта есть свойство "Сортировка в списках".

Но установка значений этих атрибутов и свойства не решила задачу.

Прошу подсказать как решить данный кейс

У меня такой же вопрос

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть обьект "Контакты". По которым приходят уведомления в панель CTI.

Скажем если в обьекте "Контакты" есть поле X в котором можно выбирать значения от 1 - 5.

Вопрос: Можно ли отображать иконку с номером в зависимости от того какое значение выбрано в поле X?

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

 

У меня такой же вопрос

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

Добрый день, 

Да, можно отобразить иконку с номером в зависимости от того, какое значение выбрано в поле Х.

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

После создать замещающий клиентский модуль, где в качестве родительского необходимо указать CtiPanelCommunicationHistoryUtilities (Модуль истории звонков CTI панели). И необходимо переопределить следующие методы: 

addCommunicationHistoryQueryColumns - необходимо добавить поле Х контакта, для того чтобы иметь возможность вычитывать значения этого поля.

getHistoryPanelConfig - тут необходимо реализовать собственную логику отображения иконки. В базовой версии: Photo: historySubscriber.get("ContactPhoto").value устанавливается фото контакта. 

 

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

Добрый день Коллеги!

Появилась необходимость реализовать отдельную сортировку по умолчанию в Grid'е детали.

Итак немного отсылки о детали. Деталь содержит в себе записи относящиеся к справочной колонке "Объект администрирования". Грубо говоря есть 4ре отдела и есть неограниченное количество пользователей, которые так или иначе входят в эти отделы (отдел - организационный юнит).

Так вот при клике на + у детали всплывает справочник этих сущностей, где пользователь может выбрать как отделы так и других пользователей. 

После этого происходит стандартное добавление выбранных записей в деталь.

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

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

Так же что-то удалось найти в diff на BaseGridDetail который соответствует сортировке, но как-то это тоже ни к чему не привело.

Есть мысль что при загрузке коллекции в методе onGridDataLoaded получать коллекцию и при помощи underscore.js сортировать её как угодно, но вроде как это накладно и производительней было бы получить уже отсортированную коллекцию.

У кого какие предложения/идеи будут по данному посту?

У меня такой же вопрос

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

Добрый день. Не очень понял, а почему "я уперся в GridUtilites и решил дальше не лезть"? Можно же функцию из миксина переопределить в схеме самой детали, сославшись на родительскую, если нужно, через this.mixins.GridUtilitiesV2.... . На вскидку, вроде надо "допилить" initQuerySorting ???

типа такого:

 

initQuerySorting: function(esq) {

    this.mixins.GridUtilitiesV2.initQuerySorting(esq);

    /* далее какие-то ваши действия с esq */

}

 

Или наоборот, сначала - ваша сортировка, потом - родительский метод.

Иванов Александр А.,

Да, спасибо. Мы уже разрешили проблему. Если интересно могу поделиться кодом.

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

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

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

И вот тут возникает вопрос: как оба сервера корректно настроить? У меня, например, есть сигнал на добавление записи. Не сработает ли этот сигнал на обоих серверах приложений одновременно, или не на том? Как с этим работать? Ведь все сохраняется в одной базе.

У меня такой же вопрос

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

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

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

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

Добрый день, при попытке удаление какой либо записи с правами Supervisor'а в консоли браузера появляется строка "Метод handler устарел. Вместо него используйте click event" а в случае подтверждения удаления "Метод onDeleteAccept устарел. Вместо него используйте onMultiDeleteAccept". Удаление не происходит, появляется диалоговое окно "Удаление произошло с ошибкой, обратитесь к системному администратору". Кто-то сталкивался с подобной проблемой?

P.s. система стоит на Win Server 2008R2 который не поддерживает web-сокеты, но я не думаю что с обновлением bpm отказался от поддержки sw-сокетов совсем.

У меня такой же вопрос

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

Вопрос решился настройкой Web.config оказывается после обновления его надо заново настраивать

Сафронов Иван Александрович пишет:

Вопрос решился настройкой Web.config оказывается после обновления его надо заново настраивать

А вы просто подменяли конфиг от предыдущей версии что-ль? Так не будет работать, поскольку в конфигах есть ссылки на асембли новых версий.  

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

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

Можно ли одну и ту же деталь выводить на разных страницах под разными заголовками?

У меня такой же вопрос

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

Здравствуйте, Денис!

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

Необходимо в схеме детали в секции diff написать:

diff

diff: /**SCHEMA_DIFF*/[
{
   "operation": "merge",
   "name": "Detail",
   "values": {
      "caption": {"bindTo": "getDetailCaption"}
   }
}
]/**SCHEMA_DIFF*/

А в методе уже анализировать имя карточки, в которую загружена деталь, и менять caption на необходимый, к примеру, так:

methods

getDetailCaption: function() {
   var cardPageName = this.get("CardPageName");
   if (cardPageName === "ActivityPageV2") {
      return "Name 1";
   }
   return "Name 2";
}

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

OpportunityContactDetailV2

/**
 * Устанавливает заголовок детали в зависимости от открытой страницы.
 * @protected
 * @return {String}
 */
getDetailCaption: function() {
   var cardPageName = this.get("CardPageName");
   if (cardPageName === "OpportunityPageV2") {
      return this.get("Resources.Strings.InOpportunityCaption");
   }
   return this.get("Resources.Strings.InContactCaption");
},

Юлия, спасибо.

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

Коллеги, добрый день.

 

Столкнулся с такой проблемой. При совместной разработке функциональности вовлечены как кастомизаторы, так и разработчики. Разработчики делают правки через код схемы страницы, а кастомизаторы пользуются визардами страниц редактирования.

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

 

У меня такой же вопрос

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

О, да! И мне постоянно на это отвечала поддержка, что этого не может быть :)

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

а поддержка случайно не предлагала какие-то воркэраунды?

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

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

subscriber: {
   "methodName": "sendSaveCardModuleResponse"
}

где sendSaveCardModuleResponse имя метода.

Терещук Сергей,

оО! Спасибо! Помогло.

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

Интересует возможность разнесения базы на файловые группы для разнесения групп на разные жёсткие диски (разный объем и скорость).

Есть ли в ВРМ встроенная возможность создавать определенные таблицы, например xxxFile на определенной файловой группе? И вообще, есть ли возможность управлять созданием таблиц на файловых группах?

Есть ли у кого-то положительный опыт разнесения базы на ФГ?

У меня такой же вопрос

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

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

Войдите или зарегистрируйтесь, чтобы комментировать