Добрый день!

 

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

[EntityEventListener(SchemaName = "UsrObject")]
    public class SomeEventListener : BaseEntityEventListener

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

Спасибо!

Нравится

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

Необходимо выполнить SQL скрип для SysPackage, который устанавливает: InstallType = 0, Maintainer = Customer.

Pavel Litvinovich,

это не помогает.

После выполнения скрипта

 

update SysPackage

set IsChanged = 1, InstallType = 0, IsLocked = 1, Maintainer = 'Customer'

where Name in ('CRM1')

and SysWorkspaceId in (select Id from SysWorkspace where Name = 'Default')

 

у пакет снимается блок. Также для схем в этом пакете делаю скрипт

 

update SysSchema

set IsChanged = 1,

IsLocked = 1

where Name in ('SomeEventListener')

and SysPackageId in (

    select Id from SysPackage where SysWorkspaceId in (select Id from SysWorkspace where Name = 'Default')

    and Name in ('CRM1')

 

но по итогу(после даже компилирую все) схема все равно не редактируемая.

Сергей Хоменко пишет:



1) Пакет вы разблокировали, тут все ок.

Но, в скрипте вы использовали изменение значения колонки Maintainer, если вы изначально правильно начали разработку, это значение в системной настройки вы изменили на собственное (Издатель). Если это так - то для разблокировки пакета, вместо Customer вам необходимо было указать своё значение.

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

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

я брал значение из системной настройки Publisher и менял для пакета на такое значение. Или как правильно нужно сделать? 

а вообще перезашел в систему - и схемы пакета стали редактируемыми. Спасибо!

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

Всем привет!

При добавлении кнопки в грид секции (аналогично с коробочными) столкнулся со странной проблемой: не работают локализуемые строки из ресурсов схемы. Причем если просто прописать caption, то всё работает. Кто-нибудь может подсказать в чем проблема?

            {

                "operation": "insert",

                "name": "DataGridActiveRowAddAccountAction",

                "parentName": "DataGrid",

                "propertyName": "activeRowActions",

                "values": {

                    "className": "Terrasoft.Button",

                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,

                    "caption": {"bindTo": "Resources.Strings.AddAccountButtonCaption"},

                    //"caption": "Add Account",

                    "tag": "addAccount",

                    "visible": true,

                }

            },

 

Нравится

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

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

Дима Вовченко,

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

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

Добрый день!

Создал еще одну публикацию BPM_On_line путем копирования боевой, сделал копию базы в MS SQL, как переключить подключение к тестовой базе? Где искать настройки подключения к MS SQL ?

Нравится

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

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



Для изменения базы данных, которую использует приложение, нужно поменять значения параметра "Initial Catalog" на название вашей БД и парметра "Data Source" на название вашего сервера,  если новая копия лежит на другом сервере SQL.

Данные параметры правятся в файле ConnectionString.config в корневой папке приложения.

Подробнее об этом в статье:



https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/windows_net…

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



Для изменения базы данных, которую использует приложение, нужно поменять значения параметра "Initial Catalog" на название вашей БД и парметра "Data Source" на название вашего сервера,  если новая копия лежит на другом сервере SQL.

Данные параметры правятся в файле ConnectionString.config в корневой папке приложения.

Подробнее об этом в статье:



https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/windows_net…

Спасибо!

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

Добрый день! Не подскажите где качать скрипт обновления? Может есть где скачать чистую BPMonLine ?

Нравится

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

http://ftp.bpmonline.com/support/downloads/!Release/installation_files/ чистые конфы здесь

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

https://academy.terrasoft.ru/docs/release/instrukciya-po-obnovleniyu-si…

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

 

Информация по обновлению находится в этой статье на Академии.

 

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

Спасибо!

Dima Avdoshin пишет:

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

Ну пусть качает. Например если вам надо апдейтить до 7.18.0, а скрипт начкачал на 7.18.3., то просто удалите папки 7.18.1 - 7.18.3 из InstallPackages и все. Обновление пойде до последнего пакета в InstallPackages

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

Доброго дня!

Пытаемся обновиться с 7.15.1 на 7.15.2. Пробовали:

1. С помощью утилиты https://academy.creatio.com/sites/default/files/documents/downloads/UpdaterService/UpdaterService.zip. Дистрибутивы скачались, настройки install.xml сделал. При запуске - ошибка (см.скрин 1)

2. Вручную запустил SQL скрипты из папки Scenario в порядке из файла UpdateScenario.json. При этом возникает ошибка 2 - см.скрин 2. 

3. Пробую перепроверить шаги по инструкции https://academy.terrasoft.ru/docs/user/ustanovka_i_administrirovanie/razvertyvanie_onsite - страница не найдена, пишет



Как таки обновить на 7.15.2, просьба помочь?

Нравится

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

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

 

1. Какая версия MS SQL сервер у Вас установлена?

2. Почему файл install.xml Вы конфигурировали руками - он должен сконфигурироваться автоматически при запуске Downloader.ps1?

 

Такое впечатление, что у Вас неправильно прописаны параметры подключения к базе данных в файле dowloader.json.

 

Алла Савельева,

1 - версия 12

2 - https://academy.terrasoft.ru/docs/release/instrukciya-po-obnovleniyu-si…

  1. Откройте файл скрипта install.xml из папки Updater для редактирования. Заполните в нем следующие параметры соответствующими значениями:

    • WebRootDirectory — путь к корневой папке сайта.
    • InstallPackagesPath — путь к папке, где сохранены инсталляционные пакеты и утилита обновления.
    • ConnectionString — строка подключения к базе данных. Внимательно скопируйте данную строку с вашего подключения к базе.

Антон Кравченко, добрый день!

Алла права, судя по всему у Вас не совсем корректно настроен файл downloadr.json.

Стоит использовать новую инструкцию для обновления.

https://academy.terrasoft.ru/docs/release/instrukciya-po-obnovleniyu-si…

Также, проверьте корректно ли указаны параметры подключения к БД в файле ConnectionStrings.config вашего приложения.

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

Добрый день!

 

Подскажите, как добавить записи в коллекцию объектов с атрибутами (Collection of Objects with attributes, ICompositeObjectList) веб-сервиса? Через под-процесс не подходит - из таблицы, по которой запускается под-процесс, необходимо добавить не все записи, условие отбора находится в связанной таблице.

Пробовал добавлять через CompositeObjectList как описано тут

CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
return true;

- компилятор ругается на защищенный CompositeObject:  

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

Нравится

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

Добрый день.



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



Варианты решения задачи:

1) Передавать объекты в качестве строки, потом парсить.

2) Обновится на версию 7.16.4. В ней добавлена возможность создавать и настраивать параметр БП типа "Коллекция записей", передавать в веб сервис.  

Mykhailo Storozhuk,

Спасибо за информацию!

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

Доброго дня!

У нас есть рабочая Creatio Sales Enterprise на базе MS SQL Server. Сейчас мы переезжаем на другой сервер с PostgreSQL. Не получается выполнить восстановление бэкапа БД (создан в MS SQL Server, восстанавливаем в PostgreSQL). Пробовали и напрямую через интерфейс pgAdmin, и через командную строку, и конвертировали БД через программу-конвертер - результата нет. В какую сторону ещё смотреть, что поискать, у кого заказать?

Нравится

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

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

Только если развернуть чистую базу на постгрис и переносить скриптами данные или ручками через выгрузку excel или привязки данных к пакету, как вариант

Возможно, ещё придётся переписывать хранимые процедуры и VIEW, так как местами есть существенные отличия

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

 

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

Релиз в проработке, к сожалению, по срокам не можем сориентировать.

Утилиту и рекомендации предоставит техническая поддержка по запросу.



С уважением, Елена.

Elena Sidko,

Елена, а Вы не могли бы ещё уточнить версии/билды/релизы MS SQL Server и PostgreSQL Server, на которых точно работает эта утилита? Мы хотим поставить точно такие же

Антон, добрый день.



Приносим свои извинения за задержку с обратной связью.



Данная утилита работает и привязана только к версии приложения Creatio 7.15.4 под продукты Sales/Marketing/Service (без вертикальных решений по типу Real Estate, BCJ и т.д.).



Касательно версии серверов и перечнем других системных требований для разворачивания приложения Creatio Вы можете ознакомиться на Академии:



Системные требования к серверам

Калькулятор системных требований

Системные требования к клиентскому компьютеру

 

С уважением, Елена.

 

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

Добрый день!

После добавления визирования в стандартный раздел Продаж (Opportunity), перестали приходить уведомления в Центр уведомлений коммуникационной панели. Уведомления были добавлены отметкой чек-бокса "Enable approval in section" в секции "Approval" мастера разделов. Уведомления перестали приходить в том числе и для разделов Order, Invoice, по которым они ранее приходили. Индикатор визирования в коммуникационной панели отображается,  но текст уведомления в коммуникационной панели отсутствует. Добавление схемы "OpportunityVisaNotificationProvider", записи "Terrasoft.Configuration.OpportunityVisaNotificationProvider" в таблицу "NotificationProvider" не помогло.



В консоли браузера выводится ошибка :

POST https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
[HTTP/2 400 Bad Request 84ms]
Error while sending request response status:
    400 (Bad Request)
    request url: https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
    method: POST
    request data: {"sysAdminUnitId":"3190ebaf-a3cf-461d-95f6-29115215bd39","requestOptions":{"isPageable":true,"rowCount":15}} 
The server encountered an error processing the request. The exception message is '42601: each UNION query must have the same number of columns'. See server logs for more details. The exception stack trace is:
 
at Npgsql.NpgsqlConnector.<DoReadMessage>d__157.MoveNext() 
--- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlConnector.<ReadMessage>d__156.MoveNext() 
--- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Npgsql.NpgsqlConnector.<ReadMessage>d__156.MoveNext() --- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlConnector.<ReadExpecting>d__163`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlDataReader.<NextResult>d__32.MoveNext() 
--- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlDataReader.NextResult() at Npgsql.NpgsqlCommand.<Execute>d__71.MoveNext() --- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlCommand.<ExecuteDbDataReader>d__92.MoveNext() 
--- End of stack trace from previous location where exception was thrown 
--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at Polly.Policy.<>c__DisplayClass119_0`1.<Execute>b__0(Context ctx, CancellationToken ct) at Polly.Policy.<>c__DisplayClass129_0`1.<ExecuteInternal>b__0(Context ctx, CancellationToken ct) at Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct) 
at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken) at Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.Execute[TResult](Func`1 action) at Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func) at Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken) 
at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken) at Terrasoft.DB.PostgreSql.PostgreSqlExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken) at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters) at Terrasoft.Configuration.VisaHelper.GetVisaData(Select entitiesSelect) at Terrasoft.Configuration.VisaHelper.GetEntities(RequestOptions requestOptions) at SyncInvokeGetVisaEntities(Object , Object[] , Object[] ) 
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

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

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

Подскажите, пожалуйста, как это можно исправить?

Нравится

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

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

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



Дополнено:

В методе GetEntitiesSelect

Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):

Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".



В методе AddColumns

"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"



И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

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

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



Дополнено:

В методе GetEntitiesSelect

Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):

Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".



В методе AddColumns

"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"



И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

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

Подскажите,

1) базовый - это BaseVisaNotificationProvider? 

2) должна ли быть запись для нового раздела Opportunity в таблице "NotificationProvider" ?

3) нужно ли добавлять копии БП по подобию "OrderVisaBaseSubprocess", 

"OrderVisaBaseSubprocessOrder1",

"OrderVisaBaseProcess",

"OrderVisaBaseProcessOrder1" ?

 

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

Спасибо, починил! Отличие было в другом разделе.

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

Добрый день!

 

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

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

 

Спасибо! 

Нравится

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

а права доступа на объект не подойдут?

Dima Avdoshin, пользователь должен иметь возможность создавать объект, видеть значение колонки Инвойс, но не иметь возможности ее менять. Когда делаю через запрет на редакт колонки, то не видят ее содержимое. Хотел добавить свою логику на крестик. 

Сергей Хоменко,

вариант , который у меня сейчас перед глазами



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



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



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



Вместо initModelColumns, можешь вешать другие ивенты, к примеру при выделении записи

Пример

define("qrtqrtTestObj31ff6c52Page", ["RightUtilities"], function(RightUtilities) {
	return {
		entitySchemaName: "qrtTestObj",
		attributes: {
			"Name": {
				//dataValueType: Terrasoft.dataValueType.FLOAT,
				dependencies: [
					{
						columns: ["Name"],
						methodName: "changeName"
					}
				]
			},
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			initModelColumns: function() {
				this.callParent(arguments);
				this._setColumnsDataModelName();
				this._setResourceColumns();
				this.console.log("initModelColumns");
				var self = this;
				RightUtilities.checkCanExecuteOperation({
                    operation: "qrtRulesSalesInInvoice"
                  }, function(result) {
                      self.console.log("RESULT" + result);
                      self.set("qrtSalesRules", result);
                  }, this);
			},
 
			changeName : function name() {
				if(!this.isNewMode()) {
					var isOk = this.get("qrtSalesRules")
					if(isOk) {
						this.showInformationDialog("У вас нет права на редактирование этой колонки")
						//отменяем действие
						this.onDiscardChangesClick();
					}
				}
			}
        },
      dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "Name1cacb119-4c62-4e85-929a-e7a877e24794",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "Header"
					},
					"bindTo": "Name"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "insert",
				"name": "Description5836d8b4-157f-49bf-a943-3e6d3c28cf1e",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1,
						"layoutName": "Header"
					},
					"bindTo": "Description"
				},
				"parentName": "Header",
				"propertyName": "items",
				"index": 1
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Dima Avdoshin,

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

clearSupplyPaymentElementProducts, переопределение которой решает часть задачи без лишних маневров.

Самый простой способ использовать бизнес-правила. БП проверяете со значением булевого атрибута. А атрибуту устанавливаете значение true/false в зависимости от того, входит ли текущий пользователь в коллекцию тех, кому доступ запрещен (коллекцию можно сформировать через справочник, либо в зависимости от группы/роли, либо даже захаркодить(что не рекомендую)). Такое решение будет самым быстрым и легким, на мой взгляд 

Спасибо!

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

Добрый день!

 

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

Куда в код страницы добавить этот код, чтобы он отработал при получении сообщения?

function listener(event) { if (event.origin != 'http://javascript.ru') { // что-то прислали с неизвестного домена - проигнорируем.. return; } alert( "получено: " + event.data ); } if (window.addEventListener) { window.addEventListener("message", listener); } else { // IE8 window.attachEvent("onmessage", listener); }

Нравится

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

Добрый день!

Марат, все зависит от задачи. Вы можете разметить его как в BaseSection на init, так и в "ответе" ViewModule.aspx.

Ответ ViewModule.aspx частично формируется в конфигурации, в SectionHelper'е. Вам нужно сделать override класса ConfigurationSectionHelper. Там вы можете дописать свой JS, который отработает сразу после логона и входа в систему. Для примера обратите внимание на метод GetConfigurationScript

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