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

Подскажите, пожалуйста, каким образом можно изменить настройки числового поля, чтобы по умолчанию сохранялось значение не "0", а Null. Есть ли возможность такое изменение внести на уровне приложения, а не через субд?

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

Нравится

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

Здравствуйте, Дмитрий!

Данные изменения не получится внести на уровне приложения, так как изменение дефолтного значения возможно исключительно на уровне БД, но такие действия могут негативно повлиять на работу приложения, так как логика приложения не рассчитана на дефолтное значение NULL для int'овой колонки.
В случае внесения таких изменений в БД это может привести к непредвиденным ошибкам, которые в свою очередь могут повлиять на работоспособность отдельных блоков приложения либо на всю систему в целом.

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



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

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

Добрый день!

Не получается запустить процесс при получении письма по существующему инциденту.

При получении письма по инциденту запускается процесс «Incoming email registration process».
Если создается новый инцидент, то срабатывает сигнал на добавление активности с заполненным полем Case.
Однако если письмо привязывается к существующему инциденту, то сигнал на изменение поля Case в активности не срабатывает.
В самом процессе происходит вызов функции:

        var helper = ClassFactory.GetIncidentRegistrationFromEmailHelper>(
                new ConstructorArgument("userConnection", userConnection));
        helper.RegisterIncident(activityId);

В классе IncidentRegistrationFromEmailHelper одинаковое действие для новых и существующих инцидентов:

public virtual void RegisterCase(Entity emailEntity) {
var email = new Email(this, emailEntity);
        if (email.IsJunk && !CreateCasesFromJunkEmails) {
                return;
        }
        Entity caseEntity = GetCase(email);
        if (caseEntity == null) {
                caseEntity = CreateNewCaseByEmail(email);
                var copyEntityRightsParams = new SysEntityRightsHelper.CopyEntityRightsParams(emailEntity.SchemaName,
                emailEntity.PrimaryColumnValue, caseEntity.SchemaName, caseEntity.PrimaryColumnValue);
SysEntityRightsHelper.CopyEntityAdministrateByRecordsRights(UserConnection, copyEntityRightsParams);
        }
        emailEntity.SetColumnValue("CaseId", caseEntity.GetTypedColumnValueGuid>("Id"));
        emailEntity.SetColumnValue("IsNeedProcess", false);
        emailEntity.Save();
}

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

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

test process

Нравится

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

Добрый день, Владимир!
Вы можете выполнить настройку стартовых сигналов процесса, как это сделано в базовом процессе "Запуск процесса Переоткрытие обращения и отправка email сообщения ответственному о новом комментарии" в версии продукта 7.10.1

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

Вот пример, как можно поступить (Во вложении).

Оптимальный Вариант - это просмотреть вживую, для этого Вы можете очень быстро получить триал для тестирования https://www.terrasoft.ru/trial/bpmonline

Добрый день, Михаил!

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

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

Кстати, проверил - процесс Run process: Reopen case and notify assignee on receiving an answer regarding the case тоже иногда (пока не обнаружили системности) не запускается в этих случаях.
Я проверю еще на чистой триальной версии, но есть подозрение, что AutoEmailRelation может заполнять поле Case "по-тихому"

Пока выглядит так, что когда срабатывает правило связывания, то происходит установка поля Case и при этом сохранении события отключаются, потому и не стартует процесс.
Как это обойти?

public void ProceedRelation(Entity entity) {
			IEnumerable<IRuleRelationModel> rulesForEntity = GetRulesForEntity(entity.Schema.UId);
			bool isContactSearchSuccessfull = false;
			bool isOtherRelation = false;
			foreach (IRuleRelationModel rule in rulesForEntity) {
				if (GetCanRunRule(rule, isContactSearchSuccessfull)) {
					Guid columnUId = rule.EntitySchemaColumnUId;
					string columnName = entity.Schema.Columns.GetByUId(columnUId).Name;
					string columnValue = entity.GetTypedColumnValue<string>(columnName);
					MatchCollection matches = rule.GetMatches(columnValue);
					if (matches.Count > 0) {
						IEnumerable<Pair> extendedRelations = rule.GetEntityExtendedRelations(matches, _userConnection);
						if(extendedRelations.Count() > 0) {
							foreach(Pair relationValue in extendedRelations) {
								var relationColumn = entity.Schema.Columns.GetByUId((Guid)relationValue.First);
								Guid relationColumnValue = entity.GetTypedColumnValue<Guid>(relationColumn);
								if (relationColumnValue == Guid.Empty) {
									entity.SetColumnValue(relationColumn, (Guid)relationValue.Second);
									TryAutoCompleteContactOrAccount(entity, relationColumn, (Guid)relationValue.Second);
									if (rule.EntitySchemaSearchUId == AutoEmailRelationConst.ContactCommunicationSchemaUId) {
										isContactSearchSuccessfull = true;
									}
									if (rule.EntitySchemaSearchUId != AutoEmailRelationConst.AccountCommunicationSchemaUId &&
											rule.EntitySchemaSearchUId != AutoEmailRelationConst.ContactCommunicationSchemaUId) {
										isOtherRelation = true;
									}
								}
							}
							entity.Save(false);
						}
					}
				}
			}
			SetEntityProcessed(entity, isOtherRelation);
 
		}

Так же протестировали на другой сущности Problems (на которой не было доработок) – аналогичная ситуация. Когда происходит автоматическое связывание, не стартует процесс на добавление/изменение записи.

Добрый день, Владимир!
На сколько я понял симптомы описанной Вами проблемы, то данное исправление мы делали в версии продукта 7.10.1.

На процессе "Регистрация обращения по входящему письму" в методах данного процесса необходимо изменить код на указанный во вложении (можно выполнить изменение в замещенном процессе, базовый исправиться во время обновления). Это должно решить проблему срабатывания привязки по сигналам.

Спасибо, Михаил.

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

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

Добрый день, коллеги. Возникла необходимость писать "адрес сайта/CasePage/SB011849" вместо "адрес сайта/0/Nui/ViewModule.aspx#SectionModuleV2/CaseSection/CasePage/edit/e182e07b-cf59-40ee-ba7c-3cbf9b369f49" и так для всех разделов. Подскажите, пожалуйста, возможно ли это как то реализовать стандартными средствами или может у вас уже есть опыт реализации такой доработки? Можно ли создать RoutingMap или как-то зацепиться за обработчик запросов? Спасибо.

Нравится

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

Здравствуйте, Роман.

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

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

Здравствуйте. Пытаюсь запустить приложение site-on на bpm 7.9. Приложение разворачивается на ISS Windows 7. Приложение на IIS поставил, путь к базе данных вроде корректно прописано, НО при старте приложения, после ввода логина и пароля, в полях входа, после нажатия кнопки "вход", появляется логотип "bpm'online", и дальше ничего не происходит, страница не грузится, просто висит логотип "bpm'online". Может кто-нибудь подскажет в чем может быть проблема? Спасибо.

Нравится

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

Проверьте, все ли необходимые компоненты IIS установлены, особенно по части net framework, было бы неплохо взглянуть на ошибки из консоли браузера при логине.

Плюс иногда помогает чистка кеша Redis, хоть это и странно для нового приложения.

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

Проверьте, все ли необходимые компоненты IIS установлены, особенно по части net framework, было бы неплохо взглянуть на ошибки из консоли браузера при логине.

Плюс иногда помогает чистка кеша Redis, хоть это и странно для нового приложения.


[URL=https://hostingkartinok.com/show-image.php?id=8aa269cb6025aa7be39230db1…]

А по поводу компонентов, а какие вообще нужны ещё кроме стандартных, при включении IIS?
asp.net устанавливал дополнительно

Все компоненты IIS установлены

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

На странице https://academy.terrasoft.ru/documents/sales-enterprise/7-10/ustanovka-… есть пункт "Проверка обязательных компонентов Windows". Убедитесь что все необходимые компоненты установлены и полностью пройдитесь по данной инструкции, возможно не произвели какую то настройку.

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

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

На странице https://academy.terrasoft.ru/documents/sales-enterprise/7-10/ustanovka-b... есть пункт "Проверка обязательных компонентов Windows". Убедитесь что все необходимые компоненты установлены и полностью пройдитесь по данной инструкции, возможно не произвели какую то настройку.


Компонента Microsoft .Net Framework 4.5 Advanced Services, и соответсвенно WCF службы тоже нету,хотя .Net Framework 4.6 стоит

Здравствуйте, Александр!

Попробуйте, пожалуйста, с помощью веб-установщика произвести обновление .Net Framework.

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

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

Добрый день! Столкнулся с проблемой. В моем БП имеется некий с# код, который выполняется около 10 секунд (сервер быстрее не дает) и мой БП не идет дальше и замораживает страницу на эти 10 секунд. Не подскажите возможно ли выполнить мой c# код в отдельном потоке?
Версия 7.7

Нравится

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

Добрый день, Алексей!

Не уверен насчет 7.7, но начиная с 7.9 точно работает такой костыль(фича?). Можно поставить перед этим скрипт-таском (или же в начале всего процесса) таймер на 1 с, таким образом его выполнение произойдет в другом потоке.

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

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

iNSERT INTO SysAccountRight([Id], [RecordId], [SysAdminUnitId], [Operation], [RightLevel],SourceId)
SELECT newid(), '5BF886F2-169D-4EFF-801A-4068DA93F59F', 'ABD2896B-5212-4A7E-B371-5BE17F3DAF30', 0, 1,'{4220CFBA-0514-44CE-ADD0-109B54B52084}'

iNSERT INTO SysAccountRight([Id], [RecordId], [SysAdminUnitId], [Operation], [RightLevel],SourceId)
SELECT newid(), '5BF886F2-169D-4EFF-801A-4068DA93F59F', 'ABD2896B-5212-4A7E-B371-5BE17F3DAF30', 1, 0,'{4220CFBA-0514-44CE-ADD0-109B54B52084}'

после отработки скрипта новые записи в таблице SysAccountRight появляются , но когда выполняю изменение под этим пользователем система позволяет изменить.
Можете подсказать что я делаю не так?

Нравится

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

Само администрирование по записям включено на объекте "Контрагент"?
upd. Стоп. Натупил)
Operation:

  1. 0-чтение
  2. 1-изменение
  3. 2-удаление

RightLevel:

  1. 0-разрешено
  2. 1-разрешено с делегированием

Вы скриптом раздаёте права, а не запрещаете. Чтобы запретить, надо просто ничего не добавлять)

Коллеги, здравствуйте!

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

select * from SysEntitySchemaRecOprRightLvl

2) У объекта Account должны быть включены запрещающие права (но я бы этого не рекомендовал делать)
3) Значение поля Position - играет роль:
если пользователь входит в роль, которой "Разрешено" и Position этой записи меньше Position записи пользователя, которому явно запрещено, то у пользователя будут права на запись.

P.S. Если контрагентов немного, то можно действием "Настроить права доступа" на странице контрагента настроить нужные права.

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

Само администрирование по записям включено на объекте "Контрагент"?

upd. Стоп. Натупил)

Вы скриптом раздаёте права, а не запрещаете. Чтобы запретить, надо просто ничего не добавлять)


если ничего не добавлять то пользователи вносят изменения.

RightLevel:

0 запрещено
1 разрешено
1 разрешено с правом делегирования

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

Коллеги, здравствуйте!

Немного о правах:

1) Права действительно забираются такими скриптами.

Разгадка почему в результате запроса:

SELECT * FROM SysEntitySchemaRecOprRightLvl

2) У объекта Account должны быть включены запрещающие права (но я бы этого не рекомендовал делать)

3) Значение поля Position - играет роль:

если пользователь входит в роль, которой "Разрешено" и Position этой записи меньше Position записи пользователя, которому явно запрещено, то у пользователя будут права на запись.

P.S. Если контрагентов немного, то можно действием "Настроить права доступа" на странице контрагента настроить нужные права.

на обьекте Account стоит признак Администрирование по операциям
пользователь входит в группу у Все пользователи и доступ на операции Чтение Добавление Изменения

на странице контрагента нет пункта Настроить права доступа.
да и потом этих контрагентов не мало.

пробовал ставить значение Position больше и меньше , все равно изменения сохраняются.

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

Возвращаемся к основам администрирования. Есть три типа настройки прав:
1) По операциям - влияет на все записи объекта (не решает задачу)
2) По полям - определяет доступ к конкретным полям объекта
3) По записям.

Проверьте включенное администрирование по записям для объекта "Контрагент". Можно удалить права для записей, а потом добавить только нужные. Это альтернативное решение.

На обьект Контрагент включено Администрирование по операциям
Хотелось бы все так скриптом решить эту задачу.

"Евдокимов Евгений" написал:Проверьте включенное администрирование по записям для объекта "Контрагент"

Повторюсь:
"Проверьте включенное администрирование по записям для объекта "Контрагент""

"Демьяник Алексей" написал:
Евдокимов Евгений пишет:

Проверьте включенное администрирование по записям для объекта "Контрагент"

Повторюсь:

"Проверьте включенное администрирование по записям для объекта "Контрагент""


оно отключено
см вложение

На пересечении названия объекта "Контрагент" и столбика "Администрируется по записям" стоит крестик.

Это значит, что администрирование по записям отключено...

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

На пересечении названия объекта "Контрагент" и столбика "Администрируется по записям" стоит крестик.

Это значит, что администрирование по записям отключено...


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

На пересечении названия объекта "Контрагент" и столбика "Администрируется по записям" стоит крестик.

Это значит, что администрирование по записям отключено...

Здравствуйте!
Это значит что скриптом не получиться решить эту задачу?

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

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

Если администрирование по записям отключено, то при попытке изменения записи контрагента не учитываются права, которые Вы добавили скриптом в таблицу "SysAccountRight"

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

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

Если администрирование по записям отключено, то при попытке изменения записи контрагента не учитываются права, которые Вы добавили скриптом в таблицу "SysAccountRight"

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

Добрый день.

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

Если возможно то как?

Нравится

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

Здравствуйте!
Такой возможности нет, если процесс завершается с ошибкой – информация об этом будет доступна только в журнале процессов.
Зарегистрировали ваше пожелание в отделе разработки.

Евгений, каким образом письмо отправляете? Если через элемент отправить E-Mail, то не получится, но можно отправлять письмо кодом на C# и обрабатывать ошибку там. Если нужно могу скинуть пример кода.

Олег, если не сложно, буду признателен.

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

Добрый день!

Столкнулся с такой проблемой: пытаюсь отправить письмо из бизнес процесса, а получаю ошибку.
Ошибка следующая:
Terrasoft.Mail.Sender.EmailException: Плохие данные.
---> System.Security.Cryptography.CryptographicException: Плохие данные.

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
в System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
в System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
в System.Security.Cryptography.CryptoStream.FlushFinalBlock()
в System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
в System.IO.Stream.Close()
в Terrasoft.Core.SecureTextDataValueType.GetValueForLoad(UserConnection userConnection, Object value)
в Terrasoft.Core.Entities.EntityColumnValue.LoadValue(Object value)
в Terrasoft.Core.Entities.EntityColumnValueCollection.ForceLoadColumnValue(String name, Object value)
в Terrasoft.Core.Entities.Entity.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap)
в Terrasoft.Core.Entities.EntityCollection.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap, Boolean needClear)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntitySchemaEntityCollection(UserConnection userConnection, IDataReader dataReader)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
в Terrasoft.Mail.SmtpClient.CreateMailCredentialByAddress(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.CreateSmtp(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
--- Конец трассировки внутреннего стека исключений ---
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
в Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)
в Terrasoft.Core.Process.Configuration.EmailTemplateUserTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

При разборе полётов определил что исключение вываливается в методе CreateMailCredentialByAddress класса SmtpClient, строка mailboxESQ.GetEntityCollection(_userConnection);

private MailCredentials CreateMailCredentialByAddress(string address, bool ignoreRights = false) {
var mailboxESQ = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "MailboxSyncSettings");
EntitySchemaQueryColumn userNameColumn = mailboxESQ.AddColumn("UserName");
EntitySchemaQueryColumn userPasswordColumn = mailboxESQ.AddColumn("UserPassword");
EntitySchemaQueryColumn isAnonymousAuthentication = mailboxESQ.AddColumn("IsAnonymousAuthentication");
EntitySchemaQueryColumn sendEmailsViaThisAccountColumn = mailboxESQ.AddColumn("SendEmailsViaThisAccount");
EntitySchemaQueryColumn smtpHostColumn = mailboxESQ.AddColumn("MailServer.SMTPServerAddress");
EntitySchemaQueryColumn smtpPortColumn = mailboxESQ.AddColumn("MailServer.SMTPPort");
EntitySchemaQueryColumn smtpSslColumn = mailboxESQ.AddColumn("MailServer.UseSSLforSending");
EntitySchemaQueryColumn smtpTimeoutColumn = mailboxESQ.AddColumn("MailServer.SMTPServerTimeout");
IEntitySchemaQueryFilterItem senderEmailAddressFilter = mailboxESQ
.CreateFilterWithParameters(FilterComparisonType.Equal, "SenderEmailAddress", address);
mailboxESQ.Filters.Add(senderEmailAddressFilter);
if (ignoreRights) {
mailboxESQ.UseAdminRights = false;
} else {
mailboxESQ.AddRightsFilters(_userConnection.CurrentUser.Id);
}
EntityCollection mailboxEntities = mailboxESQ.GetEntityCollection(_userConnection);
var mailCredentials = new MailCredentials();
if (mailboxEntities.Count == 0) {
throw new Sender.EmailException("ErrorOnSend", MailboxDoesNotExist);
}

Entity mailbox = mailboxEntities[0];
if (!mailbox.GetTypedColumnValue(sendEmailsViaThisAccountColumn.Name)) {
throw new Sender.EmailException("ErrorOnSend", NotAllowedSendingFromThisMailbox);
}
mailCredentials.Host = mailbox.GetTypedColumnValue(smtpHostColumn.Name);
mailCredentials.Port = mailbox.GetTypedColumnValue(smtpPortColumn.Name);
mailCredentials.UserName = mailbox.GetTypedColumnValue(userNameColumn.Name);
mailCredentials.UserPassword = mailbox.GetTypedColumnValue(userPasswordColumn.Name);
mailCredentials.UseSsl = mailbox.GetTypedColumnValue(smtpSslColumn.Name);
mailCredentials.Timeout = mailbox.GetTypedColumnValue(smtpTimeoutColumn.Name) * 1000;
mailCredentials.IsAnonymousAuthentication = mailbox.GetTypedColumnValue(isAnonymousAuthentication.Name);
return mailCredentials;
}

Нравится

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

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

Судя по ошибке в поле UserPassword (таблица MailboxSyncSetting) хранится хэш, который не может быть расшифрован. Судя по всему там записано некорректное значение.

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

А по поводу алгоритма получения хэша можете сориентировать?

"Сурмачевский Евгений Александрович" написал:

А по поводу алгоритма получения хэша можете сориентировать?


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

Данные колонки необходимо использовать исключительно через EntitySchemaQuery используя формат "Secure Text"

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

Подскажите, пожалуйста, возможно ли в конфиге отфильтровать набор данных для Lookup по определенному полю. В моем случае - "BTNumber".
Вот текст конфига:
var config = {
entitySchemaName: "BTVwPCManifest",
multiSelect: true
};

Нравится

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

Разобралась самостоятельно :exclaim:
Возможно, кому-то пригодится эта информация.

Это можно реализовать таким образом:
var config = {
entitySchemaName: "BTVwPCManifest",
multiSelect: true,
sortedColumns: [{
name:"BTNumber",
orderPosition: 0,
orderDirection: Terrasoft.OrderDirection.ASC
}]
};

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

SQL-скриптом во время его установки инициализируются некие системные переменные, их значения, для этого происходит UPDATE вызов для таблицы SysSettingsValue
При этом не смотря на то, что данные в БД претерпевают изменения, в запущенной на этот момент версии приложения, текущие и вновь подключающиеся пользователи продолжают работать со старыми значениями, которые очевидно помещены в Redis и фактически являются закешированными на стороне сервера, проблема конечно решается сбросом Redis.
Но мне кажется существует некий способ - сбросить или обновить закешированные значения системной переменной обособленно "вручную" принудительно, есть ли такая возможность ?

PS: Возможно существуют специализированные методы JS/C# ?

Нравится

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

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

Можем предложить вам следующее решение:

UserConnection.ResetSettingsCache() – сбрасывает все кэшируемые системные настройки.
UserConnection.ResetSettingsCache(string settingsCode) - сбрасывает все кэш определенной системной настройки.

Это C# или JS имплементация методов ?

Илья, уточняю - С#

Для JS аналога нет ?
Просто вроде как изменение системной переменной которое происходит из UI, тоже корректно обновляет кешь, предполагаю что для JS в API есть аналогичные методы.

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

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

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