Добрый день!

Можно ли как-то убрать из Центра уведомлений информирование о том, что кто-то прокомментил ваше сообщение?

Это позволит меньше отвлекаться на Центр уведомлений и больше сидеть в ленте, и уберёт часть дублей сообщений в Ленте и в Центре

Нравится

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

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

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

Shevchenko Andrey,

Спасибо.

Подскажите пожалуйста, как скрыть из коммуникационной панели "Задачи по бизнес-процессам"? Есть ли такая возможность?

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



На данный момент, скрыть данную вкладку пользовательскими средствами, возможности нет.

Такое пожелание уже зарегистрировано.

Настоятельно не рекомендую Вам скрывать данную вкладку, так как она отображает активности по процессам.

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

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

Коллеги, здравствуйте.

Возник вопрос:

Как при помощи БП или есть ли какие-то другие возможности реализации, после перевода объекта лид на стадию дисквалифицирован (дис)квалификации ЛИДа, сделать карточку объекта ЛИДА нередактируемой.

Заранее спасибо!

Нравится

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

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

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

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

Логвин Андрей Витальевич,

Сидоров Александр Валерьевич,

Коллеги, спасибо! Но тогда таким образом я заберу права у пользователей и в дальнейшем у них не будет возможности работать с обьектом ЛИДов. 



Хотелось бы реализовать такую возможность, чтобы права были, но после определённой стадии работа с лидами блокировалась.

Роман, по этому поводу есть статья на SDK - https://academy.terrasoft.ru/documents/technic-sdk/7-11/kak-polnostyu-z…

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

Добрый день!



Кто-нибудь настраивал получение данных из Google form (по аналогии лидов из Landing page)?



В целом, JS в среде Google Script выполняется (GS это, по сути, несколько доработанный JS). Но так как код выполняется не в браузере, в на сервере Google, то о таких объектах как "document", "window" можно забыть, ибо их просто нет. 

А так как стандартный скрипт BPMOnline расчитан на исполнение именно в браузере, он использует массу таких вот несовместимых с Google Script моментов.



То есть тут либо тот же функционал реализовывать на Google Script (но тогда нужна хотя бы спецификация того, что ожидает BPMOnline, ибо реверс-инженерить хоть и можно, но очень уж долго), либо какой-то корректный workaround





Или есть другие варианты?

Нравится

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

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

GoogleForms пишет ответы пользователей в GoogleSheets, а у GoogleSheets есть api по которому можно считать данные.

https://developers.google.com/sheets/api/guides/values

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

Добрый день.

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

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

Как обычно решаются такие вопросы?

Нравится

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

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

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

- Выбрать [Действия системы]-[Добавить данные], где установить соответствующие фильтры (скриншот 2).

       Предварительно следует добавить нужные контакты в определенную роль.

 

Добрый день, Максим. Спасибо за ответ.

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

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

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

Как-то это можно настроить?

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

Предлагаю Вам следующее решение (скриншот 1):

1. Создать необходимую активность (скриншот 2);

2. Добавить всех участников отдела (скриншот 3);

3. Воспользоваться промежуточным событием [Обработка сигнала], при переводе активность в другое состояние (скриншот 4);

4. Убрать активность из расписания участников (скриншот 5), закрепив ее только за сотрудником, который взял задачу в работу (скриншот 6).

Вы можете сами кастомизировать данное решение на основании Ваших потребностей.

 

Максим, спасибо за подробный ответ!

Идея понятна, надо пробовать.

Добрый день. Мне подсказали еще один вариант реализации через очереди и единое окно:

1. Добавить в активность поле "Организационная единица" (ссылка на подразделение)

2. При создании задачи из процесса заполнять это поле нужным подразделением, а отвветственного оставлять пустым.

3. Настроить очереди с отбором по значению подразделения из активности

Например:

а) "Очередь бухгалтерия (активность.подразделение = бухгалтерия)

б) "Очередь Отдел продаж МСК (активность.подразделение = Отдел продаж МСК)

В очередях указать в командах указать пользователей каждого отдела

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

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

Подскажите, пожалуйста, чем плох этот вариант относительно ранее предложенных? Это лучшее решение или наоборот?

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

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

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

Коллеги, здравствуйте. 

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

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

Заранее спасибо!

 

Нравится

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

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

Бизнес-процес для вашей ситуации может выглядеть следующим образом (скриншот 1):

1.Для запуска БП, начальным событием будет сигнал от обьекта, в нашем случае это "Добавление нового контрагента" (скриншот 2);

2.С помощью действия системы [Изменить данные], мы ищем нашего нового контрагента по Id, и устанавливаем ему 

значение поля "Тип контрагента" - Клиент (скриншот 3).

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

Для этого Вам нужно:

1. Перейти в [Управление конфигурацией](скриншот 4);

2. Выбрать вкладку [Конфигурация];

3. Дальше [Схемы]-[Добавить]-[Замещающий обьект] (скриншот 5);

4. В Структуре выбрать "UsrEntity1", в свойствах [Родительский обьект] указать "Контрагент" (скриншот 6);

5. Затем в структуре перейти на вкладку [Type] - [Поведение]-[Значение по умолчанию]-[Установить константу] и в поле выбора значения

выбрать неоходимое (скриншот 7).

Роман,

У поля "Тип" объекта "Контрагент" можете выставить свойство "Значение по умолчанию", равное значению "Клиент".

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

 Добрый день!



Возникла необходимость указания значений кастомных колонок при создании активности элементом "Выполнить задачу". Нужно, чтобы сразу при открытии пользователю карточки этой активности там уже были нужные значения в пользовательских колонках (На основе их будет приниматься решение о состоянии активности). Как я понял, пользовательскими средствами это сделать нельзя, нужно использовать мини-сценарий "После сохранения активности" в расширенном режиме. После этого я столкнулся с проблемой, которую описывает Михаил в посте https://community.terrasoft.ru/questions/vypolnit-zadacu-i-dobavit-dann…;то есть ограниченность контекста выполнения этого скрипта. На данный момент у меня не получается заставить работать даже простой



 

var userConnection = Get<UserConnection>("UserConnection");

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



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

Нравится

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

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

Не совсем понятно, зачем выполнять все эти действия, если можно просто добавить связи для Ваших колонок, как описано в комментарии, и предзаполнять поля в самом элементе.

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

Логвин Андрей Витальевич,

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



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

Андронов Олег Алексеевич,

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

Но если Вы всё же хотите именно в рамках сценария После сохранения Активности, то алгоритм примерно следующий:

Создать параметр процесса, заполнить, передать его в Контекст выполнения в Выполнить задачу, а в сценарии обращаться напрямую к параметру:

var TitleFromExecutionContext = ExecutionContext;//Здесь в ExecutionContext передали ранее параметр процесса

var update = new Update(UserConnection, "Activity")

        .Set("Title", Column.Parameter(TitleFromExecutionContext)).

        Where("Id").IsEqual(Column.Parameter(CurrentActivityId));

        update.Execute();

 

Удачи в реализации.

Андронов Олег Алексеевич,

Доброго дня, скажите, получилось ли решить Вашу задачу? Каким способом?

У меня сейчас такая же, и это совсем беда))

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

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

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

{
  "operation": "insert",
  "name": "UnBindedField",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 0,
      "row": 2,
      "layoutName": "CategoriesControlGroupContainer"
    },
    "itemType": Terrasoft.ViewItemType.CONTAINER,
    "enabled": true,
    "contentType": 0,
    "classes": {
           "wrapClassName": ["control-width-15", "control-right"]
           },
    "items": [
      {
        "className": "Terrasoft.Container",
        "caption" : "TestCaption_3",
        "itemType": Terrasoft.ViewItemType.CONTAINER,
        "classes": {
             "wrapClassName": ["label-wrap"]
             },
        "items": [{
              "className": "Terrasoft.Caption",
              "caption" : "TestCaption_3",
              "itemType": Terrasoft.ViewItemType.LABEL
            }]
      },
      {
        "className": "Terrasoft.TextEdit",
        "name": "UnBindedField_TextEdit",
        "itemType": Terrasoft.ViewItemType.CONTAINER,
 
      }
    ],
    "className": "Terrasoft.Container"
  },
  "parentName": "CategoriesControlGroupContainer",
  "propertyName": "items",
  "index": 4
}

визуально он удовлетворяет требованиям, но уж больно сложное объявление, и конечный контрол с текстом имеет название "AccountPageV2UnBindedField_TextEditContainer-el", что тоже не сильно красиво. 

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

Нравится

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

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

Если вам не подходит привязка даже к виртуальному полю, тогда это единственный способ. По сути, при указании поля тоже самое генерируется за вас и передаться во viewgenerator, если вы опускаете поле – придется делать это руками. Имена тоже генерируются во viewgenerator (он сам добавляет суффиксы, префиксы). Также, если вы планируете писать/читать из этого контрола, рекомендую использовать привязку к виртуальному полю вместо ручной генерации.

VladKapitanchyk,

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

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

Как создать сам грид можете посмотреть в BaseSectionV2. Заполнение происходит через миксин GridUtilitiesV2, так что можете в своей схеме переопределить метод loadGridData.

VladKapitanchyk,

Спасибо

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

Всем, привет!

Можно ли поменять цвет шрифта всей системы? 

Если да, то где это нужно делать?

 

Нравится

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

Роман, можно попробовать переопределить CommonCSSV2 и в нем дописывать нужные стили для страниц, в вашем случае, например, цвет шрифта.

Можно создать новый модуль с определенными LESS стилями и в модуле, которые грузится на всех страницах системы дописать зависимость на ваш модуль. Только ваш модуль в зависимости других модулей нужно записывать в стил css!имя_вашего_модуля.

Чтоб разобраться, можете почитать тут:

https://academy.terrasoft.ru/documents/technic-sdk/7-11/ispolzovanie-polzovatelskogo-elementa-terrasoftalignablecontainer

https://community.terrasoft.ru/questions/dobavlenie-kastomnyh-css-stilei

Там немного другие вопросы, но зато обьясняется как работать с модулями со стилями CSS.

Также советую тут посмотреть:

https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-mini-kartochki

По этой ссылке есть раздел "5. Выполнить стилизацию мини-карточки", где написано как подключить свои стили.

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

Коллеги, привет!

Кто как решает проблему импорта "больших" данных в облачную CRM?

Нам нужно загрузить 1 000 000 записей в таблицу, при этом стандартные средства импорта ограничивают размер импортируемого файла 10 мб. В моём случае получается 4 файла по 250 000 записей. В принципе, преемлимо, но импорт длится вечность - ещё не удалось загрузить не 1. При этом ТП говорит, что загружать больше 50 000 записей за раз не рекомендуется. Это 20 операций импорта. Разве это промышленное решение?

Нравится

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

Здравствуйте, Вадим

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

Как вариант Вы можtnt разработать интеграцию с помощью Odata или DataService описаных в статье Академии Террасофт по ссылке https://academy.terrasoft.ru/documents/technic-sdk/7-11/integraciya-s-s… и "перегонять" данные с помощью данной интеграции.

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

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

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

Новак Руслан пишет:

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

Хороший вариант для приложения на Marketplace 

Коллеги, каким образом обеспечить проверку на уникальность импортируемых записей, в случае с o'Data?

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

Данный вопрос можно решить несколькими способами:

1. На объекте можно добавить обработчик на событие "Перед добавлением записи" и в елементе "задание сценарий" реализовывать нужную проверку.

2. Добавить тригер на добавление записи в БД.

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

VladKapitanchyk,

Спасибо!

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

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

Помогите пожалуйста с решением задачи: "При выборе значения для справочного поля контакта, нужно добавить поле «Средства связи». При вводе значения в поле, система будет фильтровать контакты по детали средства связи"



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

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



Есть вопросы:

1. Что бы сделать "копию" LookupPageV2, достаточно повторить LookupPageV2, LookupPageViewGenerator и LookupPageViewModelGenerator?

2. Как перехватить открытие базового окна выбора из справочника и открывать свое "UsrLookupPageV2"?

3. Возможно есть более простое\оптимальное решение данной задачи?

Нравится

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

Добрый день.

  1. Нужно сделать override класса LookupPage, и заместить LookupPageViewGenerator, LookupPageViewModelGenerator.
  2. Через BootstrapModulesV

Создаете модуль

define("UsrLookupPage", ["LookupPage"],
 
    function() {
 
        Ext.define("Terrasoft.LookupPageOverrided", {
 
            override: "Terrasoft.LookupPage",
 
 
 
method: function() {
 
                               // code                }
 
        });
 
    }
 
);

Замещаете схему BootstrapModulesV2.

define("BootstrapModulesV2", ["UsrLookupPage"], function() {
 
                return {};
 
});
  1. К сожалению, нет.

 

Добавлю, что LookupPageViewGenerator и LookupPageViewModelGenerator нельзя изменить частично, его нужно полностью переписать, т.е. вы должны будете продублировать весь функционал и внести изменение там, где нужно. Но при обновлении что-то может сломаться, так как базовый модуль (возможно обновленный) не будет загружен.

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