Скриншот ошибки

Возникает ошибка TypeError: Cannot read property 'name' of undefined в месте на скриншоте (скрипт ProfileUtilities.js) при переходе на страницу созданого мной раздела. Прошу подсказки о возможной причине возникшей ошибки, так как уважаемые создатели данной чудо-системы не сочли нужным позаботиться о разработчиках и сделать проверки входных данных и выкидывания человеческих ошибок с понятными объяснениями проблем.

Нравится

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

Вроде как пытается из профиля пользователя вытащить настройки колонок для реестра, но фейлится.
Можно попробовать настроить колонки заново или сбросить профиль пользователя.

"Варфоломеев Данила" написал:

Вроде как пытается из профиля пользователя вытащить настройки колонок для реестра, но фейлится.

Можно попробовать настроить колонки заново или сбросить профиль пользователя.


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

"Франчук Виталий" написал:прописать, если не секрет?

Либо ручками настроить через вид-настройка колонок.
Либо кодом в diff(взял первый попавшийся пример из конфигурации):

{
	"operation": "merge",
	"name": "DataGrid",
	"values": {
		"type": "listed",
		"listedConfig": {
			"name": "DataGridListedConfig",
			"items": [
				{
					"name": "RelatedObjectListedGridColumn",
					"bindTo": "RelatedObjectName",
					"position": {"column": 0, "colSpan": 12},
					"type": Terrasoft.GridCellType.TITLE,
					"caption": resources.localizableStrings.RelatedObjectName
				},
				{
					"name": "RelationTypeListedGridColumn",
					"bindTo": "RelationType",
					"position": {"column": 13, "colSpan": 12}
				}
			]
		},
		"tiledConfig": {
			"name": "DataGridTiledConfig",
			"grid": {"columns": 24, "rows": 3},
			"items": [
				{
					"name": "RelatedObjectTiledGridColumn",
					"bindTo": "RelatedObjectName",
					"position": {"row": 1, "column": 0, "colSpan": 12},
					"type": Terrasoft.GridCellType.TITLE,
					"caption": resources.localizableStrings.RelatedObjectNameCaption
				},
				{
					"name": "RelationTypeTiledGridColumn",
					"bindTo": "RelationType",
					"position": {"row": 1, "column": 13, "colSpan": 12}
				}
			]
		}
	}

"Варфоломеев Данила" написал:
Франчук Виталий пишет:

прописать, если не секрет?

Либо ручками настроить через вид-настройка колонок.

Либо кодом в diff(взял первый попавшийся пример из конфигурации):

{

        "operation": "merge",

        "name": "DataGrid",

        "values": {

                "type": "listed",

                "listedConfig": {

                        "name": "DataGridListedConfig",

                        "items": [

                                {

                                        "name": "RelatedObjectListedGridColumn",

                                        "bindTo": "RelatedObjectName",

                                        "position": {"column": 0, "colSpan": 12},

                                        "type": Terrasoft.GridCellType.TITLE,

                                        "caption": resources.localizableStrings.RelatedObjectName

                                },

                                {

                                        "name": "RelationTypeListedGridColumn",

                                        "bindTo": "RelationType",

                                        "position": {"column": 13, "colSpan": 12}

                                }

                        ]

                },

                "tiledConfig": {

                        "name": "DataGridTiledConfig",

                        "grid": {"columns": 24, "rows": 3},

                        "items": [

                                {

                                        "name": "RelatedObjectTiledGridColumn",

                                        "bindTo": "RelatedObjectName",

                                        "position": {"row": 1, "column": 0, "colSpan": 12},

                                        "type": Terrasoft.GridCellType.TITLE,

                                        "caption": resources.localizableStrings.RelatedObjectNameCaption

                                },

                                {

                                        "name": "RelationTypeTiledGridColumn",

                                        "bindTo": "RelationType",

                                        "position": {"row": 1, "column": 13, "colSpan": 12}

                                }

                        ]

                }

        }


Большое спасибо, уже не раз помогаешь)

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

Добрый день.

Где хранить аутентификационные данные для внешних веб сервисов, если учетные данные общие для всех пользователей?

У меня есть 2 варианта:
1) Хранить из непосредственно в исходниках сервиса

var client = new Namespace.SomeService();
client.Credentials = new NetworkCredential("login", "pass", "domain");

2) Хранить их в системных настройках, для этого придется создать 3 настройки и при вызове сервиса постоянно обращаться к ним.

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

Нравится

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

Рекомендую использовать первый вариант, т.к. при втором варианте будет обращение к БД (если настройки не кэшируются).
Если планируется изменение учетных данных, то использовать второй вариант, но установив признак кэшируется.

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

Добрый день!
При создании портального обращения существует возможность форматирования текста и добавления в него стилей (изменение шрифта, размера, выравнивания и т.д.)

При изменении стилей и сохранении обращения, в тему обращения попадают html-теги:

Как можно запретить использование стилей или сделать так, чтобы в тему попадал только текст без html-тегов?

Нравится

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

Антон, попробуйте найти в схеме и убрать атрибут
"contentType": Terrasoft.ContentType.RICH_TEXT - это атрибут который добавляет инструменты редактирования текста.

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

Антон, попробуйте найти в схеме и убрать атрибут

"contentType": Terrasoft.ContentType.RICH_TEXT - это атрибут который добавляет инструменты редактирования текста.

Илья добрый день!
Нашел замещающую схему PortalMessagePublisherPage и добавил в неё блок замещения объекта PortalMessageBody:

diff: /**SCHEMA_DIFF*/[
  {
   "operation": "merge",
   "name": "PortalMessageBody",
   "values": {
   "bindTo": "Message",
   /*"contentType": this.Terrasoft.ContentType.RICH_TEXT,*/
   "generator": "InlineTextEditViewGenerator.generate",
   "labelConfig": {
   "visible": true
   },
   "markerValue": "PortalMessageBody",
   "placeholder": {
      "bindTo": "PortalEditControlHintText"
   }
  },
 "parentName": "BodyContainer",
 "propertyName": "items"
 }
 ]/**SCHEMA_DIFF*/

Закомментировал строку
"contentType": this.Terrasoft.ContentType.RICH_TEXT
но инструмент для редактирования текста остался доступен.
Подскажите пожалуйста, что я делаю не так?

"Молчанов Антон Сергеевич" написал:Подскажите пожалуйста, что я делаю не так?

Можно так попробовать:

diff: /**SCHEMA_DIFF*/[
{
   "operation": "remove",
   "name": "PortalMessageBody"
},
  {
   "operation": "insert",
   "name": "PortalMessageBody",
   "values": {
   "bindTo": "Message",
   "contentType": this.Terrasoft.ContentType.LONG_TEXT, //для того, чтобы текст растягивался в ширину
   "labelConfig": {
   "visible": true
   },
   "markerValue": "PortalMessageBody",
   "placeholder": {
      "bindTo": "PortalEditControlHintText"
   }
  },
 "parentName": "BodyContainer", //в идеале в контейнер вставить GRID_LAYOUT и прописать layout в values (растянуть окошко с текстом на пару рядов)
 "propertyName": "items"
 }
 ]/**SCHEMA_DIFF*/

"Варфоломеев Данила" написал:Можно так попробовать:

Как только я убираю строчку:

"generator": "InlineTextEditViewGenerator.generate",

Текстовая строка исчезает (нельзя набрать текст)

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

Если я убираю строчку

"contentType": this.Terrasoft.ContentType.RICH_TEXT

Панель для редактирования текста остается доступной

Может быть можно просто запретить отображение этой панели?

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

Сначала необходимо добавить блок удаления PortalMessageBody:
{
"operation": "remove",
"name": "PortalMessageBody"
}

Затем добавить его заново, изменив contentType на "this.Terrasoft.ContentType.LONG_TEXT" и удалив generator:
{
"operation": "insert",
"name": "PortalMessageBody",
"values": {
"bindTo": "Message",
"contentType": this.Terrasoft.ContentType.LONG_TEXT,
"labelConfig": {
"visible": true
},
"markerValue": "PortalMessageBody",
"placeholder": {
"bindTo": "PortalEditControlHintText"
}
},
"parentName": "BodyContainer",
"propertyName": "items"
}

После этого поле будет выглядеть стандартно без возможности редактирования стилей/шрифтов.

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

Собственно вопрос в заголовке.
Дело в том, что в лиде это отдельные схемы контейнеров LeadAccountProfileSchema и LeadContactProfileSchema.
А мне нужно вывести список контактов выбранного контрагента.
Как организовать данный фильтр? Пробовал замещать карточку лида и в ней указывать но не работает.
Да и не понятно какие колонки они используют? Такие: Account и Contact? Или что-то другое?

Можете дать готовое решение или хотя-бы объяснить всё понятно.

Нравится

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

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

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

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

Спасибо. Помогло с этими полями - QualifiedContact и QualifiedAccount!

"Сазонов Максим" написал:А мне нужно вывести список контактов выбранного контрагента.

Вывести где ?
по нажатию кнопки, по наступлению какого-то события или состояния, при открытии карточки ?
В общем и в целом ничего сложного в Вашем кейсе нет.
Необходимо задать себе несколько вопросов:
1) Как связаны целевые Контрагент и Контакты (я подразумеваю что речь идет о детали "Контакты Контрагента") ?
2) Что мне необходимо сделать концептуально, н/п "У меня есть справочное поле контакт, и мне необходимо чтобы пользователь выбрал там значение из "открывающегося окна выбора"/"из выпадающего списка"(нужное подчеркнуть), при этом доступный список контактов должен быть отфильтрован по принципу присутствия в детали "Контакты Контрагента", для контрагента который в данный момент у казан в справочном поле контрагента текущей карточки".

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

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

Обнаружил некорректное поведение при отправке esq запроса, формируемого на стороне клиента.
Мне необходимо отфильтровать значения, выпадающие в Lookup поле.
Для этого в конфиге лукапа я устанавливаю значение свойству filters, в котором указываю, какие условия должны выполняться (ЛИБО поле не должно равняться определенному значению, ЛИБО поле может быть равно null).
Чтобы выполнялось условие "либо" - я указываю logicalComparisonTypes объекта Terrasoft.FilterGroup равное Terrasoft.LogicalOperatorType.OR (1).
Но фильтрация почему-то происходит, как будто я указываю условие не "либо", а "и".

Проверяю через tcpdump - какой именно запрос летит на сервер после формирования на клиенте, и к моему удивлению в запрос лепится "and" вместо "or".

001

Может кто сталкивался с подобной проблемой на 7.7, 7.8 или 7.10 - подскажите, пожалуйста, как боролись!

Нравится

3 комментария
Terrasoft.createFilterGroup().logicalOperation

возвращает по-умолчанию 0.

Ну собственно да, ответ выше, пишите
var filtersCollection = Terrasoft.createFilterGroup();
filtersCollection.logicalOperation = Terrasoft.LogicalOperatorType.AND;
при создании группы

Спасибо!
По ошибке использовал logicalComparisonTypes вместо logicalOperation

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

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

Нравится

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

Добрый день!

Насколько я понимаю, Вы имеете ввиду, распределение продуктов в графике поставок и оплат.
В данном окне Вы можете выбрать продукты одного типа, только если он имеет количество >1.
Создать несколько счетов связанных с графиком поставок и оплат, в которых будет один и тот же продукт (с количеством 1) пользовательскими средствами возможности нет.
Прикрепил скриншоты для наглядности.

каким образом можно это реализовать не пользовательскими средствами?

каким образом можно это реализовать не пользовательскими средствами?

Привет!

Думаю, реализовать это можно, если ознакомиться с самим графиком поставок и оплат, а также его структурой и принципом реализации.

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

Может Вам удобнее будет создавать счета из "Истории"?

Если нужно создать несколько счетов с разным количеством продуктов - просто сделайте это :)
Например, если нужно создать два счета с количеством яблок по 2 шт в каждом, то в заказе их должно быть 4.

Все ведь просто.

Алёна, вероятно решение Марии будет для Вас самым оптимальным - просто не работайте с графиком поставок и оплат, а создавайте счета из действия.

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

Коллеги, https://academy.terrasoft.ru/api/SDKNETAPI/7.10.0/NetCoreAPI_Help.html#G... только у меня еле живой?

Нравится

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

Здравствуйте
Эта проблема уже обсуждалась http://www.community.terrasoft.ru/forum/topic/25657
Возникла после обновления chrome
Если использовать FireFox или Edge (и даже Internet Explorer :exclaim:), то документация еще шевелится.

если б было все так просто, я бы не писал. В FF не знаю, но Edge ощутимого результата не дает.

Здравствуйте Дмитрий
К сожалению точную причину пока не обнаружили
Скорее всего долго отрабатывает javascript, необходимый для индексации поиска
Задача по устранению проблемы будет взята в работу в ближайшее время
Извините за неудобства

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

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

На окне редактирования добавила поле типа LookupDataControl.
Данное поле предназначено только для выбора значения из выпадающего списка, чтобы передать выбранное значение как параметр.
DatasetLink этого поля имеет не стандартное название dlData, а dlUsageRange. Данное поле не активно на карточке редактирования.

Фильтрую датасет:

var UsageRangeDataset = Self.ComponentsByName('dlUsageRange').Dataset;
UsageRangeDataset.Close();
ApplyDatasetFilter(UsageRangeDataset, 'ID', 999, true);   // 999-фиктивное значение, чтобы при открытии окна, поле было пустым. ID имеет тип int
UsageRangeDataset.Open();

Когда выбираю значение из списка, генерируется ошибка: Catastrophic failure

Вопрос: Как открыть это поле?

Нравится

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

Марина, мне кажется, для Ваших целей нужно использовать не LookupDataControl, а LookupControl.
Там указывается LookupDatasetLink, а выбранное из него значение хранится в свойствах Value и DisplayValue компонента.

Здравствуйте Александр. Спасибо.

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

Суть:
Есть некая карточка (н/п MyCustomPageV2) которая содержит справочное поле (н/п Owner).
В бизнес-логике карточки, необходимо значение поля (н/п Status) сущности экземпляр которой выбран в справочном поле Owner
используем для этого штатный механизм конфигурирования поля как атрибута, lookupListConfig и его свойства columns

attributes: {
...
"Owner": {
        lookupListConfig: {
                columns: ["Status"],
        }
}

...
}

Что позволяет организовать как-бы "просмотр внутрь" справочного поля и предоставление значения колонки Status выбранного значения.
Проблема:
Юзер открывает карточку MyCustomPageV2, в модели для поля Owner было загружено так же поле Status (к примеру оно содержит значение "X").
Теперь пользователь через гиперссылку справочного поля перешел на карточку сущности Owner изменил там значение Status (к примеру на значение "Y"), нажал "Сохранить", и тем самым вернулся в MyCustomPageV2 (из Chain). Теперь если мы обратимся к полю Owner и его колонке Status
this.get("Owner").Status

то оно по прежнему содержит значение "X"
Вопросы:
  1. Это баг ? или так и должно быть ?
  2. Если так и должно быть, то вероятно есть способ акутализировать данные колонок полей указанных в lookupListConfig -> columns? Как это сделать ?
  3. Как вообще можно отреагировать на "возвращение в карточку" при переходе из Chain (по "Закрыть" или "Сохранть" и т.д. открытых "поверх" карточек других сущностей) ? В таком случае, в виде "костыля" можно было бы хоть сделать ESQ запрос и актуализировать данные вручную

вот...

Нравится

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

Добрый день!
Это не баг. У вас в первой карточке своя модель, которая загрузила значение Х. Изменения этого значения в БД не приведет к изменению значения в модели (Именно это вы и делаете из другой карточки - сохраняете в БД).
Задача в 2 этапа:
1. Нотификация изменений
2. Загрузка актуальных значений

Варианты решений:
1. Можно сделать обмен сообщениями между модулями
2. Загрузка актуальных...у всех наследников BasePage есть метод reloadEntity - он актуализирует данные

Хорошо, про reloadEntity мне известно,
но как мне инициировать его в момент когда пользователь "вернулся" в карточку,
есть ли какая-то событийная модель на этот случай, какой-то прием который позволит этот самый reloadEntity запустить тогда когда он нужен ?

Сейчас веду маленькое исследование на этот счет, отвечу в вашем дубле здесь:
http://www.community.terrasoft.ru/forum/topic/25727

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

Добрый день!

Не так давно в последних релизах bpm появилась возможность добавления подписи. При настройке подписи используется ограниченный набор шрифтов, среди которых нет calibri (согласно политике нашей компании именно этот шрифт должен использоваться). Как добавить данный шрифт в bpm (не только с целью правильно настроить подпись, но и использовать свой шрифт при отправке email)?

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

Нравится

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

Здравствуйте, Илья!

Данное пожелание было передано команде разработки. В версии 7.11 данное поведение будет исправлено.

Добрый день!

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

При реализации Дизайнера контента используется CKEditor. По ссылке ниже Вы найдете информацию о том, каким образом реализовать добавление новых шрифтов в этот редактор:
http://ckeditor.com/forums/CKEditor/Add-a-new-font

Вы можете, как пример для добавления нового шрифта можно использовать следующее решение:
Внести изменения в файл "Resources\ui\CKEditor\ckeditor.js" приложения.
(Добавить в строку CKEDITOR.config.font_names текст "Segoe UI;":
...CKEDITOR.config.font_names="Segoe UI;Arial/Arial, Helvetica, sans-serif;...)

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

Хорошего Вам дня!

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