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

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

Я так думаю, нужно сделать по аналогии как показано на скрине? 

Нравится

2 комментария
Лучший ответ

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

 

Требуемую логику можно реализовать с помощью управления правами доступа на записи в таблице 'Обращений'.

 

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

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

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

 

Требуемую логику можно реализовать с помощью управления правами доступа на записи в таблице 'Обращений'.

 

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

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

Алла Савельева,благодарю, попробую реализовать. Частично понял.

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

Пожалуйста подскажите, как поменять названия вместо "Новая запись" подставить имя контакта в преднастроенной странице.

Я видел тут такой же вопрос, но там в ответе описано, что в дизайнере можно поменять, но как? Буду благодарен за помощь.

Нравится

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

Ислам Ибрагимжанов, добрый день!
Вы можете изменить заголовок преднастроенной страницы провалившись в дизайнер самой страницы.

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

Sorotiuk Anna,

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

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

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

 

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

Нравится

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

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

 

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

 

Можно в конфигурации в схеме UserProfilePage переопределить видимость кнопки Mailboxes. Делать её доступной, например, только для определенного пользователя/пользователей.

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

Доброго времени суток. Имею проблему. Нужно в преднастроенной странице в деталь карты поставить кнопку для активной записи детали. Кнопку "Заблокировать карту"
Попробовал из статьи туттут, и тут  , но никак не появляется кнопка. Подскажите как мне реализовать данную задачу? Она работает по другому? То есть в обычной детали появляется, а в преднастроенной странице не появляется. Я отыскал все ответы в комьюнити. Но у меня не появляется кнопка.  Прощу помощи. Спасибо.

Нравится

6 комментариев
Лучший ответ

Ислам Ибрагимжанов,

Уточните, пожалуйста, вам необходимо добавить кнопку на детали или на странице редактирования?
Если на детали, то diff необходимо изменять в схеме BankCardDetailV2.

 

 Здраствуйте!
Для решения задачи в блок diff схемы детали необходимо добавить код кнопки:
{
        "operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
                                "markerValue": "myButtonAction",
                                "tag": "myAction",
                                "caption": "MyButton"
                        }
                ]
        }
}
Согласно реализации описанной в статье: https://community.terrasoft.ru/questions/dobavit-dopolnitelnuyu-knopku-…
По результату при клике на запись детали у вас отобразится кнопка  "MyButton":

Опишите, пожалуйста,  детальнее на каком этапе реализации возникла трудность.

Алёна Доля,

Я делаю по аналогии то, что вы мне скинули. У меня возникли некоторые сомнения, то что в преднастроенной странице деталь работает как-то иным способом, нежели в обычных страницах?  Для наглядности могу скинуть код моей страницы:

Вот результат, нет кнопки( 

Ислам Ибрагимжанов,

Уточните, пожалуйста, вам необходимо добавить кнопку на детали или на странице редактирования?
Если на детали, то diff необходимо изменять в схеме BankCardDetailV2.

 

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

Ислам Ибрагимжанов,

Я попробовал изменять и в diff схеме детали BankCardDetailV2, но так же не появилась кнопка. 

Алёна Доля,

Спасибо разобрался. Действительно нужно было в странице делати писать. 

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

Доброго времени суток. Имею пробелму. Нужно в преднастроенной странице в деталь карты поставить кнопку для активной записи детали. Кнопку "Заблокировать карту"

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

Нравится

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

У меня таким образом
В DIFF
 

		"operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                // "onButtoClick": {"bindTo": "Alert"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.GREEN,
                                "markerValue": "myButtonAction",
                                "tag": "Delete",
                                "caption": "Delete",
 
                        }
                ]
        }

И не забыть добавить в LocalizableString
"Delete"

В методах
 

			onActiveRowAction: function(buttonTag, primaryColumnValue) {
                if (buttonTag === "Delete") {
                          this.Delete();  // нужная функция
 			                }
        },

 
 

Oleg, у меня с таким же способом не срабаытывает почему-то( Все так же как вы описали, но не появляется кнопка.

Oleg,

 

И не забыть добавить в LocalizableString

"Delete" 

Не достаточно того, что вы написали в Caption название? Я вот этот пункт не сделал, не добавлял в LocalizableString.

Добавить комментарий

Ислам Ибрагимжанов,

Попробуйте :)

 

Не срабатывает, прощу помочь. Кто сталкивался ?

Oleg,

не отработало.

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

Доброго времени суток коллеги!

Следующий код создания нового экземпляра Entity возвращает Null.

EntitySchema contractSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Contract");
            Entity contract = contractSchema.CreateEntity(UserConnection);
            Guid guid = Guid.NewGuid();
            contract.SetDefColumnValues();
            contract.SetColumnValue("Id", guid);

Раньше такого не было. 

При попытке задать значение полей выдает ошибку "Ссылка на объект не указывает на экземпляр объекта.".

из за чего поведение кода могло измениться?

Спасибо за ранее!

Нравится

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

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

 

Где именно располагается данный пример кода? В бизнес-процессе, в веб-сервисе или в каком-то другом месте?

Что в стеке вызовов исключения?

Подозреваю, что проблема в UserConnection. Видимо, данная переменная не инициализирована.

Михаил Назыров,

Здравствуйте, этот код находится в исходном коде клиента внешнего веб-сервиса.

 

Стек:

в Terrasoft.Configuration.Hmb.ContactIntegration.HmbGetDepositsInfoRs.CreateContract(HmbGetDepositsInfoRsResponse result, Contract contract, Contact contact)

в Terrasoft.Configuration.Hmb.ContactIntegration.HmbGetDepositsInfoRs.SendRequest(HmbGetDepositsInfoRsRequest request)

в Terrasoft.Configuration.Hmb.ContactIntegration.HmbGetDepositsInfoRs.GetClientDeposits(Guid ContactId)

в Terrasoft.Configuration.Custom.TestService.Start() в SyncInvokeStart(Object , Object[] , Object[] )

в System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)

в System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)

в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)

в System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)

в System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

 

Насчет UserConnection: Оно инициализируется сразу конструктором и используется до возникновения ошибки несколько раз.

public partial class HmbGetDepositsInfoRs
    {

          ........

          private readonly UserConnection UserConnection;

          public HmbGetDepositsInfoRs(UserConnection userConn)
        {
                UserConnection = userConn;
        }

         ........

}

Добрый день

Такое ощущение, что у пользователя (того, кто стоит за UserConnection) нет прав на создание записей в объекте Contract

Артем Гура,

это супервизор. На всякий случай проверил, права есть

Rahimberdiyev Mirzohid Muhammadjon o'g'li,

Добрый день

1) Попробуйте отладить Ваш код и дополнительно проверить UserConnection. За ним должен стоять пользователь с правами админа и с доступом на операции по типу CanManageSolution и тд. 
2) Также рекомендую проверить логи приложения на наличие ошибок. 
3) + провести дополнительную генерацию и компиляцию.
4) Проверить будут ли создаваться другие объекты кроме Contract.

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

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

Добрый день! Коллеги, существует ли аналог SQL Executor, только для .NET Core ?

Возможно у Terrasoft есть планы в бэклоге на реализацию подобного модуля для обеих платформ?

Нравится

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

Александр, добрый день! аналогичного решения, совместимого с .Net Core, на маркетплейсе нет.

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

Добрый день!

Подскажите, пожалуйста, использовал ли кто-то коннектор к СПАРК из маркетплейса?
https://marketplace.terrasoft.ru/app/spark-connector-creatio
Впервые устанавливаем приложение из МП.
Хочется понять потребуется ли какая-то доработка кода для получения информации или достаточно будет заполнить системные настройки или информация из методов, которые доступны логину, будет автоматом добавлена в карточку контрагента.

Нравится

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

Юрий, добрый день!

 

следуйте инструкции на вкладке Установка на странице решения. Если возникнут вопросы по ходу настройки, обращайтесь к разработчику напрямую. Решение поддерживается по каналу email.

Лазоренко Ирина,

Добрый день!
Вопросов по установке нет. Меня интересует пользовательский опыт данного приложения.
Нужны ли будут еще какие-нибудь доработки.

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

Доброго времени суток коллеги, я сделал все как описано тут , но при добавлении контактов не сохраняется значение в детали просидел уже все выходные. Пожалуйста помогите. 
Создал объект: UsrCaseTest

  1. В этом объекте создал справочное поле UsrContact( родительский объект "Contact")
  2. Через мастера все добавил, настроил. Деталь работает справочное поле все показывает,
  3. После добавления значения не сохраняются. 
  4. Код схемы детали: 
     

    // Определение схемы и установка ее зависимостей от других модулей.
    define("UsrCaseTestDetail", ["ConfigurationEnums"],
        function(configurationEnums) {
            return {
                // Название схемы объекта детали.
                entitySchemaName: "UsrCaseTest",
                // Методы схемы детали.
                methods: { 
                    //Возвращает колонки, которые выбираются запросом.
                    getGridDataColumns: function() {
                        return {
                            "Id": {path: "Id"},
                            "UsrContact": {path: "UsrContact"},
                            "UsrContact.Name": {path: "UsrContact.Name"}
                        };
                    },
                    openContactLookup: function() {
                        var config = {
                            entitySchemaName: "Contact",
                            multiSelect: true,
                            columns: ["Name"]
                        };
                        // Экземпляр класса [EntitySchemaQuery].
                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                            // Установка корневой схемы.
                            rootSchemaName: this.entitySchemaName
                        });
                        // Добавление колонки [Id].
                        esq.addColumn("Id");
                        // Добавление колонки [Id] из схемы [Document].
                        esq.addColumn("UsrContact.Id", "UsrContactId");
                        esq.getEntityCollection(function(result) {
                            var existsContactsCollection = [];
                            if (result.success) {
                                result.collection.each(function(item) {
                                    existsContactsCollection.push(item.get("UsrContactId"));
                                });
                            }
                            // Добавление фильтра в конфигурационный объект.
                            if (existsContactsCollection.length > 0) {
                                var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
                                existsContactsCollection);
                                existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
                                existsFilter.Name = "existsFilter";
                                config.filters = existsFilter;
                            }
                            // Вызов модального окна справочника
                            this.openLookup(config, this.addCallBack, this);
                        }, this);
                    },

                    // Обработчик события сохранения страницы редактирования.
                    onCardSaved: function() {
                        this.openContactLookup();
                    },

                    //Открывает справочник документов в случае если страница редактирования заказа была ранее сохранена.
                    addRecord: function() {
                        var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
                        var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD ||
                        masterCardState.state === configurationEnums.CardStateV2.COPY);
                        if (isNewRecord === true) {
                            var args = {
                                isSilent: true,
                                messageTags: [this.sandbox.id]
                            };
                            this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
                            return;
                        }
                        this.openContactLookup();
                    },

                    // Добавление выбранных продуктов.
                    addCallBack: function(args) {
                        // Экземпляр класса пакетного запроса BatchQuery.
                        var bq = this.Ext.create("Terrasoft.BatchQuery");
                        // Коллекция выбранных в справочнике документов.
                        this.selectedRows = args.selectedRows.getItems();
                        // Коллекция, передаваемая в запрос.
                        this.selectedItems = [];
                        // Копирование необходимых данных.
                        this.selectedRows.forEach(function(item) {
                            item.UsrContactId = item.value;
                            bq.add(this.getDocumentInsertQuery(item));
                            this.selectedItems.push(item.value);
                        }, this);
                        // Выполнение пакетного запроса, если он не пустой.
                        if (bq.queries.length) {
                            this.showBodyMask.call(this);
                            bq.execute(this.onContactInsert, this);
                        }
                    },

                    //Возвращает запрос на добавление текущего объекта.
                    getDocumentInsertQuery: function(item) {
                        var insert = Ext.create("Terrasoft.InsertQuery", {
                            rootSchemaName: this.entitySchemaName
                        });
                        insert.setParameterValue("UsrContact", item.UsrContactId, this.Terrasoft.DataValueType.GUID);
                        return insert;
                    },

                    // Метод, вызываемый при добавлении записей в реестр детали.
                    onContactInsert: function(response) {
                        this.hideBodyMask.call(this);
                        this.beforeLoadGridData();
                        var filterCollection = [];
                        response.queryResults.forEach(function(item) {
                            filterCollection.push(item.id);
                        });
                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                            rootSchemaName: this.entitySchemaName
                        });
                        this.initQueryColumns(esq);
                        esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
                        esq.on("createviewmodel", this.createViewModel, this);
                        esq.getEntityCollection(function(response) {
                            this.afterLoadGridData();
                            if (response.success) {
                                var responseCollection = response.collection;
                                this.prepareResponseCollection(responseCollection);
                                this.getGridData().loadAll(responseCollection);
                            }
                        }, this);
                    },

                    // Метод, вызываемый при удалении выбранных записей детали.
                    deleteRecords: function() {
                        var selectedRows = this.getSelectedItems();
                        if (selectedRows.length > 0) {
                            this.set("SelectedRows", selectedRows);
                            this.callParent(arguments);
                        }
                    },

                    // Скрыть пункт меню [Копировать].
                    getCopyRecordMenuItem: Terrasoft.emptyFn,
                     // Скрыть пункт меню [Изменить].
                    getEditRecordMenuItem: Terrasoft.emptyFn,
                    // Возвращает имя колонки по умолчанию для фильтра.
                    getFilterDefaultColumnName: function() {
                        return "UsrContact";
                    }
                },
                // Массив модификаций.
                diff: /**SCHEMA_DIFF*/[
                    {
                        // Тип операции — слияние.
                        "operation": "merge",
                        // Название элемента схемы, над которым производится действие.
                        "name": "DataGrid",
                        // Объект, свойства которого будут объединены со свойствами элемента схемы.
                        "values": {
                            "rowDataItemMarkerColumnName": "UsrContact"
                        }
                    },
                    {
                        // Тип операции — слияние.
                        "operation": "merge",
                        // Название элемента схемы, над которым производится действие.
                        "name": "AddRecordButton",
                        // Объект, свойства которого будут объединены со свойствами элемента схемы.
                        "values": {
                            "visible": {"bindTo": "getToolsVisible"}
                        }
                    }
                ]/**SCHEMA_DIFF*/
            };
        }
    );

  5. Код карточки контакта: define("ContactPageV2", [], function() {
        return {
            entitySchemaName: "Contact",
            attributes: {},
            modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
            details: /**SCHEMA_DETAILS*/{
                "UsrCaseDetail": {
                    "schemaName": "UsrCaseTestDetail",
                    "entitySchemaName": "UsrCaseTest",
                    "filter": {
                        "detailColumn": "UsrContact",
                        "masterColumn": "Id"
                    }
                }
            }/**SCHEMA_DETAILS*/,
            businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
            methods: {},
            dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
            diff: /**SCHEMA_DIFF*/[****]/**SCHEMA_DIFF*/};

Нравится

4 комментария
Лучший ответ

Ислам Ибрагимжанов,

У вас деталь (UsrCaseTest) привязана к карточке Контактов (Contact) по полю UsrContact.

Допустим, вы находитесь в карточке ИвановИван

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

Итого у вас в табличке UsrCaseTest запишутся значения:

ПетровПетр и СидоровСидр

 

Как вы хотите чтобы они отобразились в вашей карточке ИвановИван? У вас на детали стоит фильтр - отображать из таблицы UsrCaseTest те записи, в поле UsrContact лежит Id текущей записи - ИвановИван. Добавленные же записи вы сможете увидеть в карточке ПетровПетр или СидоровСидр (в соответствии с фильтром).

 

Чтобы все работало верно - посмотрите еще раз пример на академии.

Вам нужно 2 поля. Первое - связь с карточкой - по нему у вас привязана деталь UsrContact. Второе - в которое должны складываться выбранные значения. Пусть будет UsrSelectedContact. Исправляете в коде методы которые я говорил - и должно работать

Судя по коду, вы забываете заполнять колонку связи с вашим объектом (основной карточкой). Обратите внимание на функцию getDocumentInsertQuery в примере. Там заполняются 2 поля:

UsrOrder //связь с карточкой
UsrDocument // документ (то что выбираем из справочника)

 

Также обратите внимание на функцию addCallBack. В ней как раз и прокидывают поле связи с карточкой. Вы этот код также вырезали.

 

 

 

 

Fast traslate

 

Icon translate

 

 

 

Дмитрий Антохин,

Я их вырезал, потому что не смог понять зачем мне второй справочник. И после вашего ответа, так же мне не стало понятней, о какой связи идет речь? Можете пожалуйста более понятно описать, что я делаю не так или пропускаю.

Ислам Ибрагимжанов,

У вас деталь (UsrCaseTest) привязана к карточке Контактов (Contact) по полю UsrContact.

Допустим, вы находитесь в карточке ИвановИван

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

Итого у вас в табличке UsrCaseTest запишутся значения:

ПетровПетр и СидоровСидр

 

Как вы хотите чтобы они отобразились в вашей карточке ИвановИван? У вас на детали стоит фильтр - отображать из таблицы UsrCaseTest те записи, в поле UsrContact лежит Id текущей записи - ИвановИван. Добавленные же записи вы сможете увидеть в карточке ПетровПетр или СидоровСидр (в соответствии с фильтром).

 

Чтобы все работало верно - посмотрите еще раз пример на академии.

Вам нужно 2 поля. Первое - связь с карточкой - по нему у вас привязана деталь UsrContact. Второе - в которое должны складываться выбранные значения. Пусть будет UsrSelectedContact. Исправляете в коде методы которые я говорил - и должно работать

Дмитрий Антохин,

Вот теперь я четко понял, что не так. Благодарю за уделенное время. Все сработало с первого раза.

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

 

Доброго времени суток коллеги, столкнулся с проблемой. Мне нужно запустить БП который ставит статус в Обращении -> "Категория" = "Статус из ServieDesk" если обращения было создано в Рабочем месте скажем Портал.  Уточняю свой вопрос. Сотрудники которые создают обращения внутри компании через Рабочие место "Портал", то "Категория" у этого обращения должно автоматом проставляться "Статус из ServieDesk". Для более наглядности приложил скрин тут , так как не мог добавить здесь. Буду благодарен за помощь. Спасибо

 

 

Нравится

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

Добрый день!

 

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

Ярослав Савицкий,

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

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

Sorotiuk Anna,

Спасибо

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