Здравствуйте.
Версия 7.9.2

Необходимо в карточке CallMessagePublisherPage отфильтровать поле Contact по Контрагенту и изменить тип поля на ENUM

Фильтр реализовал в lookupListConfig атрибута Contact:

"Contact": {
   "isLookup": true,
   "lookupListConfig": {
     "columns": ["Account"],
     "filter":  function() {
       var filters = Ext.create("Terrasoft.FilterGroup");
       var listenerInfo = this.getListenerRecordData();
       if (listenerInfo.relationSchemaName === "Account" &&
          !Ext.isEmpty(listenerInfo.relationSchemaRecordId)) {
            var accountFilter = this.Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL,
                "Account",
                listenerInfo.relationSchemaRecordId);
            filters.add("AccountFilter", accountFilter);
        }
       return filters;
     }
   }
}

При нажатии на "лупу" (Открытие окна выбора из справочника) справочник контактов отфильтрован корректно.
Однако, при смене contentType на ENUM или при нажатии клавиши "Вниз" стандартного справочного поля фильтрация значений не происходит, хотя указанный выше код так же отрабатывает.

В чем причина такого поведения?

Нравится

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

"Коновалов Игорь" написал:В чем причина такого поведения?

Попробовал на тестовой 7.9.1 - всё воспроизводится, проверил на 7.8.0 у клиента (мы там ему enum поле фильтровали в активности) - там всё идеально работает, фильтруется через lookupConfig.

Помнится когда начинал изучать bpm, то столкнулся с подобной проблемой. Спросил у ТП, ребята говорят: "переопределяйте change и prepareListConfig" при описании контрола (что дико неудобно)

Вывод: хрен знает как оно вообще работает ¯\_(ツ)_/¯

Вам стоит смотреть в сторону добавления свойства orders в lookupListConfig. К примеру:

"EmployeesNumber": {
	lookupListConfig: {
		orders: [{columnPath: "Position"}]
	}
}

"Мотков Илья" написал:

Вам стоит смотреть в сторону добавления свойства orders в lookupListConfig. К примеру:

"EmployeesNumber": {

        lookupListConfig: {

                orders: [{columnPath: "Position"}]

        }

}

Илья, здравствуйте.
Мне не нужна сортировка. Нужна фильтрация выпадающего списка.
Я использую стандартное свойство filter в lookupListConfig.

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

"Мотков Илья" написал:

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


Т.е. стандартная фильтрация для справочных полей при использовании выпадающих списков, начиная с 7.9, не работает?

Игорь, фильтрация выпадающих списков через lookupListConfig отрабатывает в 7.9.2. Проблема заключается в том, что логика работы с свойством filters прописана в BasePageV2(NUI). Схема CallMessagePublisherPage не наследуется от BasePageV2.

Вам стоит смотреть в сторону копирования части логики из BasePagev2 в Вашу схему.

Да, спасибо. Уже реализовал через prepareList

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

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

Возникла следующая проблема: создали преднастроенную страницу (добавили нужные поля и кнопки). На странице должно быть 4 LOOKUP поля и 1 TEXT. Лукап поля должны заполняться автоматически и быть недоступными для редактирования. Заполнение полей должно происходить в процессе из объекта Юр. Лиц, но не получается заполнить эти поля (не отображаются на странице).

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

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

С уважением,
Дмитрий

 

define("RefillManagerPageV2", ["CustomProcessPageV2Utilities", "ConfigurationEnums"],
        function(ProcessPageUtilities, Enums) {
                return {
                        mixins: {
                                BaseProcessViewModel: "Terrasoft.CustomProcessPageV2Utilities"
                        },
                        attributes: {
                                "Account": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Account"
                                },
                                "Category": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "AccountCategory"
                                },
                                "CurrentManager": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Contact"
                                },
                                "NewManager": {
                                        dataValueType: Terrasoft.DataValueType.LOOKUP,
                                        referenceSchemaName: "Contact"
                                },
                                "RefillReason": {
                                        name: "Reason",
                                        dataValueType: Terrasoft.DataValueType.TEXT
                                }
                        },
                        methods: {
        /*                      onEntityInitialized: function() {
                                        this.callParent(arguments);
                                        var processData = this.get("ProcessData");
                                        var processParameters = processData.parameters;
                                        if (processParameters) {
                                                this.set("CurrentManager", processParameters.CurrentManager);
                                                this.set("NewManager", processParameters.NewManager);
                                                this.set("Account", processParameters.Account);
                                                this.set("Category", processParameters.Category);
                                                this.set("RefillReason", processParameters.RefillReason);
                                        }
                                },*/

                               
                                getHeader: function() {
                                        return this.get("Resources.Strings.HeaderLcz");
                                },
                                initHeaderCaption: Ext.emptyFn,
                               
                                onNextButtonClick: function() {
                                        this.acceptProcessElement("NextCode");
                                },
                                onDiscardChangesClick: function() {
                                        this.cancelProcessElement("CancelCode");
                                },
                                loadVocabulary: function(args, tag) {
                                        var column = this.getColumnByName(tag);
                                        args.schemaName = column.referenceSchemaName;
                                        this.callParent(arguments);
                                }
                        },
                        diff: /**SCHEMA_DIFF*/[
                                {
                                        "operation": "remove",
                                        "name": "CloseButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "actions"
                                },
                                {
                                        "operation": "remove",
                                        "name": "SaveButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "DelayExecutionButton"
                                },
                                {
                                        "operation": "remove",
                                        "name": "ViewOptionButton"
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "LeftContainer",
                                        "propertyName": "items",
                                        "name": "SendToApproveButton",
                                        "values": {
                                                caption: { bindTo: "Resources.Strings.SendToApproveButtonCaption" },
                                                itemType: Terrasoft.ViewItemType.BUTTON,
                                                classes: {textClass: "actions-button-margin-right"},
                                                style: Terrasoft.controls.ButtonEnums.style.GREEN,
                                                click: {bindTo: "onNextButtonClick"}
                                        }
                                },
/*                              {
                                        "operation": "insert",
                                        "parentName": "LeftContainer",
                                        "propertyName": "items",
                                        "name": "NotSendToApproveButton",
                                        "values": {
                                                caption: { bindTo: "Resources.Strings.NotSendToApproveButtonCaption" },
                                                itemType: Terrasoft.ViewItemType.BUTTON,
                                                classes: {textClass: "actions-button-margin-right"},
                                                style: Terrasoft.controls.ButtonEnums.style.RED,
                                                click: {bindTo: "onDiscardChangesClick"}
                                        }
                                },*/

                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "CurrentManager",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.CurrentManagerLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "CurrentManager",
                                                "layout": { "column": 0, "row": 2, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "NewManager",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.NewManagerLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "NewManager",
                                                "layout": { "column": 0, "row": 3, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "Account",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.AccountLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "Account",
                                                "layout": { "column": 0, "row": 0, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "Category",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.CategoryLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "Category",
                                                "layout": { "column": 0, "row": 1, "colSpan": 12 },
                                                "enabled": true
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "parentName": "Header",
                                        "propertyName": "items",
                                        "name": "RefillReason",
                                        "values": {
                                                "caption": { "bindTo": "Resources.Strings.RefillReasonLcz" },
                                                "contentType": Terrasoft.ContentType.LOOKUP,
                                                "bindTo": "RefillReason",
                                                "layout": { "column": 0, "row": 4, "colSpan": 12 },
                                                "enabled": true
                                        }
                                }
                        ]/**SCHEMA_DIFF*/,
                        userCode: {}
                };
        });

 

Нравится

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

Добрый день.

Для решения Вашей задачи необходимо:

1) Заполнить свойство Parameters в структуре схеме необходимыми Вам атрибутами.
2) Добавить элемент "Преднастроенная страница" в БП.
3) Убедиться, что у элемента появились необходимые параметры.
3) Заполнять в БП параметры элемента (пункт 2).

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

"Мотков Илья" написал:

1) Заполнить свойство Parameters в структуре схеме необходимыми Вам атрибутами.


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

Добрый день, Дмитрий.

Наглядно показал на скриншоте.

Примеры работы с параметрами в js коде, Вы можете посмотреть в схеме LeadManagementDistributionPageV2

Тёскин Дмитрий Валерьевич,

Вы прикалываетесь? серьезно? в 

LeadManagementDistributionPageV2 нет параметров.

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

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

esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                                                                rootSchemaName: "CurrencyRate"
                                                        });
                                                        esq.addColumn("Rate");
                                                        //var startDate = esq.addColumn('StartDate');
                                                        //startDate.orderDirection = Terrasoft.OrderDirection.DESC;
                                                       
                                                        var yesterday = new Date();
                                                        var tomorrow = new Date();
                                                        yesterday.setDate(tomorrow.getDate() - 1);
                                                        tomorrow.setDate(tomorrow.getDate() + 1);
                                                       
                                                        esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
                                                                        this.Terrasoft.ComparisonType.EQUAL, "Currency", this.get("LogCurrencyRow").value));
                                                        esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
                                                                        this.Terrasoft.ComparisonType.GREATER, "Startdate", yesterday));
                                                        esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
                                                                        this.Terrasoft.ComparisonType.LESS, "Startdate", tomorrow));

                                                        esq.getEntityCollection(function(response) {
                                                                if (response.success) {
                                                                        response.collection.each(function(item) {
                                                                                CurrencyRate = item.get("Rate");
                                                                        }, this);
                                                                }
                                                                else if (CurrencyRate === 0)
                                                                {

Не могу разобраться с датой. Без даты работает.
Что не так?
Помогите пож-та.

Нравится

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

"Юсупов Марат" написал:esq.addColumn('StartDate');

"Юсупов Марат" написал:this.Terrasoft.ComparisonType.GREATER, "Startdate", yesterday))

Так StartDate или Startdate? А вообще, хотелось бы увидеть скрин консоли с ошибкой)

Также обратите внимание, что в переменную yesterday и tomorrow попадёт текущее время:

yesterday
Sun Mar 19 2017 16:14:13 GMT+0300 (RTZ 2 (зима))
tomorrow
Tue Mar 21 2017 16:14:13 GMT+0300 (RTZ 2 (зима))

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

yesterday = Terrasoft.startOfDay(yesterday)
Sun Mar 19 2017 00:00:00 GMT+0300 (RTZ 2 (зима))
tomorrow = Terrasoft.endOfDay(tomorrow)
Tue Mar 21 2017 23:59:59 GMT+0300 (RTZ 2 (зима))

Данила, спасибо.
Привыкнуть не могу что регистр важен.
Заработало, спасибо.

var LogCurrencyUpper = this.get("LogCurrencyRow"); //.value; toUpperCase()
 
							esq = Ext.create("Terrasoft.EntitySchemaQuery", {
								rootSchemaName: "CurrencyRate"
							});
							esq.addColumn("Rate");
							var yesterday = new Date();
							yesterday = Terrasoft.startOfDay(yesterday)
							var today = new Date();
							today = Terrasoft.endOfDay(today)
 
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.EQUAL, "Currency", this.get("LogCurrencyRow").value));
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.GREATER, "StartDate", yesterday));
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.LESS, "StartDate", today));
 
							esq.getEntityCollection(function(response) {
								if (response.success) {
									response.collection.each(function(item) {
										CurrencyRate = item.get("Rate");
									}, this);
								}
								else if (CurrencyRate === 0)
								{
//код
								}

Спасибо еще раз. :smile:

Чтото перестало работать
ошибка в консоли

Error while sending request 
	response status: 500 (FormatException)
	request url: ../DataService/json/SyncReply/SelectQuery
	method: POST
	request data: {"rootSchemaName":"CurrencyRate","operationType":0,"filters":{"items":{"b5859fc2-36c6-4b78-a147-1a8f8cbff7cd":{"filterType":1,"comparisonType":3,"isEn...
var _tomorrow = new Date();
							_tomorrow.setDate(_tomorrow.getDate() + 1);
							var _yesterday = new Date();
							_yesterday.setDate(_yesterday.getDate() - 1);
 
							_tomorrow = Terrasoft.endOfDay(_tomorrow);
							_yesterday = Terrasoft.startOfDay(_yesterday);
 
 
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.EQUAL, "Currency", LogCurrencyRow));
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.GREATER, "StartDate", _yesterday));
							esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
									this.Terrasoft.ComparisonType.LESS, "StartDate", _tomorrow));
 
							esq.getEntityCollection(function(response) {
 
}
 
								else
								{
									}

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

Id CreatedOn CreatedById ModifiedOn ModifiedById StartDate EndDate CurrencyId Rate ProcessListeners RateMantissa
906BD40D-2955-4E62-9F84-44B46CB6F5BF 2017-03-22 10:08:54.057 NULL 2017-03-22 10:08:54.057 NULL 2017-03-22 NULL C0057119-53E6-DF11-971B-001D60E938C6 62.2699 0

Еще нашел такое у responce

В "{0}" ожидалось шестнадцатеричное значение 0x.

Нашел свой косяк.

esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(
                                                                        this.Terrasoft.ComparisonType.EQUAL, "Currency", LogCurrencyRow.value));
Показать все комментарии

Добрый день.
Не могу корректно настроить колонки в двухуровневом справочнике. bpm'online 7.9.1.
В настройках схем выделенных колонок нет. но при открытии справочника они отображаются.

вот схемы:


Нравится

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


1. Правая кнопка мыши на шапке таблицы,
2. настроить колонки.

Настраивал. При открытии справочника колонки возвращаются.

Настраивать видимость колонок нужно в схемах страниц реестра. Также, возможно, на уровне БП страниц есть какая-то логика в скриптах, изменяющая видимость.

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

Настраивать видимость колонок нужно в схемах страниц реестра. Также, возможно, на уровне БП страниц есть какая-то логика в скриптах, изменяющая видимость.


В том то и дело что на схеме страниц реестра нет данных колонок, при предпросмотре они не отображаются, а вот когда открываю из справочника они появляются...
В БП я нигде не нашёл как можно настроить колонки. Можете подсказать где искать?

А если в странице реестра добавить эту колонку, но со снятой галкой «Отображать в реестре»?

Также учтите, что пользовательская настройка видимости и ширины колонок в интерфейсе 5.Х хранится в профиле пользователя. Вы можете очистить профиль пользователя (удалением записей пользователя в SysProfileData) и все колонки во всех реестрах будут сброшены к значениям из дизайнера.

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

А если в странице реестра добавить эту колонку, но со снятой галкой «Отображать в реестре»?

Также учтите, что пользовательская настройка видимости и ширины колонок в интерфейсе 5.Х хранится в профиле пользователя. Вы можете очистить профиль пользователя (удалением записей пользователя в SysProfileData) и все колонки во всех реестрах будут сброшены к значениям из дизайнера.


Галочка "Отображать в реестре" снята.
Дело в том что эта колонка установлена в настройках объекта как "Наименование".
Если установить в данное поле другую колонку, то установленная колонка и отображается и не поддаётся настройкам.

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

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

Всем доброго времени суток.

Версия 7.9 sales.

На странице создания письма EmailPage существует специальное поле Кому со справочником E-mail адресов (см. скриншот).

Возможно ли вывести в виде отдельной колонки связанные контакты, а не просто id?

Уточню вопрос. Допустим, я переопределю объект VwRecepientEmail и добавлю в него справочную колонку Контакт. Где происходит добавление записей в VwRecepientEmail, на каком этапе после сохранения контакта? По идее тогда можно вытащить по id из соседней колонки запросом данные контакта и подставить их в нужную колонку.

И не нарушит ли такое переопределение и добавление работу справочника адресов?

Нравится

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

"Смородинов Денис" написал:Где происходит добавление записей в VwRecepientEmail

Нигде. Это вьюшка.
"Смородинов Денис" написал:Возможно ли вывести в виде отдельной колонки связанные контакты, а не просто id?

Возможно. Но сначала, хвала тому гению, который во вьюшке [VwRecepientEmail] поле ContactId создал как guid) Порядок действий, чтобы поправить:
1) переопределяете объект "E-mail адреса", добавляете справочную колонку (название например TmContact, ссылка на справочник "Контакт"). Сохраняете, не публикуете
2) ищете в бд VwRecepientEmail, создаете скрипт create, редактируете. Надо в select добавить колонку из объекта. В моём случае:

CREATE VIEW [dbo].[VwRecepientEmail]
AS
SELECT [Id], [Name] + ' <' + [Number] + '>' AS [Email], [d].[UseEmail], [d].[ContactId], [d].[ContactId] AS [TmContactId]...

Дропаете view и пересоздаёте заново с новой колонкой
3) чистите кэш, настраиваете колонки .

Возможно стоит потом sql скрипт вынести в систему, чтобы при обновлении структура вьюшки не полетела

Данила, ясно, спасибо.

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

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

Нравится

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

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

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

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

"Мотков Илья" написал:

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

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

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


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

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

Роли и пользователи хранятся в таблице SysAdminUnit. У каждой роли (кроме "Все сотрудники компании" и "Пользователи портала") заполнено значение поля ParentRoleId, которое хранит значение родительской роли (для отрисовки позиции роли в организационной структуре).

Вхождение пользователя в роли определено в таблице SysUserInRole. После выполнения действия актуализации ролей, данные переносятся в таблицу SysAdminUnitInRole.

Также см. чуть подробнее тут.

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

Доброго времени суток!
Столкнулся с данной проблемой при переносе системных настроек, а вернее их значений.
Системные настройки связаны с визированием моего (нового) раздела Заявки на обучение.
Итак при попытке перенести системные настройки всё проходит гладко, за исключением одного но.
Значения не удается перенести в созданные системные настройки.
Обе настройки были созданы по подобию существующих. И после того как установлены новые настройки, в БД в таблице SysSettingValue значения для соответствующих настроек есть, но в системе поле отвечающее за это значение "Значение по умолчанию" остается пустым, а если в него попытаться добавить объект из справочника, то не сохраняется.
В чем может быть проблема или объясните, каким образом перенести данные системные настройки? Ниже приведу листинг sql-сценариев для установки значений.

DECLARE @email UNIQUEIDENTIFIER;
SET @email = (SELECT Id FROM dbo.EmailTemplate WHERE Name = 'Шаблон уведомления о новой визе заявки на обучение')
DECLARE @schemaId UNIQUEIDENTIFIER;
SET @schemaId = (SELECT Id FROM dbo.SysSettings WHERE Name = 'Шаблон Email для отправки информации о визе заявки на обучение')
INSERT INTO dbo.SysSettingsValue (SysSettingsId, SysAdminUnitId, GuidValue, Position)
VALUES (@schemaId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', @email, '2147483647')


DECLARE @schemaId uniqueidentifier;
SET @schemaId = (SELECT Id FROM dbo.SysSettings WHERE Name = 'Процесс визирования заявки на обучение')
DECLARE @processUId uniqueidentifier;
SET @processUId = (SELECT Id FROM dbo.SysSchema WHERE Name = 'Визирование заявки на обучение')
INSERT INTO dbo.SysSettingsValue (SysSettingsId, SysAdminUnitId, GuidValue, Position)
VALUES (@schemaId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', @processUId, '2147483647')

Нравится

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

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

Необходимо заполнить еще одно поле. Исправил SQL запрос:

INSERT INTO dbo.SysSettingsValue (SysSettingsId, SysAdminUnitId, GuidValue, Position, isDef)
VALUES (@schemaId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', @processUId, '2147483647', 1)

Попробуйте так. также хочу обратить внимание, что для роли 'A29A3BA5-4B0D-DE11-9A51-005056C00008' в SysSettingsValue должно быть одно значение.

"Демьяник Алексей" написал:

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

Необходимо заполнить еще одно поле. Исправил SQL запрос:

INSERT INTO dbo.SysSettingsValue (SysSettingsId, SysAdminUnitId, GuidValue, Position, isDef)

VALUES (@schemaId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', @processUId, '2147483647', 1)

Попробуйте так. также хочу обратить внимание, что для роли 'A29A3BA5-4B0D-DE11-9A51-005056C00008' в SysSettingsValue должно быть одно значение.


Добрый день, предполагаете что в недостатке этой колонки была ошибка?
Сами системные настройки были перенесены через данные, а вот значения таким образом не получилось. И как я писал выше, в эти созданные системные колонки не получается значения установить.
Наличие id справочников в бд есть, а в приложении они отсутствуют.
Так же обращу внимание, что у большинства, если не у всех, значений сис. настроек SysAdminUnitId это именно этот Id и он относится ко Всем сотрудникам компании.

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

Проблема заключается в недостающих колонках в таблице SysSettingsValue. Пример для системной настройки, работающей с справочником Активность:

insert into SysSettings values (NEWID(), GETDATE(), GETDATE(), '410006E1-CA4E-4502-A9EC-E54D922D2C00', '410006E1-CA4E-4502-A9EC-E54D922D2C00',
'test', 'Lookup', 0, 1, NULL, 'test', '', 0, 'C449D832-A4CC-4B01-B9D5-8A12C42A9F89', 0)
 
insert into SysSettingsValue values (NEWID(), GETDATE(), GETDATE(), '410006E1-CA4E-4502-A9EC-E54D922D2C00', '410006E1-CA4E-4502-A9EC-E54D922D2C00',
'13056A6F-93C8-4F18-8CC2-2423E8EF30DC', 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, '', 0, 0.00, 0, NULL,
'DFC877FE-B6B5-46C7-9346-A703D858B14E', NULL, 2147483647, 0)

Оба запроса выполнялись последовательно и переменных объявлять не требовалось.

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

Всем доброго времени суток.

Версия 7.9 sales.

Ситуация такая: добавили в деталь Средства связи Контакта вторую колонку Email (может быть два адреса у контакта). Ей выставили соответствующий тип.

Но на детали фактически созданное поле является текстовой строкой (см. скриншот). Как её сделать такой же ссылкой?

Нравится

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

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

if(new Select(userConnection)
                                                .Column("StartDate")
                                                .From("CurrencyRate")
                                                .Where("StartDate").IsEqual(Column.Const(_date)).Execute() > 0)
{
  // код
}

Как я понимаю можно так?

Нравится

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

Если это серверная логика, то так:

if ((new Select(UserConnection).Column(Func.Count("Id")).From("ActivityCorrespondence").Where("ActivityId").IsEqual(Column.Parameter(Entity.ActivityId)) as Select).ExecuteScalar<int>() > 0) {
//...
}

Также учтите, что поле «StartDate» хранит дату-время, поэтому на равенство сравнивать нет смысла, нужно взять интервал двух дат начала и конца периода (то есть дня) и сравнивать при помощи «IsLessOrEqual» и «IsGreaterOrEqual».

Вышла ошибка как только переделал

UserConnection является тип но используется как переменная

if ((new Select(UserConnection)
.Column(Func.Count("Rate"))
.From("CurrencyRate")
.Where("StartDate").IsLessOrEqual(Column.Const(_today))
.And("StartDate").IsGreaterOrEqual(Column.Const(_yesterday))
.ExecuteScalar() > 0))
{
return "That date already exists!";
} else {

Напишите с маленькой буквы.

Нашел ошибку в коде
Но ошибка все равно выходит

Чтобы ошибка не выходила, её нужно исправить.

Мой косяк.
Спасибо, заработало.

DateTime _today = DateTime.Today;
				DateTime _yesterday = DateTime.Today.AddDays(-1);
				var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
 
				var entityRowCount = (new Select(userConnection)
						.Column(Func.Count("Rate"))
						.From("CurrencyRate")
						.Where("StartDate").IsLessOrEqual(Column.Const(_today))
							.And("StartDate").IsGreaterOrEqual(Column.Const(_yesterday))
						as Select).ExecuteScalar<int>();
				if ( entityRowCount > 0) 
				{
					return "That date already exists!";
				} else {

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

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

Как устанавливается связь между деталью и ее страницей редактирования ?
Не удается найти упоминаний в исходном коде или в какой либо записи в БД, что явным образом бы связывало деталь и ее страницу редактирования, неужели связь происходит по имени схемы ?

Схема детали указывается при объявлении детали в схеме карточки куда она добавляется, там же указывается и целевой объект БД, мастер-колонки и т.д.
В таблице SysDetails существует запись которая связывает конкретную деталь ее наименование и опять же объект детали.
Где-же связь со страницей редактирования ?

Нравится

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

"Севостьянов Илья Сергеевич" написал:Как устанавливается связь между деталью и ее страницей редактирования ?

sql запросом

Ну в смысле SQL-запросом.
Вот деталь CustomDetail для объекта CustomObject:
1) Создаем схему детали - CustomDetailScheme

define("СustomDetailScheme", [], function() {
	return {
		entitySchemaName: "CustomObject",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {}
	};
});

2) Создаем страницу редактирования CustomObjectAddPage ([color=red]это я так хотел бы ее назвать[/color], мастер создает CustomObject1Page)

define("CustomObjectAddPage", [], function() {
	return {
		entitySchemaName: "CustomObject",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "SomeField4e5d48ba-e8d3-4e7f-936d-cbf296d05c99",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "SomeField"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			}
		]/**SCHEMA_DIFF*/,
		methods: {},
		rules: {}
	};
});

3) В некой схеме карточки, например в схеме Контакта - в замещающем объекте объявляем добавление на страницу, в синтаксисе которого определяется объект детали и ее схема, а так же колонки по которым запись текущей карточки объединяется с записью в объекте детали:

define("ContactPageV2", [],
	function() {
		return {
			entitySchemaName: "Contact",
			attributes: {},
			details: {
				"myCustomDetail": {
					"schemaName": "СustomDetailScheme",
					"filter": {
						"detailColumn": "Contact",
						"masterColumn": "Id"
					}
				}
			},
			diff: [
				{
					"operation": "insert",
					"name": "myCustomDetail",
					"values": {
						"itemType": 2,
						"markerValue": "added-detail",
						"visible": true
					},
					"parentName": "GeneralInfoTab",
					"propertyName": "items",
					"index": 3
				}
			],
			methods: {}
		};
	}
);

Саму же деталь, называем "КастомнаяДеталь" и регистрируем
запись в SysDetail в которой собственно и сопоставляются:
"Заголовок" (Caption) к UId записям в таблице SysSchema - схемы детали (DetailSchemaUId) и схемы объекта детали (EntitySchemaUId)

Связи схемы детали и объекта детали - аш в 3-х местах, и ни единого упоминания страницы редактирования для объекта детали ни в коде ни в БД.
Каким же образом созданная мастером CustomObject1Page работает, а стоит создать схему мне самостоятельно и назвать ее CustomObjectAddPage то каким образом мне установить ее как странице редактирования для детали - ни в коде ни в БД я не нашел упоминаний, мысль только одна - что схема карточки редактирования объекта детали выбирается по имени, т.е. для детали с объектом CustomObject бедт осуществляться поиск схемы CustomObject[цифра]Page .
Так что ли получается ?

"Севостьянов Илья Сергеевич" написал:Так что ли получается ?

Нет, связь происходит через таблицу SysModuleEdit через развязочный объект SysModuleEntity. К примеру:

Вот объект:
SELECT * FROM SysSchema WHERE Name = 'Opportunity' AND ExtendParent = 0
запоминаем его UId --ae46fb87-c02c-4ae8-ad31-a923cdd994cf

Вот его развязочная запись:
SELECT * FROM SysModuleEntity WHERE SysEntitySchemaUId = 'ae46fb87-c02c-4ae8-ad31-a923cdd994cf'
Запоминаем Id --a4e7bf65-7380-e011-afbc-00155d04320c

Ну и вот страница(цы) редактирования:
SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = 'a4e7bf65-7380-e011-afbc-00155d04320c'

Вот собственно в SysModuleEdit и можно подменить страницу.

Спасибо, вот теперь ситуация немного прояснилась, там же и UId миникарточки и еще мног овсего интересного :)

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