Вопрос

Как сделать обязательным поле "Решение" карточки обращение?

Ответ

Проблема состоит в том, что HTML-контролл типа RICHTEXT, которым является поле "Решение" не поддерживает  функциональность бизнесс-правил. 

Однако, можно использовать обходное решение. Переопределить метод save() и в нем проверять заполнено ли указанное поле, например вот так:

save: function () {
    if (this.get("Solution")) {
        this.callParent(arguments);
    } else {
        this.showInformationDialog("Необходимо заполнить поле решение");
    }
}

 

Нравится

Поделиться

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

Вопрос

Как на страницу "Контакты" можно добавить элемент-меню с флажком, такой, как на странице "Продажи", по которому можно создавать активности выбранного типа в привязке к разделу "Контакты" ?

Ответ

Для того, чтобы добавить кнопку "Связанная активность" необходимо в замещенной страницы редактировании (например,"ContactPageV2") и вставить метод:

​​​​​​​/**
 * Получает признак отображения меню добавления.
 * @overridden
 * @return {Boolean}
*/
    getAddButtonMenuVisible: function() {
        return true;
    },

Примерно должно выглядить как изображено на рисунке 1.

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

Рис .1

Затем очистите кэш. В результате кнопк отобразиться (Рис. 2).

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

Рис. 2

Хотелось бы отметить, что Вы можете добавлять активности через деталь "Активности" (вкладка "История") (Рис. 3).

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

Рис. 3

Нравится

Поделиться

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

Вопрос

После синхронизации с MS Exchange в системе задвоились активности. Как справиться с этой проблемой?

Ответ

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

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



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

Нравится

Поделиться

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

Столкнулись с этой же проблемой

При создании в Outlook записи календаря с типом "Собраниие" в BPM создавалась активность и при синхронизации возвращалась в Outlook всем участникам кроме организатора с типом записи календаря "Встреча" и возвращалась в BPM новой активностью и так столько раз, сколько было ответов участника со статусом "Is Doubt".

Включение фичи CheckAppointmentDuplicatesByContent помогло избавиться от дублей в BPM.

В BPM создается одна активность, ответ всех участников активности в таком случае "Confirmed" даже если в Outlook встреча не подтверждена.

Но в календарь участников все-равно возвращается из BPM дубль с типом записи календаря "Встреча"

Версия BPM 7.13

Exchange в облаке office365

Может у кого есть идеи как полностью решить проблему с дублями?

Судя по тому, что требуется включение фичи, разработка этой функции ещё не завершена и она является экспериментальной. Нужно смотреть логику в схеме ExchangeAppointment, где это реализовано.

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

Симптомы

Uncaught TypeError: Cannot read property 'PrimaryColumnName'

Причина

Добавлен раздел "Продукты" через мастер мобильного приложения

Решение

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

Необходимые условия и возможные ограничения

Права администратора

Нравится

Поделиться

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

Симптомы

Настраиваю мобильное приложение, все объекты работают,кроме Активностей, при попытке зайти в Активность выходит сообщение:Uncaught TypeError:Cannot read property “modelName”

of undefined. Пробовала все колонки удалить, заново добавить, думала проблема в колонке Тип, не помогло ее удаление (после изменения настроек, заново раздавала права пользователям, чистила кэш и заново проводила синхронизацию с базой).

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

Решение

В карточке активности была убрана часть полей, а главное – убрана деталь «Участники активности». Почему «главное». На эту деталь есть завязки при работе самого раздела. В частности, по умолчанию, когда при синхронизации забираются активности из bpm’online, то забираются только те активности, в детали «Участники активности» которых есть текущий пользователь.

Как раз из-за того, что была удалена группа колонок «Связи» и деталь «Участники», возникала ошибка, поскольку мы на них завязались. 

Убрав эту деталь, возможно, не будут «правильно» забираться активности.

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

Создать кастомную схему (Исходный код) (например, "MobileUtilitiesCustom")

Ext.define("Terrasoft.sdk.RecordPageMetadataApplier.Override", {
 
                override: "Terrasoft.sdk.RecordPageMetadataApplier",
 
 
 
                addEmbeddedDetail: function(modelName, operation) {
 
                               this.embeddedDetails[operation.name] = operation.values;
 
                               var values = operation.values;
 
                               var filter = values.filter;
 
                               var detailName = operation.name;
 
                               Terrasoft.sdk.RecordPage.addEmbeddedDetail(modelName, {
 
                                               name: detailName,
 
                                               title: values.caption,
 
                                               position: values.position,
 
                                               modelName: values.entitySchemaName,
 
                                               primaryKey: filter.masterColumn,
 
                                               foreignKey: filter.detailColumn,
 
                                               hidden: values.hidden
 
                               });
 
                },
 
 
 
                applyMetadata: function() {
 
                               this.callParent(arguments);
 
                               for (var itemName in this.removedMetadataItems) {
 
                                               if (!Terrasoft.util.isGuid(itemName) && Terrasoft.util.String.contains(itemName, "EmbeddedDetail")) {
 
                                                               this.addEmbeddedDetail(this.modelName, {
 
                                                                              name: itemName,
 
                                                                              values: {
 
                                                                                              entitySchemaName: itemName.substring(0, itemName.indexOf("Detail")),
 
                                                                                              filter: {
 
                                                                                                              masterColumn: "Id",
 
                                                                                                              detailColumn: "Id"
 
                                                                                              },
 
                                                                                              hidden: true
 
                                                                              }
 
                                                               });
 
                                               }
 
                               }
 
                }
 
});
 
 
 
Terrasoft.sdk.RecordPage.configureColumn = function(model, columnSetName, columnName, columnConfig) {
 
                var modelConfig = Terrasoft.ApplicationConfig.getModelConfig(model);
 
                var columnSetConfig = modelConfig.columnSets.get(columnSetName);
 
                if (!columnSetConfig) {
 
                               return;
 
                }
 
                var columnSetColumns = Terrasoft.sdk.RecordPage.getColumns(model, columnSetName);
 
                if (!columnSetColumns) {
 
                               return;
 
                }
 
                var columnSetColumn = columnSetColumns.get(columnName);
 
                var columnOriginalConfig;
 
                if (columnSetColumn) {
 
                               columnOriginalConfig = columnSetColumn.columnOriginalConfig;
 
                } else {
 
                               columnOriginalConfig = {};
 
                               columnConfig.hidden = true;
 
                               var modelInstance = Ext.ClassManager.get(columnSetConfig.modelName || model);
 
                               var realModelColumnConfig = modelInstance.ColumnConfigs.get(columnName);
 
                               columnConfig.columnType = realModelColumnConfig.columnType;
 
                               columnConfig.name = columnName;
 
                }
 
                Ext.merge(columnOriginalConfig, columnConfig);
 
                var contextModel = columnSetConfig.modelName || model;
 
                if (columnConfig.hidden) {
 
                               var columns = this.getColumnSetColumns(model, columnSetName);
 
                               columns.remove(columnName);
 
                } else {
 
                               var resolvedColumnConfig = this.resolveColumnConfig(contextModel, columnOriginalConfig,
 
                                                               !!columnSetConfig.modelName);
 
                               columnSetConfig.columns.configure(columnName, resolvedColumnConfig);
 
                }
 
};
 
 
 
Terrasoft.sdk.RecordPage.addColumn = function(model, columnConfig, columnSetName) {
 
                var modelConfig = Terrasoft.ApplicationConfig.getModelConfig(model);
 
                if (!columnSetName) {
 
                               columnSetName = modelConfig.primaryColumnSetName;
 
                }
 
                var columnSetConfig = modelConfig.columnSets.get(columnSetName);
 
                if (!columnSetConfig) {
 
                               return;
 
                }
 
                var contextModel = columnSetConfig.modelName || model;
 
                var isEmbeddedDetail = !!columnSetConfig.modelName;
 
                if (!columnConfig.hidden) {
 
                               columnSetConfig.columns.add(this.resolveColumnConfig(contextModel, columnConfig, isEmbeddedDetail));
 
                }
 
                this.addColumnToQueryConfig(model, columnConfig.name, columnSetName, isEmbeddedDetail);
 
                if (columnConfig.displayColumn) {
 
                               this.addColumnToQueryConfig(model, columnConfig.displayColumn, columnSetName, isEmbeddedDetail);
 
                }
 
};

В манифесте мобильного приложения (например, "UsrMobileApplicationManifestCustomMobile") указать кастомную схему

{
 
"CustomSchemas": [
"MobileUtilitiesCustom"
]
}

 

Нравится

Поделиться

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

Вопрос

Не работает прием сообщения. Версия 7.7.

methods: {
    editRecord: function(editPageUId) {
        this.callParent(arguments);
        var text = "Schema6Detail";
        this.sandbox.publish("PublishDetailName", text);
    }
},
messages: {
    "PublishDetailName": {
        "mode": this.Terrasoft.MessageMode.BROADCAST,
        "direction": this.Terrasoft.MessageDirectionType.PUBLISH
    }
}
methods: {
    subscribeSandboxEvents: function() {
        this.callParent(arguments);
        this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this); 
    },
    getDetailNameFromWhoOpen: function(detailName) {
        var a = 5;
    }
},
messages: {
    "PublishDetailName": {
        "mode": this.Terrasoft.MessageMode.BROADCAST,
        "direction": this.Terrasoft.MessageDirectionType.SUBSCRIBE
    }
}

Метод getDetailNameFromWhoOpen() не вызывается.

Ответ

Проблема в том, что Вы делаете паблиш сообщения, в момент до(!) того как страница редактирования детали будет открыта, после чего открывается страница редактирования, и там вы делаете подписку. Но момент уже упущен. Вы подписываетесь на сообщение тогда, когда его уже никто не опубликует.

Вам необходимо делать publish на странице редактирования, принимая результат в переменную.



В то время как в схеме детали, делать subscribe, обработчиком которого делать функцию возвращающую значение.

Пример.

Схема детали:

define("Schema6Detail", [], function() {
    return {
        entitySchemaName: "Recomendation",
        details: /**SCHEMA_DETAILS*/{
        }/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[
        ]/**SCHEMA_DIFF*/,
        methods: {
            addRecord: function(editPageUId) {
                this.callParent(arguments);
            },
            init: function() {
                this.callParent(arguments);
                console.log("id in detail: " + this.sandbox.id);
                this.sandbox.subscribe("PublishDetailName",
                    this.getDetailNameFromWhoOpen, this,
                    [this.sandbox.id]
                );
            },
            getDetailNameFromWhoOpen: function() {
                return {
                    param: "test!"
                };
            }
        },
        messages: {
            "PublishDetailName": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.SUBSCRIBE
            }
        }
    };
});

Схема страницы:

define("Recomendation1Page", [], function() {
    return {
        entitySchemaName: "Recomendation",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[
        ]/**SCHEMA_DIFF*/,
        methods: {
            onEntityInitialized: function() {
                this.callParent(arguments);
                var res = this.sandbox.publish("PublishDetailName",
                    null,
                    [this.getDetailId()]
                );
                alert(res.param);
            },
            getDetailId: function() {
                var index = this.sandbox.id.indexOf("Recomendation1Page");
                var newId = this.sandbox.id.substring(0, index);
                console.log("id in page: " + newId);
                return newId;
            },
        },
        rules: {},
        messages: {
            "PublishDetailName": {
                mode: Terrasoft.MessageMode.PTP,
                direction: Terrasoft.MessageDirectionType.PUBLISH
            }
        },
        attributes: {
        }
    };
});

 

Нравится

Поделиться

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

Задача

Как разблокировать для редактирования поля для определенных групп пользователей? 

Решение

Выполните следующую последовательность действий:

1. В разделе "Opportunity" выберите ‘Open section wizard’:

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

2. Выберите ‘Page’:

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

3. Затем выберите поле, которое должно быть редактируемым и нажмите "Edit":

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

4. Затем снимите отметку с чекбокса "Read-only":

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

После этого поле станет редактируемым.

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

1. Для этого идите в "System designer":

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

2. Выберите "Object permissions":

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

3. Выберите пункт "Sections":

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

4. Найдите строку "Opportunity" и если "Managed by columns" отмечено "X", кликните на него. В итоге должно получится следующее:

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

5. Затем выберите строку "Opportunity" и внизу страницы найдите "Columns permissions". Вам следует найти поле, которое должно быть редактирумым для определенных групп (в этом примере используется поле "Type"):

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

6. Справа вы увидите роли и уровнидоступа для ролей:

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

7. Нажмите "New" чтобы добавить права для пользователя или роли, а затем кликните на иконку в колонке "Access level" . Иконка с глазом позволяет только чтение данных, с ручкой - разрешает редактирование,  а знак X не допускает никакой доступ к колонке. 

Вам следует установить его как на скрине:

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

Необходимые условия

Права системного администратора.

Нравится

Поделиться

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

Вопрос

Подскажите, это считается нормальным, если письма, исходящие из системы, при нажатии на отправку письма (назовем это «желтый конвертик»), уходят (и доходят), прикрепляются как активность к данному кейсу, но их нет ни в исходящих, ни в системе, ни на самой почте (делегирована на Яндекс).

Ответ

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



По вопросу отображения писем в Яндексе: так как отправка происходит по протоколу SMTP, то письмо не сохраняется на почтовом сервере. Данный функционал реализован только у Google и Exchange.

Нравится

Поделиться

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

Вопрос

Коллеги, вы делали подпись в БПМ с помощью макросов, если не ошибаюсь. Мне не нравится внешний вид подписи в email-сообщении: лишние строки между блоками, из которых состоит подпись (между ФИО и должностью, адресом и контактными номерами). 

Хотелось бы сделать подпись более аккуратной. Прошу помочь. Плюс есть ли возможность сделать шрифт и подпись в зеленом цвете?

Ответ

Если подпись формировалась с помощью макросов, то ее шаблон должен храниться в справочнике [Шаблоны e-mail сообщений]. В данном справочнике необходимо найти нужный шаблон и отредактировать его в соответствии с вашими потребностями.

Подписи можно настраивать индивидуально для пользователя в настройках его почтового ящика. Больше информации см. в статье "Индивидуальные настройки учетной записи почты" —> "Как настроить подпись в email-сообщениях".

Больше о настройке шаблонов e-mail можно узнать в статье "Как создать шаблон email-сообщения в дизайнере контента".

Нравится

Поделиться

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

Вопрос

Почему при нажатии на иконку письма на странице контакта  открывается внешняя программа отправки почты при привязанной учетной записи gmail?

Ответ

Проблема будет исправлена в версии bpm'online 7.12.4.

Функциональность будет работать следующим образом:

  • Если у пользователя настроен почтовый ящик для отправки сообщений, то при создании сообщения открывается страница нового письма bpm’online..
  • Если почтового ящика для отправки сообщений нет, то выполняется открытие системного почтового клиента (например, Outlook Express).

Нравится

Поделиться

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