При добавлении в схему ActionDashboard
как часть ее функциональности - это "островки" активностей

Каким образом настраивается фильтрация активностей туда попадающих, без какой либо дополнительной настройки - показываются все активности в системе.
Само собой такое поведение нежелательно, требуется показывать активности или связанные с текущей сущностью и текущим пользователем или еще по какой либо другой связи.
На Академии не удалось найти информации по этому поводу, обращаемся к помощи коллективного разума сообщества :)
PS: Само собой можно и отладить это дело, но трудоемкость сего процесса может оказаться бессмысленной, если кто-то может дать совет, как минимум в каком направлении смотреть.
Есть предположение что, все "захардкожено" на деталь "Связи" в активностях.

Нравится

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

Здравствуете!
В модуле ActionsDashboardModule есть блок dashboardConfig, в котором настраивается связь активностей с объектом страницы.
Советую ознакомиться со статьей https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-instr…, в которой описано за что отвечает каждая строчка ActionsDashboardModule.
Возможно, в вашем случае, указаны не корректные значения для masterColumnName и referenceColumnName.

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

в которой описано за что отвечает каждая строчка ActionsDashboardModule.

Возможно, в вашем случае, указаны не корректные значения для masterColumnName и referenceColumnName.

Сегодня сам разобрался - не успел в эту тему отписать :)

Да все именно так, для текущей схемы нужно определить секцию modules и в ней специальный конфигурационный блок для ActionDashboardModule

modules: {
    "ActionsDashboardModule": {
        "config": {
            "isSchemaConfigInitialized": true,
            "schemaName": "SectionActionsDashboard",
            "useHistoryState": false,
            "parameters": {
            "viewModelConfig": {
                    "entitySchemaName": "Activity",
                    "dashboardConfig": {
                        "Activity": {
                                "masterColumnName": "Id",
                                "referenceColumnName": "Project"
                        }
                    }
                }
            }
        }
    }
},

где "masterColumnName" - это наименование колонки для связи в текущей схеме,

а "referenceColumnName" - это имя колонки для связи в Активностях.

PS: небольшой оффтоп, а как добавлять на карточку ActionDashboard без "колбасы" (виджета смены стадий, чтобы были только "островки" ?

Добрый день, Илья!

Этот вопрос уже поднимался, решение можно увидеть здесь:
http://www.community.terrasoft.ru/forum/topic/25256#comment-67597

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

Добрый день.

Подскажите, пожалуйста, возможно ли отменить БП, при старте другого БП. Оба БП идут по одной и той же записи.

Просто если стартует второй, то первый не нужен.

Запихать все в один БП невозможно, так как изменение, которое может запустить второй, не предсказуемо.

Нравится

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

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

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

Алла, слишком сложно)

Добавьте в процесс логическое поле "Запущен второй процесс". Это будет техническое поле. По умолчанию значение этого поля - false.

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

В логике второго процесса добавить элемент "Изменить данные", который будет в поле "Запущен второй процесс" устанавливать значение true.

Спасибо большое. Буду пробывать. Жаль, я в этом не мастер )

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

Добрый день!

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

Сейчас показывается, что у страницы нет параметров:

http://shot.qip.ru/00SkLf-415RJco7V2/

Заранее спасибо за совет.

Нравится

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

Насколько я помню в схеме страницы, справа (где localizableStrings), есть пункт Parameters. Накидайте туда переменных, сохраните страницу и попробуйте заново добавить её в бп

Здравствуйте! Инструкция по использованию элемента и созданию страницы: https://academy.terrasoft.ru/documents/technic-sdk/7-10/sozdanie-detali…

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

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

Нравится

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

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

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

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

Передо мной стоит задача фильтрации, регулировка видимости и обязательности полей в миникарточке лида.
решаю данную проблему бизнес-правилами, но возник ряд проблем/вопросов
1) Например, настройка обязательности не работает - поле обязательно всегда

                                "ICLSegment": {
                                        "ICLSegmentReq": {
                                                "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                                                "property": BusinessRuleModule.enums.Property.REQUIRED,
                                                "conditions": [{
                                                        "leftExpression": {
                                                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                                                "attribute": "LeadType"
                                                        },
                                                        "comparisonType": Terrasoft.ComparisonType.IN,
                                                        "rightExpressions": [
                                                                {
                                                                        "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                                                        "attribute": "flexibleEuroId"
                                                                },
                                                                {
                                                                        "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                                                        "attribute": "flexibleSNGId"
                                                                }
                                                        ]
                                                }]
                                        }
}

вероятно, неправильно использую IN фильтр, к сожалению нигде не нашла примеров его использования.
А когда делаю два правила с "comparisonType": Terrasoft.ComparisonType.EQUAL с разными названиями и со сравнением с разными атрибутами(flexibleEuroId/ flexibleSNGId) отрабатывает только второе( последнее добавленное получается)

2) При настройке видимости поля они не сдвигаются автоматически, то есть при скрытии поля остальные
поля, что были ниже, не подтягиваются и там остается пустое место. есть какие-либо методы это
исправить?
3) как задать обязательность поля в миникарточке, чтобы она была обязательна всегда, независимо от
бизнес правил?

Версия 7.10.0.1742

Нравится

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

1) Сравнения Terrasoft.ComparisonType.IN нет. Войдите в bpm, откройте консоль и введите Terrasoft.ComparisonType и вам выведет все возможные варианты
pic
2) У них указан layout. Скорее всего если подтереть у всех полей layout-ы и упорядочить их через index, что-то может получиться. Но не факт.
3) IsRequired: true в values поля. Либо в аттрибуте. Либо через бизнес-правило.

"Варфоломеев Данила" написал:Сравнения Terrasoft.ComparisonType.IN нет

а как тогда задавать условия для обязательности такого типа:
если значение поля LeadType равно type1 или type2 или type3, то поле обязательное для заполнения. может как-то через несколько conditions, соединенных с OR, но я такого тоже что-то не нашла

"Zaitova Liubov" написал:через несколько conditions, соединенных с OR

Именно.

logical: Terrasoft.LogicalOperatorType.OR,
conditions: [{cond.1}, {cond.2},....]

"Zaitova Liubov" написал:тоже что-то не нашла

Потому что sdk террасофта по правилам почему-то не дописано. Настоятельно советую эту запись в блоге

Рекомендую ознакомиться с постом по ссылке: http://www.community.terrasoft.ru/forum/topic/12633#comment-68765

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

"Варфоломеев Данила" написал: У них указан layout. Скорее всего если подтереть у всех полей layout-ы и упорядочить их через index, что-то может получиться. Но не факт.

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

	{
	"operation": "insert",
	"name": "AdditionFieldsContainer",
	"parentName": "MiniPage",
	"propertyName": "items",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.CONTAINER,
		"layout": {"column": 0, "row": 12, "colSpan": 24},
		"items":
			[
				{
					"name": "ICLSegment",
					"values": {
							"isMiniPageModelItem": true,
							"visible": {"bindTo": "isNotViewMode"}
						},
						"index": 0
					},
					{
						"name": "ICLPodSegment",
						"values": {
							"isMiniPageModelItem": true,
							"visible": {"bindTo": "isNotViewMode"}
								},
						"index": 1
						} ,
						{
						      "name": "ICLAddSegment1",
							"values": {
								"isMiniPageModelItem": true,
								"visible": {"bindTo": "isNotViewMode"}
							},
							"index": 2
						}
                                    ]
                           }
}

"Zaitova Liubov" написал:но, к сожалению, ничего не изменилось. все так же остается пустое место

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

"Максим Шевченко" написал:Невозможно, обычный контейнер не может оставлять пустых мест. Скорее всего вы либо не почистили кеш, либо пробелы остались в вашем другом грид-лайауте. Проинспектите в f12 эти пустые места и поймите к чему они имеют отношение.

кэш чистила. просмотрела через f12. пустые места выделяются под контейнер поля. во вложении скан. красным выделен мой конейнер, в котором 8 мои полей. под каждое поле выделяется свой контейнер. внутри контейнера 2 подконтейнера - для заголовка и для контрола. видимость для двух внутренних прописывается при работе бизнес-правила, а для внешнего нет. когда я в режиме отладки добавила display:none для LeadMiniPageICLPodSegmentContainer(внешний контейнер поля) , то пустое место пропало.
вот это я обнаружила, только вот не могу из этого никакие выводы сделать - как мне нужно было описывать деталь, чтобы этого не было.

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

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

diff: {
...
"isRequired":  {bindTo: "TargetAttribute"},
...
},

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

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

PS: Я так понимаю механика "привязки" в текущей имплементации - существенно отличается от таковой в классическом Ext.JS (по крайней мере 4-ой редакции). Если кто-то мог бы в двух словах, объяснить принцип работы "bindTo" в текущей имплементации.

Нравится

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

Добрый день.

Свойство bindTo может как ссылаться на имя булевого атрибута, так и на имя метода из секции methods. Для корректной работы метод должен в итоге возвращать true или false.

Также поскольку в bpm'online используется библиотека backbonejs, Вы можете воспользоваться его обработчиком событий on.

К примеру:

this.on("change:fieldName", function(){
	//some logic
	this.set("requiewdAttributeName", true);
});

"Мотков Илья" написал: так и на имя метода из секции methods. Для корректной работы метод должен в итоге возвращать true или false.

вот в этой теме я уже затрагивал проблему биндинга свойства непосредственно на метод, он вызывается на исполнение по 6-10 раз.

"Мотков Илья" написал:Также поскольку в bpm'online используется библиотека backbonejs, Вы можете воспользоваться его обработчиком событий on.

Это опять-же не позволит мне присвоить значение в свойство view (enabled/isRequired/visible)
Это позволит среагировать на изменение атрибута модели, и в лучшем случае установить другой атрибут на который забинжено свойство.
Или все таки есть возможность установить свойство isRequired или visible - вручную, уже после объявления и построения view-model, например через имя поля (атрибута модели) на которое биндится "вьюха"?
хотя это поведение однозначно реализуется, так как на изменение атрибута забинженого например на enabled, реагирует некий обработчик - который собственно инициирует как изменение свойства модели - так и соответствующую мутацию view, что приводит к тому что поле становится недоступным.
отладкой поймать не удается - слишком много побочных вызовов в all-combined.js

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

Можете забиндится и на метод, который в результате выполнения логики вернет true или false, но учтите что вся логика должна быть синхронна. Если же часть логики будет асинхронна, то вам необходимо делать bind на атрибут. А уже в подписках вроде этой:

this.on("change:fieldName", function(){
        //some logic
        this.set("requiewdAttributeName", true);
}, this);

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

"Севостьянов Илья Сергеевич" написал:Или все таки есть возможность установить свойство isRequired или visible - вручную, уже после объявления и построения view-model, например через имя поля (атрибута модели) на которое биндится "вьюха"?

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

"Максим Шевченко" написал:Можете забиндится и на метод

ну так этот метод вызывается по 6-10 раз при загрузке model-view,
Способа повторно инициировать значение свойства через вызов этого метода, по требованию - я так понимаю - нет ?

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

Нет.

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

Каким образом заполняется поле справочника на странице редактирования объекта
На клиенте получил экземпляр обекта поля справочника поменял ему id и name, но значения не сохраняются, и значения возвращается прежднее

Нравится

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

Здравствуйте, для изменения записи в бд, необходимо использовать Terrasoft.UpdateQuery, множество примеров можете найти в конфигурации, к примеру метод updateContactCareer в AccountPageV2 в пакете UIv2

var update = Ext.create("Terrasoft.UpdateQuery", {
							rootSchemaName: "ContactCareer"
						});
						var filters = update.filters;
						var contactIdFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
								"Contact", data.contactId);
						var isCurrentFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
								"Current", true);
						var isPrimaryFilter = update.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
								"Primary", true);
						filters.add("contactIdFilter", contactIdFilter);
						filters.add("isCurrentFilter", isCurrentFilter);
						filters.add("isPrimaryFilter", isPrimaryFilter);
						if (data.hasOwnProperty("isPrimary")) {
							update.setParameterValue("Primary", data.isPrimary, Terrasoft.DataValueType.BOOLEAN);
						}
						if (data.hasOwnProperty("isCurrent")) {
							update.setParameterValue("Current", data.isPrimary, Terrasoft.DataValueType.BOOLEAN);
						}
						if (data.hasOwnProperty("dueDate")) {
							update.setParameterValue("DueDate", data.dueDate, Terrasoft.DataValueType.DATE);
						}
						update.execute(function(result) {
							callback.call(this, result);
						}, this);

а также на комьюнити, к примеру тут:
http://www.community.terrasoft.ru/forum/topic/24995#comment-66505

Не совсем то,
Например у Контрагента есть поле Город, который является справочником
Пользователь отредактировал какое-то поле по которому я определил, что город указаный в форме не соответсвует городу контрагента в жизни
Мне нужно изменить значения поля Город в текущей странице редактирования
Редактирование значения в БД не подходит т.к. пользователь может отменить все изменения, и информация в таком случае должна остаться нетронутой

"Хусаинов Булат" написал:Мне нужно изменить значения поля Город в текущей странице редактирования

Т.е вам нужно просто установить значение для переменной? В таком случае:

var myCityObj = {
     value: ...,//сюда ид города из базы
     displayValue: ...//сюда название города
};
this.set("City", myCityObj);

Работает, если поле "Город" - лукапное(справочное). Для строк, Guid-ов, дат и т.п просто this.set("Parameter", value)

Булат,

попробуйте реализовать с помощью бизнес-правил: https://academy.terrasoft.ru/documents/technic-sdk/7-9/biznes-pravila-i…

присоединяюсь к Даниле
Вставлю лишь свои 5-ть копеек, что лучше бы пойти в отладчик установить в справочное поле значение, а потом получить его в отладчике, таким образом вы получите представление полной структуры объекта, для сохранения в БД не играет роли никакие поля кроме "value" (иногда "id")
но остальные значения могут быть задействованы в побочной логике, как это часто бывает с displayValue
так же зачастую можно встретить и другие поля/значения
вот пример того как выглядят объекты в типовых Активностях, для полей "Состояние" и "Результат"

обратите внимание что для объекта поля "Состояние" есть еще отдельное свойство "Finish" от его значения может зависеть какая либо логика на странице, например сокрытие/демонстрация полей или запуск каких-либо БП.
Так что устанавливая значение в справочное поле самостоятельно, желательно воспроизводить структуру объекта целиком, и разбираться с дополнительными свойствами - зачем они нужны и как их воспроизвести.
вот...

PS: (на всякий случай объясню)
если Вы хотите поработать с контекстом карточки из отладчика, не расставляя точек останова по ходу инициализации, например повызывать методы на исполнение, "пощупать" значения аттрибутов и полей, то вам необходимо предварительно "обернуть" контекст.
Для этого подойдет универсальный метод "onEntityInitialized", где вы сможете транслировать ссылку на текущий контекст в свойство глобального объекта, н/п document.ActivityPageScope

		methods: 
...
			"onEntityInitialized": function() {
				this.callParent(arguments);
				document.ActivityPageScope = this;
			},
...

Ваши пять копеек, Илья, оказались золотыми. Ни как не мог понять как обратиться к контексту страницы и прощупать состояние его объектов. Интересно, существует ли способ обращения к странице напрямую не передавая его в document?

Стандартно для обмена сообщениями между разными страницами используется «песочница». То, что выше описал Илья, относится только к отладке в браузере.

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

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

Версия 7.10.

Ситуация такая: сделал свой контрол в соответствии с инструкцией из комментариев отсюда: https://community.terrasoft.ru/forum/topic/25285#comment-67717

Контрол похож на то, что описано там, разница в том, что добавляет не div, а элемент canvas с определённым id в DOM на страницу контакта. Пробуем для решения определённой задачи (образец подписи клиента, получается через canvas и сохраняется в отдельную колонку в формате base64).

Далее в onEntityInitialized ContactPageV2 делаю следующее:

onEntityInitialized: function() {
                                this.callParent(arguments);                    
                                var canvas = document.getElementById("UsrTestUsrSignControl-usr-my-control");
                        var context = canvas.getContext("2d");

//Дальнейшие действия
},

UsrTestUsrSignControl-usr-my-control - id элемента canvas.

Обнаружил, что в некоторых случаях на стадии getContext вываливается ошибка - скрипт не находит элемента по id. При это именно взятие по id необходимо для работы с канвасом, а работа внутри ContactPageV2 - чтобы сохранить результат в колонку контакта.

Вопрос - можно ли как-нибудь отследить загрузку контрола на страницу? Может быть, внутри самого контрола? Попробовал добавить document.getElementById внутрь init - то же самое.

Нравится

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

Обнаружил, что элемент доступен внутри события initDomEvents

Соответственно, вопрос меняется на "как передать данные в ContactPage".

Может быть, через sandbox?

Загрузка всех элементов на страницу "asynchronous as fuck", как говорится. В onEntityInitialized доступна модель страницы, но не факт, что элементы погрузились. Можно попробовать вставить функцию, реагирующую на рендер контрола:

"values": {
	....
	"afterrender": {bindTo: "onControlRendered"}
}

Данила, а точно есть такое - afterrender? Может быть onRender?

Попробовал - вообще функция не вызывается. Добавляю в values при подключении контрола.

Здравствуйте,
Можете подписатся в init-е на событие добавления в dom вашего элемента, подробнее:
https://toster.ru/q/18926
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_even…

"Смородинов Денис" написал:Данила, а точно есть такое - afterrender?

У Terrasoft.Label есть. Вообще должно событие быть, если контрол наследуется от Terrasoft.Component.
Судя по NUI Docs

{
		"operation": "insert",
		"name": "UsrTest",
		"values": {
			"layout": {
				"colSpan": 12,
				"rowSpan": 1,
				"column": 0,
				"row": 0,
				"layoutName": "GeneralInfoTabGridLayout97349c91",
			},
			"onAfterRender": {
				"bindTo": "onCanvasRendered"
			},
			"generator": "UsrSignControlGenerator.generateUsrSignControl",
			"visible": true
		},
		"parentName": "GeneralInfoTabGridLayout97349c91",
		"propertyName": "items",
		"index": 0
	},

И в методах:

onCanvasRendered: function(){
				console.log("rendered");
				var canvas = document.getElementById("UsrTestUsrSignControl-usr-my-control");
				console.log(canvas);
			},

Так не работает, даже просто "rendered" не выводит. afterrender вместо onAfterRender - тоже.

Контрол сам точно по той схеме, т.е. наследуется от компонента.

"Смородинов Денис" написал:Соответственно, вопрос меняется на "как передать данные в ContactPage".

Может быть, через sandbox?

Возможно, этот путь будет проще?

"Смородинов Денис" написал:Возможно, этот путь будет проще?

Думаю нет)

Получилось вот так (подправил генератор из вашей ссылки в посте):

generateTmMyControl: function(config) {
	debugger;
        var TmMyControl = {
                className: "Terrasoft.TmMyControl",
                id: config.name + "TmMyControl",
                selectors: {wrapEl: "#" + config.name + "TmMyControl"},
                layout: config.layout || {},
                afterrender: {bindTo: config.onAfterRender}, //добавил чисто на всякий случай
                afterrerender: {bindTo: config.onAfterRender} //контрол почему-то ререндерится, у меня на тестовой системе срабатывает именно это событие
        };
        if (!Ext.isEmpty(config.wrapClassName)) {
                TmMyControl.classes = {
                        wrapClassName: config.wrapClassName
                };
        }
        return TmMyControl;
},

Данила, спасибо, работает!

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

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

Получилось вот так (подправил генератор из вашей ссылки в посте)

Привет. Есть ли идеи вот насчет чего?:

{
	"operation": "insert",
	"name": "Containment",
	"values": {
		"itemType": 2,
		"markerValue": "added-detail",
		"afterrender": {
			"bindTo": "getEnableDetails"
		},
		"afterrerender": {
			"bindTo": "getEnableDetails"
		}
	},
	"parentName": "QuickAnalysisTabContainer",
	"propertyName": "items",
	"index": 6
}

Соответственно, сам метод, который вешается на послерендер допустим что-то выводит в консоль.
На детали очень странное поведение.

Как только открываю табу, на которой должна быть деталь - моментально идет вызов метода и вывод в консоль. При этом сама деталь не грузится и запросы никакие никуда не идут на получение детали и её данных. Это оочень странно. И в DOM-е ни одного упоминания об этой детали. Т.е. грубо говоря вообще никакого рендера не произошло. Деталь не появляется на карточке. Никак.

ЧЯДНТ?

"Темченко Кирилл Александрович" написал:Деталь не появляется на карточке.

Смотрим стандартный генератор детали:

generateDetail: function(config) {
	var detailContainerId = this.getControlId(config, "Terrasoft.Container");
	var result = this.getDefaultContainerConfig(detailContainerId, config);
	result.tag = {
		detailName: config.name,
		containerId: detailContainerId
	};
	result.markerValue = config.name + "DetailContainer";
	result.afterrender = {
		bindTo: this.defaultLoadDetailMethodName
	};
	result.afterrerender = {
		bindTo: this.defaultLoadDetailMethodName
	};
	Ext.apply(result, this.getConfigWithoutServiceProperties(config, []));
	this.applyControlConfig(result, config);
	return result;
},

Видно, что на afterrender и afterrerender вешается метод loadDetail. (this.defaultLoadDetailMethodName = "loadDetail"). Далее ваши конфиг из диффа перетирает рендеры - this.applyControlConfig(result, config)

В итоге. Как задумывалось: рендерится контейнер, после рендера в него грузится грид детали (уж не знаю что там в методе loadDetail)
Как происходит: рендерится контейнер, вызываются ваши методы. деталь соответственно не загружается.

п.с. это всё в теории, времи тестить совсем нет)

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

п.с. это всё в теории, времи тестить совсем нет)

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

спасибо за помощь.

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

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

Как можно на детали с реестром добавить кликабельную картинку, которая подгружается по внешнему URL(хранящемся в поле объекта детали), при клике на которую, она бы загружается в полном размере?

Версия sales enterprise 7.9.1.3284

Нравится

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

Здравствуйте, таких базовых средств в bpm'online нет, но, обладая навыками разработчика вы можете попробовать сделать это самостоятельно.
Вот это может вам пригодится как пример:
https://www.w3schools.com/howto/howto_css_modal_images.asp
И если вы захотите сделать это как собственный контрол, то, вот эта инструкция так же будет полезной: svoy_kontrol__generator__diff.doc

Крапивницкий Николай,

Добрый день! Получилось реализовать задачу? 

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

Была экспортирована в файловую систему схема пользовательского действия (базовая) под названием Отправить e-mail.
Были произведены замены Uid'ов и импортирована удачна обратно.
Далее его начали использовать в БП для отправки сообщений, дабы эти сообщения не только на ящик удачно приходили, но и в систему и был замечен нюанс.
Суть его такова что если этот БП стартовал под именем Супервизора то вс1 было хорошо в плане отправки таких сообщений, но стоило только другому пользователю инициировать это БП так этот элемент в журнале указан как выполнен, а на самом деле всё очень плохо и ничего не произошло.

Кто с таким сталкивался и как с этим бороться?
Потому что стоковый элемент в БП "Отправить e-mail" не работает так как должен, точнее в систему сообщение приходит не в читабельном виде.

Нравится

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

Только что выяснилось если у этого действия БП установить false в параметр "Игнорировать ошибки при отправке" то вылетает такая ошибка см. приложенный файл.

Добрый день!
Ошибка связана с тем, что у инициатора процесса нет прав доступа на почтовый ящик от которого отправляется письмо.
Нужно настроить общий почтовый ящик. Во вложении файл с описанием настройки.
otpravka_email.docx

"Зарицкий Олег" написал:

Добрый день!

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

Нужно настроить общий почтовый ящик. Во вложении файл с описанием настройки.

otpravka_email.docx


Спасибо, проблема ушла)

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