Коллеги. Добрый день. Есть потребность управлять доступностью большого множества полей на карточке. Для примера имеем:

{
  "operation": "insert",
  "name": "UsrNumberField",
  "values": {
    "layout": {
      "colSpan": 12,
      "rowSpan": 1,
      "column": 0,
      "row": 0,
      "layoutName": "Header"
    },
    "bindTo": "UsrNumber",
    "labelConfig": {},
    "enabled": {"bindTo": "getEnablePropertyOfFields"}
  },
  "parentName": "Header",
  "propertyName": "items",
  "index": 0
},

methods: {
  getEnablePropertyOfFields: function(arg) {
    console.log(arg);
  },
}

При рендере страницы метод вызывается 4 раза подряд. Вывод такой:

UsrNumber
UsrNumber
undefined
undefined

И это только для одного поля. Такой расклад не устраивает. Почему 4 раза? Куда пропадает аргумент? Хочется всё же написать один метод для всех полей объекта, который по определенным условиям выставляет доступность поля. Соответственно не получая в аргументе названия поля ничего не получится.

Версия 7.8.2. Есть идеи? Писать на каждое поле свой метод - несколько безумно на мой взгляд.
Если вдруг есть инфа, что на 7.9.х это починили или такое не замечено, то тоже дайте знать.

Нравится

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

Биндитесь на атрибут, и им уже управляйте в событийной модели.

Биндинг на метод - идея плохая, 4-ре раза это Вам повезло, когда я задавался этим вопросом он вызывался 12-ть раз.
http://www.community.terrasoft.ru/forum/topic/25151
http://www.community.terrasoft.ru/forum/topic/25084

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

Биндитесь на атрибут, и им уже управляйте в событийной модели.

Биндинг на метод - идея плохая, 4-ре раза это Вам повезло, когда я задавался этим вопросом он вызывался 12-ть раз.

http://www.community.terrasoft.ru/forum/topic/25151

http://www.community.terrasoft.ru/forum/topic/25084

Уже прочел Ваши темы. Заводить овер 60 атрибутов грустно. В методе планировалось сделать свич по имени колонки и для каждой свою логику делать. А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

"Темченко Кирилл Александрович" написал:А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

теги пробовали? (в values поля "tag": "testElement", в функции вставить дебаггер и посмотреть что в arguments приходит)

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

теги пробовали? (в values поля "tag": "testElement", в функции вставить дебаггер и посмотреть что в arguments приходит)

занятно.
теперь:

UsrNumber
UsrNumber
testElement
testElement

Этому поведению можно доверять теперь? Привязывать логику на тэги?

"Темченко Кирилл Александрович" написал:Привязывать логику на тэги?

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

"Темченко Кирилл Александрович" написал:Уже прочел Ваши темы. Заводить овер 60 атрибутов грустно. В методе планировалось сделать свич по имени колонки и для каждой свою логику делать. А теперь придется такой же метод писать, но для атрибутов и еще тонну атрибутов заводить.

Опишите подробнее Ваш кейс, скорее всего мы найдем для Вас оптимальное решение :)
Уже всяко понапридумывали "обходных путей".
Например, это не очевидно и нигде не освещается на Академии, но методом опытного "тыка", определено, что многие кейсы можно реализовать не биндингом а через dependesies, а самое занятное что

arguments: {
...
"SomeColumn": {
	"dependencies": [
		{
			"columns": ["SomeColumn"],
			"methodName": "SomeColumnChangeHandler"
			"argument": "Что угодно"
		}
	]
},
...

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

Илья. Спасибо. Положу в копилку. Задачу уже решил. С помощью единственного метода и передачи в него тега.

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

Удалили поле Клиент в заказе, теперь при заполнении Заказа появляется окно чтобы заполнить это поле. Но этого поля нет. подскажите как его удалить или вернуть?

Нравится

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

Вот источник подобного зла:

"Client": {
	"caption": {"bindTo": "Resources.Strings.Client"},
	"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
	"multiLookupColumns": ["Contact", "Account"],
	"isRequired": true
}

Чтобы устранить, в атрибутах замещающей страницы пропишите

"Client": {
	"isRequired": false
}

Добрый день!

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

Добрый день!

Если нужно просто вернуть поле, то можно удалить или закоментировать код на схеме OrderPageV2:

{
"operation": "remove",
"name": "Client"
}

А если нужно удалить это поле? и вообще это возможно

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

"Варфоломеев Данила" написал:"Client": {
        "caption": {"bindTo": "Resources.Strings.Client"},
        "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
        "multiLookupColumns": ["Contact", "Account"],
        "isRequired": true
}
Чтобы устранить, в атрибутах замещающей страницы пропишите
"Client": {
        "isRequired": false
}

Но, все-таки, я бы рекомендовала не трогать это поле, если оно не влияет на Вашу работу.

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

Алена, добрый день!

Замещенная страница создается автоматически, при внесении изменений мастера раздела. Потому есть вероятность, что у Вас в системе замещенная страница уже создана.

Пример создания замещающей страницы, а также добавления валидации к полю описан в данной статье - https://academy.terrasoft.ru/documents/technic-sdk/7-10/dobavlenie-vali…

А можно поменять местами. Что бы сначала были контрагенты, а потом Контакты

Судя по всему достаточно просто поменять в коде местами Account и Contact:

"Client": {
"caption": {"bindTo": "Resources.Strings.Client"},
"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
"multiLookupColumns": ["Contact", "Account"],
"isRequired": true
}
},

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

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

Версия BPMonline 7.10.1.1161
Подскажите: пытаюсь добавить кнопку на грид детали. Делал это уже неоднократно, но сейчас почему-то используемый код не работает. Деталь унаследована от BaseGridDetailV2

Код детали

define("VwAccountOrdersProductsDetail", ["GridUtilitiesV2"], function(GridUtilities) {
        return {
                entitySchemaName: "VwAccountOrdersProducts",
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
                                {
                                        "operation": "merge",
                                        "name": "DataGrid",
                                        "values": {
                                                "activeRowAction": {"bindTo": "onActiveRowAction"},
                                                "activeRowActions": []
                                        }
                                },
                                {
                                        "operation": "insert",
                                        "name": "AddToOrderProductAction",
                                        "parentName": "DataGrid",
                                        "propertyName": "activeRowActions",
                                        "values": {
                                                "className": "Terrasoft.Button",
                                                "style": this.Terrasoft.controls.ButtonEnums.style.DEFAULT,
                                                "visible": true,
                                                "caption": {"bindTo": "Resources.Strings.AddToOrderProductActionCaption"},
                                                "tag": "choose"
                                        }
                                }      
                ]/**SCHEMA_DIFF*/,

                methods: {

                        onActiveRowAction: function(buttonTag, primaryColumnValue) {
                                if(buttonTag == 'choose') {
                                        this.showInformationDialog(primaryColumnValue);
                                }
                        }              
                }
        };
});

Но кнопки не отображаются на гриде. При этом DOM элемент создается, но без привычных стилей t-btn. Подскажите что делать?

Нравится

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

у вас caption не проставляется (подгрузите ресурсы)

Судя по всему оно не видит "Resources.Strings.AddToOrderProductActionCaption", попробуйте caption записать не через байнд а напрямую "caption": "Текст кнопки".

Действительно, если указать вместо байнда непосредственно строку, то все становится ОК.
Но, почему не видит ресурсы? В дизайнере соответсвующая локализованная строка добавлена. Что еще нужно предпринять?

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

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

Я создал свой раздел, данные в котором вытягиваються с внешнего API. Встал вопрос о том, как можно запретить редактировать и добавлять новые объекты? Достаточно ли будет придумать как скрыть кнопку "Добавить", а также кнопок "Открыть", "Копировать", "Удалить" при выделении конкретного объекта и в принципе запретить переход на старицу конкретного объекта? И как вообще можно такое сделать? В документации примеров не нашел

Нравится

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

Виталий, здравствуйте!

Встал вопрос о том, как можно запретить редактировать и добавлять новые объекты?
Вы можете ограничить действия в объекте правами доступа по операциям. Функционал описан по ссылке:
https://academy.terrasoft.ru/documents/sales-enterprise/7-10/detal-dostup-k-obektu-razdela-dostup-k-obektam-0

Достаточно ли будет придумать как скрыть кнопку "Добавить", а также кнопок "Открыть", "Копировать", "Удалить" при выделении конкретного объекта и в принципе запретить переход на страницу конкретного объекта?

Недостаточно. Есть обходные варианты для создания и копирования записи, если это не ограничено правами.
Пример, как запретить просмотр записи можно найти в реализации VwProcessLibSection (просмотр раздела регулируется системной операцией). Задается через атрибуты:

SecurityOperationName: {
	dataValueType: Terrasoft.DataValueType.STRING,
	value: "CanManageProcessDesign"
},

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

Виталий, здравствуйте!

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

Вы можете ограничить действия в объекте правами доступа по операциям. Функционал описан по ссылке:

https://academy.terrasoft.ru/documents/sales-enterprise/7-10/detal-dostup-k-obektu-razdela-dostup-k-obektam-0

Достаточно ли будет придумать как скрыть кнопку "Добавить", а также кнопок "Открыть", "Копировать", "Удалить" при выделении конкретного объекта и в принципе запретить переход на страницу конкретного объекта?

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

Пример, как запретить просмотр записи можно найти в реализации VwProcessLibSection (просмотр раздела регулируется системной операцией). Задается через атрибуты:

SecurityOperationName: {

        dataValueType: Terrasoft.DataValueType.STRING,

        value: "CanManageProcessDesign"

},


Cпасибо! А смогу ли я манипулировать объектами через службу DataService, если оставлю права только на чтение?

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

Добрый день!
После закрытия обращения, пользователю приходит письмо с просьбой оценить качество работы. Выбрав оценку, он попадает на веб-сервис CaseRatingManagementService.svc с надписью "Thank you for raiting".
Немного разобравшись, я понял что этот логотип храниться в таблице SysSettingsValue (SysSettingsId = 59EE36CC-2790-456E-896A-469ACC434BA1) в формате varbinary(max) в виде "0x89504E470D0A1A0A0000000D494..."
Мне необходимо заменить логотип спасибо за оценку, как я могу это сделать?

Нравится

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

Это hex строка, вот вам декодер из хекс строки в картинку:
http://tomeko.net/online_tools/hex_to_file.php?lang=en

там же есть декодер обратно:
http://tomeko.net/online_tools/file_to_hex.php?lang=en
снимаете обе галочки, кормите нужный файл, добавляете в начало 0x
и подменяете в бд :wink:

Спасибо Максим!

Максим Шевченко,Молчанов Антон Сергеевич,

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

Update SysSettingsValue SET [Value] = '0х.... ' where [SysSettingsId] = '59EE36CC-2790-456E-896A-469ACC434BA1'

 

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

Доброго времени суток, есть вопрос следующего характера
У меня есть расширяющий модуль для FileDetailV2
Внутри него я получаю контент PDF документа (контент строкой)
Каким образом мне этот контент передать на FileApiService модуль в метод Upload что бы загрузить этот файл?
Если я загружаю руками документ то получаю в консоли POST запрос на

https://testDomain.bpmonline.com/0/rest/FileApiService/Upload?fileapi14996709535744&totalFileLength=47386&fileId=file_id&mimeType=application%2Fpdf&columnName=Data&fileName=20846491.pdf&parentColumnName=Document&parentColumnValue=parent_document_value&entitySchemaName=DocumentFile

И также интересно как в JS получить текущий entitySchemaName?

Нравится

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

Сформируйте аналогичный запрос со значениями колонок в url, и с данными файла в теле запроса средствами js.
Ответ на второй вопрос:

"Максим Шевченко" написал:file_id

Спаибо за Ваш ответ
Но в url есть значение file_id откуда мне его взять если файл еще не создан?

"Nickstery" написал:Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:
https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascri…

"Максим Шевченко" написал:
Nickstery пишет:

Но в url есть значение file_id откуда мне его взять если файл еще не создан?

Это просто новый рандомный гуид по которому далее файл можно будет получить, создать новый гуид можно следующим образом:

https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript

С формированием параметра понятно
Каким образом отправлять контент файла в теле запроса, это form-data по ключу определенному или передаеться как binary data?
Если я формирую запрос в Postman (приложение для отправки запросов) как приведено ниже

http://joxi.ru/V2VKJBwuxeDROA

Я получаю следующий ответ:

http://joxi.ru/L21bq0kh8Jx3dA

Есть где-то дока какой ендпоинт/модуль какие есть методы, и какие поля нужно отправлять что бы загрузить документ?
Не совсем понятно каким образом проиходит передача самого документа

Я набросал кусок кода, который получает контент файла, формирует BLOB и пытаеться отправить его на FilApiService Только я получаю ту же ошибку

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "arraybuffer";
http.onload = function(e) {
    if (this.status === 200) {
        var uInt8Array = new Uint8Array(this.response);
        var i = uInt8Array.length;
        var binaryString = new Array(i);
        while (i--)
        {
             binaryString[i] = String.fromCharCode(uInt8Array[i]);
         }
        var data = binaryString.join("");
 
        var http2 = new XMLHttpRequest();
        http2.open("post", "/0/rest/FileApiService/Upload?fileapi14998570381414&totalFileLength=47386&" +
        "fileId=*****&mimeType=application/pdf&columnName=Data" +
        "&fileName=20846491.pdf&parentColumnName=Document" +
        "&parentColumnValue=***&entitySchemaName=DocumentFile", true);
        http2.onload = function(e) {
             window.console.log("UPLOAD FILE OPERATION DONE");
             window.console.log(e);
        };
        http2.send(new Blob([data]));
 
        }
    };
http.send();

Разобрался:
Суть в том что при расширении FileDatailV2 (логично) мы унаследуем и методы оринильного модуля.
Можно не использовать FileApiService и не генерировать 100500 параметров а просто обойтись готовым решением, как это делает аплоад документа юзер, который находится в CRM.
Достаточно использовать FileDetailV2 -> onFileSelect метод и из строчного контента сгенерировать window.File
Пример как я это реализовал ниже:

window.console.log("Try to grab the file content");
var http = new XMLHttpRequest();
http.open("get", "https://b981fab7.ngrok.io/getPDF", true);
http.responseType = "blob";
var parent = this;
http.onload = function(e) {
    if (http.readyState === 4) {
    var blob = http.response;
    parent.onFileSelect([new window.File([blob], "UPLOADED.pdf")]);
    }
};
http.send();

Таким образом не нужно думать как приатачить документ в таблицу после его загрузи, это все делает модуль автоматически

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

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

Установил фидлер и при включенном захвате трафика выходит такая ошибка:

Зато удалось в консоли разработчика увидеть запрос отправленный на сервер:

https://my.domain.com/0/rest/FileApiService/Upload?fileapi1606730904835…

При попытке отправить этот запрос из POSTMAN, сервер возвращает ошибку: 

400 Bad request

Может, что-то не то с заголовками или content type содержимого, не знаю.  А если прямо в браузере отловить?

Отловил запрос прямо в браузере, вот:

https://my.domain.com/0/rest/FileApiService/Upload?fileapi1606730904835…

Но при попытке отправить этот запрос из POSTMAN, сервер возвращает ошибку: 

400 Bad request

Можно попробовать сравнить запрос с нормально работающим, поискать в чём отличия в содержимом.

Зверев Александр,

Так в том и вопрос, какой он нормально работающий запрос. Я ни как не могу его найти. Могли бы вы предоставить пример рабочего запроса? Буду очень признателен.

Нормальный запрос идёт из браузера при добавлении файла на деталь. Но Вы, видимо, его и так уже видели:

Request URL: https://0987561-se-m-se-demo.creatio.com/0/rest/FileApiService/Upload?fileapi16068281951725&totalFileLength=42738&fileId=0015222a-e192-4e2d-a305-7029653b76eb&mimeType=image%2Fpng&columnName=Data&fileName=test.png&parentColumnName=Contact&parentColumnValue=eba7839a-6dff-430f-8325-fb8e02546348&entitySchemaName=ContactFile
Request Method: POST
Status Code: 200 
Remote Address: 40.91.213.136:443
Referrer Policy: strict-origin-when-cross-origin
cache-control: private
content-type: application/json; charset=utf-8
date: Tue, 01 Dec 2020 13:16:21 GMT
server: Microsoft-IIS/10.0
status: 200
x-aspnet-version: 4.0.30319
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-powered-by: ASP.NET
:authority: 0987561-se-m-se-demo.creatio.com
:method: POST
:path: /0/rest/FileApiService/Upload?fileapi16068281951725&totalFileLength=42738&fileId=0015222a-e192-4e2d-a305-7029653b76eb&mimeType=image%2Fpng&columnName=Data&fileName=test.png&parentColumnName=Contact&parentColumnValue=eba7839a-6dff-430f-8325-fb8e02546348&entitySchemaName=ContactFile
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,uk;q=0.8,ru;q=0.7
bpmcsrf
content-disposition: attachment; filename=test.png
content-length: 42738
content-range: bytes 0-42737/42738
content-type: image/png
cookie: BPMSESSIONID=oq1w3q0l1yhedqm43aayja1a; _ga=GA1.2.656850260.1571905584; UserName=83|117|112|101|114|118|105|115|111|114; BPMLOADER=ytih30doaflbq4opdaauindd; _gid=GA1.2.1302014581.1606819455; .ASPXAUTH=0008CA5627819C22386A7FD7673D990C515D14E16AAA7C3E962C321AD5B73C8A2E390A6A6F5AE4DDD258B39ED90AE52BB05619534187DF76BBB1D1FF11B042E75619D72724CFE8E56619EEA9AC684DD352340A7212E60D621B3347E1116DE823140E48AE7FF68CE26734B92A9535C2C69D4BF9A6DE071595ECA44536D4EDF49958CBE863D46ABF8E86B2BAB87496310E5A25A03B4037A458240E6FAB1DFA93DE265821214B9C08D57C5CF3D2376E197C94AC1CF59BE9DA24BE2415465689C40BB1306488AB986D58ADCA8764F99566A0BCBB108248B7FB62678B541F509BC80525781C299A0A5FE2EB0F6997868942D0BD146D40C89B36E12CC760D7C05709175E01F26E6B67BF67846BE78BFE1E583A830ACFFF907A58B713DED3C10FC4E422C74DF27E792BADD1138259551A290978A88414B1CDC15E000D4A44B70BD9E296B74C0601BD3DDD315F2722EC95987F77427E73EB062C147611AD43A0DEE6B967AB07C932
origin: https://0987561-se-m-se-demo.creatio.com
referer: https://0987561-se-m-se-demo.creatio.com/0/Nui/ViewModule.aspx
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
x-requested-with: XMLHttpRequest
fileapi16068281951725: 
totalFileLength: 42738
fileId: 0015222a-e192-4e2d-a305-7029653b76eb
mimeType: image%2Fpng
columnName: Data
fileName: test.png
parentColumnName: Contact
parentColumnValue: eba7839a-6dff-430f-8325-fb8e02546348
entitySchemaName: ContactFile
‰PNG

 
IHDRТA7fœsRGB®ÎégAMA±üa

 

Если его, то видел. Но повторить и выполнить самому, для начала из POSTMAN, ни как не получается из-за ошибки 400 Bad request.

Руслан, можно в Fiddler сравнить все заголовки правильного и неправильного запросов, может чего-то не хватать.

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

Всем доброго времени суток.
Часто возникает проблема с веб-сокетами(веб-сокеты родные) следующего характера:
На сервере развернут сайт (версия 7.10), имеется несколько рабочих пространств. Во всех рабочих пространствах, кроме Default, веб-сокеты работают корректно. Помогает перезагрузка IIS, но через некоторое время снова появляется аналогичная проблема.

Может кто-то сталкивался с подобным и знает как решить?

Заранее благодарен.

Нравится

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

Поведение очень напоминает постоянную перезагрузку приложения. Для установления факта посмотрите логи приложения, при необходимости включите расширенное логирование сайта (настройка в файле log4net.config).
Далее зайдите в приложение. В логах будет сообщение, что версия приложения (из ядра) не совпадает с данными, указанными в таблице SysWorkspace (поле Version).
Нужно убедиться, что сайт использует уникальную БД Redis. Далее возможны два варианта решения:
1) Скомпилировать приложение, чтобы увеличить версию в SysWorkspace
2) Произвести update поля Version в таблице SysWorkspace для того, чтобы уравнять версии. На какое значение необходимо обновить данные таблицы, можно узнать из логов приложения.

Спасибо за информацию. Но не могли бы Вы подсказать в каком файле log4net.config (один находится в Terrasoft.WebApp\DesktopBin\MessagingService\Config\ второй лежит в корне) настроить расширенное логирование и какую настройку включить?

Кирилл, логирование настраивается в файле, который в корне папки Terrasoft.WebApp

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

Добрый день!

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

Нравится

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

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

Возможно ли решить эту задачу с помощью БП?

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

В БП добавила блок добавить новую запись, в объекте указала "Уведомления". Процесс завершился. Уведомление не появилось на панели коммуникаций.

Проверила в БД таблицу Reminding, запись об уведомлении была добавлена.
Подскажите,как правильно работать с уведомлениями, как их создавать из БП.

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

Здравствуйте, подскажите, как реализовать возможность добавления на страницу компонентов "на лету".

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

И вообще возможно ли такая гибкая логика

Спасибо!

Нравится

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

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

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

Есть несколько вопросов по кейсам 7.10
1. Как сделать что бы после выполнения всех шагов автоматически переходило в следующую стадию и меняло стадию в карточке.
2. При нажатии на следующую стадию при невыполнении текущей в нее не переходит(верно) но первый шаг запускается(неверно)
пример: есть 2 задачи на 2 стадии, нажали на 3 стадию(там первым шагом бп на изменение Отв.) она не запустилась, но Отв изменился и осталось 2 задачи с второй стадии.
3. Если есть кейсы то поле стадий должно бить недоступным для редактирования или совсем скрытым?

Нравится

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