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

В рамках интеграции C#-приложения (.Net 5.0) с Creatio (7.15.4) пытаюсь настроить создание сущности "Обращение" ("Case") с помощью протокола OData 4 и через передачу параметров. Сущность создается ,но часть из переданных параметров игнорируется, хотя  GUID указан верный.

Пример POST запроса из Postman и ответа от сервиса (значение для CgrCommunicationTypeId установлено некорректное)

 

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

Нравится

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

Здравствуйте, попробуйте на уровне интерфейса или БД изменить/установить значение колонки.
Если выполнять запрос на обновление, то колонка изменит значение?

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

Коллеги, известен ли кому-то способ изменить отображение Email сообщения в теле письма на странице Case?

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

Прикрепленные файлы

Нравится

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

Добрый день!

 

Для решения проблемы, можно в пакете ESN в схеме MultilineLabel в методе getStringWithLinks поправить регулярку.
Было:

var emailAddressPattern = /[\w\.]+@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6})+/gim; 

нужно: 

var emailAddressPattern = /[\w\.\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6})+/gim;

Эти изменения внесены в продукт версии 8.0.0

 

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

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

Описание примера:

Нужно настроить редактируемый реестр в разделе. Это позволит быстро редактировать записи раздела (как в деталях с редактируемым реестром).

Алгоритм реализации:

1. Создайте замещающую модель представления для вашего раздела, например, ContactSectionV2.
2. Добавьте следующие зависимости в массив зависимостей: 

define("ActivitySectionV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
    function() {

3. Добавьте ConfigurationGridUtilites в блок "mixins":

mixins: {
    ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
},

4. Добавьте виртуальную колонку с типом boolean в блок "attributes":

attributes: {
    IsEditable: {
        dataValueType: Terrasoft.DataValueType.BOOLEAN,
        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        value: true
    }
},

5. Переопределите базовые методы схемы:

edit: function() {
    var procElId = this.getActiveRow().get("ProcessElementId");
    var recordId = this.get("ActiveRow");
    if (procElId && !this.Terrasoft.isEmptyGUID(procElId)) {
        this.sandbox.publish("ProcessExecDataChanged", {
            procElUId: procElId,
            recordId: recordId,
            scope: this,
            parentMethodArguments: null,
            parentMethod: function() {
                return false;
            }
        });
        return true;
    }
    this.editRecord(recordId);
},
editRecord: function(primaryColumnValue) {
    this.Terrasoft.chain(
        function(next) {
            var activeRow = this.findActiveRow();
            this.saveRowChanges(activeRow, next);
        },
        function() {
            var activeRow = this.getActiveRow();
            var typeColumnValue = this.getTypeColumnValue(activeRow);
            var schemaName = this.getEditPageSchemaName(typeColumnValue);
 
            var config = {
                schemaName: schemaName,
                id: primaryColumnValue,
                operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
                moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
            };
 
            this.sandbox.publish("PushHistoryState", {
                hash: Ext.String.format("{0}/{1}/{2}/{3}",
                    "CardModuleV2", schemaName, Terrasoft.ConfigurationEnums.CardOperation.EDIT, primaryColumnValue),
                silent: true
            });
            this.openCardInChain(config);
        }, this);
},
addRecord: function(typeColumnValue) {
    if (!typeColumnValue) {
        if (this.get("EditPages").getCount() > 1) {
            return false;
        }
        var tag = this.get("AddRecordButtonTag");
        typeColumnValue = tag || this.Terrasoft.GUID_EMPTY;
    }
    this.addRow(typeColumnValue);
},
copyRecord: function(primaryColumnValue) {
    this.copyRow(primaryColumnValue);
},
getGridRowViewModelConfig: function() {
    var gridRowViewModelConfig =
        this.mixins.GridUtilities.getGridRowViewModelConfig.apply(this, arguments);
    Ext.apply(gridRowViewModelConfig, {entitySchema: this.entitySchema});
    var editPages = this.get("EditPages");
    this.Ext.apply(gridRowViewModelConfig.values, {HasEditPages: editPages && !editPages.isEmpty()});
    return gridRowViewModelConfig;
},
getGridRowViewModelClassName: function() {
    return this.mixins.GridUtilities.getGridRowViewModelClassName.apply(this, arguments);
},
onRender: function() {
    this.callParent(arguments);
    if (!this.get("Restored")) {
        this.reloadGridColumnsConfig(true);
    }
},
getDefaultGridColumns: function() {
    var systemColumns = this.systemColumns;
    var allowedDataValueTypes = this.get("AllowedDataValueTypes");
    var entitySchema = this.entitySchema;
    var entitySchemaColumns = [];
    Terrasoft.each(entitySchema.columns, function(column, columnName) {
        if (Ext.Array.contains(systemColumns, columnName) ||
            !Ext.Array.contains(allowedDataValueTypes, column.dataValueType)) {
            return;
        }
        entitySchemaColumns.push(column);
    }, this);
    var primaryDisplayColumnName = entitySchema.primaryDisplayColumnName;
    entitySchemaColumns.sort(function(a, b) {
        if (a.name === primaryDisplayColumnName) {
            return -1;
        }
        if (b.name === primaryDisplayColumnName) {
            return 1;
        }
        return 0;
    }, this);
    return (entitySchemaColumns.length > 4) ? entitySchemaColumns.slice(0, 4) : entitySchemaColumns;
},
onActiveRowAction: function() {
    this.mixins.ConfigurationGridUtilities.onActiveRowAction.apply(this, arguments);
    this.callParent(arguments);
},
onActiveRowAction: function(buttonTag, primaryColumnValue) {
    switch (buttonTag) {
        case "card":
            this.edit();
            break;
        case "copy":
            this.copyRecord(primaryColumnValue);
            break;
        case "remove":
            this.deleteRecords();
            break;
        case "cancel":
            this.discardChanges(primaryColumnValue);
            break;
        case "save":
            this.onActiveRowSave(primaryColumnValue);
            break;
    }
}

6. Добавьте следующие элементы в массив "diff":

{
    "operation": "merge",
    "name": "DataGrid",
    "values": {
        "className": "Terrasoft.ConfigurationGrid",
        "generator": "ConfigurationGridGenerator.generatePartial",
        "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
        "changeRow": {"bindTo": "changeRow"},
        "unSelectRow": {"bindTo": "unSelectRow"},
        "onGridClick": {"bindTo": "onGridClick"},
        "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
        "activeRowAction": {"bindTo": "onActiveRowAction"},
        "multiSelect": {"bindTo": "MultiSelect"}
    }
},
{
    "operation": "insert",
    "name": "activeRowActionSave",
    "parentName": "DataGrid",
    "propertyName": "activeRowActions",
    "values": {
        "className": "Terrasoft.Button",
        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
        "tag": "save",
        "markerValue": "save",
        "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
    }
},
{
    "operation": "insert",
    "name": "activeRowActionCopy",
    "parentName": "DataGrid",
    "propertyName": "activeRowActions",
    "values": {
        "className": "Terrasoft.Button",
        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
        "tag": "copy",
        "markerValue": "copy",
        "imageConfig": {"bindTo": "Resources.Images.CopyIcon"}
    }
},
{
    "operation": "insert",
    "name": "activeRowActionCard",
    "parentName": "DataGrid",
    "propertyName": "activeRowActions",
    "values": {
        "className": "Terrasoft.Button",
        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
        "tag": "card",
        "markerValue": "card",
        "visible": {"bindTo": "HasEditPages"},
        "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
    }
},
{
    "operation": "insert",
    "name": "activeRowActionCancel",
    "parentName": "DataGrid",
    "propertyName": "activeRowActions",
    "values": {
        "className": "Terrasoft.Button",
        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
        "tag": "cancel",
        "markerValue": "cancel",
        "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
    }
},
{
    "operation": "insert",
    "name": "activeRowActionRemove",
    "parentName": "DataGrid",
    "propertyName": "activeRowActions",
    "values": {
        "className": "Terrasoft.Button",
        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
        "tag": "remove",
        "markerValue": "remove",
        "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
    }
},
{
    "operation": "remove",
    "name": "DataGridActiveRowOpenAction"
},
{
    "operation": "remove",
    "name": "DataGridActiveRowCopyAction"
},
{
    "operation": "remove",
    "name": "DataGridActiveRowDeleteAction"
},
{
    "operation": "remove",
    "name": "ProcessEntryPointGridRowButton"
}

Полный исходный код схемы:

define("ContactSectionV2", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"],
    function() {
        return {
            entitySchemaName: "Contact",
            messages: {},
            mixins: {
                ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
            },
            attributes: {
                IsEditable: {
                    dataValueType: Terrasoft.DataValueType.BOOLEAN,
                    type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    value: true
                }
            },
            methods: {
                edit: function() {
                    var procElId = this.getActiveRow().get("ProcessElementId");
                    var recordId = this.get("ActiveRow");
                    if (procElId && !this.Terrasoft.isEmptyGUID(procElId)) {
                        this.sandbox.publish("ProcessExecDataChanged", {
                            procElUId: procElId,
                            recordId: recordId,
                            scope: this,
                            parentMethodArguments: null,
                            parentMethod: function() {
                                return false;
                            }
                        });
                        return true;
                    }
                    this.editRecord(recordId);
                },
                editRecord: function(primaryColumnValue) {
                    this.Terrasoft.chain(
                        function(next) {
                            var activeRow = this.findActiveRow();
                            this.saveRowChanges(activeRow, next);
                        },
                        function() {
                            var activeRow = this.getActiveRow();
                            var typeColumnValue = this.getTypeColumnValue(activeRow);
                            var schemaName = this.getEditPageSchemaName(typeColumnValue);
 
                            var config = {
                                schemaName: schemaName,
                                id: primaryColumnValue,
                                operation: Terrasoft.ConfigurationEnums.CardOperation.EDIT,
                                moduleId: this.getChainCardModuleSandboxId(typeColumnValue)
                            };
 
                            this.sandbox.publish("PushHistoryState", {
                                hash: Ext.String.format("{0}/{1}/{2}/{3}",
                                    "CardModuleV2", schemaName, Terrasoft.ConfigurationEnums.CardOperation.EDIT, primaryColumnValue),
                                silent: true
                            });
                        this.openCardInChain(config);
                    }, this);
                },
                addRecord: function(typeColumnValue) {
                    if (!typeColumnValue) {
                        if (this.get("EditPages").getCount() > 1) {
                            return false;
                        }
                        var tag = this.get("AddRecordButtonTag");
                        typeColumnValue = tag || this.Terrasoft.GUID_EMPTY;
                    }
                    this.addRow(typeColumnValue);
                },
                copyRecord: function(primaryColumnValue) {
                    this.copyRow(primaryColumnValue);
                },
                getGridRowViewModelConfig: function() {
                    var gridRowViewModelConfig =
                        this.mixins.GridUtilities.getGridRowViewModelConfig.apply(this, arguments);
                    Ext.apply(gridRowViewModelConfig, {entitySchema: this.entitySchema});
                    var editPages = this.get("EditPages");
                    this.Ext.apply(gridRowViewModelConfig.values, {HasEditPages: editPages && !editPages.isEmpty()});
                    return gridRowViewModelConfig;
                },
                getGridRowViewModelClassName: function() {
                    return this.mixins.GridUtilities.getGridRowViewModelClassName.apply(this, arguments);
                },
                onRender: function() {
                    this.callParent(arguments);
                    if (!this.get("Restored")) {
                        this.reloadGridColumnsConfig(true);
                    }
                },
                getDefaultGridColumns: function() {
                    var systemColumns = this.systemColumns;
                    var allowedDataValueTypes = this.get("AllowedDataValueTypes");
                    var entitySchema = this.entitySchema;
                    var entitySchemaColumns = [];
                    Terrasoft.each(entitySchema.columns, function(column, columnName) {
                        if (Ext.Array.contains(systemColumns, columnName) ||
                            !Ext.Array.contains(allowedDataValueTypes, column.dataValueType)) {
                            return;
                        }
                        entitySchemaColumns.push(column);
                    }, this);
                    var primaryDisplayColumnName = entitySchema.primaryDisplayColumnName;
                    entitySchemaColumns.sort(function(a, b) {
                        if (a.name === primaryDisplayColumnName) {
                            return -1;
                        }
                        if (b.name === primaryDisplayColumnName) {
                            return 1;
                        }
                        return 0;
                    }, this);
                    return (entitySchemaColumns.length > 4) ? entitySchemaColumns.slice(0, 4) : entitySchemaColumns;
                },
                onActiveRowAction: function() {
                    this.mixins.ConfigurationGridUtilities.onActiveRowAction.apply(this, arguments);
                    this.callParent(arguments);
                },
                onActiveRowAction: function(buttonTag, primaryColumnValue) {
                    switch (buttonTag) {
                        case "card":
                            this.edit();
                            break;
                        case "copy":
                            this.copyRecord(primaryColumnValue);
                            break;
                        case "remove":
                            this.deleteRecords();
                            break;
                        case "cancel":
                            this.discardChanges(primaryColumnValue);
                            break;
                        case "save":
                            this.onActiveRowSave(primaryColumnValue);
                            break;
                    }
                }
            },
            diff: /**SCHEMA_DIFF*/[
                {
                    "operation": "merge",
                    "name": "DataGrid",
                    "values": {
                        "className": "Terrasoft.ConfigurationGrid",
                        "generator": "ConfigurationGridGenerator.generatePartial",
                        "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
                        "changeRow": {"bindTo": "changeRow"},
                        "unSelectRow": {"bindTo": "unSelectRow"},
                        "onGridClick": {"bindTo": "onGridClick"},
                        "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
                        "activeRowAction": {"bindTo": "onActiveRowAction"},
                        "multiSelect": {"bindTo": "MultiSelect"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "activeRowActionSave",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        "tag": "save",
                        "markerValue": "save",
                        "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "activeRowActionCopy",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        "tag": "copy",
                        "markerValue": "copy",
                        "imageConfig": {"bindTo": "Resources.Images.CopyIcon"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "activeRowActionCard",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        "tag": "card",
                        "markerValue": "card",
                        "visible": {"bindTo": "HasEditPages"},
                        "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "activeRowActionCancel",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        "tag": "cancel",
                        "markerValue": "cancel",
                        "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                    }
                },
                {
                    "operation": "insert",
                    "name": "activeRowActionRemove",
                    "parentName": "DataGrid",
                    "propertyName": "activeRowActions",
                    "values": {
                        "className": "Terrasoft.Button",
                        "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        "tag": "remove",
                        "markerValue": "remove",
                        "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                    }
                },
                {
                    "operation": "remove",
                    "name": "DataGridActiveRowOpenAction"
                },
                {
                    "operation": "remove",
                    "name": "DataGridActiveRowCopyAction"
                },
                {
                    "operation": "remove",
                    "name": "DataGridActiveRowDeleteAction"
                },
                {
                    "operation": "remove",
                    "name": "ProcessEntryPointGridRowButton"
                }
            ]/**SCHEMA_DIFF*/
        };
    }
);

ВАЖНО! 

Если вы хотите реализовать редактируемый реестр для раздела Активности, вам следует закомментировать "activeRowActionCopy" в массиве "diff". Функциональности копирования не работает в разделе Активности. 

Если вы хотите реализовать редактируемый реестр в разделе Лиды, вам следует добавить следующий исходный код в  свойство values элемента DataGrid в массиве diff:

"applyControlConfig": Terrasoft.EmptyFn

 

Нравится

Поделиться

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

поправьте п.2 Не 

define("ActivitySectionV2", а 
define("ContactSectionV2", 
Показать все комментарии

Товарищи, подскажите пожалуйста.

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

Может есть какой то другой способ отличный от создания новой версии процесса Отправка Email сообщения контакту обращения при публикации сообщения в канале Портал - Мультиязычный?

Нравится

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

Михаил, не совсем понял вопрос.

Чем неправильно в разделе обращений нажать на кнопку с глобусом в верхней панели, написать текст ответа и так опубликовать на портале? Зачем при этом создавать новую версию процесса?

Или Вы не знаете, на какой объект завязаться процессом, чтобы срабатывал при добавлении портального сообщения?

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

Добрый день.

Пожалуйста, подскажите, есть в функционале Service Enterprise в разделе Case или Agent Desktop функционал отображения кнопок для движения по кейс-модели.

Например, текущий статус по кейс-модели - "In progress", следующие возможные стадии "Resolved" или "Waiting for response". Мы бы хотели видеть кнопку (как вариант с выпадающим списком) с возможными "движениями" (например, Resolve и Request information). Насколько мы поняли по настройкам справочника Case Statuses и некоторым ссылкам в документации (более явно в старых версиях документации, но в новых тоже имеются скриншоты), такая возможность есть.

Однако в системе не можем найти. Возможно нужны какие-то дополнительные настройки. Если стандартной возможности нет, просьба подсказать как можно реализовать.

https://academy.creatio.com/documents/service-enterprise/7-15/processing-cases-blind-queue-agent-desktop?document=service%20enterprise

Спасибо!

Нравится

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

Выяснили, что за видимость нужной кнопки отвечает Feature = 'ResolvedButtonMenuIsNotVisible'.

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

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

Про клик на полосе стадий понятно. Но с нашей точки зрения кнопка доступных действий имеет ряд преимуществ:

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

2) Название стадий (например, "Security") не всегда очевидно. Тогда как соответствующее действие (например, "Отправить на проверку в Security") более понятно простому пользователю.

3) На полосе стадий некоторые стадии группируются. Не всегда очевидно, что нужно раскрыть выпадающий список, чтобы увидеть целевую стадию.

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

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

С нуля, конечно, делать такую кнопку смысла нет. Но дело в том, что в стандарте она уже есть. Просто скрыта через Features.

Обычно для действий с более человеко-читаемыми названиями делают БП, запускаемые по кнопке запуска процессов в реестре и карточке (например, «пометить как спам»).

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

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

Добрый день, сообщество!

 

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

Для этого выбран один из вариантов: отобразить ActionsDashboard продажи в активности.

Приведенный в конце (без лишних частей) код модуля ActivityPageV2 дает в консоли ошибку:


SectionActionsDashboard.js:2051 Uncaught (in promise) TypeError: Cannot read property 'name' of undefined
    at i._findVisaManagerItem (SectionActionsDashboard.js:2051)
    at i.<anonymous> (SectionActionsDashboard.js:501)
    at i.e (all-combined.js:7)
    at Object.callback (all-combined.js:6)
    at all-combined.js:7

 

Ошибка приводит нас к тому, что в функции _findVisaManagerItem не находится свойство this.get("EntitySchema").name.

 

Подскажите, пожалуйста, как справиться с этой ошибкой (и вообще отобразить кейс)

 

 

 

Код модуля:

define("ActivityPageV2", ["OpportunityConfigurationConstants","ServiceHelper","ProcessModuleUtilities","MaskHelper"], 
function(OpportunityConfigurationConstants, ServiceHelper,ProcessModuleUtilities,MaskHelper) {
  return {
    entitySchemaName: "Activity",
    modules: /**SCHEMA_MODULES*/{
      "ActionsDashboardModule": {
        "config": {
          "isSchemaConfigInitialized": true,
          "schemaName": "OpportunityActionsDashboard",
          "useHistoryState": false,
          "parameters": {
            "viewModelConfig": {
              "entitySchemaName": "Opportunity",
              "actionsConfig": {
                "schemaName": "OpportunityStage",
                "columnName": "Stage",
                "colorColumnName": "Color",
                "filterColumnName": "ShowInProgressBar",
                "orderColumnName": "Number",
                "innerOrderColumnName": "End",
                "decouplingConfig": {
                  "name": "OppStageDecoupling",
                  "masterColumnName": "CurrentStage",
                  "referenceColumnName": "AvailableStage"
                }
              },
            //  "useDashboard": false,
            //  "contentVisible": false,
            //  "headerVisible": true
              "dashboardConfig": {
                "Activity": {
                  "masterColumnName": "Opportunity",
                  "referenceColumnName": "Opportunity"
                }
              }
            }
          }
        }
      }
    }/**SCHEMA_MODULES*/,
    diff: /**SCHEMA_DIFF*/[
      {
        "operation": "insert",
        "name": "ActionsDashboardModule",
        "values": {
          "classes": {
            "wrapClassName": [
              "actions-dashboard-module"
            ]
          },
          "itemType": 4
        },
        "parentName": "ActionDashboardContainer",
        "propertyName": "items",
        "index": 0
      }
    ]/**SCHEMA_DIFF*/
  };
});

 

Нравится

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

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

Кисловский Михаил Андреевич,

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

Так что тут подошла бы кнопка "Перейти на следующую стадию". Может быть, у вас есть идеи на тему того, как достать id следующей стадии кейса, в котором находится продажа? Это бы сильно помогло.

 

Мария, согласно академии:

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

То есть единой «следующей»  стадии нет, при нормальной работе переходы возможны в любую из разрешённых. Если точно знаете, куда нужно перевести по нажатию кнопки, можно в объект добавить справочное поле, ссылающееся на нужную запись и в логике кнопки её считывать.

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

Добрый день. 

Переопределил UserCasesListModule для главной страницы портал.
Добавил в него дополнительные поля.
Также необходимо отфильтровать реестр по контакту текущего пользователя портала.
Для этого модифицирую "filterData" в moduleConfig 

{\"className\":\"Terrasoft.FilterGroup\",\"items\":{"
+ this.getCreatedOnFilter()
+ "},\"logicalOperation\":0," 
+ "\"isEnabled\":true,\"filterType\":6,\"rootSchemaName\":\"Case\",\"key\":\"\"}"

Сам метод getCreatedOnFilter (возвращает сериализованный фильтр):

getCreatedOnFilter: function(){
   var filterGroup = Terrasoft.createFilterGroup();
   filterGroup.add("CreatedOnFilter", 
        Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "CreatedBy", 
        Terrasoft.SysValue.CURRENT_USER_CONTACT.value)
   );
   var fgSerializeInfo = filterGroup.getDefSerializationInfo();
   fgSerializeInfo.serializeFilterManagerInfo = true;
   var serializeFilter = filterGroup.serialize(fgSerializeInfo); 
   return Ext.encode(serializeFilter);
}

В итоге получаю ошибку {message: "Ошибка декодирования значения из JSON-строки"}

Нравится

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

Добрый день

Я вижу, что в вашей строке ошибка

....key\":\"\"}"

если десериализировать эту строку, то объект получиться таким:

{
   ...
   key:
}

что некорректно. Нужно либо убрать поле key, либо дать ему значение

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

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

Нравится

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

Здравствуйте, Олег!

В версии 7.10 в системе будет возможность настраивать DCM для всех разделов в системе.

Это, конечно, здорово. Но ответ на вопрос хотелось бы получить. С переходом между стадиями разобрался (создал объект и наполнил его доступными переходами, по примеру раздела "Продажи"). Как сделать две финальных стадии на выбор? (Как в тех же продажах)

UPD: Разобрался. выгружаем md файл. Меняем в нем UId схемы, UId колонки стадии, имя самой схемы, загружаем обратно, открываем через мастер, делаем что душе угодно.

Показать все комментарии
Часто клиенты присылают запрос в службу поддержки, указывая в копии людей, которые тоже должны быть проинформированы о ходе решения инцидента.Предлагаю в автоматических и создаваемых вручную ответах системы добавлять этих адресатов в получатели письма CC:
1 комментарий

Добрый день, Владимир!
От лица команды продукта "Service", предоставляю Вам информацию, что в данном направлении работы ведутся. В последующих версиях (точной информации пока нет в какой именно, но уверен что в рамках цикла работ по 7.9) мы обязательно добавим функционал ответить всем в автогенерируемых письмах.
Так же, ведутся работы по реализации отправки автоматических уведомлений не с одного ящика, как это реализовано сейчас (ящик технической поддержки), а будет возможность настраивать правила ответа, в зависимости от условий будет возможность использовать несколько ящиков.
Спасибо Вам за пожелания по доработке нашей системы, они позволят нам сделать продукт еще лучше!
Удачного Вам дня!

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

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

Общаясь с клиентами, обсуждая рабочие вопросы с коллегами в чайной или читая статьи о развитии IT-индустрии, я ловлю себя на мысли о том, что мы постоянно сталкиваемся с интересными кейсами и историями об использовании продуктов нашей компании. К сожалению, чаще всего они так и остаются известны в довольно узком кругу, хотя могут нести ценность для всего сообщества пользователей продуктов bpm’online. Так родилась идея этого блога.

Итак, позвольте представить «Блог Customer Success Management Terrasoft»!

На этом официальная часть заканчивается, а дальше пойдет общение — неформальное, открытое, веселое и интересное. Присоединяйтесь, «лайкайте», комментируйте! С нами весело, а главное — полезно! :smile:

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

Результатом решили поделиться с Community. Наслаждайтесь! :wink:

Хотите чаще давать обратную связь сотрудникам? Нет ничего проще!

Хотите проинформировать коллег о коммуникации во время вашего отпуска или коммандировки – пожалуйста!

Нужно обсудить детали сделки? И здесь ESN в помощь!

Приглашаю сообщество Terrasoft делиться своими историями использования ESN и не только.

Нравится

Поделиться

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

Евгений Мирный - так он настоящий? :wink:

"Александр Кудряшов" написал:

Евгений Мирный - так он настоящий? :wink:

Давно пора было уже эту личность раскручивать :)

"Симоненко Влад" написал:интересных и показательных кейсов

Идея блога супер! Но хотелось бы именно реальных примеров, а не переписки в демо-версии:wink:
Возможно интересно будет что-то из этой серии

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