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

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

Есть раздел, в котором есть поле, принимающее значения из этого справочника (UsrYesNo), а также ряд других полей, содержащих значения INTEGER (UsrIntValue), TEXT (UsrTextValue) и т.п.



Есть необходимость извлечь значение соответствующего поля в коде клиентской части. Примерно так:

 

// Возвращает целочиcленное значение, работает корректно
var a = this.get("UsrIntValue");
// Возвращает строковое значение, работает тоже корректно
var b = this.get("UsrTextValue");
// По идее, должно возвращать значение из справочника, выбранное для записи раздела.
// Но по факту выдает undefined.
var c = this.get("UsrYesNo.Name");

Что я делаю не так?

Нравится

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

Генин Юрий пишет:

var c = this.get("UsrYesNo").Name;

Да, верно. Мы берём поле и читаем его атрибуты. 

Указать эту колонку в attributes

attributes: {
     "UsrYesNo": {
          "dataValueType": Terrasoft.DataValueType.LOOKUP,
          "lookupListConfig": {
               "columns": ["Name"]
            }
      }
 }

Или в данном случае достаточно взять this.get("UsrYesNo").displayValue

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

Вариант с this.get("UsrYesNo").displayValue сработал, спасибо. Но добавление атрибута (в схему страницы редактирования) ничего не поменяло:  this.get("UsrYesNo.Name") все равно возвращает undefined. 

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

А вот так, кстати, сработало:

attributes: {
     "UsrYesNo": {          
          lookupListConfig: {
               columns: ["Name"]
            }
      }
 }

и

var c = this.get("UsrYesNo").Name;

Интересно, почему...

Генин Юрий пишет:

var c = this.get("UsrYesNo").Name;

Да, верно. Мы берём поле и читаем его атрибуты. 

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

Реализовать возможность полностью отключить возможность добавления новых записей через "Создать" в справочном поле

Иначе плодим большое ненужное количество дубликатов в справочниках и разделах.

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

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

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

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

 

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

И самое интересное, что в некоторых полях этой возможности нет (очевидно, настраивается каждое поле  карточки отдельно). Но не делать же это в каждом справочном поле по всей системе отдельно!

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

Если поле заведено как справочник, то пункт создать появляется. Если как список, то такого пункта нет. Возможность создания зависит от наличия страницы редактирования записи. Если у справочника, например, отрасль нет страницы редактирования, то система выдаст ошибку, что новые значения можно заводить через справочник. Если страница редактирования есть, то далее вступает в силу проверка на наличие полномочий. Для справочников это наличие полномочий на операцию CanManageLookups. Для полей, ссылающихся на разделы - это полномочия на операцию создать в объекте. Итого отвечая на ваш вопрос. Никак. Если у пользователя есть полномочия на создание записей в объекте, то он может его создать как через раздел, так и через пункт Создать в справочном поле. Как вариант можно настроить попробовать поиск дублей на требуемые разделы. Поиск дублей можно настроить на все разделы, где включен глобальный поиск.

Алексей Следь пишет:

Итого отвечая на ваш вопрос. Никак.

Это не вопрос, а идея. У нас все клиенты просят запретить эту возможность. До 7.13 это довольно легко решалось замещением модуля LookupQuickAddMixin.  

Но теперь этот путь замещения запретили, стало намного сложнее



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

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

то, что это идея, я заметил только после того как ответил))))

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

Алексей Следь пишет:

Например у меня пользователи очень просят дать им возможность самим заполнять справочник должностей

Ох, это отдельная проблема, что CanManageLookup - слишком неконфигурируемая вещь. Разные lookup'ы иногда нужно давать под управление разным ролям. 

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

Владимир Соколов пишет:

Ох, это отдельная проблема

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

Алексей Следь пишет:

отключен стандартный механизм проверки полномочий

Интересно! А как вы отключаете стандартный механизм проверки? 



Но этот обход вам не добавил нужную функцию "создать"?

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

 

По ответам:

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

Ещё зарегистрирована такая сложность в использовании функциональности: «Система не выдает никакого предупреждения если в справочниках создать значения с одинаковым именем.»

 

До 7.13 это довольно легко решалось замещением модуля LookupQuickAddMixin.  

Но теперь этот путь замещения запретили, стало намного сложнее

Сейчас тоже можно, я тут вчера написал. 

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

Такую идею зафиксировали ранее, см. комментарии тут.

Интересно! А как вы отключаете стандартный механизм проверки? 

См. мой ответ тут

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

Доброго дня, коллеги!

 

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

 

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

 

Заранее благодарю!

Нравится

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

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

 

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

Команда разработки ответственная за этот функционал в курсе существования этой проблемы и будет работать над внедрением ее решения в будущих релизах Creatio.

 

Вы можете вывести данный справочник как раздел. Тогда задача будет решена.

 

Для того, чтоб справочник можно было отобразить как раздел, начиная с версии 7.16.2 добавлена возможность создать раздел, используя существующий объект системы. Только нужно учесть, что если объект справочника стандартный (без Usr),  в таком разделе теги и группы работать не будут, поскольку для них не получится создать таблицы в Custom.

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

 

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

Команда разработки ответственная за этот функционал в курсе существования этой проблемы и будет работать над внедрением ее решения в будущих релизах Creatio.

 

Вы можете вывести данный справочник как раздел. Тогда задача будет решена.

 

Для того, чтоб справочник можно было отобразить как раздел, начиная с версии 7.16.2 добавлена возможность создать раздел, используя существующий объект системы. Только нужно учесть, что если объект справочника стандартный (без Usr),  в таком разделе теги и группы работать не будут, поскольку для них не получится создать таблицы в Custom.

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

Доброго дня, коллеги! Есть два вопроса:

 

  1. Возникла такая потребность, что в справочнике необходимо отобразить изображение и как его правильно загрузить в элемент справочника? 
  2. Как мне реализовать связь один к одному и один ко многим в справочниках? Мне необходимо вытягивать id-поле из одного справочника и присваивать его в другом. Есть ли какой-то способ?

 

Нравится

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

Добрый день. По первому пункту такое реализовано в справочнике "Приоритеты обращений" CasePriority (есть в продукте Service). Там можно провалиться в запись справочника и загрузить картинку.

Общий порядок действий примерно таков:

1) создать объект. назовем его BCActivityColor. Наследуем его от базового справочника и добавляем колонку BCImage (Ссылка на изображение).

Не забываем в настройках объекта установить "Изображение" - нашу колонку. запомним UID объекта

2) Создадим для справочника страницу редактирования (я взял коробочную CasePriorityLookupEditPageV2 и выкинул лишнее).  Реализуем там загрузку картинок.

страницу наследуем от Базовая страница справочника ( UIv2 ). пример: CasePriorityLookupEditPageV2

запомним UID странички

3) зарегистрируем нашу страницу редактирования для объекта (sql). 

Привяжем BCActivityColor_SysModuleEntity (указывается UId объекта который создали в п.1) и BCActivityColor_SysModuleEdit (указывается UId схемы странички которую создали в п.2)

не забыть перезайти в почистить кэш.

Пример регистрации страницы справочника CaseCasePriority_SysModuleEdit и CaseCasePriority_SysModuleEntity

4) после заполнения справочника не забыть привязать SysImage и значения нашего нового справочника.

Добрый день. По первому пункту такое реализовано в справочнике "Приоритеты обращений" CasePriority (есть в продукте Service). Там можно провалиться в запись справочника и загрузить картинку.

Общий порядок действий примерно таков:

1) создать объект. назовем его BCActivityColor. Наследуем его от базового справочника и добавляем колонку BCImage (Ссылка на изображение).

Не забываем в настройках объекта установить "Изображение" - нашу колонку. запомним UID объекта

2) Создадим для справочника страницу редактирования (я взял коробочную CasePriorityLookupEditPageV2 и выкинул лишнее).  Реализуем там загрузку картинок.

страницу наследуем от Базовая страница справочника ( UIv2 ). пример: CasePriorityLookupEditPageV2

запомним UID странички

3) зарегистрируем нашу страницу редактирования для объекта (sql). 

Привяжем BCActivityColor_SysModuleEntity (указывается UId объекта который создали в п.1) и BCActivityColor_SysModuleEdit (указывается UId схемы странички которую создали в п.2)

не забыть перезайти в почистить кэш.

Пример регистрации страницы справочника CaseCasePriority_SysModuleEdit и CaseCasePriority_SysModuleEntity

4) после заполнения справочника не забыть привязать SysImage и значения нашего нового справочника.

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

Добрый день.

 

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

Но выходит ошибка "Текущий пользователь не имеет прав на запуск администрируемой операции с кодом "CanManageLookups".

Как можно решить данную проблему?

Или необходимо полностью доступ к справочникам давать.

 

Нравится

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

Вариант 1. 

1. Зайдите в   Управление конфигурации - Права доступа на операции - 

2. Найдите операцию с кодом "CanManageLookups"

3. Добавьте нужному пользователю или роли права на эту операцию.

Вариант 2. 

Для объекта справочника измените Родительский объект на "Базовый объект", а не "Базовый справочник" и опубликуйте (при этом слетят базовые поля Name и Description)

 

Вариант 1. 

1. Зайдите в   Управление конфигурации - Права доступа на операции - 

2. Найдите операцию с кодом "CanManageLookups"

3. Добавьте нужному пользователю или роли права на эту операцию.

Вариант 2. 

Для объекта справочника измените Родительский объект на "Базовый объект", а не "Базовый справочник" и опубликуйте (при этом слетят базовые поля Name и Description)

 

Коновалов Игорь,

 

Спасибо за ответ.

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

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

Пробую использовать createInFilter. При дебаге четко вижу, что filteredAgreementsKeys это массив из двух Id. Однако фильтр не отрабатывает и ошибок в консоль не сыпется. Кто нибудь использовал in-Filter в конфигурационных схемах при открытии справочника?

openAgreementsLookup: function (filteredAgreementsKeys, scope) {
					debugger;
					var filterCollection = Terrasoft.createFilterGroup();
					var filter = Terrasoft.createInFilter("Id", filteredAgreementsKeys);
					filter.Name = "filter";
					filterCollection.add("filter", filter);
					var config = {
						entitySchemaName: "IDSBAgreement",
						multiSelect: true,
						columns: ["IDSBName", "IDSBPartnerCode"],
						filters: filterCollection
					};
 
					scope.openLookup(config, function (args) {
						scope.addCallBack(args, scope);
					}, scope);
				}

 

Нравится

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

Неоднократно задавал тут вопрос: возможно ли применить функционал расширенного фильтра к объекту "справочник".

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

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

  1. Создал раздел внутренними механизмами BPM
  2. Дропнул тейбл раздела в БД
  3. Создал представление (с inner join из 2 таблиц) с таким же названием в БД из п.2.
  4. Внес изменения в объект в БПМ - создал columns точь-в-точь как в представлении + установил признак "представление БД" (!)
  5. Закастомил страницу реестра.

Правда теперь не понимаю может ли эти изменения как-то негативно повлиять на работу приложения в целом?

Нравится

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

Использовать схемы на основе view вполне допустимо, парой сообщений ниже Алла Савельева как раз предлагает такое для решения вопроса с графиком.

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

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

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

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

ключевое слово - расширенный фильтр.

К справочнику его не применить.

Соответственно создал раздел, (руками его создавать - неблагодарное дело). А уже потом ахалай-махалай с Vw...

Случайно обнаружил: подобное действие с разделом привело к ошибке (см. принт-скрин).

  УРЛ https://[url_app]/0/ServiceModel/EntityDataService.svc/ для меня крайне важен...

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

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

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

Возник следующий вопрос.

Необходимо в реестр справочника, например Статусы обращения, вывести значения колонки IsFinal аналогично методу setSubtitleColumns согласно SDK

https://academy.terrasoft.ru/documents/technic-sdkmob/7-12/sdk-reestra

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

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

 

 

 

 

 

Пример необходимой реализации, колонка контакт:

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

 

 

 

 

 

 

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

Попытки задания Subtitle через дополнительный модуль, подключённый в манифесте для раздела Case, не дал результата. Что-то делаю не так.

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

Спасибо!

 

Нравится

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

Примеры использования этого свойства есть в «коробке» в схемах MobileLookupGridPageConfig, MobileLookupGridOpportunityPageConfig, MobileCaseMessageHistoryModuleConfig и MobileCaseMessageHistoryModuleConfig. Судя по названию, вторая схема как раз может использоваться для окна выбора из справочника. Её код:

Terrasoft.sdk.LookupGridPage.setSubtitleColumns("Opportunity", ["Account"]);

 

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

Добрый день!

Суть такова. В системе есть справочник в который занесены номера недель и соответствующие им календарные даты. (Например: Номер недели: 3; Дата: 14.01.2019 - 18.01.2019). 



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

Нравится

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

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Накидал на C# скрипт, который выдает список с данными (неделя, начало, конец, год). осталось вызывать раз в год

var data = WeekWorker.GetYearWeekData(2019);

и данные парсить в справочник

using System;
using System.Collections.Generic;
using System.Globalization;
 
namespace TestApp
{
    public class WeekData
    {
        public int year { get; set; }
        public int week { get; set; }
        public DateTime weekStart { get; set; }
        public DateTime weekEnd { get; set; }
    }
 
    public class WeekWorker
    {
        public static List<WeekData> GetYearWeekData(int year)
        {
            var weeksdata = new List<WeekData>();
 
            int weeks = GetWeeksInYear(year);
            for (int i = 1; i <= weeks; i++)
            {
                var firstDay = FirstDateOfWeekISO8601(year, i);
                var lastDay = firstDay.AddDays(6);
 
                weeksdata.Add(new WeekData() { year = year, week = i, weekStart = firstDay, weekEnd = lastDay });
            }
 
            return weeksdata;
        }
        public static int GetWeeksInYear(int year)
        {
            DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
            DateTime date1 = new DateTime(year, 12, 31);
            Calendar cal = dfi.Calendar;
            int weeks = cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);
            return weeks;
        }
 
        public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear)
        {
            DateTime jan1 = new DateTime(year, 1, 1);
            int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;
 
            // Use first Thursday in January to get first week of the year as
            // it will never be in Week 52/53
            DateTime firstThursday = jan1.AddDays(daysOffset);
            var cal = CultureInfo.CurrentCulture.Calendar;
            int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
 
            var weekNum = weekOfYear;
            // As we're adding days to a date in Week 1,
            // we need to subtract 1 in order to get the right date for week #1
            if (firstWeek == 1)
            {
                weekNum -= 1;
            }
 
            // Using the first Thursday as starting week ensures that we are starting in the right year
            // then we add number of weeks multiplied with days
            var result = firstThursday.AddDays(weekNum * 7);
 
            // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601
            return result.AddDays(-3);
        }
    }
 
}

 

Григорий Чех пишет:

Возможность есть 

1 БП запускайте по расписанию

2 С помощью элемента формула можно получить номер текущей неделе дальше обновить или что вам нужно сделать с этой записью

По работе в формуле с датами более подробно смотри тут

Расскажите, пожалуйста, подробнее про то как построить такой БП, а то я не понимаю какие элементы там должны присутствовать.

Все доступные в дизайнере элементы процесса описаны в руководстве.

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

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

Зверев Александр пишет:

Все доступные в дизайнере элементы процесса описаны в руководстве.

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

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

Поделились же, в первом и втором комментарии.

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

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

Пытаюсь в коде сбросить справочник

this.set("UsrDealerAccount", {value: null, displayValue: null});

но тогда не срабатывает правило REQUIRED, т.е. звездочка * рядом с полем есть, поле пустое, но страница может быть сохранена (в поле в базе сохраняется NULL). 

Если поставить на нее курсор и нажать BackSpace, то тогда всё правильно - не дает сохранить.

Что я делаю не так?

Нравится

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

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

Делайте так: 

this.set("UsrDealerAccount", null);

Литвинко Павел,Там потом ошибки в консоли валятся

Алексей-Карягин пишет:

Литвинко Павел,Там потом ошибки в консоли валятся

В каком случае и какие ошибки? 

Литвинко Павел,

у меня фильтрация этого поля правилом, когда туда плюхаешь нул, он ругается на этот нул.

Алексей-Карягин пишет:

Попробуйте тогда, вместо null использовать  Terrasoft.GUID_EMPTY может поможет

Литвинко Павел,

к сожалению, нет

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

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