diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..c688940 Binary files /dev/null and b/.DS_Store differ diff --git a/business_solutions/_footer.css b/business_solutions/_footer.css index 2ef73c0..37c9954 100644 --- a/business_solutions/_footer.css +++ b/business_solutions/_footer.css @@ -433,6 +433,4 @@ img{ } } -footer { - padding-top:80px -} + diff --git a/business_solutions/default.css b/business_solutions/default.css index 67da43b..edc4563 100644 --- a/business_solutions/default.css +++ b/business_solutions/default.css @@ -456,7 +456,7 @@ input[type="text"]:not(.ReportTypo input):not(.ReportTypo-comment) { position: sticky; top: 80px; /*display: flex; */ - max-height: calc(100vh - 80px); + /*max-height: calc(100vh - 80px);*/ transition: top .2s linear; } @@ -1967,7 +1967,7 @@ code { .article__header{ min-height: 58px; } - + .article__badge { height: 26px; min-width: 34px; diff --git a/business_solutions/google-search.js b/business_solutions/google-search.js index a1416db..ed18165 100644 --- a/business_solutions/google-search.js +++ b/business_solutions/google-search.js @@ -175,6 +175,7 @@ const allowedHosts = [ "http://127.0.0.1", "http://localhost", "https://ligmanstark.github.io/help365_test/", + "https://help.miduway.space", ]; if (allowedHosts.some((url) => currentLocalHref.includes(url))) { diff --git a/business_solutions/main.js b/business_solutions/main.js index 8879ca7..711be57 100644 --- a/business_solutions/main.js +++ b/business_solutions/main.js @@ -1,5 +1,6 @@ const getLocale = () => { const lan = document.documentElement.lang; + return lan ? document.documentElement.lang : "ru"; }; @@ -12,125 +13,186 @@ function getProduct() { case "elma-rpa.ai": product = { name: "rpa", + id: "33678c11-fea6-4adb-aa39-adc4e8295b53", }; + break; + case "www.elma-bpm.ru": product = { name: "elma3/4", + id: "44b97702-146c-414b-9db7-0b09705556ed", }; + break; + default: product = { name: "elma365", + id: "3354c78a-720e-4584-a9c6-83f0f1396d22", }; + break; } + return product; } +document + .querySelector(".solution-select") + .addEventListener("mouseenter", function () { + this.classList.add("active"); + + document.querySelector(".solution-select__list").classList.add("active"); + }); + +document + .querySelector(".solution-select__list") + .addEventListener("mouseleave", function () { + this.classList.remove("active"); + + document.querySelector(".solution-select").classList.remove("active"); + }); + +const titleName = () => { + let textSpanTitle = document.querySelector(".solution-select__selected"); + + let currentPlace = window.location.pathname + .replace("/en/help/", "") + .split("/")[0]; + + textSpanTitle.textContent = + currentPlace.charAt(0).toUpperCase() + currentPlace.slice(1); + + if (currentPlace === "crm" || "ecm") { + textSpanTitle.textContent = currentPlace.toUpperCase(); + } + + if (currentPlace === "business_solutions") { + let business = currentPlace.replace("_", " "); + + textSpanTitle.textContent = + business.charAt(0).toUpperCase() + + business.slice(1, 8) + + " " + + business.charAt(9).toUpperCase() + + business.slice(10); + } +}; + +/*// Commerce version + +const files = document.querySelectorAll(".filelink"); + +if (files.length) { + + files.forEach((file) => + + file.setAttribute("download", "Postman_collection.json") + + ); + +}*/ + const insertWordBreaks = (selector) => { document.querySelectorAll(selector).forEach((el) => { - el.innerHTML = el.textContent.replace(/([\/\-=:<>_])/g, "$1"); + el.innerHTML = el.textContent.replace(/([\/\-=<>:_])/g, "$1"); }); }; insertWordBreaks("code"); -const addCanonicalUrl = () => { - const urlMapping = { - "/ru/help/business_solutions/platform-distribution.html": - "/ru/help/platform/platform-distribution.html", - }; - - const listUrl = [ - "/ru/haproxy-postgresql.html", - "/ru/doc_template.docx", - "/ru/platform-distribution.html", - "/ru/help/platform/haproxy-postgresql.html", - "/ru/help/platform/platform-distribution.html", - "/ru/help/ecm/doc_template.docx", - ]; - - const currentPath = window.location.pathname; - const baseUrl = window.location.origin.includes("localhost") - ? window.location.origin - : "https://elma365.com"; - - if (urlMapping[currentPath]) { - setCanonicalUrl(baseUrl + urlMapping[currentPath]); - return; - } - - if (listUrl.includes(currentPath)) { - setCanonicalUrl(baseUrl + currentPath); - } -}; - -const setCanonicalUrl = (canonicalUrl) => { - const canonicalLink = document.createElement("link"); - canonicalLink.href = canonicalUrl; - canonicalLink.setAttribute("rel", "canonical"); - document.querySelector("head").appendChild(canonicalLink); -}; - -addCanonicalUrl(); - const scrollToLink = () => { - let myHash = window.location.pathname; //�������� �������� ���� - if (myHash) { + let myHash = location.hash; //�������� �������� ���� + + location.hash = ""; //������� ��� + + if (myHash[1]) { //���������, ���� �� � ���� �����-�� �������� - $("html, body").animate({ scrollTop: $(myHash).offset().top }, 100); //�������� �� ���������� + + $("html, body").animate({ scrollTop: $(myHash).offset().top }, 300); //�������� �� ���������� } }; + // scrollToLink(); -function scrollLink() { - document.addEventListener("DOMContentLoaded", function () { - const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим - if (hash) { - const target = document.querySelector(`[data-unique="${hash}"]`); - if (target) { - target.scrollIntoView({ behavior: "smooth" }); - } - } - }); -} -scrollLink(); +// function scrollLink() { + +// document.addEventListener("DOMContentLoaded", function () { + +// const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим + +// if (hash) { + +// const target = document.querySelector(`[data-unique="${hash}"]`); + +// if (target) { + +// target.scrollIntoView({ behavior: "smooth" }); + +// } + +// } + +// }); + +// } + +// scrollLink(); const createVersionNode = (title, className) => { const articleNode = document.querySelector(".topic__title"); + const pVersion = document.createElement("p"); + pVersion.innerText = title; + pVersion.classList.add(className); + articleNode.append(pVersion); }; -const { href, pathname } = window.location; +const { + href, + + pathname, +} = window.location; + let locale = getLocale(); + const pathnameArr = pathname.split("/"); + let currentPage = pathnameArr[pathnameArr.length - 1] || null; //���� �� ��������� ��������, ������ ���������� ������ � ����� + const changeHeaderLinks = () => { const host = "elma4.sarl.inner.elma365.com"; + const path = "/ru/platform/"; + const headerLinks = document.querySelector(".header__list"); + const footerList = document.querySelector(".footer-mobile__list"); + const appendList = ``; if (window.location.host === host) { if (window.location.pathname !== path) { headerLinks.insertAdjacentHTML("beforeend", appendList); + footerList.insertAdjacentHTML("beforeend", appendList); } } }; + //changeHeaderLinks() // standard example + function findExampleContent(node, container, endString) { if ( node.classList.contains("p_CodeExample") && @@ -139,48 +201,68 @@ function findExampleContent(node, container, endString) { node.firstElementChild.innerText.toLowerCase().includes(endString) ) { node.remove(); + return; } + const nextElement = node.nextElementSibling; + container.append(node); + findExampleContent(nextElement, container, endString); } function createNotation(item, notationType, endString) { const container = document.createElement("div"); + const exampleTitle = item.nextElementSibling; + const nextSibling = exampleTitle.nextElementSibling; container.classList.add(notationType); + exampleTitle.classList.add(notationType + "__title"); + container.append(exampleTitle); + findExampleContent(nextSibling, container, endString); + item.after(container); + item.remove(); } function getArticleName(url) { const arrFromUrl = url.split("/"); + const lastPath = arrFromUrl[arrFromUrl.length - 1]; + return lastPath.split(".")[0]; } function removeCollapsedClass(node, tagName, className) { const closestNode = node.closest(tagName); + if (!closestNode) { return; } + closestNode.classList.remove(className); + removeCollapsedClass(closestNode.parentElement, tagName, className); } function loadBottomLinks() { const toc = document.querySelector("#toc"); + const bottomLinks = document.querySelectorAll(".bottom-nav__link"); + if (toc && bottomLinks.length) { bottomLinks.forEach((link) => { const path = `a[href="${link.innerText}"]`; + const targetLink = toc.querySelector(path); + link.innerText = targetLink.innerText; }); } @@ -188,25 +270,32 @@ function loadBottomLinks() { function hideAllSideUls() { const hidingMenu = document.querySelectorAll("#toc li ul"); + hidingMenu.forEach((item) => { item.classList.add("hide-side-menu-item"); + item.closest("li").classList.add("collapsed"); }); } function toggleUlsLinksHandler(menu, link) { menu.forEach((link) => link.classList.remove("active-side-menu")); + link.classList.add("active-side-menu"); + removeCollapsedClass(link, "ul", "hide-side-menu-item"); + if ( link.nextElementSibling && link.nextElementSibling.classList.contains("hide-side-menu-item") ) { removeCollapsedClass(link, "li", "collapsed"); + link.nextElementSibling.classList.remove("hide-side-menu-item"); } else { removeCollapsedClass(link, "li", "collapsed"); } + setTimeout(() => { scrollToSelector(".active-side-menu"); }, 100); @@ -214,19 +303,28 @@ function toggleUlsLinksHandler(menu, link) { function scrollToSelector(selector) { // document.body.style.position = 'fixed'; + document.querySelector(".sidebar__wrapper").style.position = "fixed"; + document + .querySelector(selector) + .scrollIntoView({ behavior: "smooth", block: "center" }); + document.querySelector(".sidebar__wrapper").style.position = "sticky"; + // document.body.style.position = 'unset'; } function toggleUlsHandler() { const tocNode = document.querySelector("#toc"); + if (tocNode) { const linksMenu = tocNode.querySelectorAll("a"); + const activeItem = getArticleName(window.location.pathname); + linksMenu.forEach((link) => { if (getArticleName(link.pathname) === activeItem) { toggleUlsLinksHandler(linksMenu, link); @@ -237,29 +335,37 @@ function toggleUlsHandler() { function prepareContent() { const commerceId = document.getElementById("commerce"); + const communityId = document.getElementById("community"); href.includes("zoom_highlightsub") && $("body").addClass("--highlight-disabled"); //Set document title + const h1pageTitle = document.querySelector("h1 span.f_Heading1"); + if (h1pageTitle) { document.querySelector("title").innerText = h1pageTitle.innerText; } + if (commerceId || communityId) { commerceId ? (commerceId.style.display = "none") : (communityId.style.display = "none"); + commerceId ? createVersionNode("Enterprise", "pCommerce") : createVersionNode("Community Edition", "pCommunity"); } + hideAllSideUls(); + toggleUlsHandler(); const visibleSideBar = (sidebar) => { const input = sidebar.querySelector('input[type="checkbox"]'); + let isVisible = false; input.addEventListener("change", () => { @@ -272,35 +378,55 @@ function prepareContent() { } }); }; + //TODO навигация по статье (якори) + const toc2 = document.getElementById("toc2"); + if (toc2) { const toc2Wrapper = document.querySelector(".article__sidebar"); + if (!toc2.dataset.tocInitialized) { $("#toc2").tocify({ context: "section.article__content", + selectors: "h2, h3", + extendPage: false, }); + toc2.dataset.tocInitialized = "true"; } + // $("#toc2").tocify({ + // context: "section.article__content", + // selectors: "h2, h3", + // extendPage: false, + // }); + const points = toc2.querySelectorAll("a"); + if (points.length > 0) { points.forEach((point) => { if (!point.innerText.trim()) { point.remove(); } }); + toc2Wrapper.style.display = "block"; + visibleSideBar(toc2Wrapper); + // document.querySelector("body").classList.add(".scroll-nav"); + // setTimeout(() => { + // document.querySelector("body").classList.remove(".scroll-nav"); + // }, 500); } else { toc2Wrapper.style.display = "none"; @@ -308,12 +434,14 @@ function prepareContent() { } const images = document.querySelectorAll(".p_Normal > img"); + images.forEach( (image) => image.closest("p") && image.closest("p").classList.add("image-container") ); const breadcrumbs = document.querySelector(".topic__breadcrumbs"); + if (breadcrumbs && breadcrumbs.firstElementChild) { breadcrumbs.firstElementChild.childNodes.forEach((node) => { if (node.nodeValue && node.nodeValue.includes(">")) { @@ -322,17 +450,18 @@ function prepareContent() { }); } - // const spans = document.querySelectorAll('span'); - // if (spans.length) { - // spans.forEach(span => { - // if (span.innerHTML === ' ') { - // span.remove(); - // console.log(span.innerHTML); - // } - // }); - // } + const spans = document.querySelectorAll("span"); + + if (spans.length) { + spans.forEach((span) => { + if (span.innerHTML === " ") { + span.remove(); + } + }); + } // example exapand + const examplesToggle = document.querySelectorAll( 'a[class="dropdown-toggle"]' ); @@ -347,37 +476,54 @@ function prepareContent() { example.parentElement.tagName === "p" ? example.parentElement : example.closest("p"); + const nextSiblingDiv = parentP.nextElementSibling; + if (nextSiblingDiv && nextSiblingDiv.tagName === "DIV") { parentP.classList.add("example"); + const id = nextSiblingDiv.id; + const button = document.createElement("a"); + const obj = nextSiblingDiv.attributes; + let expandState = "0"; + parentP.setAttribute("data-state", expandState); + button.classList.add("btn-example"); + button.innerHTML = locale === "ru" ? 'СвернутьПосмотреть полностью' : 'HideShow all'; + button.addEventListener("click", (evt) => { evt.preventDefault(); + window.HMToggle("toggle", id); + Object.entries(obj).map((el) => { if (el[1].name === "hm.state") { expandState = el[1].value; + parentP.setAttribute("data-state", expandState); } }); }); + parentP.append(button); + example.setAttribute("href", "javascript:void(0)"); + example.after(nextSiblingDiv); } }); } const pArray = document.querySelectorAll(".p_Normal"); + if (pArray.length) { pArray.forEach((p) => { if (p.innerHTML === " ") { @@ -387,9 +533,11 @@ function prepareContent() { } const examples = document.querySelectorAll("p.p_CodeExample"); + if (examples.length) { examples.forEach((example) => { const childSpan = example.firstElementChild; + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -397,6 +545,7 @@ function prepareContent() { ) { createNotation(example, "example", "примера"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -404,6 +553,7 @@ function prepareContent() { ) { createNotation(example, "warning", "внимание"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -415,15 +565,22 @@ function prepareContent() { } //small icon + const icons = document.querySelectorAll(".content img"); + if (icons.length) { icons.forEach((icon, idx) => { const iconWidth = parseInt(icon.width); + const floated = icon.style.float; + floated !== "" && icon.classList.add("img-float--" + floated); + if (iconWidth < 200) { icon.classList.add("small-img"); + const iconHeight = parseInt(icon.height); + if ( iconWidth > 70 && iconHeight > 70 && @@ -436,28 +593,33 @@ function prepareContent() { }); } } + //TODO скрытие хедера + function stickyHeader() { var lastScrollTop = 0; + var delta = 15; + $(window) .on("scroll", function () { var st = $(this).scrollTop(); + if (Math.abs(lastScrollTop - st) <= delta) return; + if (st > lastScrollTop && lastScrollTop > 0) { $("body").addClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } else { $("body").removeClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } - //TEST - // if (document.querySelector("body").classList.contains(".scroll-nav")) { - // $("body").addClass("--header-hidden"); - // } - //TEST lastScrollTop = st; }) @@ -478,65 +640,141 @@ $(window).resize(function () { function iconsTableOfContents() { const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); + toggledLi.forEach((li) => li.classList.add("toggled")); } $(document).ready(function () { prepareContent(); + toggleUlsHandler(); - //TODO вызов скрытия хедера + + //TODO вызов хедера + // stickyHeader(); $("#side-menu").load("index.html #toc", function () { - //TODO вызавает каждый раз ререндер при изменении href(добавление якоря как например) - // window.addEventListener("popstate", () => { - // $("#article").load(`${window.location.href} .article-inner`, function () { + //TODO ререндер toc + + // window.addEventListener('popstate', () => { + + // // $(".article-inner").empty(); + + // $('#article').load(`${window.location.href} .article-inner`, function () { + // loadBottomLinks(); + // prepareContent(); + // }); - // }); + + // }) + + function onUrlChange(callback) { + const originalPushState = history.pushState; + const originalReplaceState = history.replaceState; + + // Фильтр для игнорирования определенных URL + const shouldTrigger = (url) => { + return ( + !url.includes("javascript:") && + url !== "about:blank" && + !url.startsWith("mailto:") && + !url.startsWith("tel:") + ); + }; + + const trigger = () => { + const currentUrl = window.location.pathname + window.location.search; + if (shouldTrigger(currentUrl)) { + callback(currentUrl); + } + }; + + history.pushState = function (state, title, url) { + if (shouldTrigger(url)) { + originalPushState.apply(this, arguments); + trigger(); + } + }; + + history.replaceState = function (state, title, url) { + if (shouldTrigger(url)) { + originalReplaceState.apply(this, arguments); + trigger(); + } + }; + + window.addEventListener("popstate", trigger); + } + + // Использование + let lastValidUrl = window.location.pathname + window.location.search; + + onUrlChange((currentUrl) => { + if (currentUrl !== lastValidUrl) { + lastValidUrl = currentUrl; + + $("#article").load( + `${window.location.href} .article-inner`, + function () { + loadBottomLinks(); + prepareContent(); + + // Очищаем историю от невалидных записей + if (window.location.href.includes("javascript:")) { + history.replaceState(null, "", lastValidUrl); + } + } + ); + } + }); + + // Дополнительно: обработка void-ссылок + document.querySelectorAll('a[href^="javascript:"]').forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + // Можно добавить здесь свою логику обработки клика + }); + }); + + // + loadBottomLinks(); + hideAllSideUls(); + toggleUlsHandler(); + document.addEventListener("DOMContentLoaded", () => { if (document.visibilityState === "visible") { hideAllSideUls(); } }); - //toc - function tryHideSideUlsWhenActive() { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } else { - document.addEventListener( - "visibilitychange", - () => { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } - }, - { once: true } - ); - } - } - - document.addEventListener("DOMContentLoaded", tryHideSideUlsWhenActive); const menuItems = this.querySelectorAll("a"); + menuItems.forEach((item) => { item.addEventListener("click", (evt) => { evt.preventDefault(); + const url = evt.target.nodeName === "A" ? evt.target.href : evt.target.closest("a").href; + const sideMenu = document.querySelector(".sidebar"); + const htmlTag = document.querySelector("html"); + const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); window.scrollTo(0, 0); + htmlTag.classList.remove("--locked"); + $("body").removeClass("index-page search-page"); + sideMenu.classList.remove("show-side-menu"); if (toggledLi.length) { @@ -548,17 +786,42 @@ $(document).ready(function () { if (url !== window.location.href) { if (!url.includes("javascript:void")) { $(".article-inner").empty(); + $("#article").load(`${url} .article-inner`, function () { history.pushState({}, null, url); + //metaDecsription.attr('content', metaDescriptionInitial); + loadBottomLinks(); + prepareContent(); }); } else { - //TEST + // const _target = evt.target; + + // const _targetUl = _target.parentElement.nextElementSibling; + + // if (_target.nodeName === "SPAN" && _targetUl.nodeName === "UL" && _targetUl.classList.contains("hide-side-menu-item")) { + + // _targetUl.querySelectorAll('a')[0].click(); + + // } else { + + // const _ul = _target.parentElement.querySelectorAll('a')[0].nextElementSibling; + + // if (_ul.nodeName === "UL") { + + // _ul.querySelectorAll('a')[0].click(); + + // }; + + // } + function isFakeLink(link) { if (!link) return false; + const href = link.getAttribute("href"); + return href === "#" || href === "javascript:void(0);"; } @@ -568,34 +831,45 @@ $(document).ready(function () { function findFirstLinkInElement(element) { if (!element) return null; + return element.querySelector("a"); } function findFirstRealNestedLink(element) { if (!element) return null; + const links = element.querySelectorAll("a"); + for (const link of links) { if (isRealLink(link)) return link; } + return null; } document.addEventListener("click", (evt) => { const _target = evt.target; + if (_target.nodeName !== "SPAN") return; const _targetLi = _target.closest("li"); + if (!_targetLi) return; const submenu = _targetLi.querySelector("ul"); + const firstLink = findFirstLinkInElement(_targetLi); // заглушки + if (firstLink && isFakeLink(firstLink)) { const nestedReal = findFirstRealNestedLink(submenu); + if (nestedReal) { nestedReal.click(); + // в первом фрагменте, после nestedReal.click(); + setTimeout(() => { document.dispatchEvent(new Event("subcategory:update")); }, 50); @@ -607,7 +881,6 @@ $(document).ready(function () { firstLink.click(); // кликаем по нормальной ссылке } }); - //TEST } } }); @@ -617,20 +890,28 @@ $(document).ready(function () { const obj = pagedata.reduce((acc, words) => { const searchObj = { title: words[1], + link: words[0], }; + return [...acc, searchObj]; }, []); + $(".search-form__input").each(function () { var _that = $(this); + var _searchForm = _that.parent(); + _that .autocomplete({ autoFocus: false, + minLength: 2, + focus: function (event, ui) { itemUiLinkSelected = ui.item.link; }, + source: function (request, response) { const results = obj.filter( (item) => @@ -639,7 +920,9 @@ $(document).ready(function () { .includes(request.term.toLowerCase()) && document.querySelector(`a[href="${item.link.slice(2)}"]`) ); + const sliceResults = results.slice(0, 5); + sliceResults.map((result) => { const aItem = document.querySelector( `a[href="${result.link.slice(2)}"]` @@ -647,6 +930,7 @@ $(document).ready(function () { if (aItem) { const parent = aItem.closest("li.heading1"); + result.breadcrumb = parent.querySelector("span.heading1").innerText; } else { @@ -665,6 +949,7 @@ $(document).ready(function () { item.breadcrumb || "" }` ) + .appendTo(ul); }; @@ -678,10 +963,15 @@ $(document).ready(function () { $(".glossary-abc__nav a").on("click", function (e) { e.preventDefault(); + var target = $(this).attr("href"); + console.log($(this).parent().siblings()); + $(".glossary-abc__nav a").removeClass("--active"); + $(this).addClass("--active"); + $("html, body").animate( { scrollTop: $(target).offset().top - 150, @@ -690,39 +980,33 @@ $(document).ready(function () { ); }); - const name = "Сайт ELMA365"; - const cusLi = document.createElement("li"); - cusLi.classList.add("heading1"); - cusLi.classList.add("heading10"); - const cusA = document.createElement("a"); - cusA.classList.add("heading1"); - cusA.setAttribute("href", "https://elma365.com/ru/"); - cusA.setAttribute("target", "_blank"); - const cusSpan = document.createElement("span"); - cusSpan.classList.add("heading1"); - cusSpan.textContent = name; - cusA.appendChild(cusSpan); - cusLi.appendChild(cusA); - document.querySelector("#toc").prepend(cusLi); - // Хлебные крошки на странице поиска + function findPrevBreadcrumbs(node, breadcrumbs) { var breadcrumbsNew = breadcrumbs || $('
'); + var prevParentEl = node.closest("ul") ? node.closest("ul").prev() : null; + if (!prevParentEl[0] || prevParentEl[0].tagName !== "A") { return breadcrumbsNew; } + breadcrumbsNew.prepend(' / '); + breadcrumbsNew.prepend(prevParentEl.clone()); + return findPrevBreadcrumbs(prevParentEl, breadcrumbsNew); } $(".result_title a").each(function () { var bc = ""; + var currentArticleName = $(this); + $("#toc a span").each(function () { var tocCurrentNode = $(this); + if (tocCurrentNode.text().trim() === currentArticleName.text().trim()) { bc = findPrevBreadcrumbs(tocCurrentNode); } @@ -735,16 +1019,56 @@ $(document).ready(function () { }); }); +//let scrollPos = 0; + +/* $('body').scroll(function () { + + let st = $(this).scrollTop(); + + if (st > scrollPos) { + + $('.scroll-top').hide(); + + } else { + + $('.scroll-top').show(); + + } + + scrollPos = st; + +}); + + + +$('.scroll-top').on('click', function (e) { + + e.preventDefault(); + + $('html, body').animate({ + + scrollTop: 0 + + }); + +}); */ + //side menu mobile + const sideMenuIcon = document.querySelector("#side-menu-icon"); + const htmlTag = document.querySelector("html"); + const sideMenu = document.querySelector("#sidebar"); + const closeButton = document.querySelector("#close"); if (sideMenuIcon) { sideMenuIcon.addEventListener("click", (evt) => { evt.preventDefault(); + sideMenu.classList.toggle("show-side-menu"); + htmlTag.classList.toggle("--locked"); }); } @@ -752,12 +1076,15 @@ if (sideMenuIcon) { if (closeButton) { closeButton.addEventListener("click", (e) => { e.preventDefault(); + sideMenu.classList.remove("show-side-menu"); + htmlTag.classList.remove("--locked"); }); } var triggerTitleMegaGuide = false; + if (getTitleSite() === "Mega Guide" || /hmftsearch.html/i.test(href)) { triggerTitleMegaGuide = true; } @@ -775,6 +1102,9 @@ function getTitleSite() { const currentUrl = window.location.href; if ( + /http:\/\/localhost/i.test(currentUrl) || + /brix365.t-elma365\/en\/help/i.test(currentUrl) || + /brix365.com\/en\/help/i.test(currentUrl) || /elma365.com\/ru\/help/i.test(currentUrl) || /elma365.com\/en\/help/i.test(currentUrl) || /elma365\/help\/ru/i.test(currentUrl) || @@ -784,29 +1114,44 @@ if ( ) { window.addEventListener("load", () => { const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector("#search-panel"); + const searchInput = searchPanel.querySelector('input[type="text"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); heroSearch.classList.add("hero__search--active"); }); + } else { + console.log("error"); } + if (searchInput) { const label = searchInput.closest("label"); + searchInput.addEventListener("blur", () => { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value) { label.classList.add("cross"); } else { label.classList.remove("cross"); } }); + searchInput.addEventListener("focus", () => { label.classList.add("cross"); }); @@ -822,12 +1167,15 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + if (document.querySelector("#reset-search")) { const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; }); @@ -842,37 +1190,84 @@ if ( wrapperSearch.classList.add("search-form__label"); const tagSpanIcons = document.createElement("span"); + tagSpanIcons.className = "search__icon"; + tagSpanIcons.setAttribute("id", "reset-search"); + wrapperSearch.prepend(tagSpanIcons); + // const insertInnerHtml = document.querySelector('tr .ya-site-form__search-input-layout-l'); + + // const divBlockHeroSearch = document.createElement('div'); + + // + + // divBlockHeroSearch.classList.add('hero__search') + + // divBlockHeroSearch.innerHTML = ` + + // + + // search string + + // + + // + + // side menu + + // + + // `; + + // setTimeout(() => { + + // insertInnerHtml.appendChild(divBlockHeroSearch); + + // }, 1000); + const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector( ".ya-site-form.ya-site-form_bg_transparent.ya-site-form_inited_yes" ); + const searchInput = searchPanel.querySelector('input[type="search"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); + heroSearch.classList.add("hero__search--active"); }); } + if (searchInput) { const div = searchInput.closest(".ya-site-form__input"); + searchInput.addEventListener("blur", searchWatch); function searchWatch() { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value !== "") { div.classList.add("cross"); } else { div.classList.remove("cross"); } } + searchInput.addEventListener("focus", () => { div.classList.add("cross"); }); @@ -888,15 +1283,21 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; + searchInput.focus(); + baseUrl = window.location.href.split("?")[0]; + window.history.pushState("name", "", baseUrl); }); }); @@ -910,20 +1311,29 @@ function searchFormHeader() { $(".search-form").each(function () { $(this).on("submit", (evt) => { evt.preventDefault(); + evt.stopPropagation(); + var searchStr = evt.target[0].value; + if (searchStr.trim()) { if ( (/elma365.com\/ru\/help/i.test(window.location.href) || /elma365.com\/en\/help/i.test(window.location.href) || /t-elma365.com/i.test(window.location.href) || + /brix365.com\/en\/help/i.test(window.location.href) || /([\d+]{3}).(\d).(\d).(\d)/i.test(window.location.href) || /http:\/\/localhost/i.test(window.location.href)) && !triggerTitleMegaGuide ) { window.location.href = `./search.html?query=${searchStr}`; - } else { - window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + } + + //фикс поиска, тест + else { + // window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + + window.location.href = `./search.html?query=${searchStr}`; } } }); @@ -937,28 +1347,41 @@ if ( Boolean(document.querySelector(".searchheading")) ) { const searchTitle = document.querySelector(".searchheading"); + const queryString = window.location.search; + let currentPageNumber = null; const searchParams = queryString.split("&"); + searchParams.forEach((param) => { const paramArr = param.split("="); + if (paramArr[0] === "zoom_page") { currentPageNumber = +paramArr[1]; } }); + const searchWord = decodeURI(searchParams[0].split("=")[1]); + searchTitle.innerText = locale === "ru" ? "Результаты поиска:" : "Search results for:"; + const searchWordP = document.createElement("p"); + searchWordP.classList.add("search-word"); + searchWordP.innerText = searchWord; + searchTitle.append(searchWordP); let pagesCount = "0"; + const resultPagesCount = document.querySelector(".result_pagescount"); + if (resultPagesCount) { pagesCount = parseInt(resultPagesCount.innerText.trim()); + resultPagesCount.remove(); } @@ -966,62 +1389,109 @@ if ( switch (currentPage) { case "first-page": { resultPages[0].textContent = "<< < "; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = "1"; + resultPages[0].after(span); + const aEnd = document.createElement("a"); + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + // resultPages[resultPages.length - 1].textContent = ' >>'; + resultPages[resultPages.length - 1].after(aEnd); + resultPages[resultPages.length - 2].remove(); + resultPages[resultPages.length - 2].textContent = " > "; + break; } + case "last-page": { resultPages[resultPages.length - 1].textContent = ` > >>`; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + const aBegin = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + resultPages[resultPages.length - 1].before(span); + // resultPages[0].textContent = '<< '; + resultPages[1].before(aBegin); + resultPages[0].remove(); + resultPages[1].textContent = "< "; + break; } + case "default-page": { const aBegin = document.createElement("a"); + const aEnd = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + resultPages[1].before(aBegin); + resultPages[0].remove(); + //resultPages[0].textContent = '<< '; + //resultPages[0] = aBegin; + resultPages[1].textContent = " < "; + resultPages[resultPages.length - 2].textContent = " > "; + //resultPages[resultPages.length - 1].textContent = ' >> '; + resultPages[resultPages.length - 2].after(aEnd); + resultPages[resultPages.length - 1].remove(); + break; } + default: break; } } const resultPagesNode = document.querySelector(".result_pages"); + const resultPages = resultPagesNode ? document.querySelector(".result_pages").childNodes : []; @@ -1046,10 +1516,15 @@ if ( resultPages.forEach((node) => { if (+node.textContent.trim() === currentPageNumber) { const nextElement = node.nextSibling; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + nextElement.before(span); + node.remove(); } }); @@ -1057,17 +1532,33 @@ if ( } const summary = document.querySelectorAll(".summary"); + if (summary.length > 0 && locale === "ru") { const count = parseInt(summary[0].innerText.trim()); + summary[0].innerText = count ? `Найдено совпадений: ${count}` : (summary.innerText = "Совпадений не найдено"); } } +// подменяет текст в абзаце в зависимости от атрибута lang + +// if (document.documentElement.lang === "en") { + +// $('#found_typo').html('Found a typo? Highlight the text, press ctrl + enter and notify us') + +// } else if (document.documentElement.lang === "ru") { + +// $('#found_typo').html('Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас') + +// } + $(window).on("load", () => { // правит текст в фильтре результатов поиска + // $('.b-loader__wrapper').css('opacity', 0); + function replace() { var intervalReplace = setInterval(() => { if ( @@ -1083,17 +1574,20 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalReplace); + // }, 180000); }, 10000); function t() { if (document.documentElement.lang === "en") { textResult("нашёл", "Matches found", "all resourses", 13); + textFindSection("Search through "); } if (document.documentElement.lang === "ru") { textResult("нашёл", "Найдено совпадений", "всем ресурсам", 18); + textFindSection("Искать по "); } @@ -1102,11 +1596,14 @@ $(window).on("load", () => { searchAny = $( ".b-dropdowna__switcher .b-pseudo-link_is-bem_yes" ).text(); + var e = text.replace(textFound, textFoundRes), t = searchAny.replace("любой", textAny); + $("tr td.b-head__r .b-head__found").text( e.substring(0, n) + ": " + parseInt(text.match(/\d+/)) ); + $(".b-dropdowna__switcher .b-pseudo-link_is-bem_yes").text(t); if ($("tr td.b-head__r .b-head__found").text().indexOf("найдёт") == 0) { @@ -1140,8 +1637,11 @@ $(window).on("load", () => { if (i > 0) { if (element.childNodes[0].textContent.indexOf("раздел") === 0) { var htmlTag = []; + htmlTag.push(element.childNodes[i]); + element.textContent = textResSection; + htmlTag.forEach((item) => { element.appendChild(item); }); @@ -1166,6 +1666,7 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalAddElementSubsection); + // }, 180000) }, 10000); @@ -1179,48 +1680,71 @@ $(window).on("load", () => { var textContent = $("yass-li.b-serp-item .b-serp-url__item")[index] .textContent; + switch (true) { // ELMA365 + case /elma365.com\/ru\/help/i.test(textContent): subsectionTitle("Справка"); + break; + case /academy.com/i.test(textContent): subsectionTitle("ELMA Academy"); + break; + case /tssdk.elma/i.test(textContent): subsectionTitle("TS SDK"); + break; + case /exchange.elma/i.test(textContent): subsectionTitle("ELMA365 Exchange"); + break; // Английская версия + case /en\/help/i.test(textContent): subsectionTitle("Help"); + break; // rpa + case /rpa.ai\/ru/i.test(textContent): subsectionTitle("RPA"); + break; // ELMA4 + case /ru\/help4\/ecm/i.test(textContent): subsectionTitle("ECM+"); + break; + case /ru\/help4\/crm/i.test(textContent): subsectionTitle("CRM+"); + break; + case /ru\/help4\/projects/i.test(textContent): subsectionTitle("Проекты"); + break; + case /elma-bpm.ru\/help4/i.test(textContent): subsectionTitle("BPM"); + break; + case /ru\/KB/i.test(textContent) || /elma-bpm.ru\/…help/i.test(textContent) || /help/i.test(textContent): subsectionTitle("База знаний"); + break; } @@ -1229,8 +1753,11 @@ $(window).on("load", () => { $(".subsection-title")[index].textContent = text; } else { var newBlockDiv = document.createElement("div"); + newBlockDiv.classList.add("subsection-title"); + newBlockDiv.textContent = text; + $(".b-serp-item__title")[index].prepend(newBlockDiv); } } @@ -1248,16 +1775,20 @@ $(window).on("load", () => { if ($("tr td.b-head__r .b-head__found")) { var intervalTimer = setInterval(() => { replace(); + addElementSubsection(); }, 200); // через 3 минуты интервал останавливается (время взято примерно, чтобы успело все прогрузиться) + setTimeout(() => { clearInterval(intervalTimer); + // }, 180000); }, 10000); } else { replace(); + addElementSubsection(); } }); @@ -1266,25 +1797,41 @@ $(window).on("load", () => { const leadhandler = "https://web.s-elma365.ru"; var rootNode = document.createElement("div"); + document.body.appendChild(rootNode); + var typo = new TypoReporter( { formId: "1FAIpQLSfXEIXAFoOiHgetf0reIjWrOAw6V7KCZrhAv8VVD6WL7Rs46g", // required, see previous step // Optional example stuff below + locale: getLocale(), // optional language, defaults to 'en' + // translations: { // optinal object with translated strings + // fr: { + // // see source code for keys to translate + // }, + // ru: { + // + // } + // }, + offset: 100, // amount of context text to grab from before and after the selection, defaults to 50 + endpointUrl: leadhandler + "/api/baglist/", // optional, defaults to Google Forms + snippetFieldName: "typo", // optional, if using custom form + commentFieldName: "comment", // optional, if using custom form + urlFieldName: "url", // optional, if using custom form }, rootNode @@ -1292,12 +1839,14 @@ var typo = new TypoReporter( $(document).on("focus", ".fill_listener", function () { //console.log("test"); + $(this).parent().addClass("focused"); }); $(document).on("blur", ".fill_listener", function () { $(this).parent().removeClass("focused"); }); + $(document).on("change", ".fill_listener", function () { if ($(this).val().length) { $(this).parent().addClass("filled"); @@ -1309,16 +1858,21 @@ $(document).on("change", ".fill_listener", function () { function feedbackSubmit() { $("#feedback-form").on("submit", function () { var $form = $(this); + var formData = $form.serializeArray().slice(0, -1); + var context = {}; $(formData).each(function (index, obj) { if (obj.name === "useful" && obj.value === "true") { context.other = ""; + context.useful = true; + context.category = [ { code: "", + name: "", }, ]; @@ -1329,11 +1883,14 @@ function feedbackSubmit() { if (obj.name === "other") { context.other = obj.value; } + context.useful = false; + if (obj.name === "category") { context.category = [ { code: obj.value, + name: $form.find('option[value="' + obj.value + '"]').text(), }, ]; @@ -1343,13 +1900,18 @@ function feedbackSubmit() { }); context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1358,6 +1920,7 @@ function feedbackSubmit() { .done(function (response) { return response; }); + return false; }); } @@ -1373,23 +1936,32 @@ $(document).ready(function () { var $form = $(this), textarea = $form.find('textarea[name="help_question"]'), //formData = $form.serializeArray().slice(0, -1), + context = {}; context.other = textarea.val(); + context.category = [ { code: "question", + name: "Задать вопрос", }, ]; + context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1400,18 +1972,23 @@ $(document).ready(function () { .parent() .find(".question-success") .removeClass("hidden"); + setTimeout(() => { $(".question-xs").attr("style", "display:none;"); + textarea.val(""); }); + setTimeout(() => { $(".question__popup") .parent() .find(".question-success") .addClass("hidden"); + $(".question").removeClass("active"); }, 3000); }); + return false; }); }); @@ -1421,6 +1998,7 @@ function question() { const questionPopup = $(this).parent().find(".question-xs"); questionPopup.attr("style", "display:block;"); + setTimeout(() => { $(this).parent().find('textarea[name="help_question"]').focus(); }, 200); @@ -1428,6 +2006,7 @@ function question() { $(document).mouseup(function (e) { let container = $(".question-xs"); + if (!container.is(e.target) && container.has(e.target).length === 0) { container.attr("style", "display:none;"); } @@ -1439,9 +2018,12 @@ function question() { $(".question-xs").on("submit", function () { $(this).parent().find(".question-success-xs").removeClass("hidden"); + $(this).removeClass("active"); + setTimeout(() => { $(this).parent().find(".question-success-xs").addClass("hidden"); + $(this).addClass("active"); }, 3000); }); @@ -1451,23 +2033,28 @@ question(); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); jQuery(function ($) { $(document).mouseup(function (e) { // ������� ����� �� ���-��������� + var div = $("#feedback-form"); // ��� ��������� ID �������� + if ( !div.is(e.target) && // ���� ���� ��� �� �� ������ ����� div.has(e.target).length === 0 ) { // � �� �� ��� �������� ��������� + $(".feedback-form").find("input:checked").removeAttr("checked"); } }); @@ -1475,17 +2062,25 @@ jQuery(function ($) { function feedback() { const yesLabel = document.getElementById("feedback__useful_yes"); + const thxWindow = document.getElementById("feedback__popup_thx"); + const noLabel = document.getElementById("feedback__useful_no"); + const feedbackWhyPopup = document.getElementById("feedback__popup_why"); + const form = document.getElementById("feedback-form"); + const otherInput = document.getElementById("other_reason"); + const otherPopup = document.getElementById("feedback__popup-other"); + const feedbackOtherBtn = document.querySelector(".feedback__other-btn"); const inputs = [ ...document.querySelectorAll('#feedback__popup_why input[type="radio"]'), ]; + const allRadio = inputs.filter((item) => item.id !== "other_reason"); allRadio.forEach((item) => @@ -1504,12 +2099,16 @@ function feedback() { otherInput.addEventListener("change", (e) => { if (e.target.checked) { feedbackWhyPopup.style.display = "none"; + otherPopup.style.display = "block"; + $(".feedback__popup").find('textarea[name="other"]').focus(); feedbackOtherBtn.addEventListener("click", function () { otherPopup.style.display = "none"; + $("#feedback-success-popup").show(); + setTimeout(() => { $("#feedback-success-popup").hide(); }, 3000); @@ -1523,7 +2122,9 @@ function feedback() { if (Boolean(feedbackWhyPopup)) { document.addEventListener("click", (e) => { const target = e.target; + feedbackWhyPopup.style.display = "none"; + thxWindow.style.display = "none"; if (target.matches("#feedback__useful_no")) { @@ -1559,6 +2160,7 @@ $(window).on("load", function () { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }); @@ -1576,6 +2178,7 @@ if (document.querySelector("#side-menu")) { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }, 200); @@ -1591,39 +2194,52 @@ if (document.querySelector("#side-menu")) { if (document.getElementsByClassName("accordion-btn__show")) { var showAccordionBtn = document.querySelector(".accordion-btn__show"); + var elementAccordionHide = document.querySelector(".accordion__hide"); + var linearGradient = document.querySelector(".linear-gradient"); + var heightAccordionElem = document.querySelector(".card-stack-50").scrollHeight; var t = false; + showAccordionBtn.addEventListener("click", () => { switch (true) { case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__show"): elementAccordionHide.classList.add("accordion__show"); + elementAccordionHide.style.maxHeight = heightAccordionElem + "px"; + elementAccordionHide.classList.remove("accordion__hide"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__show"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__hide"); setTimeout(() => { linearGradient.classList.remove("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Свернуть"; }, 1000); + break; case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__hide"): elementAccordionHide.classList.add("accordion__hide"); + elementAccordionHide.classList.remove("accordion__show"); + elementAccordionHide.style.maxHeight = ""; + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__show"); @@ -1632,9 +2248,12 @@ if (document.getElementsByClassName("accordion-btn__show")) { showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__hide"); + linearGradient.classList.add("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Показать всё"; }, 1000); + break; } }); @@ -1647,6 +2266,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { (function () { if (document.querySelector(".accordion__items")) { var btn = document.querySelectorAll(".accordion__item-question"); + var dehiscentItems = document.querySelectorAll( ".accordion__item-question-answer" ); @@ -1659,8 +2279,11 @@ if (document.getElementsByClassName("accordion-btn__show")) { removeActiveClass(); } else { removeActiveClass(); + this.classList.toggle("accordion__active"); + nextEl.style.maxHeight = nextEl.scrollHeight + "px"; + nextEl.style.marginBottom = "15px"; } }); @@ -1673,6 +2296,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { dehiscentItems.forEach((i) => { i.style.maxHeight = null; + i.style.marginBottom = null; }); } diff --git a/crm/_footer.css b/crm/_footer.css index 2ef73c0..37c9954 100644 --- a/crm/_footer.css +++ b/crm/_footer.css @@ -433,6 +433,4 @@ img{ } } -footer { - padding-top:80px -} + diff --git a/crm/default.css b/crm/default.css index 67da43b..edc4563 100644 --- a/crm/default.css +++ b/crm/default.css @@ -456,7 +456,7 @@ input[type="text"]:not(.ReportTypo input):not(.ReportTypo-comment) { position: sticky; top: 80px; /*display: flex; */ - max-height: calc(100vh - 80px); + /*max-height: calc(100vh - 80px);*/ transition: top .2s linear; } @@ -1967,7 +1967,7 @@ code { .article__header{ min-height: 58px; } - + .article__badge { height: 26px; min-width: 34px; diff --git a/crm/google-search.js b/crm/google-search.js index a1416db..ed18165 100644 --- a/crm/google-search.js +++ b/crm/google-search.js @@ -175,6 +175,7 @@ const allowedHosts = [ "http://127.0.0.1", "http://localhost", "https://ligmanstark.github.io/help365_test/", + "https://help.miduway.space", ]; if (allowedHosts.some((url) => currentLocalHref.includes(url))) { diff --git a/crm/main.js b/crm/main.js index 8879ca7..711be57 100644 --- a/crm/main.js +++ b/crm/main.js @@ -1,5 +1,6 @@ const getLocale = () => { const lan = document.documentElement.lang; + return lan ? document.documentElement.lang : "ru"; }; @@ -12,125 +13,186 @@ function getProduct() { case "elma-rpa.ai": product = { name: "rpa", + id: "33678c11-fea6-4adb-aa39-adc4e8295b53", }; + break; + case "www.elma-bpm.ru": product = { name: "elma3/4", + id: "44b97702-146c-414b-9db7-0b09705556ed", }; + break; + default: product = { name: "elma365", + id: "3354c78a-720e-4584-a9c6-83f0f1396d22", }; + break; } + return product; } +document + .querySelector(".solution-select") + .addEventListener("mouseenter", function () { + this.classList.add("active"); + + document.querySelector(".solution-select__list").classList.add("active"); + }); + +document + .querySelector(".solution-select__list") + .addEventListener("mouseleave", function () { + this.classList.remove("active"); + + document.querySelector(".solution-select").classList.remove("active"); + }); + +const titleName = () => { + let textSpanTitle = document.querySelector(".solution-select__selected"); + + let currentPlace = window.location.pathname + .replace("/en/help/", "") + .split("/")[0]; + + textSpanTitle.textContent = + currentPlace.charAt(0).toUpperCase() + currentPlace.slice(1); + + if (currentPlace === "crm" || "ecm") { + textSpanTitle.textContent = currentPlace.toUpperCase(); + } + + if (currentPlace === "business_solutions") { + let business = currentPlace.replace("_", " "); + + textSpanTitle.textContent = + business.charAt(0).toUpperCase() + + business.slice(1, 8) + + " " + + business.charAt(9).toUpperCase() + + business.slice(10); + } +}; + +/*// Commerce version + +const files = document.querySelectorAll(".filelink"); + +if (files.length) { + + files.forEach((file) => + + file.setAttribute("download", "Postman_collection.json") + + ); + +}*/ + const insertWordBreaks = (selector) => { document.querySelectorAll(selector).forEach((el) => { - el.innerHTML = el.textContent.replace(/([\/\-=:<>_])/g, "$1"); + el.innerHTML = el.textContent.replace(/([\/\-=<>:_])/g, "$1"); }); }; insertWordBreaks("code"); -const addCanonicalUrl = () => { - const urlMapping = { - "/ru/help/business_solutions/platform-distribution.html": - "/ru/help/platform/platform-distribution.html", - }; - - const listUrl = [ - "/ru/haproxy-postgresql.html", - "/ru/doc_template.docx", - "/ru/platform-distribution.html", - "/ru/help/platform/haproxy-postgresql.html", - "/ru/help/platform/platform-distribution.html", - "/ru/help/ecm/doc_template.docx", - ]; - - const currentPath = window.location.pathname; - const baseUrl = window.location.origin.includes("localhost") - ? window.location.origin - : "https://elma365.com"; - - if (urlMapping[currentPath]) { - setCanonicalUrl(baseUrl + urlMapping[currentPath]); - return; - } - - if (listUrl.includes(currentPath)) { - setCanonicalUrl(baseUrl + currentPath); - } -}; - -const setCanonicalUrl = (canonicalUrl) => { - const canonicalLink = document.createElement("link"); - canonicalLink.href = canonicalUrl; - canonicalLink.setAttribute("rel", "canonical"); - document.querySelector("head").appendChild(canonicalLink); -}; - -addCanonicalUrl(); - const scrollToLink = () => { - let myHash = window.location.pathname; //�������� �������� ���� - if (myHash) { + let myHash = location.hash; //�������� �������� ���� + + location.hash = ""; //������� ��� + + if (myHash[1]) { //���������, ���� �� � ���� �����-�� �������� - $("html, body").animate({ scrollTop: $(myHash).offset().top }, 100); //�������� �� ���������� + + $("html, body").animate({ scrollTop: $(myHash).offset().top }, 300); //�������� �� ���������� } }; + // scrollToLink(); -function scrollLink() { - document.addEventListener("DOMContentLoaded", function () { - const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим - if (hash) { - const target = document.querySelector(`[data-unique="${hash}"]`); - if (target) { - target.scrollIntoView({ behavior: "smooth" }); - } - } - }); -} -scrollLink(); +// function scrollLink() { + +// document.addEventListener("DOMContentLoaded", function () { + +// const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим + +// if (hash) { + +// const target = document.querySelector(`[data-unique="${hash}"]`); + +// if (target) { + +// target.scrollIntoView({ behavior: "smooth" }); + +// } + +// } + +// }); + +// } + +// scrollLink(); const createVersionNode = (title, className) => { const articleNode = document.querySelector(".topic__title"); + const pVersion = document.createElement("p"); + pVersion.innerText = title; + pVersion.classList.add(className); + articleNode.append(pVersion); }; -const { href, pathname } = window.location; +const { + href, + + pathname, +} = window.location; + let locale = getLocale(); + const pathnameArr = pathname.split("/"); + let currentPage = pathnameArr[pathnameArr.length - 1] || null; //���� �� ��������� ��������, ������ ���������� ������ � ����� + const changeHeaderLinks = () => { const host = "elma4.sarl.inner.elma365.com"; + const path = "/ru/platform/"; + const headerLinks = document.querySelector(".header__list"); + const footerList = document.querySelector(".footer-mobile__list"); + const appendList = ``; if (window.location.host === host) { if (window.location.pathname !== path) { headerLinks.insertAdjacentHTML("beforeend", appendList); + footerList.insertAdjacentHTML("beforeend", appendList); } } }; + //changeHeaderLinks() // standard example + function findExampleContent(node, container, endString) { if ( node.classList.contains("p_CodeExample") && @@ -139,48 +201,68 @@ function findExampleContent(node, container, endString) { node.firstElementChild.innerText.toLowerCase().includes(endString) ) { node.remove(); + return; } + const nextElement = node.nextElementSibling; + container.append(node); + findExampleContent(nextElement, container, endString); } function createNotation(item, notationType, endString) { const container = document.createElement("div"); + const exampleTitle = item.nextElementSibling; + const nextSibling = exampleTitle.nextElementSibling; container.classList.add(notationType); + exampleTitle.classList.add(notationType + "__title"); + container.append(exampleTitle); + findExampleContent(nextSibling, container, endString); + item.after(container); + item.remove(); } function getArticleName(url) { const arrFromUrl = url.split("/"); + const lastPath = arrFromUrl[arrFromUrl.length - 1]; + return lastPath.split(".")[0]; } function removeCollapsedClass(node, tagName, className) { const closestNode = node.closest(tagName); + if (!closestNode) { return; } + closestNode.classList.remove(className); + removeCollapsedClass(closestNode.parentElement, tagName, className); } function loadBottomLinks() { const toc = document.querySelector("#toc"); + const bottomLinks = document.querySelectorAll(".bottom-nav__link"); + if (toc && bottomLinks.length) { bottomLinks.forEach((link) => { const path = `a[href="${link.innerText}"]`; + const targetLink = toc.querySelector(path); + link.innerText = targetLink.innerText; }); } @@ -188,25 +270,32 @@ function loadBottomLinks() { function hideAllSideUls() { const hidingMenu = document.querySelectorAll("#toc li ul"); + hidingMenu.forEach((item) => { item.classList.add("hide-side-menu-item"); + item.closest("li").classList.add("collapsed"); }); } function toggleUlsLinksHandler(menu, link) { menu.forEach((link) => link.classList.remove("active-side-menu")); + link.classList.add("active-side-menu"); + removeCollapsedClass(link, "ul", "hide-side-menu-item"); + if ( link.nextElementSibling && link.nextElementSibling.classList.contains("hide-side-menu-item") ) { removeCollapsedClass(link, "li", "collapsed"); + link.nextElementSibling.classList.remove("hide-side-menu-item"); } else { removeCollapsedClass(link, "li", "collapsed"); } + setTimeout(() => { scrollToSelector(".active-side-menu"); }, 100); @@ -214,19 +303,28 @@ function toggleUlsLinksHandler(menu, link) { function scrollToSelector(selector) { // document.body.style.position = 'fixed'; + document.querySelector(".sidebar__wrapper").style.position = "fixed"; + document + .querySelector(selector) + .scrollIntoView({ behavior: "smooth", block: "center" }); + document.querySelector(".sidebar__wrapper").style.position = "sticky"; + // document.body.style.position = 'unset'; } function toggleUlsHandler() { const tocNode = document.querySelector("#toc"); + if (tocNode) { const linksMenu = tocNode.querySelectorAll("a"); + const activeItem = getArticleName(window.location.pathname); + linksMenu.forEach((link) => { if (getArticleName(link.pathname) === activeItem) { toggleUlsLinksHandler(linksMenu, link); @@ -237,29 +335,37 @@ function toggleUlsHandler() { function prepareContent() { const commerceId = document.getElementById("commerce"); + const communityId = document.getElementById("community"); href.includes("zoom_highlightsub") && $("body").addClass("--highlight-disabled"); //Set document title + const h1pageTitle = document.querySelector("h1 span.f_Heading1"); + if (h1pageTitle) { document.querySelector("title").innerText = h1pageTitle.innerText; } + if (commerceId || communityId) { commerceId ? (commerceId.style.display = "none") : (communityId.style.display = "none"); + commerceId ? createVersionNode("Enterprise", "pCommerce") : createVersionNode("Community Edition", "pCommunity"); } + hideAllSideUls(); + toggleUlsHandler(); const visibleSideBar = (sidebar) => { const input = sidebar.querySelector('input[type="checkbox"]'); + let isVisible = false; input.addEventListener("change", () => { @@ -272,35 +378,55 @@ function prepareContent() { } }); }; + //TODO навигация по статье (якори) + const toc2 = document.getElementById("toc2"); + if (toc2) { const toc2Wrapper = document.querySelector(".article__sidebar"); + if (!toc2.dataset.tocInitialized) { $("#toc2").tocify({ context: "section.article__content", + selectors: "h2, h3", + extendPage: false, }); + toc2.dataset.tocInitialized = "true"; } + // $("#toc2").tocify({ + // context: "section.article__content", + // selectors: "h2, h3", + // extendPage: false, + // }); + const points = toc2.querySelectorAll("a"); + if (points.length > 0) { points.forEach((point) => { if (!point.innerText.trim()) { point.remove(); } }); + toc2Wrapper.style.display = "block"; + visibleSideBar(toc2Wrapper); + // document.querySelector("body").classList.add(".scroll-nav"); + // setTimeout(() => { + // document.querySelector("body").classList.remove(".scroll-nav"); + // }, 500); } else { toc2Wrapper.style.display = "none"; @@ -308,12 +434,14 @@ function prepareContent() { } const images = document.querySelectorAll(".p_Normal > img"); + images.forEach( (image) => image.closest("p") && image.closest("p").classList.add("image-container") ); const breadcrumbs = document.querySelector(".topic__breadcrumbs"); + if (breadcrumbs && breadcrumbs.firstElementChild) { breadcrumbs.firstElementChild.childNodes.forEach((node) => { if (node.nodeValue && node.nodeValue.includes(">")) { @@ -322,17 +450,18 @@ function prepareContent() { }); } - // const spans = document.querySelectorAll('span'); - // if (spans.length) { - // spans.forEach(span => { - // if (span.innerHTML === ' ') { - // span.remove(); - // console.log(span.innerHTML); - // } - // }); - // } + const spans = document.querySelectorAll("span"); + + if (spans.length) { + spans.forEach((span) => { + if (span.innerHTML === " ") { + span.remove(); + } + }); + } // example exapand + const examplesToggle = document.querySelectorAll( 'a[class="dropdown-toggle"]' ); @@ -347,37 +476,54 @@ function prepareContent() { example.parentElement.tagName === "p" ? example.parentElement : example.closest("p"); + const nextSiblingDiv = parentP.nextElementSibling; + if (nextSiblingDiv && nextSiblingDiv.tagName === "DIV") { parentP.classList.add("example"); + const id = nextSiblingDiv.id; + const button = document.createElement("a"); + const obj = nextSiblingDiv.attributes; + let expandState = "0"; + parentP.setAttribute("data-state", expandState); + button.classList.add("btn-example"); + button.innerHTML = locale === "ru" ? 'СвернутьПосмотреть полностью' : 'HideShow all'; + button.addEventListener("click", (evt) => { evt.preventDefault(); + window.HMToggle("toggle", id); + Object.entries(obj).map((el) => { if (el[1].name === "hm.state") { expandState = el[1].value; + parentP.setAttribute("data-state", expandState); } }); }); + parentP.append(button); + example.setAttribute("href", "javascript:void(0)"); + example.after(nextSiblingDiv); } }); } const pArray = document.querySelectorAll(".p_Normal"); + if (pArray.length) { pArray.forEach((p) => { if (p.innerHTML === " ") { @@ -387,9 +533,11 @@ function prepareContent() { } const examples = document.querySelectorAll("p.p_CodeExample"); + if (examples.length) { examples.forEach((example) => { const childSpan = example.firstElementChild; + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -397,6 +545,7 @@ function prepareContent() { ) { createNotation(example, "example", "примера"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -404,6 +553,7 @@ function prepareContent() { ) { createNotation(example, "warning", "внимание"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -415,15 +565,22 @@ function prepareContent() { } //small icon + const icons = document.querySelectorAll(".content img"); + if (icons.length) { icons.forEach((icon, idx) => { const iconWidth = parseInt(icon.width); + const floated = icon.style.float; + floated !== "" && icon.classList.add("img-float--" + floated); + if (iconWidth < 200) { icon.classList.add("small-img"); + const iconHeight = parseInt(icon.height); + if ( iconWidth > 70 && iconHeight > 70 && @@ -436,28 +593,33 @@ function prepareContent() { }); } } + //TODO скрытие хедера + function stickyHeader() { var lastScrollTop = 0; + var delta = 15; + $(window) .on("scroll", function () { var st = $(this).scrollTop(); + if (Math.abs(lastScrollTop - st) <= delta) return; + if (st > lastScrollTop && lastScrollTop > 0) { $("body").addClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } else { $("body").removeClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } - //TEST - // if (document.querySelector("body").classList.contains(".scroll-nav")) { - // $("body").addClass("--header-hidden"); - // } - //TEST lastScrollTop = st; }) @@ -478,65 +640,141 @@ $(window).resize(function () { function iconsTableOfContents() { const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); + toggledLi.forEach((li) => li.classList.add("toggled")); } $(document).ready(function () { prepareContent(); + toggleUlsHandler(); - //TODO вызов скрытия хедера + + //TODO вызов хедера + // stickyHeader(); $("#side-menu").load("index.html #toc", function () { - //TODO вызавает каждый раз ререндер при изменении href(добавление якоря как например) - // window.addEventListener("popstate", () => { - // $("#article").load(`${window.location.href} .article-inner`, function () { + //TODO ререндер toc + + // window.addEventListener('popstate', () => { + + // // $(".article-inner").empty(); + + // $('#article').load(`${window.location.href} .article-inner`, function () { + // loadBottomLinks(); + // prepareContent(); + // }); - // }); + + // }) + + function onUrlChange(callback) { + const originalPushState = history.pushState; + const originalReplaceState = history.replaceState; + + // Фильтр для игнорирования определенных URL + const shouldTrigger = (url) => { + return ( + !url.includes("javascript:") && + url !== "about:blank" && + !url.startsWith("mailto:") && + !url.startsWith("tel:") + ); + }; + + const trigger = () => { + const currentUrl = window.location.pathname + window.location.search; + if (shouldTrigger(currentUrl)) { + callback(currentUrl); + } + }; + + history.pushState = function (state, title, url) { + if (shouldTrigger(url)) { + originalPushState.apply(this, arguments); + trigger(); + } + }; + + history.replaceState = function (state, title, url) { + if (shouldTrigger(url)) { + originalReplaceState.apply(this, arguments); + trigger(); + } + }; + + window.addEventListener("popstate", trigger); + } + + // Использование + let lastValidUrl = window.location.pathname + window.location.search; + + onUrlChange((currentUrl) => { + if (currentUrl !== lastValidUrl) { + lastValidUrl = currentUrl; + + $("#article").load( + `${window.location.href} .article-inner`, + function () { + loadBottomLinks(); + prepareContent(); + + // Очищаем историю от невалидных записей + if (window.location.href.includes("javascript:")) { + history.replaceState(null, "", lastValidUrl); + } + } + ); + } + }); + + // Дополнительно: обработка void-ссылок + document.querySelectorAll('a[href^="javascript:"]').forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + // Можно добавить здесь свою логику обработки клика + }); + }); + + // + loadBottomLinks(); + hideAllSideUls(); + toggleUlsHandler(); + document.addEventListener("DOMContentLoaded", () => { if (document.visibilityState === "visible") { hideAllSideUls(); } }); - //toc - function tryHideSideUlsWhenActive() { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } else { - document.addEventListener( - "visibilitychange", - () => { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } - }, - { once: true } - ); - } - } - - document.addEventListener("DOMContentLoaded", tryHideSideUlsWhenActive); const menuItems = this.querySelectorAll("a"); + menuItems.forEach((item) => { item.addEventListener("click", (evt) => { evt.preventDefault(); + const url = evt.target.nodeName === "A" ? evt.target.href : evt.target.closest("a").href; + const sideMenu = document.querySelector(".sidebar"); + const htmlTag = document.querySelector("html"); + const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); window.scrollTo(0, 0); + htmlTag.classList.remove("--locked"); + $("body").removeClass("index-page search-page"); + sideMenu.classList.remove("show-side-menu"); if (toggledLi.length) { @@ -548,17 +786,42 @@ $(document).ready(function () { if (url !== window.location.href) { if (!url.includes("javascript:void")) { $(".article-inner").empty(); + $("#article").load(`${url} .article-inner`, function () { history.pushState({}, null, url); + //metaDecsription.attr('content', metaDescriptionInitial); + loadBottomLinks(); + prepareContent(); }); } else { - //TEST + // const _target = evt.target; + + // const _targetUl = _target.parentElement.nextElementSibling; + + // if (_target.nodeName === "SPAN" && _targetUl.nodeName === "UL" && _targetUl.classList.contains("hide-side-menu-item")) { + + // _targetUl.querySelectorAll('a')[0].click(); + + // } else { + + // const _ul = _target.parentElement.querySelectorAll('a')[0].nextElementSibling; + + // if (_ul.nodeName === "UL") { + + // _ul.querySelectorAll('a')[0].click(); + + // }; + + // } + function isFakeLink(link) { if (!link) return false; + const href = link.getAttribute("href"); + return href === "#" || href === "javascript:void(0);"; } @@ -568,34 +831,45 @@ $(document).ready(function () { function findFirstLinkInElement(element) { if (!element) return null; + return element.querySelector("a"); } function findFirstRealNestedLink(element) { if (!element) return null; + const links = element.querySelectorAll("a"); + for (const link of links) { if (isRealLink(link)) return link; } + return null; } document.addEventListener("click", (evt) => { const _target = evt.target; + if (_target.nodeName !== "SPAN") return; const _targetLi = _target.closest("li"); + if (!_targetLi) return; const submenu = _targetLi.querySelector("ul"); + const firstLink = findFirstLinkInElement(_targetLi); // заглушки + if (firstLink && isFakeLink(firstLink)) { const nestedReal = findFirstRealNestedLink(submenu); + if (nestedReal) { nestedReal.click(); + // в первом фрагменте, после nestedReal.click(); + setTimeout(() => { document.dispatchEvent(new Event("subcategory:update")); }, 50); @@ -607,7 +881,6 @@ $(document).ready(function () { firstLink.click(); // кликаем по нормальной ссылке } }); - //TEST } } }); @@ -617,20 +890,28 @@ $(document).ready(function () { const obj = pagedata.reduce((acc, words) => { const searchObj = { title: words[1], + link: words[0], }; + return [...acc, searchObj]; }, []); + $(".search-form__input").each(function () { var _that = $(this); + var _searchForm = _that.parent(); + _that .autocomplete({ autoFocus: false, + minLength: 2, + focus: function (event, ui) { itemUiLinkSelected = ui.item.link; }, + source: function (request, response) { const results = obj.filter( (item) => @@ -639,7 +920,9 @@ $(document).ready(function () { .includes(request.term.toLowerCase()) && document.querySelector(`a[href="${item.link.slice(2)}"]`) ); + const sliceResults = results.slice(0, 5); + sliceResults.map((result) => { const aItem = document.querySelector( `a[href="${result.link.slice(2)}"]` @@ -647,6 +930,7 @@ $(document).ready(function () { if (aItem) { const parent = aItem.closest("li.heading1"); + result.breadcrumb = parent.querySelector("span.heading1").innerText; } else { @@ -665,6 +949,7 @@ $(document).ready(function () { item.breadcrumb || "" }` ) + .appendTo(ul); }; @@ -678,10 +963,15 @@ $(document).ready(function () { $(".glossary-abc__nav a").on("click", function (e) { e.preventDefault(); + var target = $(this).attr("href"); + console.log($(this).parent().siblings()); + $(".glossary-abc__nav a").removeClass("--active"); + $(this).addClass("--active"); + $("html, body").animate( { scrollTop: $(target).offset().top - 150, @@ -690,39 +980,33 @@ $(document).ready(function () { ); }); - const name = "Сайт ELMA365"; - const cusLi = document.createElement("li"); - cusLi.classList.add("heading1"); - cusLi.classList.add("heading10"); - const cusA = document.createElement("a"); - cusA.classList.add("heading1"); - cusA.setAttribute("href", "https://elma365.com/ru/"); - cusA.setAttribute("target", "_blank"); - const cusSpan = document.createElement("span"); - cusSpan.classList.add("heading1"); - cusSpan.textContent = name; - cusA.appendChild(cusSpan); - cusLi.appendChild(cusA); - document.querySelector("#toc").prepend(cusLi); - // Хлебные крошки на странице поиска + function findPrevBreadcrumbs(node, breadcrumbs) { var breadcrumbsNew = breadcrumbs || $('
'); + var prevParentEl = node.closest("ul") ? node.closest("ul").prev() : null; + if (!prevParentEl[0] || prevParentEl[0].tagName !== "A") { return breadcrumbsNew; } + breadcrumbsNew.prepend(' / '); + breadcrumbsNew.prepend(prevParentEl.clone()); + return findPrevBreadcrumbs(prevParentEl, breadcrumbsNew); } $(".result_title a").each(function () { var bc = ""; + var currentArticleName = $(this); + $("#toc a span").each(function () { var tocCurrentNode = $(this); + if (tocCurrentNode.text().trim() === currentArticleName.text().trim()) { bc = findPrevBreadcrumbs(tocCurrentNode); } @@ -735,16 +1019,56 @@ $(document).ready(function () { }); }); +//let scrollPos = 0; + +/* $('body').scroll(function () { + + let st = $(this).scrollTop(); + + if (st > scrollPos) { + + $('.scroll-top').hide(); + + } else { + + $('.scroll-top').show(); + + } + + scrollPos = st; + +}); + + + +$('.scroll-top').on('click', function (e) { + + e.preventDefault(); + + $('html, body').animate({ + + scrollTop: 0 + + }); + +}); */ + //side menu mobile + const sideMenuIcon = document.querySelector("#side-menu-icon"); + const htmlTag = document.querySelector("html"); + const sideMenu = document.querySelector("#sidebar"); + const closeButton = document.querySelector("#close"); if (sideMenuIcon) { sideMenuIcon.addEventListener("click", (evt) => { evt.preventDefault(); + sideMenu.classList.toggle("show-side-menu"); + htmlTag.classList.toggle("--locked"); }); } @@ -752,12 +1076,15 @@ if (sideMenuIcon) { if (closeButton) { closeButton.addEventListener("click", (e) => { e.preventDefault(); + sideMenu.classList.remove("show-side-menu"); + htmlTag.classList.remove("--locked"); }); } var triggerTitleMegaGuide = false; + if (getTitleSite() === "Mega Guide" || /hmftsearch.html/i.test(href)) { triggerTitleMegaGuide = true; } @@ -775,6 +1102,9 @@ function getTitleSite() { const currentUrl = window.location.href; if ( + /http:\/\/localhost/i.test(currentUrl) || + /brix365.t-elma365\/en\/help/i.test(currentUrl) || + /brix365.com\/en\/help/i.test(currentUrl) || /elma365.com\/ru\/help/i.test(currentUrl) || /elma365.com\/en\/help/i.test(currentUrl) || /elma365\/help\/ru/i.test(currentUrl) || @@ -784,29 +1114,44 @@ if ( ) { window.addEventListener("load", () => { const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector("#search-panel"); + const searchInput = searchPanel.querySelector('input[type="text"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); heroSearch.classList.add("hero__search--active"); }); + } else { + console.log("error"); } + if (searchInput) { const label = searchInput.closest("label"); + searchInput.addEventListener("blur", () => { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value) { label.classList.add("cross"); } else { label.classList.remove("cross"); } }); + searchInput.addEventListener("focus", () => { label.classList.add("cross"); }); @@ -822,12 +1167,15 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + if (document.querySelector("#reset-search")) { const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; }); @@ -842,37 +1190,84 @@ if ( wrapperSearch.classList.add("search-form__label"); const tagSpanIcons = document.createElement("span"); + tagSpanIcons.className = "search__icon"; + tagSpanIcons.setAttribute("id", "reset-search"); + wrapperSearch.prepend(tagSpanIcons); + // const insertInnerHtml = document.querySelector('tr .ya-site-form__search-input-layout-l'); + + // const divBlockHeroSearch = document.createElement('div'); + + // + + // divBlockHeroSearch.classList.add('hero__search') + + // divBlockHeroSearch.innerHTML = ` + + // + + // search string + + // + + // + + // side menu + + // + + // `; + + // setTimeout(() => { + + // insertInnerHtml.appendChild(divBlockHeroSearch); + + // }, 1000); + const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector( ".ya-site-form.ya-site-form_bg_transparent.ya-site-form_inited_yes" ); + const searchInput = searchPanel.querySelector('input[type="search"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); + heroSearch.classList.add("hero__search--active"); }); } + if (searchInput) { const div = searchInput.closest(".ya-site-form__input"); + searchInput.addEventListener("blur", searchWatch); function searchWatch() { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value !== "") { div.classList.add("cross"); } else { div.classList.remove("cross"); } } + searchInput.addEventListener("focus", () => { div.classList.add("cross"); }); @@ -888,15 +1283,21 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; + searchInput.focus(); + baseUrl = window.location.href.split("?")[0]; + window.history.pushState("name", "", baseUrl); }); }); @@ -910,20 +1311,29 @@ function searchFormHeader() { $(".search-form").each(function () { $(this).on("submit", (evt) => { evt.preventDefault(); + evt.stopPropagation(); + var searchStr = evt.target[0].value; + if (searchStr.trim()) { if ( (/elma365.com\/ru\/help/i.test(window.location.href) || /elma365.com\/en\/help/i.test(window.location.href) || /t-elma365.com/i.test(window.location.href) || + /brix365.com\/en\/help/i.test(window.location.href) || /([\d+]{3}).(\d).(\d).(\d)/i.test(window.location.href) || /http:\/\/localhost/i.test(window.location.href)) && !triggerTitleMegaGuide ) { window.location.href = `./search.html?query=${searchStr}`; - } else { - window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + } + + //фикс поиска, тест + else { + // window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + + window.location.href = `./search.html?query=${searchStr}`; } } }); @@ -937,28 +1347,41 @@ if ( Boolean(document.querySelector(".searchheading")) ) { const searchTitle = document.querySelector(".searchheading"); + const queryString = window.location.search; + let currentPageNumber = null; const searchParams = queryString.split("&"); + searchParams.forEach((param) => { const paramArr = param.split("="); + if (paramArr[0] === "zoom_page") { currentPageNumber = +paramArr[1]; } }); + const searchWord = decodeURI(searchParams[0].split("=")[1]); + searchTitle.innerText = locale === "ru" ? "Результаты поиска:" : "Search results for:"; + const searchWordP = document.createElement("p"); + searchWordP.classList.add("search-word"); + searchWordP.innerText = searchWord; + searchTitle.append(searchWordP); let pagesCount = "0"; + const resultPagesCount = document.querySelector(".result_pagescount"); + if (resultPagesCount) { pagesCount = parseInt(resultPagesCount.innerText.trim()); + resultPagesCount.remove(); } @@ -966,62 +1389,109 @@ if ( switch (currentPage) { case "first-page": { resultPages[0].textContent = "<< < "; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = "1"; + resultPages[0].after(span); + const aEnd = document.createElement("a"); + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + // resultPages[resultPages.length - 1].textContent = ' >>'; + resultPages[resultPages.length - 1].after(aEnd); + resultPages[resultPages.length - 2].remove(); + resultPages[resultPages.length - 2].textContent = " > "; + break; } + case "last-page": { resultPages[resultPages.length - 1].textContent = ` > >>`; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + const aBegin = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + resultPages[resultPages.length - 1].before(span); + // resultPages[0].textContent = '<< '; + resultPages[1].before(aBegin); + resultPages[0].remove(); + resultPages[1].textContent = "< "; + break; } + case "default-page": { const aBegin = document.createElement("a"); + const aEnd = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + resultPages[1].before(aBegin); + resultPages[0].remove(); + //resultPages[0].textContent = '<< '; + //resultPages[0] = aBegin; + resultPages[1].textContent = " < "; + resultPages[resultPages.length - 2].textContent = " > "; + //resultPages[resultPages.length - 1].textContent = ' >> '; + resultPages[resultPages.length - 2].after(aEnd); + resultPages[resultPages.length - 1].remove(); + break; } + default: break; } } const resultPagesNode = document.querySelector(".result_pages"); + const resultPages = resultPagesNode ? document.querySelector(".result_pages").childNodes : []; @@ -1046,10 +1516,15 @@ if ( resultPages.forEach((node) => { if (+node.textContent.trim() === currentPageNumber) { const nextElement = node.nextSibling; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + nextElement.before(span); + node.remove(); } }); @@ -1057,17 +1532,33 @@ if ( } const summary = document.querySelectorAll(".summary"); + if (summary.length > 0 && locale === "ru") { const count = parseInt(summary[0].innerText.trim()); + summary[0].innerText = count ? `Найдено совпадений: ${count}` : (summary.innerText = "Совпадений не найдено"); } } +// подменяет текст в абзаце в зависимости от атрибута lang + +// if (document.documentElement.lang === "en") { + +// $('#found_typo').html('Found a typo? Highlight the text, press ctrl + enter and notify us') + +// } else if (document.documentElement.lang === "ru") { + +// $('#found_typo').html('Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас') + +// } + $(window).on("load", () => { // правит текст в фильтре результатов поиска + // $('.b-loader__wrapper').css('opacity', 0); + function replace() { var intervalReplace = setInterval(() => { if ( @@ -1083,17 +1574,20 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalReplace); + // }, 180000); }, 10000); function t() { if (document.documentElement.lang === "en") { textResult("нашёл", "Matches found", "all resourses", 13); + textFindSection("Search through "); } if (document.documentElement.lang === "ru") { textResult("нашёл", "Найдено совпадений", "всем ресурсам", 18); + textFindSection("Искать по "); } @@ -1102,11 +1596,14 @@ $(window).on("load", () => { searchAny = $( ".b-dropdowna__switcher .b-pseudo-link_is-bem_yes" ).text(); + var e = text.replace(textFound, textFoundRes), t = searchAny.replace("любой", textAny); + $("tr td.b-head__r .b-head__found").text( e.substring(0, n) + ": " + parseInt(text.match(/\d+/)) ); + $(".b-dropdowna__switcher .b-pseudo-link_is-bem_yes").text(t); if ($("tr td.b-head__r .b-head__found").text().indexOf("найдёт") == 0) { @@ -1140,8 +1637,11 @@ $(window).on("load", () => { if (i > 0) { if (element.childNodes[0].textContent.indexOf("раздел") === 0) { var htmlTag = []; + htmlTag.push(element.childNodes[i]); + element.textContent = textResSection; + htmlTag.forEach((item) => { element.appendChild(item); }); @@ -1166,6 +1666,7 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalAddElementSubsection); + // }, 180000) }, 10000); @@ -1179,48 +1680,71 @@ $(window).on("load", () => { var textContent = $("yass-li.b-serp-item .b-serp-url__item")[index] .textContent; + switch (true) { // ELMA365 + case /elma365.com\/ru\/help/i.test(textContent): subsectionTitle("Справка"); + break; + case /academy.com/i.test(textContent): subsectionTitle("ELMA Academy"); + break; + case /tssdk.elma/i.test(textContent): subsectionTitle("TS SDK"); + break; + case /exchange.elma/i.test(textContent): subsectionTitle("ELMA365 Exchange"); + break; // Английская версия + case /en\/help/i.test(textContent): subsectionTitle("Help"); + break; // rpa + case /rpa.ai\/ru/i.test(textContent): subsectionTitle("RPA"); + break; // ELMA4 + case /ru\/help4\/ecm/i.test(textContent): subsectionTitle("ECM+"); + break; + case /ru\/help4\/crm/i.test(textContent): subsectionTitle("CRM+"); + break; + case /ru\/help4\/projects/i.test(textContent): subsectionTitle("Проекты"); + break; + case /elma-bpm.ru\/help4/i.test(textContent): subsectionTitle("BPM"); + break; + case /ru\/KB/i.test(textContent) || /elma-bpm.ru\/…help/i.test(textContent) || /help/i.test(textContent): subsectionTitle("База знаний"); + break; } @@ -1229,8 +1753,11 @@ $(window).on("load", () => { $(".subsection-title")[index].textContent = text; } else { var newBlockDiv = document.createElement("div"); + newBlockDiv.classList.add("subsection-title"); + newBlockDiv.textContent = text; + $(".b-serp-item__title")[index].prepend(newBlockDiv); } } @@ -1248,16 +1775,20 @@ $(window).on("load", () => { if ($("tr td.b-head__r .b-head__found")) { var intervalTimer = setInterval(() => { replace(); + addElementSubsection(); }, 200); // через 3 минуты интервал останавливается (время взято примерно, чтобы успело все прогрузиться) + setTimeout(() => { clearInterval(intervalTimer); + // }, 180000); }, 10000); } else { replace(); + addElementSubsection(); } }); @@ -1266,25 +1797,41 @@ $(window).on("load", () => { const leadhandler = "https://web.s-elma365.ru"; var rootNode = document.createElement("div"); + document.body.appendChild(rootNode); + var typo = new TypoReporter( { formId: "1FAIpQLSfXEIXAFoOiHgetf0reIjWrOAw6V7KCZrhAv8VVD6WL7Rs46g", // required, see previous step // Optional example stuff below + locale: getLocale(), // optional language, defaults to 'en' + // translations: { // optinal object with translated strings + // fr: { + // // see source code for keys to translate + // }, + // ru: { + // + // } + // }, + offset: 100, // amount of context text to grab from before and after the selection, defaults to 50 + endpointUrl: leadhandler + "/api/baglist/", // optional, defaults to Google Forms + snippetFieldName: "typo", // optional, if using custom form + commentFieldName: "comment", // optional, if using custom form + urlFieldName: "url", // optional, if using custom form }, rootNode @@ -1292,12 +1839,14 @@ var typo = new TypoReporter( $(document).on("focus", ".fill_listener", function () { //console.log("test"); + $(this).parent().addClass("focused"); }); $(document).on("blur", ".fill_listener", function () { $(this).parent().removeClass("focused"); }); + $(document).on("change", ".fill_listener", function () { if ($(this).val().length) { $(this).parent().addClass("filled"); @@ -1309,16 +1858,21 @@ $(document).on("change", ".fill_listener", function () { function feedbackSubmit() { $("#feedback-form").on("submit", function () { var $form = $(this); + var formData = $form.serializeArray().slice(0, -1); + var context = {}; $(formData).each(function (index, obj) { if (obj.name === "useful" && obj.value === "true") { context.other = ""; + context.useful = true; + context.category = [ { code: "", + name: "", }, ]; @@ -1329,11 +1883,14 @@ function feedbackSubmit() { if (obj.name === "other") { context.other = obj.value; } + context.useful = false; + if (obj.name === "category") { context.category = [ { code: obj.value, + name: $form.find('option[value="' + obj.value + '"]').text(), }, ]; @@ -1343,13 +1900,18 @@ function feedbackSubmit() { }); context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1358,6 +1920,7 @@ function feedbackSubmit() { .done(function (response) { return response; }); + return false; }); } @@ -1373,23 +1936,32 @@ $(document).ready(function () { var $form = $(this), textarea = $form.find('textarea[name="help_question"]'), //formData = $form.serializeArray().slice(0, -1), + context = {}; context.other = textarea.val(); + context.category = [ { code: "question", + name: "Задать вопрос", }, ]; + context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1400,18 +1972,23 @@ $(document).ready(function () { .parent() .find(".question-success") .removeClass("hidden"); + setTimeout(() => { $(".question-xs").attr("style", "display:none;"); + textarea.val(""); }); + setTimeout(() => { $(".question__popup") .parent() .find(".question-success") .addClass("hidden"); + $(".question").removeClass("active"); }, 3000); }); + return false; }); }); @@ -1421,6 +1998,7 @@ function question() { const questionPopup = $(this).parent().find(".question-xs"); questionPopup.attr("style", "display:block;"); + setTimeout(() => { $(this).parent().find('textarea[name="help_question"]').focus(); }, 200); @@ -1428,6 +2006,7 @@ function question() { $(document).mouseup(function (e) { let container = $(".question-xs"); + if (!container.is(e.target) && container.has(e.target).length === 0) { container.attr("style", "display:none;"); } @@ -1439,9 +2018,12 @@ function question() { $(".question-xs").on("submit", function () { $(this).parent().find(".question-success-xs").removeClass("hidden"); + $(this).removeClass("active"); + setTimeout(() => { $(this).parent().find(".question-success-xs").addClass("hidden"); + $(this).addClass("active"); }, 3000); }); @@ -1451,23 +2033,28 @@ question(); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); jQuery(function ($) { $(document).mouseup(function (e) { // ������� ����� �� ���-��������� + var div = $("#feedback-form"); // ��� ��������� ID �������� + if ( !div.is(e.target) && // ���� ���� ��� �� �� ������ ����� div.has(e.target).length === 0 ) { // � �� �� ��� �������� ��������� + $(".feedback-form").find("input:checked").removeAttr("checked"); } }); @@ -1475,17 +2062,25 @@ jQuery(function ($) { function feedback() { const yesLabel = document.getElementById("feedback__useful_yes"); + const thxWindow = document.getElementById("feedback__popup_thx"); + const noLabel = document.getElementById("feedback__useful_no"); + const feedbackWhyPopup = document.getElementById("feedback__popup_why"); + const form = document.getElementById("feedback-form"); + const otherInput = document.getElementById("other_reason"); + const otherPopup = document.getElementById("feedback__popup-other"); + const feedbackOtherBtn = document.querySelector(".feedback__other-btn"); const inputs = [ ...document.querySelectorAll('#feedback__popup_why input[type="radio"]'), ]; + const allRadio = inputs.filter((item) => item.id !== "other_reason"); allRadio.forEach((item) => @@ -1504,12 +2099,16 @@ function feedback() { otherInput.addEventListener("change", (e) => { if (e.target.checked) { feedbackWhyPopup.style.display = "none"; + otherPopup.style.display = "block"; + $(".feedback__popup").find('textarea[name="other"]').focus(); feedbackOtherBtn.addEventListener("click", function () { otherPopup.style.display = "none"; + $("#feedback-success-popup").show(); + setTimeout(() => { $("#feedback-success-popup").hide(); }, 3000); @@ -1523,7 +2122,9 @@ function feedback() { if (Boolean(feedbackWhyPopup)) { document.addEventListener("click", (e) => { const target = e.target; + feedbackWhyPopup.style.display = "none"; + thxWindow.style.display = "none"; if (target.matches("#feedback__useful_no")) { @@ -1559,6 +2160,7 @@ $(window).on("load", function () { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }); @@ -1576,6 +2178,7 @@ if (document.querySelector("#side-menu")) { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }, 200); @@ -1591,39 +2194,52 @@ if (document.querySelector("#side-menu")) { if (document.getElementsByClassName("accordion-btn__show")) { var showAccordionBtn = document.querySelector(".accordion-btn__show"); + var elementAccordionHide = document.querySelector(".accordion__hide"); + var linearGradient = document.querySelector(".linear-gradient"); + var heightAccordionElem = document.querySelector(".card-stack-50").scrollHeight; var t = false; + showAccordionBtn.addEventListener("click", () => { switch (true) { case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__show"): elementAccordionHide.classList.add("accordion__show"); + elementAccordionHide.style.maxHeight = heightAccordionElem + "px"; + elementAccordionHide.classList.remove("accordion__hide"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__show"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__hide"); setTimeout(() => { linearGradient.classList.remove("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Свернуть"; }, 1000); + break; case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__hide"): elementAccordionHide.classList.add("accordion__hide"); + elementAccordionHide.classList.remove("accordion__show"); + elementAccordionHide.style.maxHeight = ""; + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__show"); @@ -1632,9 +2248,12 @@ if (document.getElementsByClassName("accordion-btn__show")) { showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__hide"); + linearGradient.classList.add("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Показать всё"; }, 1000); + break; } }); @@ -1647,6 +2266,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { (function () { if (document.querySelector(".accordion__items")) { var btn = document.querySelectorAll(".accordion__item-question"); + var dehiscentItems = document.querySelectorAll( ".accordion__item-question-answer" ); @@ -1659,8 +2279,11 @@ if (document.getElementsByClassName("accordion-btn__show")) { removeActiveClass(); } else { removeActiveClass(); + this.classList.toggle("accordion__active"); + nextEl.style.maxHeight = nextEl.scrollHeight + "px"; + nextEl.style.marginBottom = "15px"; } }); @@ -1673,6 +2296,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { dehiscentItems.forEach((i) => { i.style.maxHeight = null; + i.style.marginBottom = null; }); } diff --git a/ecm/_footer.css b/ecm/_footer.css index 2ef73c0..37c9954 100644 --- a/ecm/_footer.css +++ b/ecm/_footer.css @@ -433,6 +433,4 @@ img{ } } -footer { - padding-top:80px -} + diff --git a/ecm/default.css b/ecm/default.css index 67da43b..edc4563 100644 --- a/ecm/default.css +++ b/ecm/default.css @@ -456,7 +456,7 @@ input[type="text"]:not(.ReportTypo input):not(.ReportTypo-comment) { position: sticky; top: 80px; /*display: flex; */ - max-height: calc(100vh - 80px); + /*max-height: calc(100vh - 80px);*/ transition: top .2s linear; } @@ -1967,7 +1967,7 @@ code { .article__header{ min-height: 58px; } - + .article__badge { height: 26px; min-width: 34px; diff --git a/ecm/google-search.js b/ecm/google-search.js index a1416db..ed18165 100644 --- a/ecm/google-search.js +++ b/ecm/google-search.js @@ -175,6 +175,7 @@ const allowedHosts = [ "http://127.0.0.1", "http://localhost", "https://ligmanstark.github.io/help365_test/", + "https://help.miduway.space", ]; if (allowedHosts.some((url) => currentLocalHref.includes(url))) { diff --git a/ecm/main.js b/ecm/main.js index 8879ca7..711be57 100644 --- a/ecm/main.js +++ b/ecm/main.js @@ -1,5 +1,6 @@ const getLocale = () => { const lan = document.documentElement.lang; + return lan ? document.documentElement.lang : "ru"; }; @@ -12,125 +13,186 @@ function getProduct() { case "elma-rpa.ai": product = { name: "rpa", + id: "33678c11-fea6-4adb-aa39-adc4e8295b53", }; + break; + case "www.elma-bpm.ru": product = { name: "elma3/4", + id: "44b97702-146c-414b-9db7-0b09705556ed", }; + break; + default: product = { name: "elma365", + id: "3354c78a-720e-4584-a9c6-83f0f1396d22", }; + break; } + return product; } +document + .querySelector(".solution-select") + .addEventListener("mouseenter", function () { + this.classList.add("active"); + + document.querySelector(".solution-select__list").classList.add("active"); + }); + +document + .querySelector(".solution-select__list") + .addEventListener("mouseleave", function () { + this.classList.remove("active"); + + document.querySelector(".solution-select").classList.remove("active"); + }); + +const titleName = () => { + let textSpanTitle = document.querySelector(".solution-select__selected"); + + let currentPlace = window.location.pathname + .replace("/en/help/", "") + .split("/")[0]; + + textSpanTitle.textContent = + currentPlace.charAt(0).toUpperCase() + currentPlace.slice(1); + + if (currentPlace === "crm" || "ecm") { + textSpanTitle.textContent = currentPlace.toUpperCase(); + } + + if (currentPlace === "business_solutions") { + let business = currentPlace.replace("_", " "); + + textSpanTitle.textContent = + business.charAt(0).toUpperCase() + + business.slice(1, 8) + + " " + + business.charAt(9).toUpperCase() + + business.slice(10); + } +}; + +/*// Commerce version + +const files = document.querySelectorAll(".filelink"); + +if (files.length) { + + files.forEach((file) => + + file.setAttribute("download", "Postman_collection.json") + + ); + +}*/ + const insertWordBreaks = (selector) => { document.querySelectorAll(selector).forEach((el) => { - el.innerHTML = el.textContent.replace(/([\/\-=:<>_])/g, "$1"); + el.innerHTML = el.textContent.replace(/([\/\-=<>:_])/g, "$1"); }); }; insertWordBreaks("code"); -const addCanonicalUrl = () => { - const urlMapping = { - "/ru/help/business_solutions/platform-distribution.html": - "/ru/help/platform/platform-distribution.html", - }; - - const listUrl = [ - "/ru/haproxy-postgresql.html", - "/ru/doc_template.docx", - "/ru/platform-distribution.html", - "/ru/help/platform/haproxy-postgresql.html", - "/ru/help/platform/platform-distribution.html", - "/ru/help/ecm/doc_template.docx", - ]; - - const currentPath = window.location.pathname; - const baseUrl = window.location.origin.includes("localhost") - ? window.location.origin - : "https://elma365.com"; - - if (urlMapping[currentPath]) { - setCanonicalUrl(baseUrl + urlMapping[currentPath]); - return; - } - - if (listUrl.includes(currentPath)) { - setCanonicalUrl(baseUrl + currentPath); - } -}; - -const setCanonicalUrl = (canonicalUrl) => { - const canonicalLink = document.createElement("link"); - canonicalLink.href = canonicalUrl; - canonicalLink.setAttribute("rel", "canonical"); - document.querySelector("head").appendChild(canonicalLink); -}; - -addCanonicalUrl(); - const scrollToLink = () => { - let myHash = window.location.pathname; //�������� �������� ���� - if (myHash) { + let myHash = location.hash; //�������� �������� ���� + + location.hash = ""; //������� ��� + + if (myHash[1]) { //���������, ���� �� � ���� �����-�� �������� - $("html, body").animate({ scrollTop: $(myHash).offset().top }, 100); //�������� �� ���������� + + $("html, body").animate({ scrollTop: $(myHash).offset().top }, 300); //�������� �� ���������� } }; + // scrollToLink(); -function scrollLink() { - document.addEventListener("DOMContentLoaded", function () { - const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим - if (hash) { - const target = document.querySelector(`[data-unique="${hash}"]`); - if (target) { - target.scrollIntoView({ behavior: "smooth" }); - } - } - }); -} -scrollLink(); +// function scrollLink() { + +// document.addEventListener("DOMContentLoaded", function () { + +// const hash = decodeURIComponent(window.location.hash.slice(1)); // убираем '#' и декодим + +// if (hash) { + +// const target = document.querySelector(`[data-unique="${hash}"]`); + +// if (target) { + +// target.scrollIntoView({ behavior: "smooth" }); + +// } + +// } + +// }); + +// } + +// scrollLink(); const createVersionNode = (title, className) => { const articleNode = document.querySelector(".topic__title"); + const pVersion = document.createElement("p"); + pVersion.innerText = title; + pVersion.classList.add(className); + articleNode.append(pVersion); }; -const { href, pathname } = window.location; +const { + href, + + pathname, +} = window.location; + let locale = getLocale(); + const pathnameArr = pathname.split("/"); + let currentPage = pathnameArr[pathnameArr.length - 1] || null; //���� �� ��������� ��������, ������ ���������� ������ � ����� + const changeHeaderLinks = () => { const host = "elma4.sarl.inner.elma365.com"; + const path = "/ru/platform/"; + const headerLinks = document.querySelector(".header__list"); + const footerList = document.querySelector(".footer-mobile__list"); + const appendList = ``; if (window.location.host === host) { if (window.location.pathname !== path) { headerLinks.insertAdjacentHTML("beforeend", appendList); + footerList.insertAdjacentHTML("beforeend", appendList); } } }; + //changeHeaderLinks() // standard example + function findExampleContent(node, container, endString) { if ( node.classList.contains("p_CodeExample") && @@ -139,48 +201,68 @@ function findExampleContent(node, container, endString) { node.firstElementChild.innerText.toLowerCase().includes(endString) ) { node.remove(); + return; } + const nextElement = node.nextElementSibling; + container.append(node); + findExampleContent(nextElement, container, endString); } function createNotation(item, notationType, endString) { const container = document.createElement("div"); + const exampleTitle = item.nextElementSibling; + const nextSibling = exampleTitle.nextElementSibling; container.classList.add(notationType); + exampleTitle.classList.add(notationType + "__title"); + container.append(exampleTitle); + findExampleContent(nextSibling, container, endString); + item.after(container); + item.remove(); } function getArticleName(url) { const arrFromUrl = url.split("/"); + const lastPath = arrFromUrl[arrFromUrl.length - 1]; + return lastPath.split(".")[0]; } function removeCollapsedClass(node, tagName, className) { const closestNode = node.closest(tagName); + if (!closestNode) { return; } + closestNode.classList.remove(className); + removeCollapsedClass(closestNode.parentElement, tagName, className); } function loadBottomLinks() { const toc = document.querySelector("#toc"); + const bottomLinks = document.querySelectorAll(".bottom-nav__link"); + if (toc && bottomLinks.length) { bottomLinks.forEach((link) => { const path = `a[href="${link.innerText}"]`; + const targetLink = toc.querySelector(path); + link.innerText = targetLink.innerText; }); } @@ -188,25 +270,32 @@ function loadBottomLinks() { function hideAllSideUls() { const hidingMenu = document.querySelectorAll("#toc li ul"); + hidingMenu.forEach((item) => { item.classList.add("hide-side-menu-item"); + item.closest("li").classList.add("collapsed"); }); } function toggleUlsLinksHandler(menu, link) { menu.forEach((link) => link.classList.remove("active-side-menu")); + link.classList.add("active-side-menu"); + removeCollapsedClass(link, "ul", "hide-side-menu-item"); + if ( link.nextElementSibling && link.nextElementSibling.classList.contains("hide-side-menu-item") ) { removeCollapsedClass(link, "li", "collapsed"); + link.nextElementSibling.classList.remove("hide-side-menu-item"); } else { removeCollapsedClass(link, "li", "collapsed"); } + setTimeout(() => { scrollToSelector(".active-side-menu"); }, 100); @@ -214,19 +303,28 @@ function toggleUlsLinksHandler(menu, link) { function scrollToSelector(selector) { // document.body.style.position = 'fixed'; + document.querySelector(".sidebar__wrapper").style.position = "fixed"; + document + .querySelector(selector) + .scrollIntoView({ behavior: "smooth", block: "center" }); + document.querySelector(".sidebar__wrapper").style.position = "sticky"; + // document.body.style.position = 'unset'; } function toggleUlsHandler() { const tocNode = document.querySelector("#toc"); + if (tocNode) { const linksMenu = tocNode.querySelectorAll("a"); + const activeItem = getArticleName(window.location.pathname); + linksMenu.forEach((link) => { if (getArticleName(link.pathname) === activeItem) { toggleUlsLinksHandler(linksMenu, link); @@ -237,29 +335,37 @@ function toggleUlsHandler() { function prepareContent() { const commerceId = document.getElementById("commerce"); + const communityId = document.getElementById("community"); href.includes("zoom_highlightsub") && $("body").addClass("--highlight-disabled"); //Set document title + const h1pageTitle = document.querySelector("h1 span.f_Heading1"); + if (h1pageTitle) { document.querySelector("title").innerText = h1pageTitle.innerText; } + if (commerceId || communityId) { commerceId ? (commerceId.style.display = "none") : (communityId.style.display = "none"); + commerceId ? createVersionNode("Enterprise", "pCommerce") : createVersionNode("Community Edition", "pCommunity"); } + hideAllSideUls(); + toggleUlsHandler(); const visibleSideBar = (sidebar) => { const input = sidebar.querySelector('input[type="checkbox"]'); + let isVisible = false; input.addEventListener("change", () => { @@ -272,35 +378,55 @@ function prepareContent() { } }); }; + //TODO навигация по статье (якори) + const toc2 = document.getElementById("toc2"); + if (toc2) { const toc2Wrapper = document.querySelector(".article__sidebar"); + if (!toc2.dataset.tocInitialized) { $("#toc2").tocify({ context: "section.article__content", + selectors: "h2, h3", + extendPage: false, }); + toc2.dataset.tocInitialized = "true"; } + // $("#toc2").tocify({ + // context: "section.article__content", + // selectors: "h2, h3", + // extendPage: false, + // }); + const points = toc2.querySelectorAll("a"); + if (points.length > 0) { points.forEach((point) => { if (!point.innerText.trim()) { point.remove(); } }); + toc2Wrapper.style.display = "block"; + visibleSideBar(toc2Wrapper); + // document.querySelector("body").classList.add(".scroll-nav"); + // setTimeout(() => { + // document.querySelector("body").classList.remove(".scroll-nav"); + // }, 500); } else { toc2Wrapper.style.display = "none"; @@ -308,12 +434,14 @@ function prepareContent() { } const images = document.querySelectorAll(".p_Normal > img"); + images.forEach( (image) => image.closest("p") && image.closest("p").classList.add("image-container") ); const breadcrumbs = document.querySelector(".topic__breadcrumbs"); + if (breadcrumbs && breadcrumbs.firstElementChild) { breadcrumbs.firstElementChild.childNodes.forEach((node) => { if (node.nodeValue && node.nodeValue.includes(">")) { @@ -322,17 +450,18 @@ function prepareContent() { }); } - // const spans = document.querySelectorAll('span'); - // if (spans.length) { - // spans.forEach(span => { - // if (span.innerHTML === ' ') { - // span.remove(); - // console.log(span.innerHTML); - // } - // }); - // } + const spans = document.querySelectorAll("span"); + + if (spans.length) { + spans.forEach((span) => { + if (span.innerHTML === " ") { + span.remove(); + } + }); + } // example exapand + const examplesToggle = document.querySelectorAll( 'a[class="dropdown-toggle"]' ); @@ -347,37 +476,54 @@ function prepareContent() { example.parentElement.tagName === "p" ? example.parentElement : example.closest("p"); + const nextSiblingDiv = parentP.nextElementSibling; + if (nextSiblingDiv && nextSiblingDiv.tagName === "DIV") { parentP.classList.add("example"); + const id = nextSiblingDiv.id; + const button = document.createElement("a"); + const obj = nextSiblingDiv.attributes; + let expandState = "0"; + parentP.setAttribute("data-state", expandState); + button.classList.add("btn-example"); + button.innerHTML = locale === "ru" ? 'СвернутьПосмотреть полностью' : 'HideShow all'; + button.addEventListener("click", (evt) => { evt.preventDefault(); + window.HMToggle("toggle", id); + Object.entries(obj).map((el) => { if (el[1].name === "hm.state") { expandState = el[1].value; + parentP.setAttribute("data-state", expandState); } }); }); + parentP.append(button); + example.setAttribute("href", "javascript:void(0)"); + example.after(nextSiblingDiv); } }); } const pArray = document.querySelectorAll(".p_Normal"); + if (pArray.length) { pArray.forEach((p) => { if (p.innerHTML === " ") { @@ -387,9 +533,11 @@ function prepareContent() { } const examples = document.querySelectorAll("p.p_CodeExample"); + if (examples.length) { examples.forEach((example) => { const childSpan = example.firstElementChild; + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -397,6 +545,7 @@ function prepareContent() { ) { createNotation(example, "example", "примера"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -404,6 +553,7 @@ function prepareContent() { ) { createNotation(example, "warning", "внимание"); } + if ( childSpan && childSpan.innerText.toLowerCase().includes("начало") && @@ -415,15 +565,22 @@ function prepareContent() { } //small icon + const icons = document.querySelectorAll(".content img"); + if (icons.length) { icons.forEach((icon, idx) => { const iconWidth = parseInt(icon.width); + const floated = icon.style.float; + floated !== "" && icon.classList.add("img-float--" + floated); + if (iconWidth < 200) { icon.classList.add("small-img"); + const iconHeight = parseInt(icon.height); + if ( iconWidth > 70 && iconHeight > 70 && @@ -436,28 +593,33 @@ function prepareContent() { }); } } + //TODO скрытие хедера + function stickyHeader() { var lastScrollTop = 0; + var delta = 15; + $(window) .on("scroll", function () { var st = $(this).scrollTop(); + if (Math.abs(lastScrollTop - st) <= delta) return; + if (st > lastScrollTop && lastScrollTop > 0) { $("body").addClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } else { $("body").removeClass("--header-hidden"); + $(".solution-select__list").removeClass("active"); + $(".solution-select").removeClass("active"); } - //TEST - // if (document.querySelector("body").classList.contains(".scroll-nav")) { - // $("body").addClass("--header-hidden"); - // } - //TEST lastScrollTop = st; }) @@ -478,65 +640,141 @@ $(window).resize(function () { function iconsTableOfContents() { const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); + toggledLi.forEach((li) => li.classList.add("toggled")); } $(document).ready(function () { prepareContent(); + toggleUlsHandler(); - //TODO вызов скрытия хедера + + //TODO вызов хедера + // stickyHeader(); $("#side-menu").load("index.html #toc", function () { - //TODO вызавает каждый раз ререндер при изменении href(добавление якоря как например) - // window.addEventListener("popstate", () => { - // $("#article").load(`${window.location.href} .article-inner`, function () { + //TODO ререндер toc + + // window.addEventListener('popstate', () => { + + // // $(".article-inner").empty(); + + // $('#article').load(`${window.location.href} .article-inner`, function () { + // loadBottomLinks(); + // prepareContent(); + // }); - // }); + + // }) + + function onUrlChange(callback) { + const originalPushState = history.pushState; + const originalReplaceState = history.replaceState; + + // Фильтр для игнорирования определенных URL + const shouldTrigger = (url) => { + return ( + !url.includes("javascript:") && + url !== "about:blank" && + !url.startsWith("mailto:") && + !url.startsWith("tel:") + ); + }; + + const trigger = () => { + const currentUrl = window.location.pathname + window.location.search; + if (shouldTrigger(currentUrl)) { + callback(currentUrl); + } + }; + + history.pushState = function (state, title, url) { + if (shouldTrigger(url)) { + originalPushState.apply(this, arguments); + trigger(); + } + }; + + history.replaceState = function (state, title, url) { + if (shouldTrigger(url)) { + originalReplaceState.apply(this, arguments); + trigger(); + } + }; + + window.addEventListener("popstate", trigger); + } + + // Использование + let lastValidUrl = window.location.pathname + window.location.search; + + onUrlChange((currentUrl) => { + if (currentUrl !== lastValidUrl) { + lastValidUrl = currentUrl; + + $("#article").load( + `${window.location.href} .article-inner`, + function () { + loadBottomLinks(); + prepareContent(); + + // Очищаем историю от невалидных записей + if (window.location.href.includes("javascript:")) { + history.replaceState(null, "", lastValidUrl); + } + } + ); + } + }); + + // Дополнительно: обработка void-ссылок + document.querySelectorAll('a[href^="javascript:"]').forEach((link) => { + link.addEventListener("click", (e) => { + e.preventDefault(); + // Можно добавить здесь свою логику обработки клика + }); + }); + + // + loadBottomLinks(); + hideAllSideUls(); + toggleUlsHandler(); + document.addEventListener("DOMContentLoaded", () => { if (document.visibilityState === "visible") { hideAllSideUls(); } }); - //toc - function tryHideSideUlsWhenActive() { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } else { - document.addEventListener( - "visibilitychange", - () => { - if (document.visibilityState === "visible") { - hideAllSideUls(); - } - }, - { once: true } - ); - } - } - - document.addEventListener("DOMContentLoaded", tryHideSideUlsWhenActive); const menuItems = this.querySelectorAll("a"); + menuItems.forEach((item) => { item.addEventListener("click", (evt) => { evt.preventDefault(); + const url = evt.target.nodeName === "A" ? evt.target.href : evt.target.closest("a").href; + const sideMenu = document.querySelector(".sidebar"); + const htmlTag = document.querySelector("html"); + const toggledLi = document.querySelectorAll('li[data-bg*="collapsed"]'); window.scrollTo(0, 0); + htmlTag.classList.remove("--locked"); + $("body").removeClass("index-page search-page"); + sideMenu.classList.remove("show-side-menu"); if (toggledLi.length) { @@ -548,17 +786,42 @@ $(document).ready(function () { if (url !== window.location.href) { if (!url.includes("javascript:void")) { $(".article-inner").empty(); + $("#article").load(`${url} .article-inner`, function () { history.pushState({}, null, url); + //metaDecsription.attr('content', metaDescriptionInitial); + loadBottomLinks(); + prepareContent(); }); } else { - //TEST + // const _target = evt.target; + + // const _targetUl = _target.parentElement.nextElementSibling; + + // if (_target.nodeName === "SPAN" && _targetUl.nodeName === "UL" && _targetUl.classList.contains("hide-side-menu-item")) { + + // _targetUl.querySelectorAll('a')[0].click(); + + // } else { + + // const _ul = _target.parentElement.querySelectorAll('a')[0].nextElementSibling; + + // if (_ul.nodeName === "UL") { + + // _ul.querySelectorAll('a')[0].click(); + + // }; + + // } + function isFakeLink(link) { if (!link) return false; + const href = link.getAttribute("href"); + return href === "#" || href === "javascript:void(0);"; } @@ -568,34 +831,45 @@ $(document).ready(function () { function findFirstLinkInElement(element) { if (!element) return null; + return element.querySelector("a"); } function findFirstRealNestedLink(element) { if (!element) return null; + const links = element.querySelectorAll("a"); + for (const link of links) { if (isRealLink(link)) return link; } + return null; } document.addEventListener("click", (evt) => { const _target = evt.target; + if (_target.nodeName !== "SPAN") return; const _targetLi = _target.closest("li"); + if (!_targetLi) return; const submenu = _targetLi.querySelector("ul"); + const firstLink = findFirstLinkInElement(_targetLi); // заглушки + if (firstLink && isFakeLink(firstLink)) { const nestedReal = findFirstRealNestedLink(submenu); + if (nestedReal) { nestedReal.click(); + // в первом фрагменте, после nestedReal.click(); + setTimeout(() => { document.dispatchEvent(new Event("subcategory:update")); }, 50); @@ -607,7 +881,6 @@ $(document).ready(function () { firstLink.click(); // кликаем по нормальной ссылке } }); - //TEST } } }); @@ -617,20 +890,28 @@ $(document).ready(function () { const obj = pagedata.reduce((acc, words) => { const searchObj = { title: words[1], + link: words[0], }; + return [...acc, searchObj]; }, []); + $(".search-form__input").each(function () { var _that = $(this); + var _searchForm = _that.parent(); + _that .autocomplete({ autoFocus: false, + minLength: 2, + focus: function (event, ui) { itemUiLinkSelected = ui.item.link; }, + source: function (request, response) { const results = obj.filter( (item) => @@ -639,7 +920,9 @@ $(document).ready(function () { .includes(request.term.toLowerCase()) && document.querySelector(`a[href="${item.link.slice(2)}"]`) ); + const sliceResults = results.slice(0, 5); + sliceResults.map((result) => { const aItem = document.querySelector( `a[href="${result.link.slice(2)}"]` @@ -647,6 +930,7 @@ $(document).ready(function () { if (aItem) { const parent = aItem.closest("li.heading1"); + result.breadcrumb = parent.querySelector("span.heading1").innerText; } else { @@ -665,6 +949,7 @@ $(document).ready(function () { item.breadcrumb || "" }` ) + .appendTo(ul); }; @@ -678,10 +963,15 @@ $(document).ready(function () { $(".glossary-abc__nav a").on("click", function (e) { e.preventDefault(); + var target = $(this).attr("href"); + console.log($(this).parent().siblings()); + $(".glossary-abc__nav a").removeClass("--active"); + $(this).addClass("--active"); + $("html, body").animate( { scrollTop: $(target).offset().top - 150, @@ -690,39 +980,33 @@ $(document).ready(function () { ); }); - const name = "Сайт ELMA365"; - const cusLi = document.createElement("li"); - cusLi.classList.add("heading1"); - cusLi.classList.add("heading10"); - const cusA = document.createElement("a"); - cusA.classList.add("heading1"); - cusA.setAttribute("href", "https://elma365.com/ru/"); - cusA.setAttribute("target", "_blank"); - const cusSpan = document.createElement("span"); - cusSpan.classList.add("heading1"); - cusSpan.textContent = name; - cusA.appendChild(cusSpan); - cusLi.appendChild(cusA); - document.querySelector("#toc").prepend(cusLi); - // Хлебные крошки на странице поиска + function findPrevBreadcrumbs(node, breadcrumbs) { var breadcrumbsNew = breadcrumbs || $('
'); + var prevParentEl = node.closest("ul") ? node.closest("ul").prev() : null; + if (!prevParentEl[0] || prevParentEl[0].tagName !== "A") { return breadcrumbsNew; } + breadcrumbsNew.prepend(' / '); + breadcrumbsNew.prepend(prevParentEl.clone()); + return findPrevBreadcrumbs(prevParentEl, breadcrumbsNew); } $(".result_title a").each(function () { var bc = ""; + var currentArticleName = $(this); + $("#toc a span").each(function () { var tocCurrentNode = $(this); + if (tocCurrentNode.text().trim() === currentArticleName.text().trim()) { bc = findPrevBreadcrumbs(tocCurrentNode); } @@ -735,16 +1019,56 @@ $(document).ready(function () { }); }); +//let scrollPos = 0; + +/* $('body').scroll(function () { + + let st = $(this).scrollTop(); + + if (st > scrollPos) { + + $('.scroll-top').hide(); + + } else { + + $('.scroll-top').show(); + + } + + scrollPos = st; + +}); + + + +$('.scroll-top').on('click', function (e) { + + e.preventDefault(); + + $('html, body').animate({ + + scrollTop: 0 + + }); + +}); */ + //side menu mobile + const sideMenuIcon = document.querySelector("#side-menu-icon"); + const htmlTag = document.querySelector("html"); + const sideMenu = document.querySelector("#sidebar"); + const closeButton = document.querySelector("#close"); if (sideMenuIcon) { sideMenuIcon.addEventListener("click", (evt) => { evt.preventDefault(); + sideMenu.classList.toggle("show-side-menu"); + htmlTag.classList.toggle("--locked"); }); } @@ -752,12 +1076,15 @@ if (sideMenuIcon) { if (closeButton) { closeButton.addEventListener("click", (e) => { e.preventDefault(); + sideMenu.classList.remove("show-side-menu"); + htmlTag.classList.remove("--locked"); }); } var triggerTitleMegaGuide = false; + if (getTitleSite() === "Mega Guide" || /hmftsearch.html/i.test(href)) { triggerTitleMegaGuide = true; } @@ -775,6 +1102,9 @@ function getTitleSite() { const currentUrl = window.location.href; if ( + /http:\/\/localhost/i.test(currentUrl) || + /brix365.t-elma365\/en\/help/i.test(currentUrl) || + /brix365.com\/en\/help/i.test(currentUrl) || /elma365.com\/ru\/help/i.test(currentUrl) || /elma365.com\/en\/help/i.test(currentUrl) || /elma365\/help\/ru/i.test(currentUrl) || @@ -784,29 +1114,44 @@ if ( ) { window.addEventListener("load", () => { const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector("#search-panel"); + const searchInput = searchPanel.querySelector('input[type="text"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); heroSearch.classList.add("hero__search--active"); }); + } else { + console.log("error"); } + if (searchInput) { const label = searchInput.closest("label"); + searchInput.addEventListener("blur", () => { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value) { label.classList.add("cross"); } else { label.classList.remove("cross"); } }); + searchInput.addEventListener("focus", () => { label.classList.add("cross"); }); @@ -822,12 +1167,15 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + if (document.querySelector("#reset-search")) { const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; }); @@ -842,37 +1190,84 @@ if ( wrapperSearch.classList.add("search-form__label"); const tagSpanIcons = document.createElement("span"); + tagSpanIcons.className = "search__icon"; + tagSpanIcons.setAttribute("id", "reset-search"); + wrapperSearch.prepend(tagSpanIcons); + // const insertInnerHtml = document.querySelector('tr .ya-site-form__search-input-layout-l'); + + // const divBlockHeroSearch = document.createElement('div'); + + // + + // divBlockHeroSearch.classList.add('hero__search') + + // divBlockHeroSearch.innerHTML = ` + + // + + // search string + + // + + // + + // side menu + + // + + // `; + + // setTimeout(() => { + + // insertInnerHtml.appendChild(divBlockHeroSearch); + + // }, 1000); + const searchIcon = document.querySelector("#search-icon"); + const searchPanel = document.querySelector( ".ya-site-form.ya-site-form_bg_transparent.ya-site-form_inited_yes" ); + const searchInput = searchPanel.querySelector('input[type="search"]'); + const heroSearch = document.querySelector(".hero__search"); + if (searchIcon) { searchIcon.addEventListener("click", (evt) => { + console.log(searchIcon); + evt.preventDefault(); + searchPanel.classList.toggle("show-search-panel"); + setTimeout(() => searchInput.focus(), 500); + heroSearch.classList.add("hero__search--active"); }); } + if (searchInput) { const div = searchInput.closest(".ya-site-form__input"); + searchInput.addEventListener("blur", searchWatch); function searchWatch() { searchPanel.classList.remove("show-search-panel"); + heroSearch.classList.remove("hero__search--active"); + if (searchInput.value !== "") { div.classList.add("cross"); } else { div.classList.remove("cross"); } } + searchInput.addEventListener("focus", () => { div.classList.add("cross"); }); @@ -888,15 +1283,21 @@ if ( $(".arrow-top").click(function () { $("html, body").animate({ scrollTop: 0 }, 600); + return false; }); // очистить поиск + const resetButton = document.querySelector("#reset-search"); + resetButton.addEventListener("click", () => { searchInput.value = ""; + searchInput.focus(); + baseUrl = window.location.href.split("?")[0]; + window.history.pushState("name", "", baseUrl); }); }); @@ -910,20 +1311,29 @@ function searchFormHeader() { $(".search-form").each(function () { $(this).on("submit", (evt) => { evt.preventDefault(); + evt.stopPropagation(); + var searchStr = evt.target[0].value; + if (searchStr.trim()) { if ( (/elma365.com\/ru\/help/i.test(window.location.href) || /elma365.com\/en\/help/i.test(window.location.href) || /t-elma365.com/i.test(window.location.href) || + /brix365.com\/en\/help/i.test(window.location.href) || /([\d+]{3}).(\d).(\d).(\d)/i.test(window.location.href) || /http:\/\/localhost/i.test(window.location.href)) && !triggerTitleMegaGuide ) { window.location.href = `./search.html?query=${searchStr}`; - } else { - window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + } + + //фикс поиска, тест + else { + // window.location.href = `./hmftsearch.html?zoom_query=${searchStr}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + + window.location.href = `./search.html?query=${searchStr}`; } } }); @@ -937,28 +1347,41 @@ if ( Boolean(document.querySelector(".searchheading")) ) { const searchTitle = document.querySelector(".searchheading"); + const queryString = window.location.search; + let currentPageNumber = null; const searchParams = queryString.split("&"); + searchParams.forEach((param) => { const paramArr = param.split("="); + if (paramArr[0] === "zoom_page") { currentPageNumber = +paramArr[1]; } }); + const searchWord = decodeURI(searchParams[0].split("=")[1]); + searchTitle.innerText = locale === "ru" ? "Результаты поиска:" : "Search results for:"; + const searchWordP = document.createElement("p"); + searchWordP.classList.add("search-word"); + searchWordP.innerText = searchWord; + searchTitle.append(searchWordP); let pagesCount = "0"; + const resultPagesCount = document.querySelector(".result_pagescount"); + if (resultPagesCount) { pagesCount = parseInt(resultPagesCount.innerText.trim()); + resultPagesCount.remove(); } @@ -966,62 +1389,109 @@ if ( switch (currentPage) { case "first-page": { resultPages[0].textContent = "<< < "; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = "1"; + resultPages[0].after(span); + const aEnd = document.createElement("a"); + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + // resultPages[resultPages.length - 1].textContent = ' >>'; + resultPages[resultPages.length - 1].after(aEnd); + resultPages[resultPages.length - 2].remove(); + resultPages[resultPages.length - 2].textContent = " > "; + break; } + case "last-page": { resultPages[resultPages.length - 1].textContent = ` > >>`; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + const aBegin = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + resultPages[resultPages.length - 1].before(span); + // resultPages[0].textContent = '<< '; + resultPages[1].before(aBegin); + resultPages[0].remove(); + resultPages[1].textContent = "< "; + break; } + case "default-page": { const aBegin = document.createElement("a"); + const aEnd = document.createElement("a"); + const urlBegin = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=1&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + const urlEnd = `./hmftsearch.html?zoom_query=${searchWord}&zoom_page=${pagesCount}&zoom_per_page=10&zoom_and=1&zoom_sort=0`; + aBegin.setAttribute("href", urlBegin); + aBegin.textContent = "<< "; + aEnd.setAttribute("href", urlEnd); + aEnd.textContent = " >>"; + resultPages[1].before(aBegin); + resultPages[0].remove(); + //resultPages[0].textContent = '<< '; + //resultPages[0] = aBegin; + resultPages[1].textContent = " < "; + resultPages[resultPages.length - 2].textContent = " > "; + //resultPages[resultPages.length - 1].textContent = ' >> '; + resultPages[resultPages.length - 2].after(aEnd); + resultPages[resultPages.length - 1].remove(); + break; } + default: break; } } const resultPagesNode = document.querySelector(".result_pages"); + const resultPages = resultPagesNode ? document.querySelector(".result_pages").childNodes : []; @@ -1046,10 +1516,15 @@ if ( resultPages.forEach((node) => { if (+node.textContent.trim() === currentPageNumber) { const nextElement = node.nextSibling; + const span = document.createElement("span"); + span.classList.add("current-page"); + span.innerText = currentPageNumber; + nextElement.before(span); + node.remove(); } }); @@ -1057,17 +1532,33 @@ if ( } const summary = document.querySelectorAll(".summary"); + if (summary.length > 0 && locale === "ru") { const count = parseInt(summary[0].innerText.trim()); + summary[0].innerText = count ? `Найдено совпадений: ${count}` : (summary.innerText = "Совпадений не найдено"); } } +// подменяет текст в абзаце в зависимости от атрибута lang + +// if (document.documentElement.lang === "en") { + +// $('#found_typo').html('Found a typo? Highlight the text, press ctrl + enter and notify us') + +// } else if (document.documentElement.lang === "ru") { + +// $('#found_typo').html('Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас') + +// } + $(window).on("load", () => { // правит текст в фильтре результатов поиска + // $('.b-loader__wrapper').css('opacity', 0); + function replace() { var intervalReplace = setInterval(() => { if ( @@ -1083,17 +1574,20 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalReplace); + // }, 180000); }, 10000); function t() { if (document.documentElement.lang === "en") { textResult("нашёл", "Matches found", "all resourses", 13); + textFindSection("Search through "); } if (document.documentElement.lang === "ru") { textResult("нашёл", "Найдено совпадений", "всем ресурсам", 18); + textFindSection("Искать по "); } @@ -1102,11 +1596,14 @@ $(window).on("load", () => { searchAny = $( ".b-dropdowna__switcher .b-pseudo-link_is-bem_yes" ).text(); + var e = text.replace(textFound, textFoundRes), t = searchAny.replace("любой", textAny); + $("tr td.b-head__r .b-head__found").text( e.substring(0, n) + ": " + parseInt(text.match(/\d+/)) ); + $(".b-dropdowna__switcher .b-pseudo-link_is-bem_yes").text(t); if ($("tr td.b-head__r .b-head__found").text().indexOf("найдёт") == 0) { @@ -1140,8 +1637,11 @@ $(window).on("load", () => { if (i > 0) { if (element.childNodes[0].textContent.indexOf("раздел") === 0) { var htmlTag = []; + htmlTag.push(element.childNodes[i]); + element.textContent = textResSection; + htmlTag.forEach((item) => { element.appendChild(item); }); @@ -1166,6 +1666,7 @@ $(window).on("load", () => { setTimeout(() => { clearInterval(intervalAddElementSubsection); + // }, 180000) }, 10000); @@ -1179,48 +1680,71 @@ $(window).on("load", () => { var textContent = $("yass-li.b-serp-item .b-serp-url__item")[index] .textContent; + switch (true) { // ELMA365 + case /elma365.com\/ru\/help/i.test(textContent): subsectionTitle("Справка"); + break; + case /academy.com/i.test(textContent): subsectionTitle("ELMA Academy"); + break; + case /tssdk.elma/i.test(textContent): subsectionTitle("TS SDK"); + break; + case /exchange.elma/i.test(textContent): subsectionTitle("ELMA365 Exchange"); + break; // Английская версия + case /en\/help/i.test(textContent): subsectionTitle("Help"); + break; // rpa + case /rpa.ai\/ru/i.test(textContent): subsectionTitle("RPA"); + break; // ELMA4 + case /ru\/help4\/ecm/i.test(textContent): subsectionTitle("ECM+"); + break; + case /ru\/help4\/crm/i.test(textContent): subsectionTitle("CRM+"); + break; + case /ru\/help4\/projects/i.test(textContent): subsectionTitle("Проекты"); + break; + case /elma-bpm.ru\/help4/i.test(textContent): subsectionTitle("BPM"); + break; + case /ru\/KB/i.test(textContent) || /elma-bpm.ru\/…help/i.test(textContent) || /help/i.test(textContent): subsectionTitle("База знаний"); + break; } @@ -1229,8 +1753,11 @@ $(window).on("load", () => { $(".subsection-title")[index].textContent = text; } else { var newBlockDiv = document.createElement("div"); + newBlockDiv.classList.add("subsection-title"); + newBlockDiv.textContent = text; + $(".b-serp-item__title")[index].prepend(newBlockDiv); } } @@ -1248,16 +1775,20 @@ $(window).on("load", () => { if ($("tr td.b-head__r .b-head__found")) { var intervalTimer = setInterval(() => { replace(); + addElementSubsection(); }, 200); // через 3 минуты интервал останавливается (время взято примерно, чтобы успело все прогрузиться) + setTimeout(() => { clearInterval(intervalTimer); + // }, 180000); }, 10000); } else { replace(); + addElementSubsection(); } }); @@ -1266,25 +1797,41 @@ $(window).on("load", () => { const leadhandler = "https://web.s-elma365.ru"; var rootNode = document.createElement("div"); + document.body.appendChild(rootNode); + var typo = new TypoReporter( { formId: "1FAIpQLSfXEIXAFoOiHgetf0reIjWrOAw6V7KCZrhAv8VVD6WL7Rs46g", // required, see previous step // Optional example stuff below + locale: getLocale(), // optional language, defaults to 'en' + // translations: { // optinal object with translated strings + // fr: { + // // see source code for keys to translate + // }, + // ru: { + // + // } + // }, + offset: 100, // amount of context text to grab from before and after the selection, defaults to 50 + endpointUrl: leadhandler + "/api/baglist/", // optional, defaults to Google Forms + snippetFieldName: "typo", // optional, if using custom form + commentFieldName: "comment", // optional, if using custom form + urlFieldName: "url", // optional, if using custom form }, rootNode @@ -1292,12 +1839,14 @@ var typo = new TypoReporter( $(document).on("focus", ".fill_listener", function () { //console.log("test"); + $(this).parent().addClass("focused"); }); $(document).on("blur", ".fill_listener", function () { $(this).parent().removeClass("focused"); }); + $(document).on("change", ".fill_listener", function () { if ($(this).val().length) { $(this).parent().addClass("filled"); @@ -1309,16 +1858,21 @@ $(document).on("change", ".fill_listener", function () { function feedbackSubmit() { $("#feedback-form").on("submit", function () { var $form = $(this); + var formData = $form.serializeArray().slice(0, -1); + var context = {}; $(formData).each(function (index, obj) { if (obj.name === "useful" && obj.value === "true") { context.other = ""; + context.useful = true; + context.category = [ { code: "", + name: "", }, ]; @@ -1329,11 +1883,14 @@ function feedbackSubmit() { if (obj.name === "other") { context.other = obj.value; } + context.useful = false; + if (obj.name === "category") { context.category = [ { code: obj.value, + name: $form.find('option[value="' + obj.value + '"]').text(), }, ]; @@ -1343,13 +1900,18 @@ function feedbackSubmit() { }); context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1358,6 +1920,7 @@ function feedbackSubmit() { .done(function (response) { return response; }); + return false; }); } @@ -1373,23 +1936,32 @@ $(document).ready(function () { var $form = $(this), textarea = $form.find('textarea[name="help_question"]'), //formData = $form.serializeArray().slice(0, -1), + context = {}; context.other = textarea.val(); + context.category = [ { code: "question", + name: "Задать вопрос", }, ]; + context.produkt = ["6b55aead-f008-42c7-9186-0806c06d4f2c"]; + context.link = window.location.href; + var data = { context, }; + var request = $.ajax({ type: "POST", + url: leadhandler + "/api/feedback/create", + data: JSON.stringify(data), }) .fail(function (response) { @@ -1400,18 +1972,23 @@ $(document).ready(function () { .parent() .find(".question-success") .removeClass("hidden"); + setTimeout(() => { $(".question-xs").attr("style", "display:none;"); + textarea.val(""); }); + setTimeout(() => { $(".question__popup") .parent() .find(".question-success") .addClass("hidden"); + $(".question").removeClass("active"); }, 3000); }); + return false; }); }); @@ -1421,6 +1998,7 @@ function question() { const questionPopup = $(this).parent().find(".question-xs"); questionPopup.attr("style", "display:block;"); + setTimeout(() => { $(this).parent().find('textarea[name="help_question"]').focus(); }, 200); @@ -1428,6 +2006,7 @@ function question() { $(document).mouseup(function (e) { let container = $(".question-xs"); + if (!container.is(e.target) && container.has(e.target).length === 0) { container.attr("style", "display:none;"); } @@ -1439,9 +2018,12 @@ function question() { $(".question-xs").on("submit", function () { $(this).parent().find(".question-success-xs").removeClass("hidden"); + $(this).removeClass("active"); + setTimeout(() => { $(this).parent().find(".question-success-xs").addClass("hidden"); + $(this).addClass("active"); }, 3000); }); @@ -1451,23 +2033,28 @@ question(); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); $(document).click(function (e) { if ($(e.target).closest(".ReportTypo-popup").length != 0) return false; + $(".ReportTypo").fadeOut(100); }); jQuery(function ($) { $(document).mouseup(function (e) { // ������� ����� �� ���-��������� + var div = $("#feedback-form"); // ��� ��������� ID �������� + if ( !div.is(e.target) && // ���� ���� ��� �� �� ������ ����� div.has(e.target).length === 0 ) { // � �� �� ��� �������� ��������� + $(".feedback-form").find("input:checked").removeAttr("checked"); } }); @@ -1475,17 +2062,25 @@ jQuery(function ($) { function feedback() { const yesLabel = document.getElementById("feedback__useful_yes"); + const thxWindow = document.getElementById("feedback__popup_thx"); + const noLabel = document.getElementById("feedback__useful_no"); + const feedbackWhyPopup = document.getElementById("feedback__popup_why"); + const form = document.getElementById("feedback-form"); + const otherInput = document.getElementById("other_reason"); + const otherPopup = document.getElementById("feedback__popup-other"); + const feedbackOtherBtn = document.querySelector(".feedback__other-btn"); const inputs = [ ...document.querySelectorAll('#feedback__popup_why input[type="radio"]'), ]; + const allRadio = inputs.filter((item) => item.id !== "other_reason"); allRadio.forEach((item) => @@ -1504,12 +2099,16 @@ function feedback() { otherInput.addEventListener("change", (e) => { if (e.target.checked) { feedbackWhyPopup.style.display = "none"; + otherPopup.style.display = "block"; + $(".feedback__popup").find('textarea[name="other"]').focus(); feedbackOtherBtn.addEventListener("click", function () { otherPopup.style.display = "none"; + $("#feedback-success-popup").show(); + setTimeout(() => { $("#feedback-success-popup").hide(); }, 3000); @@ -1523,7 +2122,9 @@ function feedback() { if (Boolean(feedbackWhyPopup)) { document.addEventListener("click", (e) => { const target = e.target; + feedbackWhyPopup.style.display = "none"; + thxWindow.style.display = "none"; if (target.matches("#feedback__useful_no")) { @@ -1559,6 +2160,7 @@ $(window).on("load", function () { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }); @@ -1576,6 +2178,7 @@ if (document.querySelector("#side-menu")) { document.querySelectorAll("main article section div")[1] ) { let el = document.querySelectorAll("main article section div")[1]; + el.setAttribute("id", "table-mobile-desktop_size"); } }, 200); @@ -1591,39 +2194,52 @@ if (document.querySelector("#side-menu")) { if (document.getElementsByClassName("accordion-btn__show")) { var showAccordionBtn = document.querySelector(".accordion-btn__show"); + var elementAccordionHide = document.querySelector(".accordion__hide"); + var linearGradient = document.querySelector(".linear-gradient"); + var heightAccordionElem = document.querySelector(".card-stack-50").scrollHeight; var t = false; + showAccordionBtn.addEventListener("click", () => { switch (true) { case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__show"): elementAccordionHide.classList.add("accordion__show"); + elementAccordionHide.style.maxHeight = heightAccordionElem + "px"; + elementAccordionHide.classList.remove("accordion__hide"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__show"); + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__hide"); setTimeout(() => { linearGradient.classList.remove("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Свернуть"; }, 1000); + break; case showAccordionBtn .querySelector(".accordion-btn__text") .classList.contains("arrow__hide"): elementAccordionHide.classList.add("accordion__hide"); + elementAccordionHide.classList.remove("accordion__show"); + elementAccordionHide.style.maxHeight = ""; + showAccordionBtn .querySelector(".accordion-btn__text") .classList.add("arrow__show"); @@ -1632,9 +2248,12 @@ if (document.getElementsByClassName("accordion-btn__show")) { showAccordionBtn .querySelector(".accordion-btn__text") .classList.remove("arrow__hide"); + linearGradient.classList.add("linear-gradient"); + showAccordionBtn.querySelector("p").textContent = "Показать всё"; }, 1000); + break; } }); @@ -1647,6 +2266,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { (function () { if (document.querySelector(".accordion__items")) { var btn = document.querySelectorAll(".accordion__item-question"); + var dehiscentItems = document.querySelectorAll( ".accordion__item-question-answer" ); @@ -1659,8 +2279,11 @@ if (document.getElementsByClassName("accordion-btn__show")) { removeActiveClass(); } else { removeActiveClass(); + this.classList.toggle("accordion__active"); + nextEl.style.maxHeight = nextEl.scrollHeight + "px"; + nextEl.style.marginBottom = "15px"; } }); @@ -1673,6 +2296,7 @@ if (document.getElementsByClassName("accordion-btn__show")) { dehiscentItems.forEach((i) => { i.style.maxHeight = null; + i.style.marginBottom = null; }); } diff --git a/platform/0.96.png b/platform/0.96.png deleted file mode 100644 index 4660509..0000000 Binary files a/platform/0.96.png and /dev/null differ diff --git a/platform/0_2.png b/platform/0_2.png deleted file mode 100644 index e40b9dc..0000000 Binary files a/platform/0_2.png and /dev/null differ diff --git a/platform/1.55.png b/platform/1.55.png deleted file mode 100644 index 8df9f78..0000000 Binary files a/platform/1.55.png and /dev/null differ diff --git a/platform/1.67.png b/platform/1.67.png deleted file mode 100644 index 4c2e202..0000000 Binary files a/platform/1.67.png and /dev/null differ diff --git a/platform/1.77.png b/platform/1.77.png deleted file mode 100644 index 6ad792f..0000000 Binary files a/platform/1.77.png and /dev/null differ diff --git a/platform/1.97.png b/platform/1.97.png deleted file mode 100644 index dbcd5d5..0000000 Binary files a/platform/1.97.png and /dev/null differ diff --git a/platform/2.201.png b/platform/2.201.png deleted file mode 100644 index a30d49e..0000000 Binary files a/platform/2.201.png and /dev/null differ diff --git a/platform/2.202.png b/platform/2.202.png deleted file mode 100644 index 83cd02e..0000000 Binary files a/platform/2.202.png and /dev/null differ diff --git a/platform/2.222.png b/platform/2.222.png deleted file mode 100644 index 3d09883..0000000 Binary files a/platform/2.222.png and /dev/null differ diff --git a/platform/2.23.png b/platform/2.23.png deleted file mode 100644 index bb8beee..0000000 Binary files a/platform/2.23.png and /dev/null differ diff --git a/platform/2023_10.html b/platform/2023_10.html new file mode 100644 index 0000000..60e5d97 --- /dev/null +++ b/platform/2023_10.html @@ -0,0 +1,355 @@ + + + + + 2023.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2023.10

+
+ +
+

2023.10

+
+ +
+
+
+ +
+ +

Below is a list of changes that you can explore right now by activating the BRIX demo version. After November 16, 2023, all changes will become available to our clients in their active companies. Please note that the list may be expanded after the release.

+

 

+

Workspace administrators

+

TEAM-752: Local administration for workspaces has been added. To activate, the feature flag 'useConfigurationAccess' must be enabled.

+

Administrators are assigned in the workspace menu.

+

Restrictions for a workspace administrator:

+
    +
  • No access to the global Administration workspace and management of global entities (such as business processes, interfaces, users, modules, etc.).
  • Unable to administer other workspaces without the corresponding rights.
  • No access to app items and workspace pages if the corresponding rights were not provided.
+

Available features:

+

Workspace administrators can manage all other settings and parameters within their workspace, excluding:

+
    +
  • additional parameters;
  • access settings;
  • API.
+

 

+

 

+

Report type app

+

1. TEAM-17151: The following enhancements have been implemented for the Report type app:

+
    +
  • Added the ability to create fields of the Report type in widgets;
  • When creating a field of the Report type in widgets in modules, the options Input/Output are locked and have the value false;
  • Interface builder: when using a field of the Report type on a form, a link to this report is provided;
  • Autocomplete by report columns added in TSSDK;
  • Fields of the Report type are generated with the 'readonly' modifier;
  • Fields of the Report type provide search and filtering functions, similar to apps.
+

2. TEAM-19803: Similar to apps, an API item has been added to the menu of the Report type page. The API provides one method: "Getting a list of report items".

+

 

+

Authentication via external providers

+

TEAM-20617: In Administration > Security Settings, new features have been added:

+

1. In the Password Policy block, the option to Forbid password recovery has been added. If it is enabled, the Recover Password button is not displayed on the login form.

+

2. A new block has been added: External Authentication Providers. Options in the block:

+
    +
  • allow OAuth2 authentication Select available providers. If providers are not selected, all configured modules are available.
  • default authentication method: Internal (login/password), External (OAuth).
+

 

+

SMS providers

+

1. TEAM-13177: Implemented the ability to add new SMS providers through modules for the standard SMS sending and 2FA block.

+

To implement your own SMS provider, you need to:

+
    +
  1. Create a module.
  2. In the API methods tab, click Edit and go to the Scripts tab.
  3. Implement interfaces:
+

// Data structure for storing the connection check response.
+interface SMSTestConnectionResult {
+    success: boolean;
+    failReason: string;
+}
+ 
+// Data structure for storing the response of sending SMS to a number.
+interface SMSSendError {
+    phone: string;
+    statusCode?: number;
+    statusText?: string;
+}

+

Implement the SMS sending function.

+

async function SMSSendSMS(phones: string[], msg: string): Promise<SMSSendError[]> {
+    // function content
+}

+

 

+

The implemented SMS provider can be used for:

+
    +
  • Two-factor authentication;
  • Authentication via phone number and one-time codes;
  • Send SMS block.
+

 

+

Scripts

+

TEAM-18590: Added a restriction on the maximum size and storage time of data in the script cache: System.cache, Namespace.cache, Application.cache.

+

Set maximum size to 16 MB (same as for storage). If more data is passed, an error appears.

+

Set the maximum cache lifetime.

+

Defaults:

+
    +
  • For on-premises = 180 days
  • For SaaS = 14 days
+
      +
    • If a larger TTL is passed, the smaller one is used.
+
    +
  • Added environment variables in the worker-gateway service (for configuration in on-premises):
+
      +
    • ELMA365_MAX_CACHE_ITEM_SIZE — the maximum size of the value that can be saved in System.cache or Namespace.cache, set in kilobytes, e.g., 1024 corresponds to 1 MB.
    • ELMA365_MAX_STORAGE_ITEM_SIZE — the maximum size of the value that can be saved in System.storage or Namespace.storage, set in kilobytes, e.g., 1024 corresponds to 1 MB.
    • ELMA365_CACHE_ITEM_LIFETIME — the maximum lifetime (TTL) of a value in the cache: System.cache or Namespace.cache, set as 1s (one second), 1h (one hour), etc.
+

 

+

Tables

+

1. TEAM-23: Added a function to the Table widget: Predefined Filter. A new tab has been introduced, allowing you to set filters that are automatically applied when displaying data. You can configure filtering by specific values or values obtained from contextual variables. This provides more accurate and convenient data handling immediately after opening the widget.

+

2. TEAM-5539: Added the ability to link the Table widget to a variable.

+

As a data source for the Table widget, you can now select a variable of the App type (many).

+

Update features:

+
    +
  • The predefined filter will be automatically applied before showing data in the table.
  • User access rights are now considered when displaying data: the table will only show items that the user has access to.
+

 

+

Widgets

+

 

+

1. TEAM-17931: Added a new Rendering finished setting in the widget builder. This allows developers to use the system function onLoad, which is activated after the widget has fully loaded. The function is now integrated into the user interface under the Settings > System functions tab.

+

 

+

2. TEAM-16243: The Associated items widget now allows adding filters available to users.

+

 

+

Launching processes from app forms

+

 

+

1. TEAM-6347: The ability to add multiple Save buttons has been introduced on the creation and editing forms. These buttons can be linked to a process and triggered automatically after saving the form.

+

Key features:

+
    +
  • The existing default Save button cannot be removed;
  • Custom Save buttons can be deleted;
  • Custom Save buttons allow selecting an associated business process;
  • The automatic and manual linking of a business process, created in an app, binds the process to the existing default Save button;
  • Custom Save buttons have the option to validate the required fields;
  • Custom Save buttons have an always display option, if there is access to edit or delete;
  • Custom Save buttons on the editing form have the option Only for selected statuses.
+

 

+

Copying workspaces and apps

+

 

+

TEAM-10461: Previously, copying an entity duplicated its history, leading to confusion and errors in data import and update. In the current update, copying an entity creates a new history to ensure its status as an independent object. Thus, copying a workspace or app now creates a new first entry in history for all structures in the copied namespace.

+

 

+

Data display

+

TEAM-4145: Updated interface:  added a Subtype column in the properties lists. A new feature has been added to all tables where properties are displayed - a Subtype column. This update will allow viewing additional settings of property types for improved management and easier configuration.

+

 

+

Process administration

+

TEAM-10753: In Administration, the Process Monitor and Business Processes pages now include a Module Processes folder. It contains a list of custom modules and their processes.

+

 

+

Task reminders

+

TEAM-20395: We extended the reminder period for tasks in the user profile settings. New periods added: 3 hours 30 minutes, 4 hours, 8 hours, 1 day, 2 days, and 1 week.

+

 

+

Performance reports

+

TEAM-21787: Implemented the ability to delete saved periodic performance reports and report files to clear outdated data.

+

 

+

ECM

+

Approval and sending for information

+

1. TEAM-2039 and TEAM-22958: Added the ability to configure a custom form for tasks in the Approval and Send document/app item activities.

+

2. TEAM-22803: Added the option to select a specific electronic signature provider when setting up Approval and Send document/app item activities. This allows modeling a process with a pre-defined signature provider, which cannot be changed by the user during task execution.

+

Contracts

+

TEAM-18661: Added a bulk action feature for contract items, including editing, deleting, restoring, and starting business processes. The feature is activated in the contract settings.

+

Electronic signature

+

1. TEAM-19782: Enhanced the displayed information about certificates when signing. Now, when selecting a certificate for electronic signing, additional information is displayed, including details about the Certification Authority (CA), certificate location, and its validity period.

+

2. TEAM-20732: In the administration settings, the Electronic Signature module now has an option for Automatic certificate generation. In this case, electronic signature certificates for users within BRIX will be created automatically. This option does not require additional setup, unlike issuing a certificate during a business process.

+

Templates

+

1. TEAM-21246: Added multiple conditions in templates. Logical operators AND and OR allow setting multiple conditions as a single construct. When using OR, it is sufficient for at least one of the conditions to be met.

+

**Example 1**
+{if {$trip.transports_type} = «Личный транспорт» OR {$trip.transports_type} = «Транспорт принимающей стороны»}
+{$business_trip_request.city}
+{end}

+

When using AND, all listed conditions need to be met.

+

**Example 1**
+{if {$item.price} < 5000 AND {$item.isAvailable}}
+- {$item.name}
+{end}

+

Conditions can also be combined using brackets.

+

2. TEAM-21598: Users can now add document templates directly through Administration > Document Templates, even if the solution is locked.

+

Document viewing

+

TEAM-21455: Added the ability to change the orientation of a document during viewing.

+

 

+

BRIX CRM

+

1. TEAM-22815: Added a new widget in CRM: Subscriber activity log.

+
    +
  • Displays customer interactions from latest to earliest.
  • Includes 13 types of actions: Leads, Deals, CRM tasks, and others.
  • Recommended for use in Contacts and Leads apps.
  • On the Deals form, gathers information from all related contacts.
  • Planned update for adding custom activities by the end of 2023.
  • For proper operation, requires to be bound with the widget's contacts. Also,in email settings, automatic binding of contacts with incoming emails is required.
+

2. TEAM-21600 and TEAM-22793: Added a Nurturing stages widget that shows customer readiness to purchase.

+
    +
  • Tracks customer touchpoints to assess their activity.
  • Recommended to be placed on the right panel in Subscribers, Leads, Contacts apps.
  • Ability to set rules for calculating nurturing stage.
  • Added feature for recalculating the nurturing stage based on new rules.
+

3. TEAM-22023 and TEAM-22209: CRM now has a Hierarchy widget, allowing setting relationships between items and displaying them in tree or table form.

+
    +
  • Customizable composition of displayed properties.
  • Supports up to 100 levels of nesting.
  • Suitable for working with hierarchies of contractors or contacts.
  • In the Companies app, Parent company and Subsidiaries fields added for creating hierarchical structures.
+

4. TEAM-22492: Improved contact search in CRM. When filling the Contact field in CRM tasks, you can now use advanced search. Here is how it works:

+
    +
  • When you start typing in the search field, only those contacts already linked to the company associated with the deal will be shown.
  • If no contacts are linked to the company, you can quickly find the required contact among all records in the directory using the Search by parameters filter.
+

5. TEAM-22652: When creating a Email Sent activity, you can now save a link to the email in the activity card.

+

6. TEAM-19663: Added a checkbox to the App item status widget settings: Forbid to edit pipeline.

+

7. TEAM-21295: Added user identifier in the Sales manager dashboard.

+

 

+

BRIX Service

+

1. TEAM-20675: For email, added the ability to create sessions for multiple users. Implemented through the send message block in the business process. When setting up the block with email as the communication channel, you can now specify additional recipients. Such a session remains open until closed by the operator. By default, the operator is the user who initiated the process, unless it is a system account. If the message is sent by the system, the session will be available in the general queue for operators.

+

 

+

2. TEAM-20677: Added channel filtering in live chat reports. Now you can filter data by the channel of incoming messages. This is convenient when you need to evaluate the team's work in different messengers, like email or Telegram. The feature will help understand the dynamics of requests and optimize the workload distribution among teams.

+

 

+

3. TEAM-21191: Added the ability to automatically send messages to customers when creating new sessions. This ensures that clients receive confirmation of message delivery before the operator joins the dialogue. In case of an error in sending the auto-reply, another attempt will be made after 15 seconds. If the retry is also unsuccessful, a corresponding system message about the malfunction will be displayed.

+

 

+

BRIX Projects

+

1. TEAM-17138: Improved the import of projects from MS Project. This update fixes the previously occurring error 500 and ensures accurate preservation of task hierarchy according to your original project plan in MS Project.

+

Update details:

+
    +
  • Fixed an error that caused a failure when importing multi-level projects.
  • Implemented the creation of stage tasks with accurate adherence to levels of nesting.
  • Now complex project plans can be easily imported, maintaining the entire structure and detail of tasks.
+

2. TEAM-17212: Added a toolbar for ease of working with the project plan in view mode. Project managers and participants can now adjust the scale, apply filters, and access settings directly from the Project Plan widget.

+

Updates include:

+
    +
  • Icons for collapsing and expanding tasks.
  • Scale control elements.
  • Filters for easy search.
  • Access to settings without auto-planning functions.
  • Removed the Edit button for users without rights to change the plan.
  • Clicking on the widget title navigates to the plan view page.
  • Ability to mark tasks as completed and update their completion status.
+

3. TEAM-18911: Updated the Project Plan Item form.

+
    +
  • Removed the Object activity stream widget from the plan item to simplify communications.
  • Users can now leave comments exclusively in project tasks of published plans.
  • Migration conducted for a stable transition to the updated system for existing clients.
+

4. TEAM-19941: Added the Resources, Resource Groups, and Workload apps to the Projects section. On the project plan item edit form, a Resources table has been added to allow for the reservation of resources for project tasks.

+

5. TEAM-20131: Implemented automatic scrolling to the current date in the Gantt chart widget when opening a project plan. If the current date is not within the range of dates displayed on the timeline, the timeline automatically scrolls either to the beginning or the end of the period, depending on whether the period is before or after the current date.

+

6. TEAM-21101: The performance forecast request form now allows sorting by columns. This feature enables organizing tasks in ascending or descending order, facilitating the management and analysis of a large number of tasks in the calendar plan. The improvement was implemented to simplify working with tables containing many tasks, making the selection process more intuitive and less time-consuming.

+

7. TEAM-22078: Added new fields to the Project plan Item.

+
    +
  • Added two non-system fields: Expenses (estimate) and Expenses (actual).
  • Fields displayed in the sidebar on all forms of the plan item.
  • Hidden on the view form if not filled.
+

These fields can be used to create and analyze expense charts, improving financial planning and control over the project budget. Examples of charts and additional tools for clients will be available through the BRIX Store.

+

8. TEAM-22155: Implemented the function of automatic adjustment of task dates when copying a project from a template. Now the start and end dates of tasks are adapted according to the project start date, maintaining the original time intervals between tasks. This update simplifies planning by eliminating the need to manually adjust each date in the new project.

+

 

+

Bugs fixed

+
    +
  1. TEAM-6655: Previously, only one file could be sent for approval in Diadoc, now multiple files can be sent.
  2. TEAM-11074: Fixed an issue with completing tasks created in business processes of custom modules.
  3. TEAM-11566: Fixed an error that prevented opening information tasks.
  4. TEAM-13070: Unified page names in the Administration workspace for email settings.
  5. TEAM-13130: Restored the ability to add the Modal window content widget after its deletion.
  6. TEAM-14169: Fixed incorrect display of licenses for external users of business solutions.
  7. TEAM-15720: Fixed the display of the Contact Sales Rep button in the Google browser.
  8. TEAM-16217: Excluded the selection of variables when using the system process for plan approval.
  9. TEAM-17468: Improved the security of user password storage in AD integration settings using AES encryption.
  10. TEAM-18544: Fixed errors in selecting files from the Files workspace.
  11. TEAM-19357: Solved the issue with adding a user to a trial version when the phone number is already in use.
  12. TEAM-19412: Fixed an issue with linking live chats to clients, maintaining the link only with the specified copy when writing from email.
  13. TEAM-19714: Fixed synchronization errors of app items with contracts. Previously, items created in source apps were not displayed in the corresponding contracts. Attempts to delete and restore the source led to errors.
  14. TEAM-20144: Fixed an error that prevented the deletion of an email address in live chat settings.
  15. TEAM-20319: Resolved a conflict of forms during import.
  16. TEAM-20438: Fixed the issue with assigning information tasks.
  17. TEAM-20540: Changes in app forms are now updated immediately after saving.
  18. TEAM-20558: Solved the problem with filtering by an App type field when using the “down” key.
  19. TEAM-20583: Fixed an error in deleting widgets in the second column on the main page.
  20. TEAM-20728: Solved the issue with disappearing search fields when reopening filters.
  21. TEAM-20763: Corrected the highlighting error of the source when added through a new app.
  22. TEAM-20764: Fixed an error in navigating through the title on the contract page.
  23. TEAM-20924: Eliminated the "A widget with this code already exists" error when editing the main page.
  24. TEAM-20961 and TEAM-20996: Fixed errors related to the deletion of filters and resetting of user settings after updating a workspace or solution.
  25. TEAM-21006: Resolved an issue with access to information tasks for user groups. The problem was related to the fact that the information or approval object file was deleted after the process started or was inaccessible (insufficient rights). Added process interruption in case of error. Transition conditions are executed if set. These changes only apply to files.
  26. TEAM-21194: Fixed an error with uploading files to app documents.
  27. TEAM-21220: Resolved an error in processes when opening a custom task form.
  28. TEAM-21302: Solved the issue with loading PDF document previews.
  29. TEAM-21433: Corrected a notification in the calendar.
  30. TEAM-21435: Eliminated a problem with sending messages with links in live chats through the WhatsApp messenger.
  31. TEAM-21488: Fixed the escaping of column names in the code when building reports.
  32. TEAM-21496: The 'Restart' function in the process monitor now correctly updates the process version.
  33. TEAM-21588: Resolved an issue where field mandatory conditions did not work with more than two widgets on a form.
  34. TEAM-21633: Fixed inheritance of subordinate rights by a manager.
  35. TEAM-21653: Restored forms and their scripts when restoring a business process version.
  36. TEAM-21738: Corrected the incorrect text "Required field" under the Phone number field type.
  37. TEAM-21780: Added an error notification when inviting a user with an already used email.
  38. TEAM-21837: Corrected the incorrect response when an HTTP method implementation is missing in API methods.
  39. TEAM-21907: Added the ability to request a code for incorrect phone number entries.
  40. TEAM-21915: Fixed the issue of deleting phone numbers when registering a portal user.
  41. TEAM-21919: Solved the problem with viewing all active users.
  42. TEAM-21940: Corrected a search file error with symbols ( ) in search parameters by name.
  43. TEAM-10967: Filtering an app through setFilter in a table now works correctly.
  44. TEAM-22033: Fixed an error that prevented the process monitor page from opening in full-screen mode.
  45. TEAM-22093: Resolved the 'need logout' error when downloading file versions.
  46. TEAM-22116: Fixed an export error of the portal during configuration export.
  47. TEAM-22149: Resolved an error in the Chart widget when selecting a measurement with a nested property of the app.
  48. TEAM-22157: Fixed an issue where the task name was displayed as the process name.
  49. TEAM-22240: Improved the portal export mechanism. Now, portals that are disabled are excluded from the export package. Enhanced the process of checking the portal status before including it in the export to ensure accuracy and currency of data in the manifest.
  50. TEAM-22315: The System.directories.getFiles() method now returns an empty set if there are no files in the directory.
  51. TEAM-22318: Added a dependency check on reports when exporting a page.
  52. TEAM-22328: Added an option to configure notifications of new tasks created in the process in the Create and Edit App Item blocks. This feature is relevant when a manual method is selected for working with the block.
  53. TEAM-22340: Improved the search for app items by the Money field type.
  54. TEAM-22386: Solved the problem of only loading the first 50 contracts when displayed as tiles.
  55. TEAM-22404: Corrected the onInit function after editing an element.
  56. TEAM-22428: Fixed an error in the Arbitrary app field property. Inconsistency was identified in the behavior of the Arbitrary app field when created with a single value. In PostgreSQL for such a field, the property array incorrectly sets to false, whereas for regular app in a similar situation, this property sets to true.
  57. TEAM-22433: The issue with the order of adding items in the Arbitrary app with multiple values was corrected. Now new items are correctly added to the end of the list, providing more intuitive and convenient data management.
  58. TEAM-22480: Eliminated the possibility of editing a process by a second user.
  59. TEAM-22552: Fixed an issue that prevented opening unpublished processes at the company and section level after changing the language.
  60. TEAM-22560: Resolved the issue with displaying the session name in live chats on mobile devices.
  61. TEAM-22561: Fixed an issue with sending messages in live chats on mobile devices.
  62. TEAM-22572: Resolved a problem in linking the Arbitrary app field type with other fields. The fix allows the Arbitrary app field (Field "A") to be correctly linked with a specific app (Field "B"). Now, if field "A" is linked to field "B" and has an "Output" setting, then field "A" will be typed with the value of field "B". This means that when selecting a value for field "A", the user will only have access to the values of field "B".
  63. TEAM-22594: Fixed an error in transferring funnel visibility settings to other companies.
  64. TEAM-22678: Eliminated an internal error (500) when working with the Alytics module.
  65. TEAM-22778: Corrected an export error in the calendar with external participants. The calendar now successfully synchronizes with external calendar apps, including all scheduled events with external participants.
  66. TEAM-22780: Solved the problem of downloading files with Cyrillic names in AWS s3.
  67. TEAM-22781: Fixed an error in processing Money type fields related to incorrect currency display. Implemented checks for creating and editing Money fields in different contexts (apps, processes, parameters, widgets). Specifically checked the case with an empty currency in Money field settings, including editing field metadata in the database. Scripts related to changing currency in field settings and displaying the default currency depending on the company's locale settings were tested.
  68. TEAM-22839: Corrected an error in the getPermissions() method.
  69. TEAM-22895: In version 2023.9, an error was found in the Project Plan widget, where the timeline was not displayed on app forms on old platforms after a system update, despite the true value set for this option in the form builder. As a result of fixing this error, the functionality of displaying the timeline has been restored, and it now correctly appears on app forms according to settings made in the form builder.
  70. TEAM-22901: Fixed an error in displaying the content of the widget in the navigator.
  71. TEAM-22905: Corrected an error that occurred when attempting to reply to an email into which an image had been pasted using CTRL+V. Previously, attempting to send such an email resulted in an error displayed in the har-logs, making it impossible to send.
  72. TEAM-22945: Resolved a problem with text formatting when communicating with a bot in live chats.
  73. TEAM-22948: The Gantt chart widget now adapts in width when resizing the project view form.
  74. TEAM-22953: The Control field on the Project Plan Item form is displayed correctly.
  75. TEAM-22964: Fixed updating the timeline length in the Gantt Chart widget.
  76. TEAM-23139: Resolved an error when publishing a process with the Create Package block.
  77. TEAM-23149: Fixed a problem with displaying status and approvers when viewing a document package.
  78. TEAM-23276: Resolved an error in the process of registering external users on the portal when the addUserWithoutConfirmation function was called for a phone number already existing in the system. Previously, when trying to register such users, a non-informative error "phone-already-exists" occurred, even if the phone field was empty. After the fix, in case of a conflict with OAuth2 data, a clear error with code 409 and text {"code":"oauth2-already-exists"} is now returned. This update simplifies the diagnosis of issues related to user registration and helps system administrators more effectively manage the authentication process.
  79. TEAM-23295: Fixed a bug in editing in the Gantt widget in view mode. Editing fields is no longer available in view mode.
  80. TEAM-23355: Improved access at the level of app items for the User (multiple) app property type
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2023_10_op.html b/platform/2023_10_op.html new file mode 100644 index 0000000..8c42238 --- /dev/null +++ b/platform/2023_10_op.html @@ -0,0 +1,195 @@ + + + + + 2023.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2023.10

+
+ +
+

2023.10

+
+ +
+
+
+ +
+ +

BRIX On-Premises 2023.10 includes all the BRIX SaaS 2023.10 updates, as well as the following changes:

+

 

+

1. Updated licensing system: The new licensing system aims to make license protection more reliable while meeting the security service requirements. This update is only for the On-premises edition.

+

 

+
    +
  1. For users, activation procedures and the interface remain unchanged.
  2. Machine data has been replaced with infrastructure data.
+
      +
    • During infrastructure setup, it's recommended to use a trial key, as it doesn't require platform reactivation when reconfiguring the infrastructure. The maximum activation period for a trial key is one month.
    • For commercial use, a commercial key is recommended. Note that infrastructure reconfiguration might require platform reactivation.
+
    +
  1. Activation keys now are valid for 15 days from the date of generation.
  2. Node activation for the Enterprise edition is no longer required. Any node can perform the license check.
  3. Removed the option "Show Cluster Servers" in the Administration > License Management.
  4. Clients updating to version 2023.10 from earlier versions will see a message in Administration > License Management about the need to update the activation key.
+
      +
    • The key must be updated before upgrading the platform to version 2024.4, as the old licensing system will no longer be supported.
    • Only the platform needs reactivation; system and business solutions do not.
+

2. Added the option to choose between OnlyOffice and R7 Office editions during the installation of BRIX add-ons.

+

3. Updated the configuration method of the BRIX platform for installing custom microservices.

+

4. Added two add-ons (Addons) for BRIX Enterprise: Loki for log collection and Tempo for trace collection. Details on installation, configuration, and use will soon be available in the help section.

+

5. Updated the Monitoring addon (Prometheus + Grafana): Added several BRIX application dashboards, improved the dashboard delivery system for installing multiple BRIX instances in a single Kubernetes cluster.

+

6. To monitor all BRIX instances in a cluster, one Monitoring, one Loki, and one Tempo will be required. More details can be found in the help guide at https://brix365.com/en/help/install-monitoring-tools.html.

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_10.html b/platform/2024_10.html new file mode 100644 index 0000000..57ca914 --- /dev/null +++ b/platform/2024_10.html @@ -0,0 +1,293 @@ + + + + + 2024.10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.10

+
+ +
+

2024.10

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After November 11, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

Tasks

+

TEAM-30613 When opening a completed task via Tasks > All Tasks, users without administrator permissions now see the locked form of the task as it looked when it was executed. Previously, the process monitor was opened instead, giving access to information on all tasks and process context, including the ability to change data.

+

Calendar

+

TEAM-27125 Now you can bind the business calendar to a user so that tasks are assigned and executed only during the users working hours. If the calendar is not bound, the tasks are assigned according to the default schedule. Only one calendar can be bound to one user.

+

Calendar binding is available in Administration > Users > +User (invitation window). A drop-down list was added for selecting a calendar.

+

Also added a modal window for managing calendars:

+
    +
  • For user: available to view the current calendar and scheduled changes.
  • For administrator: the ability to change the current calendar, add and edit planned changes with an indication of the effective date.
+

Performance metrics

+

TEAM-30900 Implemented unconditional performance metrics export into Prometheus external storage. Now when the global.monitoring.lowcode.metricExportEnabled setting is enabled in values-elma365.yaml, metrics are exported even if data collection for a performance report is disabled. This allows you to get real-time BRIX system performance metrics for analysis in Grafana without enabling internal report.

+

Access permissions

+

TEAM-21894 Implemented the ability to configure access rights for nested properties of the App type fields. Administrators now have more flexibility in managing access to items. For example, agency staff can see only the loan products that are available to them based on the access settings for linked apps. The allowCollectionFieldPermissions feature flag is used to activate the ability to configure access rights for nested properties.

+

TS SDK

+
    +
  1. TEAM-29932 The new company field has been added to the System global object in scripts to provide access to the companys information:
+
    +
  • System.company.code is used in scripts to obtain a unique company identifier that remains constant and is not affected by the alias changes.
  • System.company.url provides the base URL of the company, which is useful when forming links or performing queries in the correct company context.
  • System.company.getLanguages() provides a list of available languages in the system, which helps in implementing localization and multi-language support.
+

This update allows scripts to retrieve important company identifiers, which is crucial for implementing multitenant solutions. New properties in System.company provide a secure and convenient way to retrieve company information without having to pass this data in request headers.

+
    +
  1. TEAM-25859 Added the setName() method to TSSDK to change folder name in the folder hierarchy via scripts. It is now possible to programmatically change the folder name, which was not possible before.
+

Document management

+
    +
  1. TEAM-30222 Added a preloader that is displayed when the Signing button is clicked in the Sign block. Now, if certificates take time to load, users see a loading indicator, which eliminates the feeling of the system 'hanging'.
  2. TEAM-29760 In the settings related to document archiving and approval, the approach to selecting fields for approval sheets and lists of informed users has been changed. Inclusion of fields is now used instead of their exclusion. Users manually specify only the displayed fields, which gives full control over the contents of the sheets and prevents new fields from being added automatically without configuration.
  3. TEAM-26235 Now, if office format documents (.doc, .xlsx, etc.) cannot be displayed on the system due to lack of office module licenses (such as OnlyOffice) or unsupported format, the user is shown a notification prompting them to download the file for viewing on their computer. The function is activated when office modules are disabled or the file cannot be converted to .pdf, which helps users to immediately realize that the document is only available for downloading.
  4. TEAM-19116 When importing and exporting apps, workspaces, solutions, and configurations, the step to check variables in document templates has been added. If variable inconsistencies are found in the template, the administrator will see a warning. This avoids errors in templating and variable mapping.
  5. Added thumbnail display for .webp files in file storage. Now when uploading an image in this format, users will see the image preview.
  6. TEAM-2752 Added the ability to paste files from clipboard into the File type field. Users can now directly paste files (including screenshots) using copy and paste, similar to attaching screenshots in the activity stream via Ctrl+V.
+

Supported file types:

+
    +
  • Images: .apng, .avif, .bmp, .gif, .jpg/jpeg, .png, .svg, .tif/tiff, .webp.
  • Documents: .epub, .doc, .docx, .pdf, .rtf, .xls, .xlsx, .ppt, .pptx, .ods, .odp, .odt, .vsd, .xml, .csv, .txt.
  • Archives: .gz, .rar, .7z, .bz, .bz2, .arc, .tar, .zip.
  • Audio files: .cda, .aac, .mid/midi, .mp3, .oga, .wav, .weba.
  • Other: .json.xul.
+

Please note that in Mozilla Firefox, inserting multiple files at once is not supported within the browser: only the first file from the clipboard is inserted.

+
    +
  1. TEAM-30401 Added the ability to create shortcuts to existing app items in the Files workspace. Users can now select a specific item for adding a shortcut or create a new item, if it is allowed by the access settings.
+

Projects

+
    +
  1. In the Gantt Chart widget settings, the Display task numbers option for calendar plan has been added. This makes it easier to work with projects with many tasks and complex hierarchy.
+
    +
  • The numbering is displayed only on the Gantt Chart and does not affect Project plan items and Project tasks.
  • It is configured in the Form Builder in the widget settings via the Display task numbers option (disabled by default).
  • Numbering is not taken into account during export and import, as the system automatically assigns numbers during import according to its own rules.
+

The configuration is saved for each project separately, making it easier to navigate through the tasks in the Gantt chart.

+
    +
  1. TEAM-18740 Added ability to hide completed tasks in the Gantt Chart widget. This allows you to display only current tasks and reduce the amount of information on the screen.
  2. TEAM-30813 Added the ability to move tasks on the Gantt chart to the nearest day, regardless of the scale selected (week, month, year). This allows you to accurately place tasks on the correct day on the timeline, without automatically rounding to the beginning or end of the week, month, or year.
  3. TEAM-30683 A new scaling level, Quarter, has been added to the Gantt Chart widget. Users can now scale the view by quarter, which adds additional flexibility when planning projects.
+

Service

+
    +
  1. TEAM-3295 Added sound notification settings block for operators in Administration > Live Chats Settings. Now you can select sounds for notifications about new sessions and new messages.
+
    +
  1. TEAM-29908 Added global setting to enable or disable manual reassignment of sessions to operators with the Offline status.
  2. TEAM-30773 Fixed validation in Livechat for authorization fields (phone, name, email). Now:
+
    +
  • Numbers, brackets, +, - and automatic country selection are allowed for phone.
  • English letters, numbers, @, _, ., +, - are allowed for email, special characters are forbidden.
+
    +
  1. TEAM-30882 Updated the component for uploading files to sessions, added an upload progress bar, making the process more user-friendly.
+

Activity stream

+
    +
  1. TEAM-6618 Added the ability to merge activity streams from multiple apps in the Object-based activity stream widget. You can now specify multiple linked activity streams in the settings to combine messages from different linked apps. This allows, for example, the Requests app activity stream to display messages from related Tasks and Subtasks apps. Backward compatibility with current settings is kept.
  2. Now, if there are unread messages, when opening an object, only they and their associated comments are displayed. Sorting by date will be kept. Added buttons for loading additional messages:
+
    +
  • Show more: loads 10 more unread messages.
  • Show All Messages: displays the entire activity stream if there are less than 10 or no unread messages.
+

When there are no unread messages, the activity stream is fully displayed.

+

This behavior applies only on the object page and does not affect the Activity stream widget in the app item page.

+

Widgets

+

TEAM-28358 Added the ability to customize sidebar styles in the Modal Window widget. Now the HTML sidebar styles parameter is available in the widget settings, which allows you to customize the width and design of the sidebar for each application separately.

+

Table data type

+

TEAM-18231 Added sorting for columns of the Date/Time type in tables.

+

Iframe support

+

TEAM-28998 Implemented the ability to open BRIX within an iframe on third-party domains with authentication support. Apps from external systems can now be integrated via iframe, providing authorization by one-time JWT token and secure data transfer between domains.

+

Bugs fixed

+
    +
  1. TEAM-28907 Fixed an issue with task reassignment for the Create App Item and Edit App Item blocks. Now for tasks that create or modify objects, the option to enable the setting of reassignment to another executor has been added.
+

Previously, users with normal permissions could not reassign the task to other employees if they didnt have permissions to create or edit an item. Now:

+
    +
  • Users can reassign tasks in the block if the Reassign setting is activated.
  • If a user doesnt have enough permissions to perform a task, they will receive a notification about it instead of seeing an error.
+

By default, the reassignment setting is disabled and requires activation when setting up the blocks. #BreakingChangeAlert

+
    +
  1. TEAM-29405 Corrected work of TSSDK methods for the working day schedule.
+

The operation of the getGeneralSettings and saveGeneralSettings methods in the System.productionSchedule object has been updated.

+

The getGeneralSettings method now returns the workday schedule with additional breaks.

+
    +
  • Added a new field additionalBreakTimes, where all breaks except the main lunch break are recorded.
  • Now the structure looks like this:
+

export interface ProductionScheduleGeneralSettings {
+   daySchedule: {
+       workingTime: TimeFromAndTo;
+       lunchTime: TimeFromAndTo;
+       additionalBreakTimes: TimeFromAndTo[];
+   };
+   weekends: {
+       monday: boolean;
+       tuesday: boolean;
+       wednesday: boolean;
+       thursday: boolean;
+       friday: boolean;
+       saturday: boolean;
+       sunday: boolean;
+   };
+}

+

 

+

The saveGeneralSettings method saves work schedule settings, including additional breaks.

+

The methods now only work with the standard workday mode, ignoring custom settings. #BreakingChangeAlert

+
    +
  1. TEAM-29407 Fixed an issue with time differences when using TDatetime, where local computer timezone was affecting the time value when creating TDatetime objects, causing discrepancies between client and server scripts.
+
    +
  • Creating a TDatetime based on a Date object is now not recommended, as it caused time differences depending on the users local timezone.
  • TDatetime constructors have been updated and extended to correctly create objects without using Date.
+

Correct TDatetime creation examples:

+
    +
  1. Create new Datetime(2024, 9 , 1, 0, 0, 0, 0, 0, 0, 0) from transferred arguments.
  2. Create new Datetime(1727082196) from unix transferred in milliseconds.
  3. Create new Datetime('2024-09-13T10:10:10') from the transferred string.
  4. An empty initialization creates the current time: new Datetime().
+

Result:

+
    +
  • All TDatetime objects are now created according to the timezone configured for the scenario.
  • Fixed time discrepancies when using different timezones on the client and server.
+

Important: The timezone for all new TDatetime objects will match the timezone of the script where it is executed. #BreakingChangeAlert

+
    +
  1. TEAM-3016 Fixed an issue that caused a template to be saved immediately when expanding the list of workspaces and apps in Administration > Document Templates. Now the workspaces and apps list opens correctly and the template can be added to the desired app.
  2. TEAM-5318 Fixed an issue in Files > Users that caused sorting by name to not work correctly. Previously, items were swapped but not sorted alphabetically. Now the list is sorted correctly by the displayed username.
  3. TEAM-16312 Fixed an issue in the mobile application with automatic authorization reset for users in the On-Premises edition. The client had to re-enter login and password several times a day, which disrupted the stable operation of the application. The problem was observed when using authorization via Active Directory on iOS devices. There were no such failures on Android. Fixed the behavior of the mobile application for the On-Premises edition. Now authorization is saved correctly, and re-login is not required every time the application is restarted.
  4. TEAM-17055 Fixed the display of the group chat icon in Live Chats. Before the fix, when adding a group chat, a session was created with the first customers avatar icon. After the fix, when adding a group chat, the system icon of the group chat is set.
  5. TEAM-20532 In the printed form settings, when the With electronic signature information option was enabled, the template was not updated and the electronic signature information was missing when printing. This issue has been fixed and the electronic signature information is displayed in the printed form.
  6. TEAM-21483 Fixed an issue in the app signature settings. The issue was occurring with the Configure fields manually option. It was selected even if the settings window was closed without saving changes. Now, if the signature settings are closed without saving, the correct Exclude system default fields option is displayed when reopened.
  7. TEAM-23965 Fixed an issue where very long attribute values like Full Name and Link could be displayed incorrectly in the session sidebar, e.g., out of frame.
  8. TEAM-24632 Fixed an issue in Messages > Chats where loading could get stuck in an infinite loop when quickly scrolling up in a chat with a long message history.
  9. TEAM-25267 Sometimes when refreshing the page where the widget builder was open, a message appeared that the widget was locked by the current user. This issue has been fixed, now the lock is released immediately when the page is closed or refreshed.
  10. TEAM-28076 Fixed an issue in Apps > Items that caused the automatic status update of an item after starting a business process to not be displayed visually for some customers. Now when an item is moved to a new status via a business process, the update is displayed correctly without having to manually refresh the page.
  11. TEAM-28248 Fixed data display in the Chart widget when filtering by creation date. Now, when selecting a date range via calendar, full day data is displayed without the need for manual entry. Previously, when using a calendar, filtering was applied based on the time of selection, which resulted in incomplete results.
  12. TEAM-28529 Fixed an issue with mandatory fields in the Interface designer. Now when a field is no longer mandatory, the "Mandatory Field" warning is also hidden correctly. Previously, the warning message remained visible even after the fields were no longer mandatory, which could mislead users.
  13. TEAM-29486 In the System Apps > External Users workspace, it was previously discovered that the item name was not formed correctly when the Generate name from template option was selected. The title remained as <No title> even though the template was configured using app variables. Also, when the Key Variable option was selected, the title was always generated based on the full name, ignoring the selected template. This behavior has been fixed.
  14. TEAM-29549 Fixed an issue in Modules > Business process actions. Previously there was a problem with data transfer via dynamic bindings for context fields of File and App type in modules. The error occurred when executing an action in a business process activity and caused the process to terminate. Now files and apps are correctly passed through dynamic bindings to CustomActivity without errors.
  15. TEAM-29909 Fixed an issue that occurred when reassigning a task with a Date/Time variable filled in via new Datetime(). Now the reassignment works correctly when using variables of the Date/Time type in the task due date.
  16. TEAM-29930 Fixed display of 1-day task on the Gantt chart in the Project Plan widget. Previously, a task with the same start and end dates was displayed incorrectly, as the colored section was not filled in for the whole day. Now such tasks are correctly displayed as full items on the timeline.
  17. TEAM-29992 Fixed behavior of notifications when canceling document registration. Previously, if a task with an executor as a user group was configured in a business process, and the registration activity was used inside the swimlane, then when the registration was canceled, all users from this group were displayed in the notification. Now only the user who actually canceled the registration is displayed in the notification.
  18. TEAM-30020 Fixed incorrect display of a drop-down list in PhoneCountryComponent. Previously, when selecting a country in the company settings, the drop-down list was displayed with zero width, making it invisible. Now the list is displayed correctly with phone codes and flag icons. Also fixed an issue where the country code field was editable. A manually entered value was not affecting the controllers returned data, but this behavior is now fixed.
+
    +
  1. TEAM-30089 Fixed an issue in Projects > Gantt Chart that caused the progress of phase tasks to not recalculate when dragging tasks between phase and root levels.
  2. TEAM-30126 Fixed an issue in the Projects workspace. Eliminated duplicate messages for overdue tasks. Users are now sent one general notification with separation by project name, and details hidden under a spoiler. If the project manager is also the executor of an overdue task, they receive the notification only as the manager, avoiding duplication.
  3. TEAM-30166 Fixed an issue that caused event handler fields to not load correctly when adding a new event in custom module settings. Now when you go to a tab and click the add button, all fields are displayed correctly and without delay.
  4. TEAM-30238 In the performance report, each module event handler is now displayed separately due to the addition of a unique identifier. Previously, all handlers of one module were grouped into one line, which made it difficult to diagnose their impact on the system. Now the following format for each handler is used:
+

{module_uid}/{handler_uid}/{handler_name}

+

This allows you to track and analyze the performance of each handler in the report in detail.

+
    +
  1. TEAM-30324 Fixed an issue with signature settings when exporting or importing solutions. When updating a solution in the target company, the signature settings were completely cleared: all the groups specified earlier disappeared. Now, when updating a solution, the signature settings are saved correctly. Only those organizational units that do not exist in the target company are excluded.
  2. In the user profile settings, when selecting a time zone, city names consisting of two words were displayed with an underscore instead of a space. Also, the list itself looked complicated, as it included items like “UTC”, “GMT”, and even “UCT”. Now the names of cities are written correctly with a space, and the list is optimized for a more convenient and neat display.
  3. TEAM-30494 Fixed an issue when a user navigated through menu sections, all collapsed dividers were automatically expanded. They now retain their state and remain closed when navigating.
  4. TEAM-30510 When executing scripts in worker-gateways, network errors were occasionally encountered when communicating with the worker-gateway, resulting in process execution failures. Errors like “ECONNREFUSED” and 502, 503, 504 statuses caused scripts to abort and require manual restart. Now retry-policy is implemented: in case of such errors, requests are automatically repeated several times, which significantly increases the stability and reliability of process execution.
  5. TEAM-30611 Fixed an issue where the event-bus service was not distributing subscriptions correctly when the number of pods was changed, causing conflicts and lost events. The re-subscription process is now configured to eliminate conflicts and ensure even distribution of subscriptions.
  6. TEAM-30615 Fixed an issue where attempting to copy the property code in a form context using Ctrl+C, the copying failed if the File List widget was present on the form. Now Ctrl+C copies the property code correctly, and the Alt+D and Alt+F hotkeys only work in the Files workspace.
  7. TEAM-30706 The following issue was found and fixed in the Projects workspace: when using the search bar to search by name, after opening the page of the found item, the search automatically switched to search by task. When closing the page, the string remained in the task search mode, and the user had to refresh the page to return to search by name.
+
    +
  1. TEAM-30712 In the Projects workspace, tasks with the process type were not displayed on the critical path earlier, which could lead to errors in building the schedule. Now, tasks with the process type are correctly displayed on the critical path along with normal tasks, phase tasks, and milestones.
  2. TEAM-30727 In document templates, incorrect link generation occurred previously when using the HYPERLINK function in Excel templates. Instead of displaying the hyperlink correctly, an error string was generated. Now the HYPERLINK method works correctly: you can insert hyperlinks with text representation or display the link as a URL.
  3. TEAM-30729 An issue was found in the Messages > Channels workspace when displaying channel widgets on the page. If you placed two widgets for different channels on the page, both widgets displayed the content of the same channel (lower in order), despite the correct display in the Messages workspace. The issue has been fixed: now widgets display information of their channels correctly.
  4. TEAM-30794 When setting up archiving for Event type apps, a field without a name was displayed. This issue has been fixed: now all fields in the archiving settings are displayed correctly and have their own names.
  5. TEAM-30880 An issue was identified with phone number input in fields with strict validation enabled. The validation would incorrectly trigger, even if the entered number was correct. After the fix, validation is processed correctly for the initial input of the phone number and no more errors occur when changing the phone type.
  6. TEAM-30976 Fixed the following issue in the Projects workspace: when saving custom settings for the Project Plan widget (Gantt chart), the width of the columns was narrowed to a minimum. Custom width changes were not saved when reopening the project.
  7. TEAM-31117 Fixed an issue in the Projects workspace where a project manager without administrator permissions could not publish a calendar with a large number of tasks (more than 2000).
  8. TEAM-31134 In the CRM workspace, tasks created in the system (such as calls, webinars, or meetings) were duplicated on the kanban board when going to the All tab in the systemTasks workspace. This issue has been fixed.
  9. TEAM-31195 When using the hasPermission method for files, the script would terminate with a 500 error. The problem occurred in both client and server scripts, making it impossible to use file access checking correctly. This issue has been fixed.
  10. TEAM-31202 Fixed an issue in template-mapper that caused the service to crash with a panic when trying to restart processes on the server after a node change in Kubernetes. This resulted in inability to correctly execute processes related to template generation and other action blocks.
  11. TEAM-31255 Fixed an issue in version 2024.8 that resulted in incorrect handling of contracts from scripts, namely, modified data from source apps were not returned to contract items. The fix has been added to version 2024.8 and subsequent releases.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_11.html b/platform/2024_11.html new file mode 100644 index 0000000..668336e --- /dev/null +++ b/platform/2024_11.html @@ -0,0 +1,337 @@ + + + + + 2024.11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.11

+
+ +
+

2024.11

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After December 16, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

Processes

+
    +
  1. TEAM-9565 Added search on the process and instance monitor page. You can now search by main and system fields, and use EQL queries.
+

Added display settings for the process hierarchy.

+

In On-Premises, search is available after activating the enableSearchInProcessMonitor feature flag.

+

#BreakingChangeAlert

+
    +
  1. TEAM-26859 The Process Monitor and Business Processes page now displays process instances for free locked modules.
  2. TEAM-31030 Shortened the time for publishing processes. The feature itself has not changed.
  3. TEAM-30454 Scripts are now executed on behalf of a user from the swimlane where the Script activity, script gateway, or business process action (script) is directly placed.
+
    +
  • If there is no executor in the swimlane, the script is executed on behalf of the supervisor.
  • For multiple swimlanes, the script is executed on behalf of one of the executors.
+

#BreakingChangeAlert

+

CRM

+
    +
  1. TEAM-26540 Added the Engagement gateway to the customer journey maps. It is placed after the Email activity and adds several branches to the map depending on user actions:
+
    +
  • Email opened/unopened.
  • Link in the email clicked/not clicked.
+

You can add several gateways like this to a single map.

+
    +
  1. TEAM-31479 Updated the Linked Emails widget. Now the data is displayed in a structured way:
+
    +
  • From, To, Copy.
  • Attached files.
  • Partial content of the email.
+

A transition to the email page for viewing full information was added.

+

API and TS SDK

+
    +
  1. TEAM-27554 Added methods for working with file streams. It is now possible to create a File item from a stream:
+

fileItem.createFromStream(readableStream);

+
    +
  1. TEAM-28479 To public API of app metadata description, we added the return of category options. Data example:
+

"data": {
+          "enumItems": [
+            {
+              "code": "a",
+              "name": "a",
+              "default": false
+            },
+            {
+              "code": "b",
+              "name": "b",
+              "default": true
+            },
+            {
+              "code": "c",
+              "name": "c",
+              "default": false
+            }
+          ]
+        }

+

 

+

Calendars

+
    +
  1. TEAM-28140 Implemented the new Multiple business calendars setting available with the allowMultipleWorkCalendars feature flag.
+

The flag will be enabled by default for the On-Premises edition immediately after the 2024.11 release, and for SaaS the functionality will become available a little later, but also as part of this release.

+

1. It has become possible to separately customize working hours and breaks for each working day.

+

2. The duration of a standard workday has been added to support existing business calendar bindings.

+

3. Work calendar settings are now displayed on the business calendar item.

+

4. Added the ability to bind the business calendar to a user profile.

+

5. Working time calculation methods now take into account scheduled changes in business calendars.

+

6. Added business calendar locking, which is opened in the editing mode.

+

7. Corrected the texts of possible errors when working with business calendars.

+
    +
  1. TEAM-30160 Added a warning in the work calendar settings:
+
    +
  • If a break time is specified earlier than the start or later than the end of the working time, a notification will appear.
  • This schedule cannot be saved.
+

Widget designer

+
    +
  1. TEAM-26431 Added the ability to place the same field on the form multiple times with value synchronization.
+
    +
  • When a value is changed in one place, it is automatically updated in all other places on the form.
  • It works for both editable and read-only fields.
  • It solves the problem of unsynchronized values that previously caused confusion for users.
+

Usage example:

+

A field is displayed on a tab and on the sidebar. When filled on the tab, the value is also updated on the sidebar.

+
    +
  1. TEAM-28484 Added checking for link type (multiple or single) when linking fields in widget settings.
+
    +
  • Fields with different link types cannot be linked now.
  • Multiple fields can only be linked to multiple fields.
  • Fields that cannot be linked are highlighted in gray.
+

Document management

+
    +
  1. TEAM-2646 Added the Details button in the Signatures archive to allow you to view detailed information about the signature and certificate.
  2. TEAM-20329 Implemented support for .avif images.
  3. TEAM-21707 Added support for .tiff and .tif files to the File Preview widget.
  4. TEAM-25392 Added option to select the All users group in App signature settings
  5. TEAM-26117 Added the Error Handling setting for the Approval and Send Document/App Item activities. Added escalation connector with ignore conditions.
  6. TEAM-30433 Added the Registration number field to the Document type apps to search for items by registration number.
  7. TEAM-31218 Added .pdf format selection for the Generate from Template, Generate from File, Insert Watermark, and Convert to PDF activities.
+

Available format choices:

+
    +
  • .pdf1.7.
  • .pdf/a-1a (default for processor blocks).
  • .pdf/a-1b.
+

For scripts:

+
    +
  • Insert Watermark: .pdf/a-1a.
  • Convert to PDF: .pdf/a-1a.
  • Preview and Print form: .pdf1.7.
+
    +
  1. TEAM-31228 Added .docx and .xlsx documents display in the Files workspace when MS Office module is not present.
  2. TEAM-31325 Added warning when there are conditions in escalation connector when validating and publishing a process.
+
    +
  • Conditions in escalation connector are now ignored but not removed.
  • The user receives a notification when conflicting conditions are present.
+

Operation example:

+
    +
  1. Create a process with the Approval activity.
  2. Configure outgoing transitions for the Approval activity with conditions and escalation.
  3. When publishing a process and starting a task with escalation, the transition is performed according to the escalation settings, ignoring conditions.
+

Projects

+
    +
  1. TEAM-27914 Added the Linked project tasks widget to display a list of linked tasks on project task pages.
  2. TEAM-27930 Added the Participants (multiple) field to project tasks. Participants are granted rights to view tasks and are automatically added to the field of the same name when the calendar is published.
  3. TEAM-28241 Improved calendar import:
+
    +
  • Unsupported field types are ignored.
  • Empty critical fields are autofilled with the values: Type = Task, Control = Notify when the task is completed.
+
    +
  1. TEAM-28727 Added the ability to set color schemes for Gantt chart in Project Settings.
  2. TEAM-31039 Notifications to the project activity stream when the Generate from template process starts are disabled by default. Logging can be enabled in the process settings.
  3. TEAM-31094 Auto-scrolling when dragging and dropping tasks has been added to the Gantt chart in project plans.
+

Chats and messages

+
    +
  1. TEAM-15410 Added the ability to forward messages in chats and live chats. Find a message, click Forward, select a chat and send it.
+

Additionally:

+
    +
  • You can add a comment to the forwarded message.
  • The search for forwarding chats starts with three characters.
  • Only 10 most recently active chats are displayed.
  • Forwarding forwarded messages is not yet available.
+
    +
  1. TEAM-28102 Implemented dynamic loading of 10 items when scrolling through chats and #Activity stream objects.
+

Tech support chat is fixed at the bottom of the list when scrolling.

+
    +
  1. TEAM-28604 Expanded reaction options.
+
    +
  • Added new emoji for reactions.
  • Frequently used reactions are displayed separately, above the list.
+
    +
  1. TEAM-30382 The group chat list is now updated without reloading the page after deleting a user.
+

App items display

+
    +
  1. TEAM-28200 Added the Open app item page after creation option, in the Save button settings. It can be enabled for buttons on the create form, opens the item page automatically after saving.
  2. TEAM-29632 Added eager fetching of related item data on the app page when displayed as a table, tiles, or kanban board. In this case, the item page displays the more items text instead of the number of linked objects.
+

Activation requires the eagerLoadAppItemsEnabled feature flag to be enabled.

+
    +
  1. TEAM-30569: Differentiated display settings for the app list for administrators and users. The option to switch between user and global app settings has been added for the administrator. The button is available for Tile, Table, and Board modes and only on the main app page. For users, the Default button is now available, which resets the custom settings for Tiles, Table, and Board to the settings made by the administrator.
+

Modules

+
    +
  1. TEAM-29543 MyDSS module is hidden from the basic edition. If needed, the customers can follow the link from the BRIX Store and enable it.
+

Administration

+

TEAM-26134 Added version number display to the Administration workspace main page.

+

Mobile application

+

TEAM-25899 The new Home page has been added to the company settings in Administration > Company Settings > Mobile app start page.

+

Administrators can now select Home as the start page of the mobile application.

+

External portal

+

TEAM-13060 Added pages 403 and 412 for the External portal.

+

Bugs fixed

+
    +
  1. TEAM-30300 The delete() method has been removed from the available list for DefaultWorkCalendar. It is now unavailable for execution and is excluded from Help because the companys base work calendar should not be deleted.
  2. TEAM-31418 Fixed an issue where when performing a search by field of the Report type in the SD Reports widget on the Service Desk Reports page. It occurred during page initialization and caused a failure when loading data. After the fix, the search runs correctly and the issue no longer occurs.
  3. TEAM-31497 Fixed an issue where a business process was missing from the initial workspace after an export/import within the same company. The issue occurred due to incorrect copying of the process, which also prevented the business process from running when the start button was clicked on the app page.
  4. TEAM-31512 Fixed an issue where the user search bar from the Administration > Users workspace would not disappear when going to Error Monitor.
  5. TEAM-27513 Improved the Await Status activity to take into account possible object replacement during process execution. Previously, the activity froze if a subscription was formed for one object, but in the process it was changed to another object due to a mismatch between their IDs. Now we have implemented correct handling of such situations, including manual changes of an object, changes via scripts, custom extensions and other process activities. The Await Status activity is re-subscribed to the new object, and error handling for empty variable values with the possibility to restore the process, script, custom extensions and other process blocks is also provided.
  6. TEAM-26395 Fixed an issue where a widget or page was not exported if the scripts contained only an interface declaration with no additional code.
  7. TEAM-27578 Fixed an issue where an incorrectly entered password caused incorrect account lockout for an external user and error 412 in the interface. Now when the limit of unsuccessful login attempts is reached, the system correctly locks the user and displays the “Failed to retrieve user data” message.
  8. TEAM-30076 Fixed an issue that caused existing app processes to not be suggested when accessing processes via .fields. The issue occurred after the 2024.7 update and made it difficult to use scripts that access processes via .fields.
  9. TEAM-30230 Fixed an issue that caused the default value for a Yes/No type variable to not be set to false. As a result, when customizing the display of third-party items that depend on the value of this variable, a situation occurred where the variable value remained undefined and the item was not displayed correctly. After the fix, the variable is set to false by default.
  10. TEAM-30693 Fixed an issue that caused a required field of the Money type to pass validation after a value was removed from it. Now when the field is cleared, the system correctly displays the validation error and does not allow you to save or create an item before the field is filled in.
  11. TEAM-31422 The ability to re-import external users that were incorrectly created during the initial import has been added. Such users are now automatically assigned the Data does not match status and are displayed in the import interface for further correction. Additionally, the import operation is now atomic: either all required user entities (account, profile and bindings) are successfully created, or none are created.
  12. TEAM-31503 The issue of a missing warning about unsaved changes when exiting the Event Handler designer has been fixed. Now when the Back button is clicked, if changes were made in the Event Handler and they are not saved, the system correctly displays a warning about possible data loss.
  13. TEAM-31587 Fixed incorrect behavior of event handlers: now they react correctly to changes in publication status (enabling, disabling, de-publishing) without the need to reload the module, including handlers with dynamic filtering.
  14. TEAM-31624 The missing elma365_telemetry_script_execution_duration_milliseconds_bucket metric for script execution time monitoring has been added. Now with the global.monitoring.lowcode.metricExportEnabled parameter enabled, Prometheus displays all telemetry metrics including HTTP requests, SQL requests and script execution.
  15. TEAM-31644 Fixed an issue where the “Namespace is not defined” error occurred when calling an API module method. The issue occurred when trying to access module settings via Namespace.params.data.my_setting.
  16. TEAM-31660 A workspace import issue that occurred when changing the subtype of a property of the Phone type from Main to Multiple has been fixed. Now, when re-importing a workspace, the property settings are correctly updated, and an error like “Unable to update the ... field because the field view settings are different” does not occur anymore.
  17. TEAM-31833 Fixed an issue that caused business process activities from a module called via Imports to fail to work and result in the “TypeError: Cannot read properties of undefined (reading ‘action’)” error.
  18. TEAM-27234 Fixed an issue that caused workspace updates to not add new library files to widgets.
  19. TEAM-31561 Fixed an issue that caused validation to trigger for hidden fields on the create form. Mandatory fields hidden by a condition are now correctly ignored by validation as described in the help. The user can save the item if the field is not displayed on the form and validation does not interfere with the completion of the operation.
  20. TEAM-23162 Fixed an issue where the start and end dates of tasks did not match the plan. The problem occurred due to lack of work calendar accounting, especially for tasks with start and finish dates in previous periods. The export and import functions now include correct accounting of working days and days off in accordance with the working calendar set in the system.
  21. TEAM-23932 Fixed an issue in displaying watermark when signing an app of the Document type. In previous versions, the watermark was applied to both the Document type app and all fields with the File type located on the document page. Now the watermark is applied only to the __file field itself, it is not applied to other fields with the File type.
  22. TEAM-26229 In Projects, the logic of granting additional permissions for a specific user from the Supervisor field has been removed. By default, access rights are set within the app item, for the Supervisor field these are View, Load, Edit. The changes affect only new clients. Settings on the existing companies will be changed.
  23. TEAM-26910 The logic of project tasks execution has been improved. Now, when completing a task, the system checks for any preceding linked tasks that are unfinished (including milestones). If such tasks are found, the following warning message is displayed to the user: Unfinished linked tasks found. Are you sure you want to complete the task?
  24. TEAM-27681 Fixed an issue with the project plan display in the Gantt Chart widget. Now, if a user does not have the access permissions to the Project Task app, they continue to see the Gantt chart and task list on the project view form, but cannot open the view form of a specific task if they do not have access to it.
  25. TEAM-28873 Fixed an issue that caused the file modification date to be updated when editing a project page, even if the file itself was not modified. Now the file modification date is changed only when the file contents are actually updated, and editing a project no longer affects this parameter.
  26. TEAM-28904 Fixed an issue with starting tasks of the Process type linked by the “End-Start” principle. Now, when the previous task is finished, the next task of the Process type is started automatically, taking into account the start date. If the start date is scheduled for the future, the task will start according to the calendar plan; if necessary, the user can force start it from the task view form.
  27. TEAM-30125 Fixed an issue that caused overdue project tasks notifications to occur even if the tasks were not overdue.
  28. TEAM-30444 Incorrect field names and order in the Hierarchical Structure widget have been fixed. New field names and their order are now as follows:
+

1. Root item.

+

2. Field for creating hierarchy.

+

3. Field for linking.

+

4. Associated app items*.

+

5. Fields of associated app to be displayed.

+

6. Show structure without associated app items*.

+
    +
  1. TEAM-30753 Fixed an issue where the item creation button remained available in the contract for users without access permissions. Now:
+

1. The source selection window for item creation does not display apps to which the user does not have permissions.

+

2. The issue of freezing when trying to create an item has been fixed: after the access restriction warning, the endless loading no longer occurs.

+

3. The item creation button is hidden for users without corresponding permissions.

+
    +
  1. TEAM-30823 Added a restriction for selecting a completion date for a Send Document/App Item task. Approval or Send Document/App Item tasks are not created if the completion date is in the past.
  2. TEAM-30865 Fixed the contracts display in the mobile application.
  3. TEAM-31334 The interruption of the approval process when a user is locked out and the Permission inheritance based on org chart subordination option is disabled has been fixed. Now the Approval activity takes into account the organizational chart settings:
+

1. If the approving user is locked, the task is automatically transferred to the supervisor of the locked employee (according to organizational structure).

+

2. The process continues to run and the supervisor is able to approve the task instead of the locked user.

+
    +
  1. TEAM-31829 Fixed styles in the task list table header in the Gantt chart widget.
  2. TEAM-29058 Fixed an issue that allowed adding multiple users to a group of the Role type by editing the user page. Now, if you try to add more than one user to such a group, the system displays a correct warning and prohibits saving changes, keeping the setting that Role can contain only one user or position from the organizational chart.
  3. TEAM-30368 Support for exporting and importing groups for the Add filter option (User type field) has been finalized. Now:
+

1. Groups in property filters are written in the ${namespace}${code} format instead of their id, preventing them from being lost during import.

+

2. Implemented displaying a warning during export if the selected group is not part of the package and is not a system group.

+

3. After import, filters correctly display groups if they are present on the target site.

+

The support is implemented for:

+
    +
  • App properties.
  • Contract properties.
  • Process context.
  • Business process actions context.
  • Module settings.
  • Widget context.
+
    +
  1. TEAM-31155 Fixed an issue that caused the user page not to open when clicking on the users name in the notification about changing the task executor. Now the user page is loaded correctly and the __id is required error no longer occurs.
  2. TEAM-31472 Fixed an issue that caused the counter of unread posts in the activity stream to be reset when reloading page. Now the counter saves the number of unread messages and comments correctly even after page refresh, and the current value is displayed when new messages are received.
  3. TEAM-31555 Fixed an issue in the context menu of the message activity stream. The menu item is now called Hide Process from List for all business process objects. The previous name Do not show tasks in the list was incorrect, which caused confusion.
  4. TEAM-31555 Fixed an issue in the context menu of the message activity stream. The menu item is now called Hide Process from List for all business process objects. The previous name Hide Tasks from List was incorrect, which caused confusion.
  5. TEAM-31766 The ability to edit substitutions via TS SDK has been implemented. The .save() method now works correctly both for updating existing substitutions and for creating new ones via System.replacements.create(). The fix has eliminated an error occurring when trying to save changes in a substitution and ensured stable script execution in client and server scripts.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_4.html b/platform/2024_4.html new file mode 100644 index 0000000..7799083 --- /dev/null +++ b/platform/2024_4.html @@ -0,0 +1,274 @@ + + + + + 2024.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.4

+
+ +
+

2024.4

+
+ +
+
+
+ +
+ +

Below is a list of changes that you can explore right now by activating the BRIX trial version. After May 16, 2024, all changes will be available to our clients in their active companies. Please note that the list may be expanded after the release.

+

Event handler

+

TEAM-26036 A new flag has been added to the event subscription options in scripts:

+

await System.events.subscribe().onAppItemUpdate(Context.fields.app.app, handler, {
+    deduplication: true, // New flag
+}).all();

+

The logic of the flag is as follows:

+
    +
  1. If the flag is enabled, only unique events will be sent to the handler. If buffered > 1, the handler will not trigger until the specified number of unique events accumulates in the buffer. For example, if the same entity is updated multiple times, the event will not fire.
  2. Exception to point 1: When values are specified for debounce along with debounceAsTimer = true, the handler will be called at the period specified in debounce milliseconds, but only unique values will be passed to the handler.
  3. When the flag deduplication = false (the default value), subscriptions will function as they did before.
+

Caching in IndexedDB

+

TEAM-26369 A new, faster caching provider for IndexedDB has been connected. This has improved system performance, especially when loading in a new tab.

+

As a result, after the system update and when working with multiple tabs, you may need to reopen or close the tabs with BRIX to transition them all to the new version. A message about this will appear at the top of the screen in a red banner.

+

FCM protocol (push notifications)

+

TEAM-23746 The Firebase Cloud Messaging service for sending push notifications to mobile devices has changed its interaction protocol.

+

The old protocol will cease to function in June 2024: https://firebase.google.com/docs/cloud-messaging/http-server-ref.

+

Support for the new protocol has been implemented in the system.

+

Document management

+
    +
  1. TEAM-20457 Access to restoring an approval sheet from the archive is now restricted. Only users with editing rights can perform this action.
  2. TEAM-21658 The file version management mechanism in the file storage has been improved. New versions are no longer created when the same file is moved between different items while retaining its ID.
  3. TEAM-24080 Added the ability for each user to determine whether tasks for system processes of sending files and items for information and for approval should be scheduled in the calendar. This feature helps avoid overloading the executor’s calendar with numerous tasks related to frequent approval and review tasks.
  4. TEAM-25055 A link to the file’s folder has been added to the review task. It is displayed in the file information section, providing convenient access to the folder directly from the task, simplifying navigation and document management.
  5. TEAM-25409 Date parameters have been added to the manualRegister and register methods, allowing users to specify the document’s registration date. This change provides users with greater flexibility, which is important for documents requiring backdated registration. This way, users can manage document registration and archiving processes according to specific business requirements.
  6. TEAM-25573 When changing the list of excluded fields, a warning is now shown to the user if the function to start the process on the Actions tab during archiving is activated. This prevents cases where changes in settings could unintentionally block the initiation of necessary business processes.
  7. TEAM-26057 In the file editing mode, a new button has been added that allows users to close the file editing window without returning to the file preview.
+

Web documents

+
    +
  1. TEAM-23719 A new file type called Web Document has been added. Files of this type have the extension .web365. The content of the file is represented by HTML markup.
      +
    • The same operations can be performed on web documents in the system as with regular text files.
    • An integrated editor is used for creating and editing web documents. Web documents can also be uploaded from user devices. Versioning is supported.
    • To create a web document, go to the Files workspace, click the Create button, and select Web Document from the menu that appears.
    • To edit a file, open its preview in the workspace.
    +
  2. TEAM-23720 Added functionality to pin a web document to a folder. The content of the pinned document can be displayed either above or below the folder’s content list.
      +
    • A new item, Link to Web Document, has been added to the folder’s context menu settings. Clicking on it opens a window for pinning the document.
+

Widgets

+

TEAM-23715 A new widget has been added for app forms, displaying a list of folders accessible to the user that contain links to the current app item. The widget is called List of directories with an link to the app. The widget allows users to:

+
    +
  • Navigate to the folder with a link to the app by clicking the folder name in the list.
  • Move and delete links if the user has editing rights for the folder.
  • Add new links.
+

For more compact display (e. g., in a sidebar), you can enable compact link display in the widget settings.

+

CRM

+

TEAM-24897 All CRM settings have been replicated in the Administration workspace for ease of search and initial parameter setup.

+

API

+

TEAM-22773 Implemented API for the Document categorization workspace. Now it is possible to work with Document categorization through the system’s API. The following functions are available:

+
    +
  • Edit a Document categorization folder.
  • Change a folder’s category or office.
  • Retrieve a list of categories and offices.
  • Create a category or office.
  • Create a Document categorization folder.
+

Projects

+
    +
  1. TEAM-24220 Viewing rights for the project folder are now granted to all project participants when the project plan is published.
  2. TEAM-26216 When a task in the Project board widget is moved to the Completed status, the completion progress is automatically set to 100%, just as it is in the Project Tasks app.
  3. TEAM-26956 When a user enters the project plan editing mode, the Gantt chart widget automatically expands to full screen. This provides more space without the need for additional actions and reduces the likelihood of accidentally closing the form by clicking outside the window.
+

Service

+

TEAM-26016 Improved the system’s behavior when assigning a session to the least loaded operator in a group. Now:

+
    +
  • When multiple operators have the same number of sessions but different statuses (online/offline), the first operator with an online status is automatically selected. If all users in the selected group are offline, this rule is not applied.
  • If the user with the least number of sessions is offline, the system moves to the next least loaded user who is be online. If there are no such users, the rule is also skipped.
+

User substitutions

+

It is now possible to create user absences without specifying a substitute user in Administration > Substitutions by selecting the type Inform. The absence is displayed in chat lists, information windows, and on the pages of the Company workspace, and the system automatically fills the Substitute field with the value Absent to maintain functionality.

+

Object-based activity stream

+

A new feature, Object-based activity stream, has been added. It provides a convenient format for viewing messages related to various system objects, such as app items, tasks, and files. To activate it, you need to enable the enableFeedByTargets flag. The activity stream settings are available at both the company level and individually for each user. If the feature is enabled, the content in the Messages workspace will be distributed across three tabs:

+
    +
  • Chats. This tab contains chats and channels.
  • Activity Stream. Displays aggregated messages and associated activity streams.
  • Featured. A list of the user’s starred messages.
+

For each object that a user is subscribed to or mentioned in, there is a list with a separate counter for unread messages. Users can view the full activity stream of the object, comment, send new messages, and manage the visibility of objects in the list using the context menu.

+

Mapping of data from AD to the Employees app

+

A new setting for the Employees app allows the mapping of data from Active Directory (AD). Users can configure the correspondence of AD attributes with fields in the Employees app, including data types such as String, Number, Yes/No switch, and Date/time. For each server, the mapping configuration is performed individually through the AD module in the server settings, where you can add and configure attribute parameters.

+

When importing users, if the functions for automatic creation and updating of employees are activated, the mapped attributes are automatically transferred to the app. Disabling the update function stops this process. Changes in the mapping settings or deletion of parameters in AD may affect the relevance of data in the Employees app.

+

Mapping features include mismatches between data types in AD and the app, which can limit mapping capabilities for certain attributes. For example, it you attempt to write a numeric AD attribute to a String field in the app, data will not be transferred.

+

Apps

+
    +
  1. TEAM-25644 Implemented a 5-second lockout on an app menu item to prevent repeated clicks.
  2. TEAM-25850 Implemented data export and import for the Image type, functioning similarly to the File type.
+

Bugs fixed

+
    +
  1. TEAM-26819 A bug was found that prevented the selection of dynamic segments when creating an email campaign. The issue manifested when trying to select a created dynamic segment on the email campaign creation form and when the email campaign Create button was missing on the dynamic segment viewing page. This error has been fixed.
  2. TEAM-24698 The error that caused some users to not see the Files workspace in Administration has been successfully fixed.
  3. TEAM-25804 An error was found and fixed where clicking on the name of the file version author redirected users to the homepage. Now, clicking on the author correctly triggers a pop-up window with their information, as intended.
  4. TEAM-26001 The problem with incorrect generation of multiple nested tables has been successfully resolved. The bug appeared in the template engine when generating PDFs, where table values were sometimes incorrectly selected due to a parsing error in the conditions.
  5. TEAM-26058 A bug that prevented access to some key menu fields immediately after uploading a file has been successfully fixed. The issue affected context menu items, including Manage Access and Rename, as well as some user interface elements when viewing the file, such as displaying the file name and the Edit button.
  6. TEAM-26064 The error in the execution of the createFromLink() method for HTML files has been found and fixed. The problem occurred when using this method in a script and manifested when attempting to create an HTML file via a link. Corresponding changes have been made to resolve the issue, and the createFromLink() method now correctly handles HTML files without triggering an error.
+
    +
  1. TEAM-26317 Corrected the naming of link copying options in the Files workspace. Previously, users could encounter confusion due to identical names and icons for two different functions: creating a shortcut link for a file and copying a link to download the file. Now, the options are distinguishable: for creating a shortcut link in the context menu, the name has been changed to Create Shortcut and the icon updated, and a +Paste shortcut button has been added for inserting the shortcut into the file list.
  2. TEAM-26318 Changes have been made to the name of an option in the Files workspace. The existing option App in the Create menu could mislead users since it actually created an app item rather than the app itself. The name of this option has been changed to + App Item, which more accurately reflects its functionality and eliminates confusion among users, making the interface easier to understand and use.
  3. TEAM-26332 A bug in watermark settings in documents has been fixed. Previously, when the Display a watermark in preview mode option was enabled, the watermark was incorrectly displayed on the preview of unsigned documents. This update fixes this issue: the watermark is now only visible on documents with signature attributes.
  4. TEAM-26488 A bug related to the non-application of custom style files when the advancedSecurity flag is activated has been discovered and fixed. When this flag was activated and a style file was added in Administration > Theme settings, refreshing the page did not apply the styles, and the API request api/settings/global/theme/custom-style returned a status of 302 instead of the expected 200.
  5. TEAM-26489 The issue with exporting workspaces and solutions containing document templates when the advancedSecurity flag is enabled has been successfully resolved. Previously, when attempting to export a workspace with document templates, the process failed with an error related to the inability to retrieve the file body by its ID, resulting in an internal server error.
  6. TEAM-26179 EQL queries of the form COUNT(FROM [someNs.someApp] WHERE PARENT.[__id] in [someField]) > 0 did not work if the type of the someFields field was App (One). The error has been fixed.
  7. TEAM-26703 If whether a fields should be visible or required was defined using a Yes/No switch variable did not apply the specified settings if the value of the Yes/No switch field was dynamically set by a script. The error has been fixed.
  8. TEAM-5569 Scheduled process execution has been restricted for deleted and inactive licensed apps/workspaces/solutions.
  9. TEAM-19769 Fixed an issue where users with Process Management permissions could not reassign tasks.
+
    +
  1. TEAM-22587 Resolved an issue related to incorrect permissions distribution when launching subprocesses en masse through app items. The bug occurred when permissions for app items were granted to task performers, even if these items were not specified on the task form. Now, permissions are correctly restricted only to those items explicitly mentioned in the task, eliminating unauthorized access.
  2. TEAM-23134 An error preventing the export of status for Report app items to a file has been identified and fixed. This bug caused the Status column to remain empty when attempting to export a report to a file, despite the presence of statuses in the original app.
  3. TEAM-24511 Discovered and fixed a bug causing task forms to hang when a filter by items was used in the app. The issue was that after performing any action on the task form (e.g., clicking the Done or Cancel buttons), the form did not automatically close, requiring the user to manually refresh the page.
  4. TEAM-25177 Discovered and successfully resolved an error related to resetting saved filters in the Tasks workspace. Previously, after opening a task through a set filter, the task list automatically switched back to My tasks, resetting all active filters. This made mass task management difficult and increased the time required to process tasks. Now, filter settings remain saved after returning to the task list.
  5. TEAM-25473 Identified a problem where the error monitor interface was incorrectly displayed, occupying only half of the screen, making it difficult to fully view and analyze error information. The error has been rectified.
  6. TEAM-25594 Fixed an error that occurred when executing users type queries like https://<company>/api/apps/<namespace>/<app>/items/<uuid>/permissions/assign/users in the browser.
  7. TEAM-26819 Discovered and fixed an issue related to the inability to select dynamic segments when creating email campaign in CRM integration modules. Prior to the fix, users could not select dynamic subscriber segments on the email campaign creation form, and there was no button to create an email campaign on the dynamic segment view page. Now, this functionality has been added.
  8. TEAM-24660 In rare cases, the execution schema in scripts was formed incorrectly, resulting in errors like: “Cannot read property *** of undefined”. We have identified possible issues, and now the schema should always be formed correctly.
  9. TEAM-24715 Identified an error where service messages were not delivered to external portal users. Now, system notifications (task assignment notifications, etc.) are sent to portal users’ emails.
  10. TEAM-25299 Sometimes the getTemplate() method did not work in process instance scripts. This behavior has been corrected.
  11. TEAM-25326 Discovered and fixed an error related to the non-functionality of the Imports global constant in a script when debugging a function in a business process. The problem was the inability to access another workspace’s Namespace through Imports in function debugging mode. The bug occurred when the allowScriptImportsDependencies flag was enabled.
+
    +
  1. TEAM-26003 We discovered behavior where in the response to an API request with form-data, the body field was empty, and the bodyBuffer field with an array of bytes was missing. Now, if form-data is passed in the body of the request to the API module, it will automatically be converted into an object of the type FormData. That is, the body field of the input argument request will be of type FormData. Example:
+

const contentType = req.headers ? req.headers["Content-Type"] : null;
+    if (contentType && contentType === "multipart/form-data") {
+        const fd = req.body as FormData;
+        const file = fd.get('file');
+        ...
+    } else {
+        ...
+    }

+
    +
  1. TEAM-26124 In some situations, the script execution service (worker) incorrectly handled disconnections from the queue (RabbitMQ), causing server scripts in the system to hang with a timeout. We have completely updated this part of the service, and now the connection should always be restored correctly.
  2. TEAM-26215 The method /pub/v1/scheme/namespaces/_clients/apps/_companies was returning a 500 error. Now the method executes correctly.
  3. TEAM-26417 The left sidebar in the Administration workspace now always displays for the Performance Report and Low-code CI / CD sections.
  4. TEAM-26674 Sometimes, when starting a process from a script, an error could occur: “TypeError: Converting circular structure to JSON”. This error occurred when a full object was passed in the context of the process.
+

            await Application.processes.gentasksforlead.run({
+                lid: Context.data.lead,
+            }); // <------------ Error 

+

We have extensively reworked the type and data system of the TS SDK, now all classes implement the standard toJSON method which allows them to be serialized using JSON.stringify and transmitted as data in server requests.

+
    +
  1. TEAM-26716 We discovered and fixed a bug that occurred when trying to publish a business process activity with a table containing a column of the Category type marked as input and required.
  2. TEAM-26940 When creating an app with fields of the Users type, subtype One or Several, and setting access rights for editing these fields, the hasPermission method could fail with an “internal error” message if these fields contained null values or were absent from the object model of the app item. The behavior has been corrected.
  3. TEAM-27097 A bug with the TSSDK getLocale() method was discovered and fixed, which occurred when opening a form after publication. An error “Method Not Allowed” appeared when trying to call this method.
  4. TEAM-27671 An error was discovered where tasks were not displayed on the external portal in the My tasks widget after creating a business process with multiple swimlanes. The reason was the incorrect determination of the performer in the External Users swimlane. The problem has been fixed.
  5. TEAM-24967 It was discovered that in the registration cancellation window, the Registration Number field was displayed even when the document had not yet been registered. The bug has been fixed.
  6. TEAM-25261 Improved document display in the mobile application. When viewing a document from a mobile device, the viewing window now has a larger height than before.
  7. TEAM-26035 When creating an app item using the TS SDK, the File field stored with an empty array instead of null. Consequently, when subsequently uploading a file to the app item, the file was treated as newly uploaded rather than existing, resulting in it being assigned a new folder, and the existing one being reset. Now the file folder remains unchanged, meaning it does not automatically disappear from the Files workspace.
  8. TEAM-26059 Minor UI improvements for working with files:
+
    +
  • The Edit button does not disappear when switching to the current version.
  • The window does not close when canceling file deletion.
  • The full-screen mode button works for all formats.
+
    +
  1. TEAM-26075 It was found that the registration date in the widget changed when the registration number was modified. The error has been corrected.
  2. TEAM-26092 Increased stability of the registration task form.
+
    +
  1. TEAM-26142 It was discovered that not all folder permission objects in the hierarchical directory were being exported with the configuration. The issue has been resolved.
  2. TEAM-26526 When sequentially approving with a specified deadline, events were not created in the calendar for the second and subsequent users. The issue has been fixed.
  3. TEAM-26541 Now, the rights to create a file version in an app are granted if the user has access to create or edit the app. Previously, rights to create a version were only granted if the user had rights to create an item in the app.
  4. TEAM-26723 An error was discovered related to incorrect system behavior when a user did not have access to an app item but needed to review it. The issue manifested in tasks not proceeding based on the condition “No access to the app item”. The behavior has been corrected.
  5. TEAM-26730 Notification added when downloading an approval sheet or list of informed users if the user does not have access to one of the attached files.
+
    +
  1. TEAM-26802 Added a notification about the inability to create a copy of a file in an inaccessible folder.
  2. TEAM-26885 A bug was identified where, after deleting a file from the form, attempting to upload the same file again did not result in its upload. No errors were displayed during this process. The issue has been resolved.
  3. TEAM-24987 A check has been added during the project plan publication process to verify the presence of users in the Project Supervisor and Employees who have permission to edit. They are added to the Project Participants field. In previous versions, when publishing a project plan, the value of the Project Participants field changed only according to participation in project tasks.
  4. TEAM-26326 Incorrect notifications were previously displayed when changing estimated dates for project plan items. The issue has been fixed.
  5. TEAM-14968 The mechanism for launching processes from the project calendar plan has been improved. Stability has been increased in the cloud editions of the system. It is now possible to use tasks with the Process type in various combinations and associations with regular tasks.
  6. TEAM-26181 Renamed the Projects page (_project_list_page) to Project register, which more accurately reflects the purpose of the page in the functionality of the workspace.
  7. TEAM-26534 For unpublished project plans, launching a business process from the view forms of tasks with the Process type is no longer possible.
  8. TEAM-25858 A deficiency related to message display in the internal chat has been addressed. Now, if the Operator’s name — Show setting is activated in the live chat settings, the author of system messages will be System. If this setting is turned off, system messages, including those configured in the routing rule, will be displayed under the operator’s name.
  9. TEAM-26190 An error has been fixed where a session was not created in the inbox channel if the email body or attachment exceeded 3 MB. The maximum message body size has now been increased to 16 MB. When embedding images directly into the email text, their maximum size is approximately 12 MB, as base64‑encoded data takes up 33% more space than their original size. The attachment size limit for a message is now only restricted by the mail server settings, typically up to 20 MB.
+
    +
  1. TEAM-26736 Fixed an error that prevented changes from being saved in a copy of the routing rule during its initial editing after creation. Now, when creating a copy of an existing rule, all changes made are correctly saved.
  2. TEAM-27572 Fixed an error causing periodic disconnection of communication channels without apparent reasons.
  3. TEAM-17872 Message sending to channels has been brought in line with chat behavior:
+
    +
  • Instant reaction upon sending.
  • A clock icon is displayed while the message is being sent.
  • If an error occurs, the message will be highlighted in red, and a resend option will be available.
+
    +
  1. TEAM-24693 A bug related to the non-population of the App type field in dependent fields when creating and saving instances has been successfully fixed. The issue occurred when creating app 1 with a dependent app 2 field, which in turn had an App 3 field. When saving app 1 and app 2, the App 3 field was not saved.
  2. TEAM-25367 The bug with adding a portal user with OAuth data on a new platform has been fixed. The issue occurred when attempting to create a user with an already existing email in another company using the addWithoutConfirmation or createWithAuthData methods, resulting in an “email-already-exists” error. According to the system’s logic, the new user should be added without conflicts, despite using the same email in different companies. Now, the user can be added to any company within the same cluster and correctly authenticate using their OAuth data.
  3. TEAM-25812 Fixed an error on the authentication form: previously, if an unauthorized user quickly logged into the system, the page would hang due to the automatic logout function being called. Automatic logout no longer occurs, and the form works correctly.
  4. TEAM-26095 Fixed a bug related to selecting and deleting an organizational structure element in process settings. Previously, the element was not inserted into the field after selection and was not deleted when clicking on the cross icon. Now, the functionality works correctly.
  5. TEAM-26439 Fixed a bug where the modal window did not close after editing an app item. The issue occurred when using a filter and full-text search. Now, the modal window closes correctly.
  6. TEAM-27053 Fixed an error in the version where created events in an Event type app were not always displayed in participants’ calendars. The problem was related to incorrect caching after creating the first event. Now, all events are correctly displayed in participants’ calendars without the need to reload the page.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_4_op.html b/platform/2024_4_op.html new file mode 100644 index 0000000..49a6ed8 --- /dev/null +++ b/platform/2024_4_op.html @@ -0,0 +1,184 @@ + + + + + 2024.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.4

+
+ +
+

2024.4

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.4 includes all updates for BRIX SaaS 2024.4, as well as the following improvements:

+
    +
  1. All delivered Docker images of BRIX starting from this release are protected with digital signatures. To verify the authenticity of the images during installation, you can use the Kyverno verification policy. This can be useful in closed environments after BRIX delivery to a secure perimeter, to ensure that the images have not been altered during transportation. Read more in Signature verification policy for Docker image.
+

We also automatically compile a list of dependencies for the BRIX Application, known as Software Bill of Materials, which allows checking the images against a list of known vulnerabilities (Common Vulnerabilities and Exposures) and make a decision about updating the BRIX version. The SBOM list is available upon request.

+
    +
  1. Updated versions of tools for interacting with DBMS in BRIX Backupper.
  2. Updated packages of BRIXdbs DBMS: PostgreSQL 15, MongoDB 6.0, RabbitMQ 3.13. Relevant for new installations. Upgrading already installed databases is done via dump: removing the old version, installing the new one, and restoring the data. More details: Discontinued PostgreSQL support.
  3. PostgreSQL version check is enabled during BRIX update. Version 11 or higher is required. Reference: Discontinued PostgreSQL support.
  4. Offline installation updated. Versions of the used tools have been increased.
  5. The feature flag enableLowcodeCICD is now enabled by default. It activates the Low‑code CI / CD tool. It is used for exchanging components between companies from different environments.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_5.html b/platform/2024_5.html new file mode 100644 index 0000000..9228805 --- /dev/null +++ b/platform/2024_5.html @@ -0,0 +1,277 @@ + + + + + 2024.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.5

+
+ +
+

2024.5

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX demo version.

+

After June 17, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

 

+

Introducing the #BreakingChangeAlert Tag

+

To improve the update process and enhance your awareness of significant changes, we are introducing a new tag #BreakingChangeAlert. This tag will be used to denote critical changes that may affect the operation of your system.

+

Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

 

+

Reports

+

 

+

1. TEAM-21844 A feature has been added to select a business process in the data source for the report:

+
    +
  • If the data source name is not filled, it is automatically pulled from the collection name;
  • The report columns use the business process context;
  • For filtering report columns, the Search and Sort function must be enabled in the process context;
  • Data export, usage of the report in the Table widget, and visualization of the business process report in the Chart widget are available for reports;
  • The report can be generated considering the access rights to the process context (enabled upon request).
+

 

+

2. TEAM-27568  It is now possible to merge data sources by linking them via fields:

+
    +
  • App with a custom app and vice versa;
  • Identifier and custom app and vice versa.
+

 

+

Scripts

+

 

+

1. TEAM-27099 Server scripts for widgets are now sent to the queue with increased priority.

+

2. TEAM-27677 The version of Node.js for executing server scripts has been updated to v16.20.2 #BreakingChangeAlert

+

 

+

Document management

+

 

+

1. TEAM-26432 A Schedule in calendar tab was added for the Send document/app item actvity. o enable the tab, a time limit must be set.

+

 

+

2. TEAM-26807 To speed up the loading of the Document Categorization workspace, especially with a large number of items, a user profile setting is now available that allows disabling the count of items. This significantly reduces the waiting time when opening the workspace, as detailed item counting is not required for many users.

+

 

+

3. TEAM-26818 The process of creating a new folder in the Files workspace has been made more intuitive and convenient. Users can finish adding a folder by simply clicking anywhere in the interface after entering the name.

+

4. TEAM-27170 The templater now supports the currency CNY.

+

 

+

Projects

+

 

+

1. TEAM-13807 Project subscription management: users have access to an icon for managing their subscription to project events. They can subscribe to or unsubscribe from events.

+

Solutions for automatic subscription in specific cases are provided through business processes or modules using TS SDK methods.

+

 

+

2. TEAM-16461 Enhancement of the Project Documents widget. A button has been added to return to the project folder for easier navigation.

+

 

+

3. TEAM-25493 Automatic generation of the project plan item identifier using uuidv4 has been implemented. In previous system versions, when generating a calendar plan via script, it was necessary to additionally generate an identifier for proper rendering and functioning of the project plan.

+

Now, when saving and publishing the plan, a new UUID v7 is generated in the field _ganttElementId (Gantt Chart Element Identifier) for project plan items.

+

 

+

4. TEAM-26683  The graphical representation of project plan comparisons has been changed.

+

 

+

5. TEAM-26740 A search function has been added to the Project files widget, allowing for searching within files in the project folder.

+

 

+

6. TEAM-27154 Improved resilience of the mechanism for launching business processes from the calendar plan.

+

 

+

7. TEAM-27232  An await function has been added for asynchronous operations in the system process script for template generation.

+

 

+

8. TEAM-27503 The possibility of creating illogical connections between tasks has been eliminated by prohibiting the establishment of more than one connection between two tasks.

+

 

+

Users

+

 

+

1. TEAM-23566 Added the ability to filter users when adding them to system groups such as CRMProjects, and Privileged Users, simplifying the management of users imported from Active Directory.

+

 

+

2. TEAM-27633 When a user is removed from the system, the positions they occupied are automatically freed up. This feature prevents positions from being held by inactive or former company users.

+

 

+

Apps

+

 

+

1. TEAM-26783 Now, in the list of app items in all view modes, if a field of type App (multiple) is extended, only 10 items from this field are displayed.

+

Previously, displaying a large volume of related items in an app took a long time to load the initial page (about 6 seconds), and there was a long load time for related items when scrolling in the column.

+

Now, the list of items loads instantly, and related items are loaded asynchronously..

+

 

+

Widgets

+

 

+

1. TEAM-15467 Custom widgets now allow the creation of Event type fields and the ability to subscribe to them.

+

 

+

2. TEAM-23116 Added a lock on the Save button during validation. Now, when performing validation on forms for creating or editing app items and business process tasks, the save button is locked until the validation function is completed. This prevents repeated clicks and ensures the correct execution of the operation..

+

 

+

3. TEAM-24066  In the widget builder, it is now possible to externalize nested fields for App and User types. Available from the Properties panel under the Template tab. This simplifies the work of low-coders, eliminating the need to manually fetch and map data.

+

 

+

4. TEAM-26786 Implemented event binding when changing values in widget property settings. In the property context setting window in the widget builder, it is now possible to set a function when changing values. Now, it is not necessary to externalize a property in the widget template if you need to handle an event upon change.

+

 

+

Bugs fixed

+
    +
  1. TEAM-14606 Fixed an error with incorrect display of layout in the web form builder. Now, when creating a web form in any app, the layout elements are displayed correctly.
  2. TEAM-19192 It is now possible to remove or disable TelegramBot from a live chat, even if the bot itself has been deleted. Previously, this was not possible due to a 401 error. The error has been fixed, and the functionality now works correctly.
  3. TEAM-22616 Fixed an error that occurred when reassigning a task due to the absence of the end_date field. Now, when reassigning a task, the end_date field is correctly processed, and the 404 error no longer appears.
  4. TEAM-22801 Fixed the display of the task counter in the Tasks > Project Tasks workspace.
  5. TEAM-24603 Fixed a rights issuance error during full substitution in the system. The problem was that when creating a full substitution of employee "A" for employee "B," the latter did not receive the corresponding access to the app, despite the substituted employee having full rights to the app. Now, after the substitution, employee "B" correctly sees the app and has similar access rights as employee "A."
  6. TEAM-24706 Fixed an error that prevented users without administrative rights from opening business processes in the Projects workspace. Previously, when attempting to add a process to a project task, the processes were not displayed due to an error in the access settings.
    +User scenarios for launching a business process from a project's calendar plan have been modified.Only business processes from the Projects section are available for selection, with connections to other sections supported through the Subprocess activity.Options for linking the context of a Project Plan Item and Project Plan are excluded from selection.
  7.  TEAM-25252 Enhanced parsing of public key attributes for digital signatures. The improvement removes unnecessary unreadable characters and increases the stability of operation.
  8. TEAM-25405 An error in form data validation was identified and resolved: an attempt to save form settings resulted in the error "validate field view data: parse error: expected string near offset 9 of 'type'", indicating incorrect handling of strings in the data. This bug has been successfully fixed, and form saving now occurs without errors.
  9. TEAM-25477 Edited the event models of the API module for connecting arbitrary messengers:
+

Before:

+

Events “messageOutcome”, “userInfo”, “markAsRead” contained an empty field “channelId”

+

In events “messageOutcome”, “markAsRead” the field "channelID" has been removed as unnecessary (according to documentation)

+

In the event “userInfo”, the field “channelID” is now filled in accordance with the documentation.

+

 

+

Before:

+

Events in requests from BRIX came with empty “externalMessageId”: “”, “externalUserId”: “”, “externalChatName”: “”,

+

After:

+

Empty fields “externalMessageId”, “externalUserId”, “externalChatName” have been removed from all events in requests from BRIX as unnecessary.

+
    +
  1. TEAM-25673 A bug in the process designer functionality that prevented hiding the control panel was successfully fixed. Previously, pressing the Hide Panel button did not result in the expected outcome — the panel remained in place. Now the function works correctly.
  2. TEAM-26193 Now, creating workspaces with a code starting with "ext_" is prohibited in the system. This precautionary measure is due to module identification often occurring by the "ext_" prefix, and having workspaces with such a starting code could lead to data processing errors. Thus, the change is aimed at enhancing stability and security in handling sections in the system.
  3. TEAM-26467 Fixed a bug due to which the chat history with a client was not displayed until the first message was sent; now, all correspondence loads automatically when the user logs into Livechat.
  4. TEAM-26536 Fixed the display of system fields of processes for building a report on business processes.
  5. TEAM-26646 A bug in the widget designer related to the double invocation of a widget from a module when using the toolbar extension group > extension zone on a custom view form of an app was identified and eliminated. Changes in the platform over the last six months led to a widget being activated twice when opening an app item with the specified extension zone present. This bug has been corrected, and the widget now launches only once, as initially intended.
  6.  TEAM-26812 A bug related to displaying access settings when using groups with long names has been successfully eliminated. Previously, when adding a group with a long name to access settings, part of the interface was hidden off-screen, making some control options inaccessible. Now, horizontal scrolling has been implemented on the access  settings page, allowing full visibility and control of all settings regardless of the length of the group name.
  7. TEAM-26814 A bug in the system that allowed linking a deleted property in the field for linking between apps has been successfully eliminated. Previously, users encountered a situation where, when trying to establish a link between two apps in the context of a business process, a previously deleted property was displayed in the field for linking. Now the system correctly recognizes and displays only current, non-deleted properties, eliminating confusion and potential errors in setting up processes.
  8. TEAM-26855 An error that caused a form to automatically scroll down upon opening if it had certain types of fields placed above a table was corrected. Now the form remains at the initial position, making it more convenient for users and eliminating the need to manually scroll back to the top of the form after opening.
  9. TEAM-26891 An error was corrected where translations from .po files were not loaded when file protection was activated in the On-Premises version. Now, even with file protection enabled, the system correctly loads and applies translations, ensuring compliance with the user-selected locale.
  10. TEAM-27038 A new option in the Approval and Send document/app item block has been added that allows disabling the notification of the start of approval or sending.
  11. TEAM-27044 An error related to the incorrect reset of a file in a module widget was corrected. Previously, under certain conditions, the file was not completely removed from the widget context, causing data duplication when a file was re-added. Now files are correctly removed from the form through the context:
+

async function checkFile(): Promise<void> { if (Context.data.file) { let file =await Context.data.file.fetch() let fileName = file.data.__name if (fileName.includes(‘docx’)) { Context.data.file = undefined } } }

+
    +
  1. TEAM-27219 Fixed an error in the file preview system related to adding new file versions with different extensions. Previously, the preview did not update automatically when the file type changed, requiring manual page refresh for correct display. Now, file previews update instantly without additional user actions, enhancing interaction with documents of various formats.
  2. TEAM-27308 Fixed the disappearance of the search bar in project-type apps.
  3. TEAM-27347 Fixed an error that caused report templates not to display in the template tree of the workspace.
  4. TEAM-27517 Added the ability to view the contents of a column with the Table data type in reports.
  5. TEAM-27526 Fixed an error in the interface of live chat settings in the Administration workspace, where the lower panel with the Save button overlapped part of the settings, making them inaccessible for viewing and modification. Now the panel displays correctly below all options.
  6. TEAM-27555 Corrected the callback function signature example in the Business Process Activity.
+

Replaced:

+

async function callback(req: HTTPRequest): Promise<void>;

+

 

+

with

+

async function callback(req: CallbackRequest): Promise<void>;

+

 

+
    +
  1. TEAM-27559 Fixed a bug that caused the word error to be displayed instead of a list of available live chats in the Messages workspace when pressing ~. Now, the list of available live chats is displayed. If a live chat is clicked, the chat window with that live chat will open, even if there was previously communication in it.
  2. TEAM-27875 An error in the system has been resolved, allowing regular users to correctly work with files attached to widgets, even when the File Protection (Advanced Security) feature is activated. Previously, access to files through widgets was only possible for administrators, causing errors when users without administrative rights executed scripts.
  3. TEAM-28152 Fixed an error in the widget designer that prevented the Field widget from being selected for further configuration. Now users can correctly select and configure this widget.
  4. TEAM-28519 Fixed a bug that could cause Live Chat settings not to be saved.
  5. TEAM-16022 As part of improving the stability of BRIX, an issue with unsuccessfully imported or undeveloped apps has been resolved. Such apps, arising from failed imports, are now automatically excluded from the list available for linking in live chats.
  6. TEAM-26903 Previously, when sending messages to a live chat through the Send a Live Chat Message process activity, line breaks were not considered, which could lead to text formatting distortion. This issue has now been resolved: line breaks are correctly processed, and messages are displayed exactly as sent, maintaining the intended formatting.
  7. TEAM-27004 Improved the display of long text in process diagram blocks during editing. If the text exceeds the block boundaries, it is hidden and displayed when the cursor hovers over the block.
  8. TEAM-27090 Now, when selecting the Kanban or tile display for Projects, the Project type field is removed. This change is aimed at simplifying the project page interface without unnecessary information that was previously displayed by default.
  9. TEAM-27146 As part of system improvements, it is now possible to build reports on business processes taking into account access rights. For this, the system field  __subscribers, previously not available for search, has been modified for use in searches.
  10. TEAM-27191 From the initial configuration of the workspce, the Folders and Filters separator has been removed as an outdated functionality.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_5_op.html b/platform/2024_5_op.html new file mode 100644 index 0000000..a515bb4 --- /dev/null +++ b/platform/2024_5_op.html @@ -0,0 +1,202 @@ + + + + + 2024.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.5

+
+ +
+

2024.5

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.5 includes all updates for BRIX SaaS 2024.5, as well as the following improvements:

+

A significant number of updates have been released, aimed at improving functionality and stability.

+

 

+

Monitoring:

+
    +
  • Updated the Monitoring addon (Prometheus 0.73.2 + Grafana 10.4.1).
  • Upgraded the Loki addon to version 3.0.0, enhancing the performance of the logging system.
  • Updated the Tempo addon to version 2.5.0.
  • Added the Mimir addon for long-term metric storage.
  • Introduced the EventsExporter addon for collecting Kubernetes events into Loki and facilitating viewing in the provided Grafana dashboard.
+

 

+

Security:

+
    +
  • Updated the Cert-Manager certificate manager to 1.14.5.
+

 

+

Service Mesh:

+
    +
  • Updated the Linkerd addon to 2.14.10 for compatibility with Kubernetes up to version 1.30.
  • Added instructions for automatic updating of mTLS certificates for Linkerd through Cert-Manager.
+

 

+

Auto-Scaling:

+
    +
  • Updated the KEDA addon to 2.13.1.
+

 

+

Compatibility:

+
    +
  • Tested the compatibility of BRIX with the newly released RedOS version 8. BRIX On-Premises Standard (KinD), BRIX On-Premises Enterprise (Deckhouse, Vanilla Kubernetes) have been installed and function without issues.
  • Tested compatibility of BRIX Standard, BRIX Enterprise (Deckhouse) with the recent Ubuntu Linux 24.04 release.
+

 

+

Also, in the BRIX 2024.5.0 release, there were several minor corrections in the backup system, deployment system in closed networks, and improved compatibility with new Kubernetes versions.

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_6.html b/platform/2024_6.html new file mode 100644 index 0000000..5f5ee52 --- /dev/null +++ b/platform/2024_6.html @@ -0,0 +1,414 @@ + + + + + 2024.6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.6

+
+ +
+

2024.6

+
+ +
+
+
+ +
+ +

Introduction of the #BreakingChangeAlert tag

+

 

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

 

+

Processes

+

TEAM-12541 A new "read-only" mode for administrators has been added in the process designer. It allows them to view the settings and layout of the process without the ability to edit it. This mode is activated upon request and prevents accidental modifications in critical processes. #BreakingChangeAlert

+

 

+

TEAM-26232 In this platform update, a feature has been added that allows for enlarging the process map window in the monitor or on the task page. Users can now open the map in full-screen mode, which greatly simplifies the analysis and navigation of complex business processes. #BreakingChangeAlert

+

 

+

TEAM-10589 Improved readability of business process maps. Now, the background of connector names in process diagrams is semi-transparent, which facilitates visual perception of the map.

+

 

+

Reports

+

TEAM-27874 A new feature has been added to the Report app type that allows users to flexibly configure the display of columns and filters. A Settings button has been added to the report page, with the option to select Table Settings. Users can specify which columns to display, which to use for filtering, and which field to use for sorting. The list of available columns is set by the administrator when creating the report, and users can adapt their display according to their own needs. #BreakingChangeAlert

+

 

+

TEAM-28134 Reports now have the option to add columns with links to app items. Users can activate this feature by checking the Link to app item box when creating or editing a report. This allows each column associated with the __name field to display a clickable link to directly access the app item from the report. This feature is only available for reports whose data sources are of the App type. #BreakingChangeAlert

+

 

+

CRM

+

TEAM-25985 Added the ability to hide Kanban statuses in the sales pipeline depending on the user's role. Now it is possible to:

+
    +
  • designate statuses visible only to managers, for example, for distributing tasks among performers.
  • manage several types of sales within the same pipeine with both common and individual statuses. This allows all users to see a fully populated Kanban board without gaps, enhancing visual perception and ease of use.
+

 

+

Scripts

+

TEAM-12807 The error handling of the getWorkingTime() method has been improved. Now, if parameters are passed to the method where from is later than to, the script does not crash with an error. Instead, the difference between the dates is calculated regardless of the order. If from is greater than to, the method correctly returns the difference from the greater to the lesser.

+

 

+

TEAM-16205 The script editor has added the Blob interface and the blob() method.

+ +

 

+

TEAM-26574 The OrgunitField in the Permission structure no longer has to be present in the json item. This avoids SQL query errors when the field is absent in the json.

+

For example, previously, when adding access fields to process instances such as "__createdBy", "__currentPerformers", "__subscribers", and the new field "__viewers" (with the "omitempty" flag), the system required all these fields to be present. Now, fields that may not be in each instance do not cause a query error.

+

 

+

TEAM-27334 Added the body field in the fetch request response that contains the result stream of the request.

+

Example of stream handling:

+

async function test() {
+    const res = await fetch("http://my-api.com/list");
+    const reader = res.body.getReader();
+    Context.data.debug = '';
+ 
+    // Read the stream
+    while (true) {
+        const { done, value } = await reader.read();
+ 
+        if (done) {
+            break;
+        }
+        Context.data.debug += value
+    }
+}

+

The new field is available in both client and server scripts.

+

 

+

Mobile app

+

 

+

TEAM-3204 Added the ability to share files from mobile devices to the BRIX mobile app, starting with version 1.4.8. Users can now send files from messengers such as Telegram directly into the BRIX app.

+

 

+

Widgets

+

TEAM-24615 In the widget builder settings, you can now configure how to display the widget when it is added to the template of another widget. The following display modes are available:

+
    +
  • fully (default);
  • fully, but without calling the initialization function;
  • display only the title;
  • a separate widget for the builder mode.
+

This feature is useful for reusable widgets, especially those distributed in BRIX Store solutions. Developers can now more flexibly manage widget display in builder mode, avoiding rendering and initialization issues.

+

 

+

EQL

+

TEAM-26240 In the EQL control, it is now possible to set parameters using the "@" symbol.

+

Example: [__createdBy]=@Author. When setting such a query, additional fields for filtering appear. This feature can be useful for use in saved filters.

+

 

+

Contracts

+

TEAM-18302 Improvements  to Contracts:

+
    +
  1. The title in the source settings window has been changed from Contract Settings to Source Settings.
  2. When all sources are deleted, the correct label No sources for the contract is displayed.
  3. If there is an incomplete mapping of source fields to the contract fields and the recovery form is closed, a confirmation window is displayed with a message about the incomplete mapping.
  4. Sources with incomplete field mapping are saved and displayed in source settings with an error.
+

 

+

TEAM-27251 In the field mapping window of source and contract, to the titles of the Contract and App columns, the names of the contract and the app have been added respectively, separated by a dash.

+

 

+

Projects

+

TEAM-24489 Now, when changing the responsible party in a project task, a notification is sent to the task activity stream.

+

 

+

TEAM-27157 Added color indicators for unstarted processes in the Gantt chart.

+

 

+

ECM

+

TEAM-25769 New access settings have been added to the hierarchical directory, allowing non-administrators to edit folders. It is now possible to separately configure rights for creating, viewing, and editing folders for specified employees.

+

 

+

TEAM-25835 Added the ability to change the names of standard buttons in the signing activity. Works similarly to changing button names in the Task block in the process designer. If names are set for connectors in the diagram, they are used as button texts on the page. Otherwise, default values are used.

+

 

+

Service

+

TEAM-26374 Changed system behavior when opening the Live Chats workspace. Now, when navigating to the workspace, the top app or page automatically opens.

+

 

+

Users

+

TEAM-4548 Added the ability to view and clear occupied positions before sending invitations or saving changes.

+

 

+

TEAM-6705 Implemented the ability to customize the menu for users, saving time searching for the needed workspace. The administrator enables the Allow users to configure the menu feature in Administration > Company Settings. Users can customize their menu by clicking the wrench icon in the sidebar, changing the order of workspaces, and managing their visibility. The Default setting allows resetting individual settings and applying global administrator settings.

+

Activation of the feature flag enableCustomMenu is required.

+

 

+

Data management

+

TEAM-20611 Implemented the ability to work with deleted context variables in apps, business processes, and widgets. Administrators can view, restore, or delete these variables using the Show deleted variables flag. This enhances data control and helps maintain data integrity, preventing errors due to incorrect deletion.

+

 

+

Activity stream

+

TEAM-27260 Pinned the tabs Chats, Activity Stream, Favorites in the Messages workspace, so they remain visible when scrolling through the list of chats or objects.

+

 

+

TEAM-27263 The context menu item Show in the activity stream list has been renamed to Show in object list to more accurately reflect the action's purpose.

+

 

+

Bugs fixed

+

1. TEAM-22473 Fixed the names of chart types in the Chart widget. Previously, the types Advanced Pie and Multiple Pies did not accurately reflect their actual appearance. They are now correctly labeled as Advanced Doughnut and Multiple Doughnuts, accurately reflecting their structure. #BreakingChangeAlert

+

 

+

2. TEAM-24382 Fixed action logging for tasks in the Security Audit widget. Previously, the creation, updating, and completion of tasks were not recorded. Now, all actions with tasks are correctly displayed in the widget, ensuring full transparency of operations. #BreakingChangeAlert

+

 

+

3. TEAM-27793 Fixed an error with transferring a temporary file in a process initiated via API. Previously, despite successful process execution, the File type variable appeared visually empty and displayed as "00000000-0000-0000-0000-000000000000" in the API. Now, files are correctly passed into the context of the launched process, ensuring their availability and use within the process. #BreakingChangeAlert

+

 

+

4. TEAM-27573 A bug was identified related to the json() method for new unsaved app items. If you used the undocumented json() method for app items in scripts, as shown below, note that the behavior for the __createdBy field has changed.

+

const item = Namespace.app.my_app_1.create();
+Context.data.test = JSON.stringify((<any>item).json());

+

 

+

Previously, an empty value in this field was an empty array [], but this is incorrect as the field is singular. Now the empty value will be null. #BreakingChangeAlert

+

 

+

5. TEAM-27358 When sending a large body in an API Method, its content will never be encoded in base64. This behavior was unstable and led to development issues. Now, when working with the body of a request in the API Method script, you can always treat it as the original request. #BreakingChangeAlert

+

 

+

6. TEAM-10053 Fixed an error in the app with incorrect display of nested properties on the process transition button. Previously, fields intended for editing nested properties were concatenated with a delimiter. Now, they are displayed correctly.

+

 

+

7. TEAM-18105 Fixed an issue with displaying the name of a form after copying in processes. Previously, instead of the user-specified name, the form's identifier was displayed. Now the name correctly reflects the user's choice.

+

 

+

8. TEAM-19258 Fixed a debugging issue in processes that prevented adding multiple items. Previously, when selecting an item with a long name, the input field expanded, hiding the magnifying glass icon and blocking the addition of more items. Now, the magnifying glass icon remains accessible, and users can add multiple items without restrictions.

+

 

+

9. TEAM-23951 Fixed an issue in the Tasks workspace where, despite the Not required setting in the Control field, users received control tasks for subtasks.

+

 

+

10. TEAM-24474 Fixed an error in the changeDueDate method, where the comment specified when changing the task completion date was not displayed in the process activity stream.

+

 

+

11. TEAM-25013 Fixed an error in the count() method when using the_searchInstances function. Previously, the count() method incorrectly returned a number of process instances that differed from the actual count calculated through .all().length.

+

 

+

12. TEAM-25258 Fixed an issue with transmitting values to a table from custom activities in business processes. Previously, when using activities in business processes, data was not correctly transmitted to tables despite the proper filling of the context and identical table fields.

+

 

+

13. TEAM-26329 Fixed an issue with incorrect attribution of changes in items after using the Edit app Item activity in business processes. Now, the user is correctly displayed as the author of the changes, not the system.

+

 

+

14. TEAM-26933 Previously, clicking the Help button on the process diagram would navigate on the current browser tab, now the help opens in a new tab.

+

 

+

15. TEAM-27230 Fixed an issue that allowed setting the task completion deadline to a past date. Now, the Complete by field includes a restriction: it is not possible to select a date earlier than the current day.

+

 

+

16. TEAM-27547 Fixed an error in report imports when data sources depend on other solutions. Previously, attempting to import reports without pre-installing dependent solutions resulted in a "collections for datasources: not found" error. Now, the system correctly handles dependencies between solutions, preventing such errors and ensuring successful report imports in any configuration.

+

 

+

17. TEAM-27931 Fixed an error in exporting business process maps in PNG format. Previously, the shapes representing elements on the process map did not appear in the final image. Now, the export is performed correctly, and all elements are visualized as expected.

+

 

+

18. TEAM-28131 Fixed an error that made deleted context variables accessible in business process reports. Now, when creating a report, it is not possible to select deleted context properties as columns, ensuring the accuracy and relevance of the displayed data.

+

 

+

19. TEAM-28466 Fixed an error in reports when using a column aggregated by a Money type field, which led to failures when accessing data through scripts. Previously, attempts to use aggregated money data in scripts resulted in errors related to data format handling.

+

 

+

20. TEAM-28469 Fixed an error in filtering report data in scripts. Previously, attempts to apply a filter to report data through a script resulted in internal errors, hindering the correct filling of the table.

+

 

+

21. TEAM-28005 Fixed an issue where operators were receiving a missed call notification even if one of the operators had already answered the call. Now, if an operator picks up, other operators will not see a missed call notification.

+

 

+

22. TEAM-24838 Added event handling for enabling/disabling a module.

+

 

+

23. TEAM-26340 Previously, methods for obtaining a process template schema did not return the code and namespace of variables of the App type. Now the response includes additional schema data: https://api.brix.com/en/public-api/guides/FieldData/

+

 

+

24. TEAM-26527 A bug was identified where after exporting and importing workspaces, the Imports dependencies in the widget stopped working if the workspace code was changed during import. This led to errors indicating the absence of a workspace with the required code. The problem has been resolved.

+

 

+

25. TEAM-27560 A bug was identified related to passing links to app items in business process action methods via Imports. When passing an array of users as a parameter, a TypeError occurred, indicating an attempt to convert a cyclic structure to JSON. The problem has been fixed.

+

 

+

26. TEAM-27999 A bug was identified and fixed that occurred when creating an external portal from a template. The error manifested as "TypeError: Cannot read properties of undefined (reading 'portal')" both during initialization and at runtime of the portal's main page designer.

+

 

+

27. TEAM-20729 A bug related to the Show on condition setting for Yes/No Switch  variables in widget builder was identified and fixed. When creating an app item and applying this setting, the Yes/No Switch variable was automatically set to No, which did not match the expected behavior. This led to the variable visually appearing as selected, although it remained empty in the app context.

+

 

+

28. TEAM-26261 A bug was identified and fixed related to the display of Input/Output columns in the context of a widget after enabling options to display the widget in the header with buttons on forms or in the sidebar in the low-code widget builder. Upon reopening the widget on the context tab, the Input/Output columns were not displayed, and the options for displaying the widget in the header and sidebar appeared as disabled and inactive, not allowing any changes.

+

 

+

29. TEAM-27514 A bug related to the display of restricted dates on Date fields was identified and fixed. Previously, restricted dates were not marked on the calendar, which could lead users to misunderstand which dates were available for selection.

+

 

+

30. TEAM-27670 A bug related to widget settings in the builder was identified and fixed. The problem was that after creating and binding a system function on the Settings tab, saving changes did not retain the selected method after exiting and re-entering the builder.

+

 

+

31. TEAM-27959 A bug related to ignoring validation errors when the flag Do not display widget with validation errors was enabled has been fixed. If the form setting was enabled, the app item was saved even when validation errors were present.

+

 

+

32. TEAM-25975 An error was identified when adding the library tabulator.min.js to the Code widget, where a problem occurred due to the incorrect MIME type (application/octet-stream), leading to an execution error due to the activated strict MIME type checking.

+

 

+

33. TEAM-27372 An error was identified related to the incorrect update of the File Preview widget's content when changing the selected file. When selecting a new app item and clicking the file preview button, the widget displayed the previously selected file, not considering the new data. A redraw of the view widget has been implemented upon changes in the widget's input data.

+

 

+

34. TEAM-27780 A problem was identified with excessive buttons on the page with a document packet after completing the approval process and their placement on the task form. Users noticed the presence of the Form Settings button, which should not be displayed on this page. An error occurs when attempting to click Form Settings.

+

 

+

35. TEAM-27783 A problem with narrowing the version comparison window after refreshing the page in the Document type app was identified. The error has been fixed.

+

 

+

36. TEAM-27979 In the application for creating a signature in the Kontur provider for identification by SMS, a request for operation confirmation has been added to Kontur. Now, the SMS code for confirmation, which can be transmitted to the Kontur using tssdk, will be sent to the number specified in the Advanced non-qualified e-signature request block.

+

 

+

```javascript
+const result = await signRequest.confirm(smsCode);
+```
+where:
+- `smsCode` - SMS code as string
+- `signRequest` - request for issuing the signature

+

 

+

After which the signature can be issued.

+

 

+

37. TEAM-28071 A bug was identified and fixed in the Approval block related to changing the type of swimlane from dynamic to static during process setup. The error appeared after a user modified the settings of the second swimlane and selected a user group.

+

 

+

38. TEAM-28145 The display of the Sign button on the user form has been corrected after it was removed in the designer and re-added.

+

 

+

39. TEAM-28354 File deletion handling has been added to the system file viewer widget linked to the widget's field.

+

 

+

40. TEAM-23251 The Plan archive field has been hidden from the user interface as it has been removed from the business logic of the workspace.

+

 

+

41. TEAM-24435 If the End date falls on a non-working day, the date is adjusted to the next working day inclusive. This behavior is consistent for both drag-and-drop and inline editing. The duration of the task in days is kept according to the working days within the range. This check only works in the Gantt chart widget; it is not present on the task creation and editing forms.

+

 

+

42. TEAM-26275 The milestone is considered in the overall progress of a stage task. If the milestone is not closed, the stage task will not be completed.

+

 

+

43. TEAM-26344 Previously, notifications about the completion of project tasks were not sent to the manager. This error has been corrected.

+

 

+

44. TEAM-26405 The Project tasks widget now functions correctly, filter values are applied to the widget and are saved; upon reopening the project view form, the saved filter is applied.

+

 

+

45. TEAM-27725 Errors in solution import on various platform versions have been corrected.

+

 

+

46. TEAM-27905 Errors in displaying individual interface elements in the Gantt chart have been corrected.

+

 

+

47. TEAM-27947 A bug was identified and fixed related to missing fields in electronic signature details. Users encountered issues where fields such as certSerialNumber, commonName, and organization were not displayed correctly.

+

 

+

48. TEAM-28497 An error related to the execution of linked tasks in the Projects system workspace was identified and fixed. The error occurred after setting end-to-start task dependencies and then trying to complete one of the linked tasks. When the Done button was pressed on the task form, an error notification appeared, although the task was marked as completed.

+

 

+

49. TEAM-28798 An issue with increased load on MongoDB due to frequent queries to the feature_flags collection in the elma365commerceVahter database was identified. These queries, performed every 15 minutes, led to significant CPU load, impacting overall system performance. The error has been resolved.

+

 

+

50. TEAM-28807 An error was identified and corrected during the retrieval of signature data from an external e-signature provider. The problem occurred when calling the getDetails method for the signed item internalCorrespondence, despite the item being correctly signed.

+

 

+

51. TEAM-25233 An issue with missing notifications about the creation of events in the calendar was identified and corrected. Sometimes event participants did not receive notifications.

+

 

+

52. TEAM-25388 An error causing duplication of business process instances upon multiple click on the Start Process button was identified and eliminated. This issue was evident when using the process start form, which reopened with each button press, allowing the same process to be launched multiple times without proper control. To resolve this issue, the start button is now locked until the previous start request is completed and a notification of successful process start appears.

+

 

+

53. TEAM-26333 An error related to the incorrect saving of items in dependent apps was resolved. When attempting to create an item in one app through another app's form, the dependent item was saved even if the main item failed. Now, if the main item is not saved, the related items will also not be created, ensuring compliance with the logic of dependent fields and improving system stability.

+

 

+

54. TEAM-26867 An error related to the incorrect setting of access rights when creating new companies for the Projects app was corrected. The issue occurred during data migration, where access rights were not properly applied. Now, access rights are correctly set, and access to app items is restricted according to settings, ensuring proper access control and data protection.

+

 

+

55. TEAM-27162 An error was identified and corrected where messages from muted channels were not displayed in Favorites.

+

 

+

56. TEAM-27323 An issue was identified and corrected where the module icon was not displayed after importing a solution. The problem manifested as follows: after importing the solution and navigating to the module administration workspace, the module icon was replaced with a placeholder. To resolve the issue in existing Store solutions using .svg icons, it is necessary to manually re-upload the icon, re-export the module, or specify the icon format through editing the package using elma365pm.

+

 

+

57. TEAM-27733 A problem with synchronizing group members from AD was identified when dealing with a large number of users and groups. When attempting to synchronize with an OU containing over 10,000 users and a large number of groups with more than 2,000 members, the list of group members remained empty, despite logs indicating successful synchronization. This issue has been resolved.

+

 

+

58. TEAM-27949 A bug was detected where an app with a button on the form that launches a process from another app could be exported without errors, despite warnings. This issue has been corrected.

+

 

+

59. TEAM-28018 An error was identified and corrected where email sending for password change and recovery was not working when a periodic password change policy was active. The problem led to users not receiving password change notifications and being unable to reset their password through the "forgot password" function, causing errors. Now, emails are sent correctly.

+

 

+

60. TEAM-28136 A bug was identified and corrected that caused the "get page: not found" error during configuration import. The issue occurred during the application import stage if the configuration contained a removed workspace.

+

 

+

61. TEAM-28308 A bug was identified and corrected related to the lack of access to a new page for users and incorrect determination of the executor after updating the workspace or solution. The problem occurred when adding a new page and an access group in the workspace, then updating the workspace in another instance of the system. Users added to the group after the update did not have access to the new page, and re-saving access settings did not help. The error has now been corrected.

+

 

+

62. TEAM-28552 An error was identified and corrected where solution updates were failing with the "forbidden without check" error. The problem occurred when attempting to update the solution after its initial import, where the first import status request led to an error. Following the correction, solution updates now proceed successfully without the error.

+

 

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_6_op.html b/platform/2024_6_op.html new file mode 100644 index 0000000..d7b40ba --- /dev/null +++ b/platform/2024_6_op.html @@ -0,0 +1,184 @@ + + + + + 2024.6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.6

+
+ +
+

2024.6

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.6 includes all updates for BRIX SaaS 2024.6, as well as the following improvements:

+

 

+

The release includes numerous minor enhancements aimed at stabilizing the installation and update process for BRIX:

+

 

+
    +
  1. Fixed the DBSexporter chart for loading images from the BRIX repository.
  2. Added a  event exporter to log events in Loki and added an event dashboard in Grafana.
  3. Corrected the operation of the service mesh Linkerd in Kubernetes 1.29 and 1.30.
  4. Fixed manifests for using existing Kubernetes secrets to connect BRIX to databases.
  5. Implemented rapid certificate updates in KinD.
  6. Updated the Descheduler.
  7. Added the .global.backoffLimit parameter to specify the number of migration restarts during BRIX updates.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_7.html b/platform/2024_7.html new file mode 100644 index 0000000..b223b6d --- /dev/null +++ b/platform/2024_7.html @@ -0,0 +1,325 @@ + + + + + 2024.7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.7

+
+ +
+

2024.7

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After August 19, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

 

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

 

+

ECM

+

 

+

1. TEAM-25768 You can now select custom providers as the default provider in the Sign business process activity.

+

 

+

2. TEAM-26184 Support for exporting and importing the configuration of business process triggers when a sheet is archived has been implemented. Warnings are displayed during export for processes that are not included in the exported namespaces but are specified in the archiving settings.

+

 

+

3. TEAM-26954 Support for exporting and importing access rights in the document categorization system has been implemented. Access rights to the registration office and folder are transferred during the export and import of apps. If the registration office or folder already exists in the target company, rights are not overwritten. User and group-level rights are preserved when transferring between companies.

+

 

+

4. TEAM-27497 Sample templates for approval sheets and lists of informed users have been added to the settings for download, further editing, and re-upload.

+

 

+

5. TEAM-27500 The Approval Settings page has been renamed to Archiving Settings, with the added ability to specify a business process when archiving a list of informed users (previously it worked only for approval).

+

 

+

6. TEAM-28665 Implemented inheritance of access rights from the registration office to the category and folder. Additional rights are not updated when access rights are changed and operate separately.

+

 

+

Projects

+

TEAM-23122 In Projects, a new feature has been added to filter and search tasks when requesting work completion estimates. Users can now quickly find the required tasks in the task selection window within the Gantt chart.

+

 

+

TS SDK

+

1. TEAM-28339 A new method has been added to the BRIX SDK that allows changing the registration number after a document has been registered. Previously, users faced limitations that required deleting and re-registering the document in case of errors or typos, which was inconvenient and could lead to additional issues in administration and record-keeping.

+

Example usage:

+

```typescript
+async function editReg(): Promise<void> {
+  const item = Context.data.dokument_s_registraciei!;
+  const registrations = await item.docflow().getRegistrations();
+  if (registrations.length <= 0) {
+    throw new Error('something went wrong');
+  }
+  await item.docflow().changeRegistration(registrations[0].nomenclatureId, "number1");
+}
+```

+

2. TEAM-9754 The BRIX SDK now includes the ability to retrieve a comment specified by a user when signing a document using an electronic signature.

+

 

+

3. TEAM-27789 The TSSDK methods for retrieving system messages in live chats have been improved. Now, with the possibility of sending system messages within a session, the `getAllMessages()` and `getLastMessage()` methods have been updated: a `payload` field has been added for the message types `payload` and . This allows for separate handling of `session_reassign_message` system messages received through these methods.

+

 

+

CRM

+

1. TEAM-23170 The Hierarchy widget now includes the ability to configure the displayed fields for the selected app. This feature expands upon the previous implementation, which was limited to the fields for the Contact app, and now covers all possible app fields except for the Table type.

+

 

+

2. TEAM-25031 The Activity Log widget has been enhanced with customizable field display settings:

+
    +
  • You can now configure fields for both system and custom activities.
  • The default field output for each activity has been adjusted.
  • Contact display has been added if the Activity Log contains data for more than one contact.
  • A new feature allows users to collapse and expand information for activity records.
  • Contact data display has been included.
+

 

+

3. TEAM-28489 The Bar chart widget has been improved:

+
    +
  • New chart types have been added: horizontal bars (with dril ldown) and vertical bars (with drill down).
  • A Detailed information feature has been added for charts with drill down.
  • A Status display setting is now available for sources with the App with statuses type.
  • A Display settings configuration has been added to manage the list of columns when building detailed information.
+

 

+

4. TEAM-29295 The ability to create an empty dynamic segment for later use in lead generation has been added.

+

 

+

Service

+

1. TEAM-20787 A new parameter, Allow operators to add clients to blocklist (Yes/No switch), has been added to the global live chat settings. If Yes is selected, the option to add a client to the blocklist via the session sidebar will be available to all operators. If No is selected, this feature will be hidden from operators and only available to supervisors.

+

 

+

2. TEAM-23473 Added the ability to retrieve contact information from Telegram. Previously, contact details were not transmitted to BRIX when using the share contact feature in a chat or via a Telegram bot.

+

 

+

3. TEAM-25507 Added the ability for operators to edit messages in Telegram. A new option, Enable message editing, has been added to the global live chat settings, which is disabled by default.

+
    +
  • Editing is only possible for messages sent by the operator and can be done within 48 hours of sending. After this period, editing is blocked with an error notification.
  • Edited messages in the chat will be marked with a pencil icon, and hovering over the icon will display the date and time of the last edit.
+

 

+

4. TEAM-28774 Reactive updates to the session page have been implemented after executing the Send Live Chat Response block in a business process. Previously, the message was sent to the session but only displayed to the operator after refreshing the page. Now the message appears immediately without the need to refresh the page. The update is only available to the operator assigned to the session.

+

 

+

Number data type

+

TEAM-23954 Added the ability to specify the allowed number of decimal places in a Number (non-integer) field. Previously, the display of digits after the decimal point worked as follows:

+
    +
  • For integer numbers, the minimum required digit was 0, and the maximum was 20.
  • For decimal numbers, the minimum was 2, and the maximum was 20.
+

 

+

We have added the ability to specify the maximum number of displayed decimal places.

+

For example, if the field contains the number 3.14159:

+
    +
  • Integer number, maximum digit not specified: Displayed as is: 3.14159
  • Integer number, maximum digit = 2: Displayed as 3.14
  • Integer number, maximum digit = 0: Displayed as 3
  • Decimal number, maximum digit = 4: Displayed as 3.1416
  • Decimal number, maximum digit = 1: Displayed as 3.1
+

 

+

2FA

+

Support for custom 2FA providers has been implemented. To do this, you need to create an interface and function in the module script:

+

```typescript
+interface SecondFactor_sendError {
+ error: string;
+ skip2fa: boolean;
+}
+async function secondFactor_sendCode(userID: string, code: string): Promise<SecondFactor_sendError> {}
+```

+

The function accepts the identifier of the incoming user and the confirmation code. After saving and publishing, the module becomes available in the security settings.

+

 

+

Bugs fixed

+

1. TEAM-25578 A problem was identified and fixed in processes where, upon opening the Settings tab, the entire version history of the process was loaded, leading to long queries and browser overload. Now, the version history is displayed page by page, with 10 items per page, loading only when the History tab is selected. This significantly speeds up performance and prevents system overload. #BreakingChangeAlert

+

 

+

2. TEAM-28081 Fixed the display of the task list in the Associated tasks widget. Depending on user rights, the widget now displays either the task block name (to exclude access to sensitive information) or the task name according to the template (if sufficient rights are available). Additionally, an information window appears when attempting to open a task without sufficient rights. #BreakingChangeAlert

+

 

+

3. TEAM-29183 Fixed the display of the checklist in the Associated tasks widget. Previously, the checklist was not displayed. #BreakingChangeAlert

+

 

+

4. TEAM-28083 The _project_template app has been moved to the trash, as it was removed from the workspace logic and Help Center. Functionality in scripts where the app was previously used remains unaffected until re-publication. For continued use, modifications to scripts are required or the app must be restored from the trash. #BreakingChangeAlert

+

 

+

5. TEAM-23320 Fixed a bug where an edited file from the task page could not be saved if it was selected from the Files workspace. Additionally, previously added files disappeared after refreshing the page.

+

 

+

6. TEAM-26662 Fixed a bug in business processes where the specified value for a Money-type variable was reset to zero after saving. Data is now saved correctly, and upon reopening the block settings, the set value is displayed instead of 0.00.

+

 

+

7. TEAM-28781 Fixed a bug where the actual receipt amount was reset after editing the estimated amount.

+

 

+

8. TEAM-26759 Fixed a bug related to removing permissions for an app property, where the method perms.Delete(minus permissions.Permission) incorrectly considered OrgunitField fields.

+

 

+

9. TEAM-26911 Fixed a bug where client scripts did not account for replacing the current timezone for the object system.timezones.current. When creating a TDatetime object, the date and time were generated with the company's timezone instead of the timezone set for the System object.

+

 

+

10. TEAM-27139 TS SDK: An error was found in the TS SDK documentation describing the create method for Phone and Email objects. The method was incorrectly listed as available through Context.data, which is not accurate. The create method actually exists only for the fields object. The correct usage example is: Context.data.mail = Context.fields.mail.create('user@company.com'); The documentation error has been corrected to match the actual functionality.

+

 

+

11. TEAM-27297 Fixed a bug where optional dependencies were not loading in widget settings, accompanied by the error "uuid: incorrect UUID length: dictionarys". The issue occurred when trying to open page settings and select available items in the builder, where the list of items did not load.

+

 

+

12. TEAM-28090 Fixed a bug where server-side scripts did not work if there were properties with the same code in the app context. The problem occurred when creating and calling a server script in an app where properties with the same code were linked between two apps. An error "TypeError: STRING must be a string" occurred when trying to open an app item for viewing. The fix now allows server-side scripts to work correctly even with properties with the same code, and the error no longer occurs.

+

 

+

13. TEAM-29178 Fixed a bug where item_permissions_update events were not displayed in the Security Audit v2 solution, although they were correctly shown in the Security Audit v1 solution. The problem occurred when changing additional access rights to an app item — the event was only displayed in the old version of the audit.

+

 

+

14. TEAM-18652 Fixed a bug related to incorrect validation of required fields on an app item form when the modal window content loads asynchronously. The problem was that an app item was created without filling required fields, despite validation errors being displayed under the field.

+

 

+

15. TEAM-25440 Fixed a bug where Page-type widgets were unavailable in the widget builder. The issue was that the set of available widgets differed depending on where they were added: in one case, the Main page widget was available, while in another case, it was missing. The widget set is now consistently available in all cases, ensuring correct operation of the widget builder.

+

 

+

16. TEAM-26972 Fixed a bug where context variable validation did not trigger if there was a variable with the same code in the form context. The problem manifested as follows: when creating an app item with a custom form, despite validation triggering and displaying an error under the field, the form still closed, and the item was successfully created.

+

 

+

17. TEAM-28073 Fixed a bug where focus on the edit form moved from the first available field to the next. The error has been fixed.

+

 

+

18. TEAM-11538 Fixed an error where outdated signature information was not displayed on the sidebar if the file or document attributes were changed. Previously, after signing a file and subsequently changing it, the sidebar did not show a warning about the outdated signature, and the button to view the signature archive was unavailable. The status of the signature is now correctly displayed: if the signature is outdated, it is clearly indicated, and the signature archive is available for viewing. Additionally, issues with page freezing when signing only files or attributes have been resolved.

+

 

+

19. TEAM-28103 Fixed a bug where it was impossible to select a provider for signing in the standard signing task. The issue occurred in the interface when providers did not load correctly and were only available when clicking on the provider's name.

+

 

+

20. TEAM-28264 Fixed a bug where a project type with a modified generation process was not created. The problem occurred after exporting and re-importing the Projects solution, as well as when modifying the Generate from template process for basic and custom types.

+

 

+

21. TEAM-28516 A bug was identified and fixed where an error occurred during automatic approval if one of the users in the group had a substitution set up. The issue was that when starting a process with automatic approval and active substitution, the process would fail with the error "rpc error: code = FailedPrecondition desc = resolve: not permitted: precondition". This error has now been resolved.

+

 

+

22. TEAM-28571 A bug was identified and fixed in the Document versions widget in designer mode where an error occurred if no file was added. The issue was that the widget displayed the error "TypeError: Cannot read properties of null (reading 'id')" when no file was present.

+

 

+

23. TEAM-28023 The functionality for customizable Gantt chart columns and the Project plan widget has been enhanced. It now supports adding, displaying, and inline editing for data types such as Date/Time, App, Arbitrary app, User, Yes/No, and Category. Design for multiple user displays and links to app items, as well as inline editing for Yes/No fields, has also been implemented.

+

 

+

24. TEAM-22762 Fixed an issue in Live Chats where links in WhatsApp could be formed incorrectly and duplicated.

+

 

+

25. TEAM-28054 Fixed an issue in Live Chats related to sending messages containing more than 4096 characters. Previously, such messages appeared in the BRIX session but did not reach the client in Telegram. Users will now see a warning, and sending such messages will be blocked. Note: In Telegram, messages with more than 4096 characters are automatically split into multiple messages.

+

 

+

26. TEAM-28837 Fixed an issue with routing rule display in Live Chats. Previously, when trying to change the order of a rule by dragging, it could shift sideways, causing inconvenience. The shifting problem has now been resolved.

+

 

+

27. TEAM-28868 Fixed a bug that allowed creating sessions with clients without a WhatsApp account. Now, when attempting to create such a session, users will see a corresponding notification, and the session will not be created.

+

 

+

28. TEAM-21322 A bug was identified where a 504 Gateway Timeout error occurred when trying to open user search if many users were added to the platform and a filter was used to display them. The issue occurred when specifying a large number of users for filtering, leading to a server timeout and the inability to display the user list correctly. The error has now been resolved, and user search works correctly regardless of the number of users on the platform.

+

 

+

29. TEAM-23731 A bug was identified where a custom widget on the homepage did not display for users without administrator rights. The issue occurred after exporting and updating the configuration, when the widget access settings were reset. The error has now been fixed.

+

 

+

30. TEAM-27791 A bug was identified where it was impossible to add a dependency on a solution containing system directories when using widgets from this workspace in other solutions. The issue occurred when attempting to export a solution if a widget from system directories was placed in an app from another workspace, but the dependency on the solution with system directories could not be added. The error has been fixed.

+

 

+

31. TEAM-28508 A bug was fixed that occurred when calculating dependencies and editing the content of a solution if it included an app for a paid solution. Now, a custom app from a system workspace can only be included in one solution. If the system workspace is added entirely to one solution and then another solution attempts to include a custom app from that same workspace, the application will be excluded from the first solution with a corresponding notification. Checks have also been added during the export and import of solutions to avoid conflicts when using the Add workspace entirely flag.

+

 

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_7_op.html b/platform/2024_7_op.html new file mode 100644 index 0000000..5238108 --- /dev/null +++ b/platform/2024_7_op.html @@ -0,0 +1,180 @@ + + + + + 2024.7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.7

+
+ +
+

2024.7

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.6 includes all updates for BRIX SaaS 2024.7, as well as the following improvements:

+

In this release, dependencies in the Helm package have been updated, allowing for the disabling of certain microservices that are not in use. This is a step towards more flexible service management and infrastructure optimization.

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_8.html b/platform/2024_8.html new file mode 100644 index 0000000..73ad251 --- /dev/null +++ b/platform/2024_8.html @@ -0,0 +1,348 @@ + + + + + 2024.8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.8

+
+ +
+

2024.8

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After September 16, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

 

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

 

+

Processes

+

TEAM-15626 On the process instance page, the History tab now displays not only tasks but also subprocesses, with the ability to open them via links. This helps better track subprocess statuses and quickly locate them if the parent process has stalled. A similar link to the parent process has been added on the same tab of the subprocess page. #BreakingChangeAlert

+

Widgets

+

TEAM-25584 The version history on the History tab in the widget builder has been optimized. The following improvements were made:

+
    +
  • Page-by-page display. Pagination has been added with 10 items per page for easier viewing and managing versions.
  • Server-side optimization. Server queries now only return the necessary data for display, reducing query execution time and minimizing the risk of timeouts.
+

 

+

Contracts

+

TEAM-24236 EQL query composition is now available in the search line for contracts. The search works for app items related to contracts but not for sources.

+

 

+

File editing

+

TEAM-26163 In BRIX desktop app version 2.1.21, the ability to edit files using installed Microsoft Office programs has been added.

+

To use this feature, select the option Edit locally on the file view page in BRIX. The document will be downloaded to your computer and opened in the required program. You can then make changes. During local editing, the file is locked in BRIX, and other users will only be able to view it. Once the edited file is saved, a new version will be added in BRIX.

+

To enable this option, you need to update the app to version 2.1.21 and switch to the Testing channel.

+

 

+

Document Registration activity

+

1. TEAM-28138 In the Document Registration activity in the business process designer, a new option Forbid to cancel registration has been added. This setting blocks the Cancel registration button in the registration task, forcing the user to complete the registration process by specifying the folder and number.

+

 

+

2. TEAM-28135 In the Document Registration activity in the business process designer, the Cancel button has been renamed to Cancel registration for a more accurate reflection of the action during manual document registration.

+

 

+

Insert Watermark activity

+

 

+

TEAM-26724 In the Insert Watermark activity settings in the business process designer, a new Error Handling tab has been added. On this tab, you can:

+
    +
  • Specify the process path if an error occurs in the activity;
  • Select users to notify about the error;
  • Create or specify a variable in the process context where the error message will be recorded.
+

 

+

Hierarchical folder

+

TEAM-28647 The appearance of the hierarchical folder has been updated according to system styles. Now, when selecting a folder in a Document-type app, the selected item is highlighted in a darker blue color, similar to the CRM workspace, making the interface more consistent.

+

 

+

Projects

+

1. TEAM-25909 Navigation through project plan elements in the Gantt Chart widget has been improved:

+
    +
  • System administrators can now configure task filters in the Gantt Chart. The fields available in the filter depend on the Search and sort settings in the Project Plan Element app.
  • Task filtering settings have been changed. Now, when searching in the widget, the entire task hierarchy, including nested tasks, is displayed. Previously, nested and parent tasks were not shown in the results.
+

 

+

2. TEAM-28607 A Create Plan button has been added to the Gantt chart view widget. It appears when there is no project plan. By clicking the button, the user creates a draft plan and switches to the Gantt chart editing mode. The button is available to project managers and users with project plan editing rights.

+

This feature is intended for manually creating a plan for project types where a project plan template is not configured, or an error occurred during the plan generation process.

+

 

+

Activity stream

+

TEAM-25910 Now, if a message or file were not sent to a Channel or object activity stream due to an error, it is temporarily saved and displayed in the interface, similar to how it works in chats. This allows the user to return to the unsent message even if navigating to other pages without losing the entered data.

+

Temporary storage of unsent messages and files has also been implemented to prevent data loss when switching between pages.

+

 

+

Calendars

+

TEAM-26004 The ability to select a time zone when exporting events from BRIX to Google Calendar and other external calendars has been added. This ensures correct synchronization of start and end times between systems, preventing shifts that previously occurred due to time zone mismatches.

+

 

+

Bugs fixed

+

1. TEAM-10241 Fixed an issue that allowed creating business process activities with the same code in different modules, causing confusion in the attribute display within the activity settings. The system now correctly checks for code uniqueness and displays only the relevant attributes for each activity.

+

 

+

2. TEAM-26908 Fixed an issue where the timer triggered according to UTC instead of the user’s specified time zone. Now, timers work correctly based on the time zone set in the company settings.

+

 

+

3. TEAM-28761 Fixed an issue where a task in a process was assigned a deadline of the current time +1 minute if the date variable was empty and a script was present before the task. Now, tasks without a set deadline are created without a time limit if the date variable is not defined.

+

 

+

4. TEAM-29225 Fixed an issue in the Notification block of the business process interface where the variable selection buttons were missing in the Message subject and Message text fields. The buttons for adding variables now display correctly.

+

 

+

5. TEAM-30287 Fixed an issue in the process debugging mode where tasks duplicated on the start event, an error occurred in the web part on the subprocess launch step, and the process stopped. The debugging process now works correctly.

+

 

+

6. TEAM-29342 Fixed an issue where the name of the Report component did not change in the database after being edited in the settings.

+

 

+

7. TEAM-30271 Fixed an issue where an action button added to a specific pipeline page in the Deals or Leads app was displayed for all pipelines.

+

 

+

8. TEAM-28205 Fixed an issue where, if only the time was filled in the Date/Time variable on the form for creating an app item and the form was saved, the date automatically set to the current one, even if not specified. Now, if the date is not filled, a validation error will occur, requiring this field to be completed.

+

 

+

9. TEAM-28910 Fixed an issue where parameters were not passed correctly when calling a method via ExtText in a document template. The request body generated an incorrect data structure instead of the expected parameters. This issue has been resolved.

+

 

+

10. TEAM-29007 Fixed an issue where business process activities did not return property types when called via scripts. This problem has been fixed.

+

 

+

11. TEAM-29283 Fixed an issue where access rights export for nested fields worked incorrectly. The export rules included records referring to deleted apps and contextual variables, which should not have been included.

+

 

+

12. TEAM-29388 Fixed an issue where artifacts and symbols appeared in the response body for an action with a Callback type instead of the correct data. Now, data sent in the request to the URL from the action method arguments is returned in the expected format.

+

 

+

13. TEAM-29408 Fixed a documentation issue in the TS SDK help for the description of one of the TDatetime object constructors.

+

The example was fixed:

+

// Invalid example:
+const myDatetime1 = new Datetime(Date.UTC(2022, 2, 24))
+// Valid example:
+const myDatetime2 = new Datetime(new Date(Date.UTC(2024, 5, 27, 10, 10, 45, 666)))

+

 

+

14. TEAM-29533 Fixed an issue where a business process timer, configured to account for the business calendar, triggered immediately after task completion if it was finished after 6:00 PM, instead of starting on the next day.

+

 

+

15. TEAM-28001 Fixed an issue where widgets were duplicated on new user pages of the portal created from a template. The option to Create from Template has been removed when adding a new page, making new pages appear like existing portal pages by default.

+

 

+

16. TEAM-29740 In this release, the feature flag allowAttachExtensionScriptFiles has been enabled for all BRIX distribution versions. Now, in the custom module on the API Methods tab, file uploads with dependencies are available by default.

+

 

+

17. TEAM-28836 Fixed an issue where exporting a configuration with a large number of widgets could take too long or fail altogether, resulting in a timeout. The export process has now been optimized to handle large amounts of data, preventing such delays and errors.

+

 

+

18. TEAM-12571 Fixed an issue that allowed creating a contract with an App field without specifying a particular app. Now, such an attempt triggers a warning, and the contract cannot be saved.

+

 

+

19. TEAM-20495 Fixed an issue where moving filters in the hierarchical folder using drag-and-drop did not change their position. This now works correctly.

+

 

+

20. TEAM-24340 Fixed an issue where, after importing a workspace, template generation did not work without re-selecting the template. Now, templates function correctly right after import without additional actions.

+

 

+

21. TEAM-26724 Fixed an issue where the process would stop at the Insert Watermark activity when transferring files with unsupported extensions. Now, error escalation has been added, including for incorrect file extensions, allowing such situations to be properly handled in business processes.

+

 

+

22. TEAM-26945 Fixed an issue where slow client-side performance could cause multiple document registrations for a single app item through the Document Registration widget. Now, after pressing the button, it becomes inactive, preventing duplicate registrations.

+

 

+

23. TEAM-27081 Fixed an issue where the admin could see all user signatures in their user profile settings under the Signatures tab, instead of only seeing their own signatures. Now, the admin only sees their own signatures.

+

 

+

24. TEAM-27361 Fixed an issue where long file names in the Files property on the viewing form were displayed incorrectly, extending beyond the screen. Now, long file names are truncated and decorated with an ellipsis, and the full name is displayed in a tooltip when hovering over the file name.

+

 

+

25. TEAM-28118 Fixed an issue where the Delete Version button was not displayed for regular users in the mobile app, even if they had the appropriate permissions to delete file versions.

+

 

+

26. TEAM-28223 Fixed a warning issue that appeared when attempting to sign a document or file using a simple electronic signature (SES) certificate.

+

 

+

27. TEAM-28238 Fixed an issue where it was impossible to add a user to the approval sheet more than once if a substitution was created during the approval process. As a result, the process ended with an incorrect Denied status, and the user could not participate in the approval again. The issue has been resolved.

+

 

+

28. TEAM-28309 Fixed an issue where updating a workspace reset folder permissions in the hierarchical folder tree, leaving access only for the system group. Now, existing folder permissions are preserved during updates, and in case of a conflict, a warning window will appear.

+

 

+

29. TEAM-29199 Fixed an issue where employees with project plan editing rights could not publish changes.

+

 

+

30. TEAM-29208 Identified an issue in the Projects workspace where a task of the Process type, added to the project plan, did not automatically start on the start date specified in its form. The task could only be started manually from the project plan. This issue has been fixed.

+

 

+

31. TEAM-29387 Identified an issue where the start and end dates of tasks specified in the project plan were incorrectly determined in the request for estimated project deadlines. Updated dates set in the task for obtaining forecast deadlines were also incorrectly passed to the project plan. The issue has been fixed.

+

 

+

32. TEAM-29391 Fixed an issue where uploading a new version of a file that did not support watermarks caused an error, and the preview did not refresh automatically. Now, the preview loads correctly without needing to refresh the page.

+

 

+

33. TEAM-29513 Identified and fixed an issue in the Document Management workspace where inheritance of access rights from the registration location was not applied to a specific folder.

+

 

+

34. TEAM-29530 Fixed an issue that allowed users without access to the Files workspace to navigate there via a direct link. Now, access to the workspace and its contents is strictly limited according to the configured permissions, and users without the necessary rights will be redirected to the main page if they attempt to access it. Widgets displaying files and folders also function according to the set access rights.

+

 

+

35. TEAM-29540 Identified and fixed an issue that occurred during the comparison of document versions when three or more versions were added.

+

 

+

36. TEAM-29714 Fixed an issue where a process with parallel signing could freeze when one of the users either rejected or signed the document. Now, the process correctly completes, and comments regarding the signing or rejection are displayed in the object's activity stream.

+

 

+

37. TEAM-29733 Identified and fixed an issue in the Projects workspace where project participants did not receive system notifications about task deletions or changes to project task deadlines.

+

 

+

38. TEAM-29786 Fixed an issue where the Panel with Header widget did not display .jpg files uploaded in the File Preview widget. Now, files are correctly displayed on the title panel.

+

 

+

39. TEAM-29804 Changed the display of the project types list in the Projects workspace, so extra folders and filters, such as Project Participant, Project Curator, and Project Manager, are no longer shown in the app.

+

 

+

40. TEAM-29815 Identified and fixed an issue that occurred when trying to save contract field settings if a property of the App type was added to the list.

+

 

+

41. TEAM-29913 Identified and fixed an issue that appeared as a warning when assigning a task to review a file.

+

 

+

42. TEAM-30029 Identified and fixed an issue where action buttons in the document version list only appeared after clicking the upload or print icon. Now, the buttons for deleting a version and applying it as the current one are always visible.

+

 

+

43. TEAM-30042 Identified and fixed an issue that occurred on the contract page when attempting to configure the table.

+

 

+

44. TEAM-30054 The button to switch to parameter search did not appear on the Files workspace page. The issue has been identified and fixed.

+

 

+

45. TEAM-30080 Identified and fixed an issue in the business process where the substitution ignore option was not applied in the Send Document/App Item activity if this option was enabled in the activity settings.

+

 

+

46. TEAM-30404 Identified and fixed an issue that occurred during the re-registration of an app item if the previous registration was deleted using the method deleteRegistration(nomenclatureId).

+

 

+

47. TEAM-25575 The user experience in the Projects workspace has been improved when creating a project plan. Now, changes made in the task table are saved when switching to another cell. Additionally, tasks can now be saved by pressing the Enter key.

+

 

+

48. TEAM-26727 Fixed an issue where sessions in messengers were not created when sending messages with attachments totaling more than 3 MB.

+

 

+

49. TEAM-29527 Identified and fixed an issue where it was impossible to open the page of a user mentioned in an associated activity stream.

+

 

+

50. TEAM-24954 Identified and fixed an issue where, after a substitution ended, the task to create an app item assigned during a business process was not reassigned to the original assignee.

+

 

+

51. TEAM-26648 Fixed an issue where the unread message counter in a channel remained active, even if all messages were read. The counter now updates correctly and resets after all messages are viewed.

+

 

+

52. TEAM-28130 Fixed an issue where users were not receiving notifications about reactions to their personal messages.

+

 

+

53. TEAM-28365 Fixed an issue in the mobile app where message and comment input fields were displayed incorrectly when entering letter characters.

+

 

+

54. TEAM-28505 Fixed an issue where users could only see the last three unread comments on a new channel message. Now, all unread comments are displayed.

+

 

+

55. TEAM-29259 Identified and fixed an issue where calculations based on specified formulas were not performed correctly when adding a table-type field in the interface designer.

+

 

+

56. TEAM-29296 Identified and fixed an issue where dependencies on various entities like pages, widgets, contracts, and processes linked to different app items were not detected during solution export. Now, the system correctly identifies all dependencies during export, offering to add them, thus preventing potential errors during import and use of the solution.

+

 

+

57. TEAM-29414 Fixed an issue where messages sent in a personal chat opened in multiple browser tabs did not display.

+

 

+

58. TEAM-29146 Improved the display of tiles with the names of system solutions on the License Management page.

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_8_op.html b/platform/2024_8_op.html new file mode 100644 index 0000000..5eda9cd --- /dev/null +++ b/platform/2024_8_op.html @@ -0,0 +1,186 @@ + + + + + 2024.8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.8

+
+ +
+

2024.8

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.8 includes all updates for BRIX SaaS 2024.8, as well as the following improvements:

+
    +
  1. Added addons for storing DBMS connection credentials:
+
      +
    • External Secrets Operator. An operator for Kubernetes that integrates external secrets management systems such as HashiCorp Vault. The operator reads information from external APIs and automatically creates Kubernetes secrets. Read more in the official BRIX Help Center.
    • HashiCorp Vault. An open source tool that provides secure storage and encryption of sensitive data, as well as identity-based access to data through customizable policies. Read more in the official BRIX Help Center.
+
    +
  1. Updated location of BRIX distributions. Now all editions are in one directory for a specific version: onPremise/YYYY/MM/xx/elma365--. More details in the official BRIX Help Center.
+

The distributions are also available with the old links until 12/31/2024 so that there is an opportunity to smoothly re-engineer your app delivery processes for the new system.

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_9.html b/platform/2024_9.html new file mode 100644 index 0000000..e52edd6 --- /dev/null +++ b/platform/2024_9.html @@ -0,0 +1,311 @@ + + + + + 2024.9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2024.9

+
+ +
+

2024.9

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After October 14, 2024, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

API and SDK

+
    +
  1. TEAM-18222 Implemented a new __item search parameter to search for instances of processes and tasks associated with an app item. This parameter allows you to quickly retrieve all running or pending workflows and tasks associated with a specific app item without having to manually track process IDs. #BreakingChangeAlert
+

Example:

+

// instances search
+const instances = await System.processes._searchInstances()
+   .where(i => i.__item.eq(Context.data.app)).all();
+// tasks search
+const tasks = await System.processes._searchTasks()
+   .where(i => i.__item.eq(Context.data.app)).all();

+
    +
  1. TEAM-29961 It is now possible to return multiple cookies in a single response in API methods.
+

let resp = new HttpResponse(200);
+resp = resp.cookie("userId", userId).cookie("userLang", "en");
+return resp;

+
    +
  1. TEAM-30189 Added a description of the ability to use EQL (BRIX Query Language) to filter data to the Web API Help. The article about filtering https://api.brix365.com/en/public-api/guides/Filter/ also provides an example of using EQL to perform data sampling in the Web API.
  2. TEAM-29212 A new filter operation like_format has been added to PublicAPI to allow searching by partial string matches using templates. Unlike the like operation, like_format uses the % and _ control characters to specify search rules:
+
    +
  • % means any number of any character.
+
    +
  • _ means one character of any kind.
+

The search condition is case insensitive, which allows you to filter case-insensitive characters.

+

Example of search by word occurrence in the title:

+

{
+   "filter": {
+       "like_format": [
+           {"field": "__name,
+           {"const": "%city%"}
+       ]
+   }
+}

+

Example of registration number search by filling template:

+

{
+    "filter": {
+        "like_format": [
+            {"field": "regNumber,
+            {"const": "М86_А_ 777"}
+        ]
+    }
+}

+

 

+
    +
  1. TEAM-15832 Added getReserved() method to the TS SDK to retrieve the reserved document number.
+

Report type app

+
    +
  1. TEAM-27926 Added the ability to copy a report through the settings menu. Copying retains the report structure, including data sources, added columns (except deleted columns), and linked document templates. This feature allows you to quickly create similar reports with minimal changes. #BreakingChangeAlert
  2. TEAM-29244 Added functions to delete and restore a report. #BreakingChangeAlert
  3. TEAM-30231 The widget and form context implements subtype mapping for reports, similar to how app subtypes are mapped. This simplifies working with reports and improves the understanding of the context structure.
+

Portable services

+
    +
  1. TEAM-29170 Implemented port forwarding for portable services inside Kubernetes, which allows to organize communication between services. Now you can set up to 10 ports for port forwarding in the settings of portable services. This feature is closed with the allowBabysitterOptionalPorts feature flag and is disabled by default.
  2. TEAM-29447 Added ability to use secrets in portable services that are set via templates from module settings. Now instead of openly sending secrets, you can use variables from the settings, which increases security.
+

Mobile app

+

TEAM-18156 On the Administration > Company Settings page, the Disable app installation notification setting has been added. When this option is activated, users will not see notifications offering to download the BRIX mobile or desktop app, including banners in their profile and at login. This solution is relevant for companies that don't plan to use the mobile app for security reasons or have their own app build.

+

Widgets

+
    +
  1. TEAM-25759 The Destroy function has been added to the Settings > System Functions tab in the widget builder. It is activated when a widget is removed and is useful when it is necessary to free resources created during widget operation. For example, clearing of taken intervals and timeouts:
+

declare const window: {
+   setInterval: (fn: () => void, interval: number) => number;
+   clearInterval: (clearInterval: number) => void;
+};
+ 
+async function onInit(): Promise<void> {
+   Context.data.counter = 0;
+   intervalID = window.setInterval(() => {
+       Context.data.counter!++;
+   }, 1000);
+}
+ 
+async function destroy(): Promise<void> {
+   window.clearInterval(intervalID);
+}

+

In this case, destroy must be bound to the Destroy function.

+

Performance report widget

+

The Widgets tab has been added to the Administration > Developer Tools > Performance Report workspace. It displays summary statistics on widget usage in the system. It can be useful to understand the most problematic points in the configuration (for example, if a widget is frequently displayed, but the display speed is slow). After identifying such widgets, you can go to the builder and optimize them.

+

To enable the collection of statistics on widgets, you should go to Administration > Developer Tools and fill in the From whom to collect information about widget performance setting: you can specify users, groups, elements of the organizational structure.

+

The following columns are displayed in the report:

+
    +
  • Service. The value is always widget.
  • Entry point. Workspace and code of the widget.
  • Quantity. How many times the widget was displayed during the period of statistics collection.
  • Rendering time (average, minimum, maximum). Time from the beginning of displaying (including OnInit execution time) to the end of rendering of the widget template.
  • OnInit execution time (average, minimum, maximum). Time of execution of the widget initialization function. It is often this indicator that affects the overall rendering time, and is the place to optimize.
  • Script scheme preparation time (average, minimum, maximum). The field is a system field, i.e. it cannot be influenced, but the results may be required for performance analysis by BRIX system developers.
  • Number of elements for the scripts scheme (average). This field is a system field.
+

EQL

+
    +
  1. TEAM-29214 A new LIKEF operation (short for LIKE FORMAT) has been added to the EQL query language to allow more flexible searching for property values using templates.
+

Differences from the LIKE operation:

+
    +
  • LIKE searches for a partial occurrence of a substring anywhere in the property value. For example, a query [__name] like 'app' will find items named app1, some_app, app_some.
  • LIKEF allows you to specify precise search rules using the % and _ special characters, providing more controllable search.
+

Rules of using LIKEF:

+
    +
  • Full Match: If no special characters % or _ are specified in the pattern, a full match search will be performed (similar to EQ operation).
  • % character: Indicates any number of characters (including zero). Can be used an unlimited number of times anywhere in the template.
+
      +
    • Example: [__name] likef 'app%' will find items whose names start with app, e.g. app, app1, appsome. It will not find 1app, someapp.
+
    +
  • _: Indicates a single character of any kind. Can be used an unlimited number of times.
+
      +
    • Example: [__name] likef 'app_' will find items named app1, app2, but not app, app11, 1app.
+
    +
  • Character combination: The % and _ characters can be combined to create complex patterns.
+
      +
    • Example: [__name] likef 'app%some%45' will allow you to find specific name options.
+
    +
  • Special character escaping: To search for % or _ characters as part of a value, they must be escaped with a backslash \.
+
      +
    • Example: [__name] likef '%app\%' will find items whose names end in app%.
+
    +
  • Equivalence with LIKE: The [__name] likef '%app\%' query is equivalent to [__name] like 'app'.
+

The LIKEF operation can be used for the following data types:

+
    +
  • Line, text.
  • Link.
  • Category.
  • Email.
  • Phone number.
  • Full name.
  • Account.
+
    +
  1. TEAM-29801 Added EQL search widget. It allows you to display an EQL expression input component in the widget for further use of this expression in the app item filtering function.
  2. TEAM-29887 Added the ability to search by Arbitrary App type fields in EQL. For example: [workLogObject] IN (FROM [_clients._leads] SELECT [__id] WHERE [__name]='My Company')
+

Where workLogObject is an Arbitrary app type field.

+

Document management

+
    +
  1. TEAM-4865 In the standard Document categorization workspace, the names for the search fields have been improved:
+
    +
  • The file name is now correctly displayed as Document Name, since the search is performed by document name and not by file.
  • Start Date has been replaced with Registration Date, since the search is based on the date of document registration.
  • Added the ability to search by the Document Flow field to simplify filtering of documents by this criteria.
+
    +
  1. TEAM-19294 Added the +File button when sending a file and package for approval or information. Now users can attach files for both approval and information. Attached files are saved in the system/docflow/files folder with correct access rights.
  2. TEAM-21532 Now when you change the document template in the Generate by Template workspace, the fields mapped on the Field Values tab are preserved. Also, when the Convert to PDF option is enabled, the platform automatically adds the .docx prefix to the file name, which simplifies document generation.
  3. TEAM-29702 In the connector settings in business process activities, there is a new option for Sign. Now the user can sign the app item directly on the task execution form by clicking the transition button. There is no need to add a separate box for signing. In addition, the comment left when signing is saved in the business process context variable.
  4. TEAM-30179 Fixed operation of access rights for folder hierarchies. Now, when the All users have access to the App and all its items option is enabled, full access to all directory folders is automatically granted. Previously, permissions were granted manually, and users could only see the All items folder.
+

Projects

+

TEAM-29751 Implemented registration and display of actual dates of start and completion of project tasks with the Process type. Actual dates are set according to when a business process actually started and ended. They are displayed on the form of viewing the process task and affect the display of the calendar plan in the Actual mode.

+

Activity stream, channels, chats

+
    +
  1. TEAM-3600 The ability to upload multiple files has been implemented in the Activity stream, Object activity stream, the Object activity stream widget, channels, private and group chats.
  2. TEAM-26440 It is now possible to add chats to Favorites via the chat context menu. Added chats are displayed in the Favorites tab for quick access. Channel messages and feeds previously added to favorites have been moved to Favorites > Messages.
  3. TEAM-28094 Users can now add the activity stream objects to Favorites using the object's context menu. Added objects are displayed in the Favorites tab below favorite chats, providing quick access to important items.
  4. TEAM-28244 Users can now customize the list of objects in the activity stream by excluding items from certain apps or processes that they do not work with.
+

Suppose a user receives messages in the Payment Requests app activity stream, but does not work with items from that app directly and does not want to see them in their object list. Then:

+
    +
  1. The user finds the Payment Requests app item in the list of objects in the activity stream.
  2. Right-clicks on that item.
  3. Selects the Do not show the app in the list anymore option.
  4. All items from the App for Payment app will be hidden from the list of activity stream objects.
  5. Messages from the feeds of these items will still be available in the #Activity stream workspace.
+

Import and export structures

+

TEAM-15864 Implemented the ability to import data from Excel/CSV files for Table type fields in apps. Now exported data can be correctly imported back into the system. This simplifies the transfer of large amounts of information and eliminates data entry errors.

+

When exporting data with system information enabled, the format that supports the reverse import is preserved. When system information is disabled, the number of elements is displayed in the Elements: number format.

+

Bugs fixed

+
    +
  1. TEAM-26639 The Execute on behalf setting is implemented for the Business Process activity and Process Start elements, similar to the Task field. #BreakingChangeAlert
  2. TEAM-29726 On the exported business process diagram, the names of connectors from tasks and gateways are now displayed correctly.
  3. TEAM-28785 To optimize the selection of portal user profiles, the __user field from the _system_catalogs:_user_profiles table has a search feature.
  4. TEAM-29772 Fixed the operation of event-based search.
  5. TEAM-30246 Fixed an issue where worker would send an acknowledgment of receipt of messages from RabbitMQ immediately after receiving them, without waiting for the corresponding script to complete. This could lead to the script not being executed or executed incorrectly.
  6. TEAM-30895 Fixed an issue where a user could not view an app item even if added to a group configured for access via a nested property.
  7. TEAM-30993 Fixed an issue where a Namespace object could not be accessed in scripts, causing execution to fail. Also, the ability to add Namespace in available items in widget settings was missing.
  8. TEAM-3821 Fixed an issue where a deleted file continued to appear in search results in the Files workspace.
  9. TEAM-15124 Fixed an issue where unnecessary File Signature settings appeared in the standard app, even if the file itself is not provided.
  10. TEAM-28459 Fixed an issue where contract sources were detached and marked red. The issue occurred when binding sources, especially if previously bound apps were deleted. In some cases, sources that should be bound remained in the Creating state and were not saved.
  11. TEAM-28925 Fixed an issue related to PasteImage() with customizable dimensions not working correctly. Previously, the image was not inserted into the document when dimensions were specified, and only the function without parameters worked correctly. Now the image is inserted with customized dimensions as specified in the template.
  12. TEAM-29431 Fixed an issue of incorrect operation of the validFrom method. Previously, this method returned the signature date instead of the certificate issue date. The method now correctly returns the certificate issue date as expected.
  13. TEAM-29438 Fixed an issue that caused the template designer to display the collection path instead of the name of the custom e-signature provider. Now the template designer correctly displays the name or code of the custom provider when outputting information in the template.
  14. TEAM-29879 Fixed an issue that caused project plan generation by template not to work. Now project plan generation works correctly for new companies and newly created project types. For old customers who still have this problem, you need to check the setting of the link to the Project field in the Save button on the project creation form.
  15. TEAM-29919 Fixed an issue that caused project participants to be granted all permissions to project folders and files, except for the Assign permissions right. Now project participants (except for the curator and supervisor) are assigned only the View, Upload, Create, and Edit permissions, according to the documentation.
  16. TEAM-30203 Fixed an issue where the getDraft() and createDraft() methods in the project object did not work for added project types. When trying to use them, the script crashed with the “is not a function” error. Now these methods work correctly when working with project types.
  17. TEAM-30283 Fixed an issue where the system allowed projects to be created without a plan through scripts, which caused scripts to fail in further operation.
  18. TEAM-30322 Fixed an issue where signing tasks in business processes were not closed after execution when using the Kontur module. As a result, the business process did not continue despite successful confirmation of signing. The problem occurred in bulk for different users and was fixed only after several attempts. Signing via CryptoPro worked correctly.
  19. TEAM-30414 Fixed an issue where contract sources with unmatched fields behaved illogically. Previously, the system allowed such sources to be saved, but this caused items to be displayed incorrectly. Now items will not be added to the contract until all source fields are correctly configured.
  20. TEAM-12689 Fixed an issue in the company structure display where the same user assigned to multiple positions was only displayed under one of the positions.
  21. TEAM-24113 Fixed an issue where the Item Name field in the app settings was not updated when the solution was updated.
  22. TEAM-25286 Fixed an issue where when updating a workspace, the order of the left menu content did not change.
  23. TEAM-26478 Fixed an issue when the solution was updated, but the field display settings in the table view of items were not applied.
  24. TEAM-28616 Fixed and issue where when setting permissions in an app, it was not possible to select user groups from another app in the same workspace. Now when assigning permissions, the full group tree is loaded in the selection window, including groups within workspaces and apps.
  25. TEAM-29429 Fixed an issue that caused the mobile app to display workspaces related to solutions for which licenses are not activated.
  26. TEAM-29474 Fixed an issue where authorization via a QR code in the mobile app did not always work correctly. When scanning a QR code, users could face the situation when after displaying the authorization form with login and password they were either redirected back to the page of choosing authorization methods or the app crashed.
+
    +
  1. TEAM-30321 Fixed an issue that caused role or group settings to not be saved if a previously assigned user was deleted.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2024_9_op.html b/platform/2024_9_op.html new file mode 100644 index 0000000..c3f3064 --- /dev/null +++ b/platform/2024_9_op.html @@ -0,0 +1,194 @@ + + + + + 2024.9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2024.9

+
+ +
+

2024.9

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2024.8 includes all updates for BRIX SaaS 2024.9, as well as the following improvements:

+
    +
  1. New addons:
+
    +
  • hostpath-provisioner: added to create Persistent Volume connecting disks in a Kubernetes cluster.
  • ingress-nginx controller: added to handle incoming connections in a Kubernetes cluster.
+
    +
  1. New BRIX-overview dashboard for Grafana
+

BRIX-overview dashboard for Grafana has been added to BRIX Enterprise, providing an overview of the system. Details are available in the Help center in the Install monitoring tools section.

+
    +
  1. Updates and compatibility
+
    +
  • Updated all addons to the latest versions to improve compatibility with current versions of the infrastructure and optimize their performance.
  • Checked compatibility with Kubernetes 1.30 to ensure the security and stability of the BRIX app.
+
    +
  1. Installation without Internet access
+
    +
  • The installation dialog script has been created to install BRIX Enterprise in offline mode. For more information, refer to the Install BRIX Enterprise offline Help section.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_1.html b/platform/2025_1.html new file mode 100644 index 0000000..bd46a71 --- /dev/null +++ b/platform/2025_1.html @@ -0,0 +1,370 @@ + + + + + 2025.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2025.1

+
+ +
+

2025.1

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After February 13, 2025, all changes will become available to our clients in their active companies. Please note, the list may be expanded after the release.

+

To enhance the update process and increase your awareness about significant changes, we are introducing the new #BreakingChangeAlert tag. This tag will be used to mark critical changes that could impact the operation of your system. Please pay special attention to any updates marked with this tag, as they may require additional actions on your part to adapt or adjust your current configuration.

+

Server scripts tracing

+

TEAM-23708 Added Tracing, a new tool for Low-code developers.

+

The tool allows you to analyze the execution of server scripts, find causes of errors, optimize solutions and view changes made.

+
    +
  • Unknown error: it is necessary to find out the details of what happened.
  • Solution work slowdown: it is important to determine the cause of performance decrease.
  • Solution enhancement: it is needed to evaluate the effectiveness of the changes made.
+

Tool features:

+
    +
  • Detailed view of traces, attributes and events.
  • Analyzing internal invocations (save, search, etc.) as well as external invocations (fetch).
  • Viewing information about occurring errors.
  • Filtering by system objects, execution time and trace duration.
  • Ability to specify for which configuration objects traces should be saved.
  • Export of traces to a .json file for easy exchange.
  • Quick transition to trace from business process instances and event handlers.
  • Automatic saved traces cleanup. In the On-Premises edition, you can set the storage period.
+

The Trace tool frees Low-code specialists from having to use:

+
    +
  • Third-party apps (Webhook, POSTMAN).
  • Internal custom tools for logging.
  • Additional functions in scripts for debugging.
+

Low-code CI/CD

+

TEAM-31527 When exporting and importing solutions containing extensions to system directories, the Low-code CI / CD tool now displays the changes made within the solution itself.

+

New features:

+
    +
  • Changes to system directories are visualized in the CI/CD difference tree.
  • The same directory with different metadata is now displayed wherever it is used, with the corresponding parameters.
+

This allows you to track changes to system directories when exporting and importing solutions and makes it easier to monitor whether they have been updated correctly.

+

Business process efficiency indicators

+

TEAM-15436 Added Indicators, a new Low-code development tool. It is intended for collecting and analyzing data about the progress of business processes in the system.

+

With this tool you can display the statistics of performing certain steps in the process on a chart. For example, you can calculate how many times the sales rep had to revise the contract after its approval was denied or how much the final amount of the deal changed from the planned one.

+

The principle of working with the tool is as follows:

+
    +
  1. You create an indicator within the company or a workspace, customize its type and context variables. The type depends on what data you want to get:
+
    +
  • Counter: it captures the passage of certain points on the process diagram. According to the configured process logic, you can count the increase or decrease of the counter value.
  • Value: it records a certain numerical (calculable) value.
  • Time interval: it fixes the time interval between two actions in the process with the possibility to calculate it with the business calendar.
+
    +
  1. After creation, a draft of the indicator appears. To use the indicator, publish it.
  2. Then on the business process diagram you add the indicator before the step whose execution statistics you want to record. To do this, you use the Set indicator’s value graphical element.
  3. To visualize the collected data, create a separate monitoring page and configure the Chart widget. When displaying, you can use filtering to analyze the data in detail.
+

External portal

+
    +
  1. TEAM-14743 Added page with notification about the external portal inactivity. Now instead of a 404 error, the user sees the following message: “The portal is currently inactive” and account activation is not performed.
  2. TEAM-32064 Added the My Portals button to the Page header widget, which allows the user to quickly switch between available portals without re-authorization. The button is only displayed if the user has access to two or more portals.
+

Discontinued support for Windows 7, 8/8.1 and legacy browser versions

+

TEAM-31947 Since the 2025.1 release, support for legacy Windows 7, 8/8.1 operating systems and older browser versions in BRIX is no longer supported. #BreakingChangeAlert

+

Reasons for change:

+
    +
  • Microsoft ended support for Windows 8.1 in January 2023 (read more), and Windows 7 and 8 even earlier.
  • Google Chrome and Chromium, the base of many modern browsers, also ended support for Windows 7 and 8/8.1 in January 2023 (read more).
  • BRIX workstation requirements (read more) are updated to meet today’s security and performance standards.
+

Updated minimum browser versions since the 2025.1 release:

+
    +
  • Google Chrome (including mobile): version 110 and above.
  • Microsoft Edge: version 110 and above.
  • Firefox: version 110 and above.
  • Opera: version 96 and above.
  • Yandex Browser: version 23 and above.
  • Safari for macOS and iOS: version 15 and above.
+

What will change for Windows 7 and 8/8.1 users:

+
    +
  • In mid-February 2025, an update of BRIX for Desktop will be released will be released that will no longer support Windows 7 and 8/8.1.
  • You will only be able to work with BRIX 2025.1 and above on these systems through browsers that still support them:
+
      +
    • Yandex Browser.
    • Firefox (versions 110-115).
+

Marketing

+

TEAM-30770 An A/B test gateway is implemented in the Customer journey map designer. It divides the scenario into branches. When the gateway is activated, a scenario branch is defined for each subscriber according to the specified settings. Several A/B test gateways can be used in a customer journey map.

+

Product catalog

+

TEAM-28121 Added BRIX Product catalog system solution. It allows you to create a hierarchical catalog of simple and configurable products. You can group products and their characteristics by subject, set constant values for characteristics, value ranges and dependence on each other.

+

The solution consists of the Product catalog workspace and the Select product widget, which is placed on the app item page, for example, in a lead and a deal. Using the widget, you can add a product of interest to the page of a lead or a deal and fill its configurable characteristics with specific values according to specified ranges and rules.

+

BRIX Product catalog is included in BRIX Sales Management and ELMA365 CX solutions and can be activated separately.

+

Document management

+
    +
  1. TEAM-7489 Added the option to rename created registration offices and categories for storing registered documents in the Document categorization workspace.
  2. TEAM-9417 In the Files workspace, the ability to add files in bulk has been implemented. You can now drag-n-drop multiple files from your computer or use the Create > Upload File button.
  3. TEAM-22508 Added the Parameters tab where you can set the settings for generating the certificate name using a template in the Advanced non-qualified e-signature activity of a business process.
  4. TEAM-27904 Added the ability to move item links between folders in the Files workspace. The Move action is available for links in both single and bulk modes and works similarly to moving files.
  5. TEAM-29643 In the Buttons: Download and Edit widget, added the ability to control the Share button, when clicked on which copied a link to a file. Now the button display in the widget can be enabled similarly to the Download and Edit buttons. If the user does not have the appropriate permissions, the button is hidden, which prevents viewing and downloading the file using the generated link.
  6. TEAM-29917 You can now specify an arbitrary app as an approval object in the settings of the Approval Sheets widget.
+

Previously, if an arbitrary app was used in a business process and sent for approval, you could not display the resolution in the Approval Sheets widget. Now, when placing the widget, for example, on a task form, you can specify that an arbitrary app is sent for approval.

+
    +
  1. TEAM-30768 Added an option to reset the counter in the app and workspace settings. You can now automatically reset the numbering, for example, at the beginning of a new year.
  2. TEAM-30817 Added an option to restrict users from selecting providers in the Signing activity settings in a business process. You can now enable the Restrict Providers setting and select from the list only the providers that will be available for signing.
  3. TEAM-31041 An .rtf file is now allowed to be uploaded to the document templates. It can be selected in the Generate from Template business process activity.
  4. TEAM-31043 Added support for .rtf format in the Insert Watermark business process activity. You can now insert watermarks to documents in this format with subsequent conversion to .pdf.
+

Additionally, removed unnecessary output file formats, leaving only .pdf generation.

+
    +
  1. TEAM-31568 Local offline editing is now available for documents added to app items in the BRIX application for desktop.
+

On the document page, the user can click the Edit Locally button. Then the file is saved in a special list in the BRIX app and opened in an appropriate office program, e.g. Word. Them the user edits and saves it. When the internet connection is restored, a new version of the document is added to BRIX.

+
    +
  1. TEAM-31429 If the user does not have a module for working with files installed, the Edit Locally button is displayed in the file view mode in BRIX. By clicking on it, the user can download .doc, .docx, .xls, and .xlsx files for local editing.
+

It is available in the BRIX desktop application.

+
    +
  1. TEAM-31553 Removed the ability to export to .pdf in the standard approval and approval sheet templates because the template does not transfer correctly and breaks into multiple pages.
+

Implementation details:

+
    +
  • For custom templates, export to .pdf is not removed.
  • Export for .docx templates works correctly.
  • For .xlsx it is important to set up the mapping table correctly to avoid page splitting.
+
    +
  1. TEAM-31584 In the Administration > Font Settings workspace, the process for applying downloaded .ttf fonts has been changed. Now after downloading a font, simply click Save and the font will automatically update within 5 minutes.
+

Previously, manual reloading of the service by the administrator was required to apply the changes. Now the update is performed automatically without additional actions.

+
    +
  1. TEAM-32263 Added display of the reserved number on the Register document task form.
+

Contracts

+

TEAM-32671 Added the ability to export contract items.

+

Projects

+
    +
  1. TEAM-29799 When performing a search in the Project Folder widget, subfolder files are now taken into account.
  2. TEAM-22922 Added Undo and Redo buttons to the calendar editing mode.
  3. TEAM-28084 Added the Start Work button to the project view form. Now from the project view form you can move a project from draft to work and actually change its status.
+

The button settings can be changed by the system administrator within the configuration.

+
    +
  1. TEAM-30688 Now it is possible to save the last customized Gantt chart view on the project page. Also added the option to save the status of deployed task branches on the plan.
  2. TEAM-31167 Added logic for calculating forecast dates of task completion to the project plan creation by template.
  3. TEAM-31569 The Done button is hidden if the progress of a project task is modified via a widget. Now the status and controls always correspond to the current state of the task.
  4. TEAM-31901 The project schedule import now supports custom fields. Supported data includes the following: string, fractional and integer numbers, yes/no selection, date/time, category, money, reference, phone, email, user, full name, account, and role.
  5. TEAM-31980 Removed unnecessary action confirmation box on the project page when performing a project task from the Gantt chart.
  6. TEAM-32615 Added the Edit in modal window option to the Gantt Chart widget settings. If the option is disabled, editing of the schedule is performed directly on the project view form.
+

Service

+
    +
  1. TEAM-26119 System supervisor permission assignment has been changed. Before, the System supervisor was automatically added to all live chats supervisors and given the corresponding permissions.
+

Now the system supervisor is not a live chat supervisor by default. The Live Chats workspace is hidden for them, and they do not receive pop-up notifications about new sessions. If necessary, the system supervisor can add themselves to the desired live chat via the Administration workspace.

+
    +
  1. TEAM-26538 Added the ability to change the positioning of the LiveChat button on the website page for the desktop and mobile versions. When setting up a live chat in the Administration workspace on the LiveChat tab, you can set indents in pixels (from 0 to 1000).
+
    +
  1. TEAM-29905 Added error handling of Telegram integration when trying to create a session ("429 Too Many Requests"), which occurred when the number of requests exceeded the allowed number of requests. Now a notification containing an explanation of the error 429 is displayed to the user.
+
    +
  1. TEAM-31170 The error notifications for the Assign an operator and Assign to the “last” operator actions now display a link to the profile of a user who could not be assigned as an operator due to their inactivity.
  2. TEAM-31952 The Live Chat Messages widget is adapted for BRIX mobile version.
  3. TEAM-31968 Added image preview in LiveChat with resize function using plus and minus icons, mouse wheel or slider.
+

The preview is available for the following:

+
    +
  • Images sent by an operator.
  • Images uploaded by a client.
  • Before the image is sent.
+
    +
  1. TEAM-32672 In the Live Chat Messages widget settings, the Events and System tabs have been added. These tabs specify system settings that allow you to control the widgets visibility and access, customize its behavior when hovering over the cursor and when other events occur.
+

User experience

+

TEAM-7315 In the search form on the app page, the Search and Save as Filter buttons are now always visible and are not hidden when scrolling. When you enter a query in the search bar, the search form opens. If there are many fields, the buttons remain fixed at the bottom of the screen. This allows you to launch a search without scrolling to the end of the form.

+

Authorization and user management

+
    +
  1. TEAM-11483 Now when changing password or locking a user, their active sessions are canceled and the user is forcibly logged out.
  2. TEAM-29015 An external remote or locked user will now not receive a password reset email.
+

Export and import packages

+

TEAM-24570 The improvements significantly optimized the generation of .e365 export packages, making them easier to work with in version control systems and reducing conflicts in parallel development.

+

The main changes:

+
    +
  • Unnecessary system data (author, editor, creation, modification, deletion dates) has been excluded.
  • Keys in data arrays have been organized (for example, lists of context variables).
  • Process, widget, and document templates are not updated unless they have changed, which eliminates unnecessary versions.
  • All IDs that are generated during import have been removed from the export.
+

Feature flags

+

The restrictions caused by feature flags have been removed. The following features are now available by default and are not controlled by feature flags:

+
    +
  1. TEAM-31671 The enableFeedByTargets feature flag: the Object-based activity stream mode displays messages in three tabs: chats, objects, and favorites. This is convenient if employees often have discussions in the object activity streams, for example, when they work with requests or applications.
  2. TEAM-32006 The allowAlwaysShowUserFullName feature flag: the Always display full names option so that when searching in the Users type field, the first, last and middle names of employees are displayed. This will allow you to distinguish employees with the same initials.
+

TS SDK and API

+
    +
  1. TEAM-32308 Made changes to the order of functions in the search() chain to speed up script execution. #BreakingChangeAlert
+

Now the content passed to the where chain is not processed at the moment of calling, but when calling first, all, or count instead.

+

As an example, let’s consider the following script:

+

async function search_items(): Promise<void> {
+ const search = Application.search();
+ console.debug('1');
+ search.where((f) => {
+ console.debug('2');
+ return f.__name.eq(Context.data.name);
+ });
+ console.debug('3');
+ const res = await search.count();
+}

+

Console contents in version 2024.11:

+

1
+2
+3

+

Console contents in version 2025.1 (the order has changed):

+

1
+3
+2

+
    +
  1. TEAM-18293 Added the ability to bulk delete app items using scripts
+

Application.batch().delete():

+

const count = await Application.batch()
+ .delete()
+ .where((f, g) => f.__name.eq(''))
+ .notify(needNotify)
+ .size(batchSize)
+ .all();

+

All bulk operations (create, update, delete) require the user to have permissions to import data in the app.

+
    +
  1. TEAM-28786 The ability to retrieve table column names has been added to the API app diagrams. Now the API returns not only table column codes, but also their display names. This allows the app diagram data to be used in a more convenient format without the need for additional processing.
  2. TEAM-31153 Added the GET /pub/v1/disk/file/{id} API method. It returns minimal information about the file: id, title, dates, author, who updated, and its current version.
  3. TEAM-22101 Now when using the createWithAuthData method, no invitation is sent to the user, as the user is created immediately with the Active status.
+

This allows users with OAuth2 binding to be created without additional mailing, similar to the addUserWithoutConfirmation method for portal users.

+

Bugs fixed

+
    +
  1. TEAM-4713 If you disabled a service variable in the gateway without deleting the conditions of the connectors, you could not access the item properties. Now, when you disable a service variable, the conditions are automatically removed or an informational message is displayed.
  2. TEAM-30313 When updating solutions and workspaces, changed process names were not carried over. After importing a new version of a process into the target company, the name remained old. Now when updating the solution, the process names are synchronized correctly.
  3. TEAM-31108 Improved the order of processing the reply address in the Email Notification activity:
+

1. If the Reply address option is filled in, the option setting is used.

+

2. If the Reply address option is not filled in, but the Send from Reply-to address setting is enabled, then the address set in the Administration > Email Settings workspace in the Default reply address option is used.

+

3. In other cases, the login set in the Administration > Email Settings workspace is used.

+
    +
  1. TEAM-27241 The setFilter filter for the Date/Time field allowed values to be set that did not match the specified conditions, which resulted in incorrect data entry. Now, if the selected date does not match the filter, the field is automatically reverted to the previous value. Similar behavior is implemented for the Number type fields.
  2. TEAM-28246 When trying to enter data of another type (for example, a number) into a field of the String type via API, the following error occurred: “Failed to check for duplicates when saving”, and also the following error occurred in the console: “TypeError: STRING must be a string”. This behavior has been fixed. Now the error message displays the correct reason, excluding misleading wording.
  3. TEAM-28736 The GET pub/v1/scheme/namespaces/{namespace}/processes/{code} method did not include variable mapping data in the response, such as the localized name or currency type for money fields. This error has been fixed.
  4. TEAM-29486 If the External Users directory is configured to generate the item name via a template or a key variable, “<No name>” was displayed when creating a record. This error has been fixed.
+
    +
  1. TEAM-31387 When activating the Sales Management solution, the business process activity settings page would freeze if you opened the parameters of a custom action in the CRM workspace. Now custom actions in business process activities open correctly regardless of the activated solutions.
+
    +
  1. TEAM-31507 When publishing an event handler, spontaneous exit from the constructor occurred periodically even if the script was valid. In the handler table, the handler was displayed in italics and with a red asterisk, indicating unsuccessful publication, although the status was corrected after refreshing the page. This behavior has been fixed.
  2. TEAM-31905 Previously, when performing bulk creation of app items using a script without the right to import data, the following error occurred: “Error: can't create many items: import access denied: forbidden”.
+

What has changed:

+
    +
  • The error message is now more informative: “cant create many items: no import permission for app 'ns:code': import access denied: forbidden”.
  • An indication on the necessity of Data Import type permissions to perform batch operations has been added to the method description.
  • Updated Help materials.
+
    +
  1. TEAM-32066 In server scripts, a wait blocking occurred while executing a call to fetch and another async operation, and a timeout error occurred in the script:
+

font-family:"Times New Roman",serif;color:#333333;mso-ansi-language:EN-US">async function test(): Promise<void> {
+font-family:"Times New Roman",serif;color:#333333;mso-ansi-language:EN-US">  const res = await fetch(`https://ya.ru/`); //here could be any address
+color:#333333">
+color:#333333;mso-ansi-language:EN-US">const users = await System.users.search().first();
+font-family:"Times New Roman",serif;color:#333333;mso-ansi-language:EN-US">  const text = await res.text(); //this is where the blocking and freezing occurred
+color:#333333">}

+

This behavior has been fixed in the new version, as well as in versions 2024.10 and 2024.11.

+
    +
  1. TEAM-32222 Web API description for creating an app item was incorrectly generated if a field of an Arbitrary App type was used. The description for such a field specified an object, although it should be an array of objects. The description has been fixed.
  2. TEAM-32327 Previously, when bulk updating app item fields using a script, the Author system field was changed, which resulted in incorrect data display. Now, when bulk updating field values, the author of the item is not changed, the original one remains.
  3. TEAM-32551 When clearing a Number type variable with the Read only attribute via null or undefined, the value in the field was not updated, although the variable became undefined in the console. Now the variable is correctly displayed as empty after clearing.
  4. TEAM-32790 When creating an external user via the External Users workspace, the following error occurred: “Error: __id is required” when the user tried to save data and go to the profile. This error has been fixed.
  5. TEAM-32934 When adding days off for 01/01/2025 and 01/06/2025, an error about a duplicate exception occurred in the work calendar. This behavior has been fixed.
  6. TEAM-33027 When creating a Date/Time object specifying month 0 (January), the value was incorrectly set as 01/01/1970, while it worked correctly for other months. This behavior has been fixed.
  7. TEAM-31062 When opening two or more tabs with an external portal in one browser, an error could occur: “Cache failed to synchronize. Please reload or close the other tabs with the system to display the page correctly”. This error has been fixed.
  8. TEAM-32782 Fixed the display of holidays in the calendar. Previously they were not highlighted in red.
  9. TEAM-32800 Previously push notifications stopped working if a message exceeding the allowed size (e.g. 2300 characters for IOS) was sent. This would cause the device token to be deleted and new notifications would not reach the user.
+

Now, push notifications that are too long are automatically shortened to the allowable size, preventing loss of tokens and correct delivery of all subsequent notifications.

+
    +
  1. TEAM-33038 An issue was found when working with apps that have folder access restrictions. Users with edit permissions could not modify an item if the combined length of workspace and app codes exceeded 64 characters. It has been fixed.
  2. TEAM-14700 The buttons for attaching a file (the paper clip icon) and mentioning a user (@) were not displayed in the activity stream because their color matched the background. The buttons are now visible, have the correct contrast, and display in the activity stream without any errors.
  3. TEAM-15322 In contracts, when a source app item was deleted using a page, it remained in the list on the contract page. Now the list of items in the contract is automatically updated and deleted items are no longer displayed.
  4. TEAM-16822 Fixed document file deletion via the Buttons: Download and Edit widget. Added processing for deleted files. Now a task or app form with widget does not freeze, and it is possible to work with an app item and then add a file.
  5. TEAM-28184 Project tasks created in custom project types were missing a link to a linked project, unlike tasks in base types. This behavior has been fixed.
  6. TEAM-29441 In the mobile version of the system, the Edit button in the Buttons: Download and Edit widget was displayed even if its display was disabled in the widget settings. This bug has been fixed.
  7. TEAM-30041 In the generated documents, the number of decimal places did not match the specified ones in system settings. More characters were being displayed than specified in the variable settings. This error has been fixed.
  8. TEAM-30062 With BRIX Advanced Security Pack installed and file protection enabled, errors occurred when sending e-mail messages with attachments:
+
    +
  • When importing data: “failed to get file body: 401 Unauthorized”.
  • When sending an Email with attachment: “got HTTP status code 401”.
+

This bug has been fixed.

+
    +
  1. TEAM-30442 Previously, if a template project did not exist (for example, it was deleted or missing after a configuration migration), the Edit button in the Administration > Project Types workspace did not work.
+

Now if there is no template project, a new empty template is automatically created.

+
    +
  1. TEAM-30935 Custom statuses in approval sheets were not displayed or were ignored if multiple approval activities were used in a process. Such statuses are now displayed correctly.
  2. TEAM-30953 Previously, if a value was passed from a File type variable to another variable, editing the new variable modified the original file instead of creating an independent copy. Now editing does not affect the original.
  3. TEAM-31121 The Reverse auto-scheduling feature is hidden from the Gantt chart user interface. Gantt chart functionality needs to be enhanced for the backward planning feature to work correctly. The improvement is scheduled for the third or fourth quarter of 2025.
  4. TEAM-31123 Added the ability to link three or more phase tasks on a Gantt chart.
  5. TEAM-31434 Added priority for fonts downloaded via the Administration workspace. This priority now preserves correct formatting (line breaks) when converting documents to .pdf.
  6. TEAM-31723 When downloading signed attributes, the __version field was added even though it was not selected in the settings. Now when downloading, only the fields specified in the signing settings are present in the file.
  7. TEAM-31837 Fixed forms freezing when using the Hierarchical Structure widget.
  8. TEAM-31847 Project border shift logic now includes processing of nested tasks. Previously, nested tasks were not taken into account when calculating the automatic project border shift.
  9. TEAM-32135 Improved the NumberToString() function in the templating engine. Incorrect processing of a number with a fractional part has been fixed.
  10. TEAM-32157 Fixed project tasks highlighting with the Process type.
  11. TEAM-32192 Fixed the following pop-up error: “Cannot read properties of undefined” when closing a project.
  12. TEAM-32228 When exporting and importing solutions, hierarchical directory filters did not change their names and folder binding, nor were they deleted when necessary. This behavior has been fixed.
  13. TEAM-32342 When using a custom signing provider in E-IMZO, the task would not close after signing and the process would not continue. It has been fixed by fixing errors in extension zone operation in terms of handling electronic signatures in custom E-signature modules.
  14. TEAM-32409 When using a SES module with two-factor authorization, an “Internal error” occurred when attempting to sign a document. Now an additional check has been added and the document signing process is successful after entering the code sent to the specified email.
  15. TEAM-32442 In the default signature watermark template, the signature data was overlapping. The template has been fixed in the printed form of the document.
  16. TEAM-32731 With BRIX Advanced Security Pack installed and file protection enabled, import did not work and the company logo was not displayed. This error has been fixed. Added an exception for the logo to work when file protection is enabled.
  17. TEAM-32758 Fixed time display in a Date/Time type variable when generating a file by a template. The display corresponds to the variable settings.
  18. TEAM-32798 On initial loading of the contract page, after selecting multiple records and clicking the Selected Items button, the bulk action drop-down list was not displayed. Instead, only an arrow was shown. This error has been fixed.
  19. TEAM-32963 When completing an associated task, a false notification about incomplete tasks present occurred even if the previous parent task had already been closed. Now the status check of the preceding tasks is done correctly and the notification is not displayed unnecessarily.
  20. TEAM-31777 To improve the user experience, the icon for the Create Shortcut feature in the Files workspace has been changed. Previously, it was similar to the Copy Link function icon.
  21. TEAM-31848 Previously, when publishing a calendar plan, the enabled Auto-scheduling option caused the task dates to be adjusted. Now the function does not make the adjustment when publishing, only during the calendar plan editing.
  22. TEAM-31960 Archived project plans are now displayed in a Gantt chart. This allows you to view project plans even if they are in the Archived status and retrospectively analyze completed projects before returning them to work.
  23. TEAM-32975 Corrected the description of the toPdf and applyWatermark methods for TS SDK scripts.
  24. TEAM-27194 Fixed incorrect system behavior when receiving a pop-up notification about a new session: previously clicking on the notification did not switch to the session. After the improvement, clicking on the notification triggers the transition to the session, also:
+

1. If there was a window opened, and it does not require saving changes, the window is closed.

+

2. If there was a window opened, and it requires changes to be saved, the user is offered to save the changes (for example, on the edit form). If the user refuses, the session does not open.

+
    +
  1. TEAM-30141 Added handling of the messenger error “400 USERNAME_NOT_OCCUPIED” that occurs when trying to create a session in a Telegram channel. Now when such a response is returned, the user receives a clear notification that it is impossible to create a session for the selected account due to an error on the messenger side.
  2. TEAM-31834 Improved system behavior when quoting and editing messages in the session chat: now if a typed quote or edited text cannot be sent, the unsent message is saved so that the user does not have to type it again for the next attempt to send it.
  3. TEAM-31928 Fixed incorrect system behavior when quoting a message in a chat session. Prior to the fix, when quoting was used, the edited text was saved in the input field instead of the previously selected edit. After the fix, when quoting is selected, only the quote is displayed in the input field.
  4. TEAM-32303 Changed the operator selection logic in the session routing rule when selecting the Assign to Least Occupied Operator in a Group option.
+

Before the fix, only locked users were excluded from the selection. After the fix, when a rule with the specified action is triggered, a session cannot be assigned to users with the Invited, Invitation canceled, Invitation rejected statuses, i.e. a session can only be assigned to active users. If there are no operators matching these conditions, a system notification is issued.

+
    +
  1. TEAM-32376 The Counter item is hidden from the Sessions app settings because the Index number system field is not used in this app now.
  2. TEAM-32433 Fixed incorrect system behavior when moving words in a message from a client in LiveChat window: now it is moved word by word, left-aligned.
  3. TEAM-32460 Hidden the time display of the welcome message in LiveChat, since it is not actually part of the correspondence and is not indicative.
  4. TEAM-32650 Fixed an issue with the Sessions app not being available in the Live Chats workspace for the operators and supervisors who are not system administrators and supervisors.
  5. TEAM-12050 When working with business processes, variables assigned in a task context with empty values were not saved correctly. This caused variable values to remain the same even though they should have been reset. This behavior has been fixed.
  6. TEAM-22789 Now number of items in status on the kanban board is not shown when set to Do not Show in the Show the number of items in the search field setting.
  7. TEAM-31812 The activity stream counter was not working correctly, showing nonexistent unread messages. This bug has been fixed, now the Read button removes all incorrect counters.
  8. TEAM-31866 After creating a new group in a workspace, it was not displayed in the tree until the page refreshed. This was causing a possible incorrect retry to create a group. Now the new group is displayed immediately after creation, without the need to refresh the page.
  9. TEAM-31925 For substitutions of the Inform type created via script with reassignTasksOnEnd = true and reassignTasksOnStart = true enabled, tasks from the absent user should not have been reassigned, but they were. This bug has been fixed.
  10. TEAM-32011 Added error handling for email address and phone number when re-importing a user that was previously imported and deleted.
  11. TEAM-32470 When debugging an unpublished process with a task with a custom form, the task would not open and the error “Cannot read properties of undefined (reading ‘code’)” would appear. This error has been fixed. Now the process with a new form opens correctly in debugging mode.
  12. TEAM-32649 An error with the code 404 instead of 403 was returned earlier when the app page was not accessed. Now when a user does not have an access, error 403 is correctly received, indicating insufficient permissions to access the resource.
  13. TEAM-32925 When adding two modal windows with a Table type field to a form and filling at least one box, the table would start flashing and error 404 would appear in the console. This behavior has been fixed.
  14. TEAM-32962 When trying to leave a reaction to a message in the mobile version, the following issues occurred: the reaction was either not left or was left twice. This bug has been fixed.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_1_op.html b/platform/2025_1_op.html new file mode 100644 index 0000000..16420c3 --- /dev/null +++ b/platform/2025_1_op.html @@ -0,0 +1,181 @@ + + + + + 2025.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2025.1

+
+ +
+

2025.1

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2025.1 includes all updates for BRIX SaaS 2025.1, as well as the following improvements:

+
    +
  1. Added calculation of the GOMAXPROCS parameter for each container to improve the BRIX application efficiency.
  2. Added a HAProxy add-on, which is the DB Gateway tool. It is designed to proxy queries to Redis, RabbitMQ, PostgreSQL and MinIO databases. Access is provided through an entry point in a Kubernetes cluster. This simplifies the process of connecting to and working with databases, and optimizes the number of infrastructure components required to configure proxying.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_2.html b/platform/2025_2.html new file mode 100644 index 0000000..c5320d3 --- /dev/null +++ b/platform/2025_2.html @@ -0,0 +1,262 @@ + + + + + 2025.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2025.2

+
+ +
+

2025.2

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After March 17, 2025, all changes will become available to our clients in their active companies. Please note, the list may grow after the release.

+

Please pay special attention to any updates with the #BreakingChangeAlert tag. They might require you to take extra steps to adapt or adjust your current configuration.

+

Server scripts tracing

+
    +
  1. TEAM-32677 On the trace page, added the button to copy a link to this trace to the clipboard. Using the link, any user of the system will be able to view the contents of the trace and the script execution diagram.
  2. TEAM-33037 On the trace page, added the button to download this trace to a PC. You can find this button next to the search bar.
  3. TEAM-33143 Added filter to the Tracing page to search for a trace by its ID. If a trace is found, the page of the trace with this ID will automatically open. You can control searching with the Esc, Tab, and Enter keyboard keys.
+

Performance report

+

TEAM-19937 The performance report now records a metric for request execution time in milliseconds along with queuing time: elma365_telemetry_script_execution_duration_with_queue.

+

Administration

+

TEAM-33929 In Administration > Tokens, token values are no longer displayed in the token list. A token can only be retrieved by copying its value to the clipboard.

+

Business process performance indicators

+
    +
  1. TEAM-33168 Added a feature to create performance indicators at the workspace level and use them in business processes of other workspaces.
  2. TEAM-32940 Added a feature to create performance indicators for business processes at the app, module, and company levels.
+

Structure export and import

+

TEAM-10260 Improved the process of importing components between different companies. Added a check for business processes of the imported component to detect mismatches in the property types used. This helps prevent the loading of incorrect structures.

+

External portal

+
    +
  1. TEAM-29302 Added a feature to register in multiple external portals using the same email.
  2. TEAM-33072 Added a feature to select a custom module as the second authentication factor in the authorization settings for an external portal.
+

Widgets

+

TEAM-32932 Improved check for mandatory filling in of hidden fields on the app form that are shown on certain conditions.

+

Here is how it works. A required field is added to the app form, but it only appears if a specific condition is met. For example, it might show up if another field of the Yes/No switch type is set to Yes.

+

Previously, if the condition wasn’t met and the field was hidden, the system would still ask you to fill it in when saving the app item, even though the field wasn’t visible.

+

Now, starting from version 2025.2, if a required field is hidden because the condition isn’t met, the system won’t ask you to fill it in. This improvement makes it easier to manage the visibility of mandatory fields.

+

Document management

+
    +
  1. TEAM-9417 In the Files workspace, there is a new feature to add files in bulk. You can now load several files from your PC by either dragging and dropping them or using the Create > Upload File button.
  2. TEAM-5515 In the Files workspace, there is a new feature to load folders with files from a local PC.
  3. TEAM-3746 Search by subfolders has been added to the Files workspace. To do this, enable the Including folders option in the search bar.
  4. TEAM-30547 To improve the user experience, added tooltips in the file list in the Files workspace. They pop up when you hover over the action icons next to the uploaded files.
  5. TEAM-28893 In the Sign activity settings, added an option to require a comment when someone rejects signing a document.
  6. TEAM-31630 Added Count() function to the template syntax to check the number of rows in a table.

    +The function contains one parameter —  a variable of the Table type or an array of collections. As a result of the function processing, the number of items in the collection is shown in the template.

    +You can also use the function in a loop. Example of such a loop:
+
    +
  • For tables:
+

{for row in {$report_table}}
+Subrow count: {Count({$row.execution})}
+{end}

+
    +
  • For an array of collections:
+

{for row2 in {$test_app}}
+Subrow count: {Count({$row2.multi})}
+{end}

+
    +
  1. TEAM-33557 In the Generate from Template activity, added an option to specify .doc, .xls, and .rtf files as output files.
  2. TEAM-32287 Improved display of files in the Upload and Preview File widget if online document viewing and editing services are not connected to the system. Now, files on the file preview page are automatically converted to .pdf format and users can preview them.
+

Projects

+
    +
  1. TEAM-30691 Added prohibition of collaborative editing of the project calendar plan. Now, if one user already opens a plan in edit mode, the other user will see a notification about it.
  2. TEAM-32866 Added the Change of project task progress activity to the business process designer. It allows you to automatically edit the progress percentage of a project task. Previously, synchronization of the progress percentage had to be implemented using scripts.
  3. TEAM-31879 Added the Control system status in the Project Task app. Now, users can search for project tasks by this parameter. In the list of tasks in the app and on the Gantt chart, controlled tasks are marked with a special icon.
+

CRM

+

TEAM-34207 Made working with CRM tasks easier. Now when editing a task start date, its end date is also adjusted automatically.

+

Service

+
    +
  1. TEAM-20684 Added a feature to add several message recipients on the session page created in a live chat with connected email.
  2. TEAM-32069 In Administration > Live Chats, added a feature to find necessary live chats in the list of created records. You can search by live chat name and other live chat parameters.
  3. TEAM-33042 In the Live Chat Messages widget, added a feature to display sessions created by requests from an online LiveChat. To do this, you need to enable showing history by account in the widget. Previously, sessions from this live chat type were not available.
+

Authorization and user management

+
    +
  1. TEAM-32605 Added a feature to perform bulk actions in Administration > Users. You can now select several users and perform the following actions:
+
    +
  • Change AD/LDAP server.
  • Block.
  • Delete.
  • Unlock.
  • Restore.
+
    +
  1. TEAM-17262 Improved end-to-end user authorization. Now, when authorizing through any SAML provider, a user is redirected to the page specified in the returnUrl parameter.
+

User experience

+
    +
  1. TEAM-31686 Optimized data loading for efficient work with a large number of users on the Schedule compliance page. Now, when the page opens, only users from the current employee's department are loaded in requests.
  2. TEAM-20847 On the app page, added a search for several items stored in the App (one) property. The request is set similarly to search by the App (many) property.
  3. TEAM-22071 Improved eager data loading. Now, when loading a list of app items in the form of tiles, tables, or a Kanban board, only the fields necessary for display are requested.
+

Messages

+
    +
  1. TEAM-28251 Added a feature to view attachments in chats. You can now access photos, videos, audio, and documents shared in the chat. The Attachments button has been added to the chat interface for quick access to shared files. Additionally, a search function has been included to help you find specific files quickly.
  2. TEAM-28252 Updated the display of the button bar with available actions on the chat pages. The top right corner of the chat now displays buttons for viewing participants and attachments, creating an event, and managing notifications from the chat.
  3. TEAM-31775 Improved the display of images when entering messages. Now, when inserting an image/video into the message input field, they will not be shown in view mode.
+

TS SDK and API

+

TEAM-1195 Optimized server scripts. Reduced the amount of metadata loaded into contexts.

+

Please note that the context property from the process now returns an empty object (e.g. Namespace.processes.my_processes.context) and is marked deprecated. Its typing was previously incorrect, and it was not usable.

+

Additionally, the content passed into the where closure is no longer processed immediately when where is called. Instead, it is processed at the time of calling first, all, or count. #BreakingChangeAlert

+

Bugs fixed

+
    +
  1. TEAM-29205 Failed to enter a value in a Category type property created on an app form via a server script. The bug has been fixed. Now, the script is executed correctly.
  2. TEAM-31210 When using the setPermissions method, deleted nested fields were processed. A property named (no data) was created on the Access Settings app page.

    +The bug has been fixed. Now, the user will see a notification that access rights cannot be set for such a field.
  3. TEAM-32043 A user could not accept an invitation to a portal if the user had previously registered on another portal using the same email address. The bug has been fixed.
  4. TEAM-32309 The TypeError: Cannot read properties of undefined (reading 'app') error was displayed when executing a script to retrieve data from an app item. The script now executes correctly.
  5. TEAM-32515 When saving created app items using the batch() method, the item IDs were not updated. Now, the batch().save() method updates identifiers for new app items and they can be used in the script immediately:
+

async function insert(): Promise<void> {
+    const item = Application.create();
+    item.data.__name = 'New app item';
+    await Application.batch().save().items([item]).all();
+    // the value of item.data.__id is known
+    // you can add such an item to context as a link to the item
+    Context.data.out = item;
+}

+
    +
  1. TEAM-32805 Added an error message to the Low-code CI / CD developer tool when comparing the current and external configurations. This error occurs when checking and performing exports.
  2. TEAM-33974 Fixed the portal.addUser method for creating an external user using a script. Previously, if a user was already registered to the specified email address, error 409 occurred with the incorrect message: “fail to sign check status”. Now, under these conditions, the following error appears: “An external user with the specified email address or phone number is already registered in the company”.
  3. TEAM-4451 Fixed text formatting in fields of the String (string, text) type. Now, if a field is filled automatically, for example, with data from a .json file, spaces and tabs in Read only mode are displayed as they are.
  4. TEAM-12425 Improved sending notifications to a user if they are registered in two companies with one email. Now, notifications come only from the company where the user is logged in.
  5. TEAM-24980 Fixed a bug occurring when checking required fields with the Read only option enabled. Now, values in such fields are checked correctly according to the specified condition. If it does not match, the user will see a message.
  6. TEAM-1249 When trying to move a folder in the Files workspace, a warning message is added stating that a folder with that name already exists.
  7. TEAM-23354 Fixed display of table indexes in generated documents. Previously, when generating documents by template, table cells containing indexes were left blank.
  8. TEAM-30135 In the getByElementId method for getting project plan element links, the offset parameter was not working correctly. The bug has been fixed. Now, the values specified in the offset and limit parameters are taken into account when using the method.
  9. TEAM-31726 Found a bug when opening a task from a Gantt chart. Now, in the Project plan widget the Editing in modal window option is disabled by default. The Gantt chart opens directly on the project view form. You can expand the chart to full screen by clicking the corresponding icon on the item form.
  10. TEAM-33222 In the Informed users widget, when hovering over the information icon next to the user name, the current status was not displayed. The bug has been fixed. Now, the status set in the process is shown in the approval sheets and lists of informed users.
  11. TEAM-33440 When customizing the widget for signing an app item, the set conditions for displaying the button were not saved. The bug has been fixed.
  12. TEAM-34029 Found a bug: if you set the End > Start link between a milestone task and a regular task in the project plan, and then try to complete the regular task without executing the previous milestone task, a logging error occurs.

    +The bug has been fixed. Excluded check for execution of the linked milestone task. In the specified case, the regular task can now be completed.
  13. TEAM-22339 In the About the project widget settings, a typo in the description of the Display project editing button option has been corrected.
  14. TEAM-23778 When signing files, removed the option to select a custom electronic signature provider created using the System.providers.createDraft() method. Previously, such providers were erroneously available for selection.
  15. TEAM-32269 When publishing a project plan, added check for specified task executors. Now, if deleted or blocked users are specified as responsible, the employee will see a notification about this. The plan cannot be published.
  16. TEAM-33156 To avoid errors and duplication, eliminated changing the types of existing document categorization directories using Web API methods.
  17. TEAM-33021 In the BRIX mobile application, the labels for session counters in the queue have been fixed. The labels are now correctly declined.
  18. TEAM-31868 Previously, when an operator sent a message in a session after a bot response, the user would receive a “Chat assigned to operator” message in Telegram. The bug has been fixed. Now, unnecessary messages are not sent to the user.
  19. TEAM-32673 The app page was not searchable by Account type field. The bug has been fixed.
  20. TEAM-24723 When creating a Table type chart and measuring by date, the previous month was incorrectly displayed in the values. The bug has been fixed.
  21. TEAM-25717 If the Chart widget was filled using a script and the results of its execution had zero values (0,00), the chart did not display bar indicators. The bug has been fixed.
  22. TEAM-25988 If multiple reply addresses were specified in the Send personal email activity, it was impossible to reply to one of them because the addresses were enclosed in quotation marks in the sent email. The bug has been fixed.
  23. TEAM-29434 When using the My Tasks widget on the external portal page, the Active/All switches were hidden. The bug has been fixed. Now, if the corresponding option is enabled in the widget settings, the page displays tabs with active and all tasks.
  24. TEAM-30785 Fixed display of the table with tasks on screens with different resolutions. Now, the layout is adapted to the screen resolution and the table is displayed correctly.
  25. TEAM-31653 Added a readable error when a business process stops if an image instead of a file is used in the Files type property.
  26. TEAM-32647 Fixed searching for process instances by the IDs of the app items used in them with the Web API. Previously, an instance could not be found because a property from context was returned with no value. Now, the search works correctly.
  27. TEAM-33260 Fixed a bug with the Email Notification activity. If a different email address was specified in the reply address, the process stopped at the activity with the following error: “plain exit from sending mail by error: internal error”. Now, the process is running correctly.
  28. TEAM-19020 Bulk editing does not apply to custom app forms. It is impossible now to create an advanced form widget for bulk actions. For apps that already have an advanced form, the option to reset the settings will remain.
  29. TEAM-20040 Found a bug when exporting a solution if an App type field from another workspace is deleted in a table. Now, deleted fields are ignored during export.
  30. TEAM-24320 Found a bug: when a user was inactive on one of the browser tabs, the user's entire session was terminated despite activity on another tab. The bug has been fixed. When the time limit expires, the session is not closed if an activity was recorded on at least one of the open tabs.
  31. TEAM-24588 An error occurred during bulk editing if the Forbid simultaneous editing of items option is enabled in the app. The bug has been fixed.
  32. TEAM-28435 Blocked users mistakenly received a message in the email about a scheduled password change. The bug has been fixed.
  33. TEAM-29904 The applied custom filter in the app was reset during page refresh. The bug has been fixed: after page refresh, the items are displayed according to the applied filter.
  34. TEAM-31957 In the App type field settings, the value of the Property Name field was incorrectly saved when it was changed. The bug has been fixed: the changed value is saved correctly.
  35. TEAM-32160 When auto-updating the list of apps, multiple links to the same app item were passed in the batch request. The bug has been fixed: each unique item occurs only once.
  36. TEAM-33043 An error occurred in chats when entering a message if editing or quoting another message had been selected and reset: the cursor did not fit in the text field and the message was entered line by line. The bug has been fixed.
  37. TEAM-33124 Fixed a bug that occurred when trying to open an app item after changing the number of participants of an app group or workspace.
  38. TEAM-33354 Fixed a bug when a deleted user with the Invited status occupied one named license.
  39. TEAM-33480 Fixed a bug when the Field total option was not displayed on the Kanban board.
  40. TEAM-34104 Fixed a bug when new portal pages created by template were displayed incorrectly.
  41. TEAM-29703 If the Email workspace was used in the system and the option to automatically bind emails to contacts was enabled, disabling the duplicate search in the Contacts app caused the Linked emails widget to stop showing emails on item pages. The bug has been fixed.
  42. TEAM-34279 Found a bug in display of action buttons on the message page in the Email workspace. The button layout has been fixed. Actions are now displayed correctly.
  43. TEAM-31219 Fixed a bug in the hasPermission method when checking permissions for an app item. Now, the script works correctly and checks for permissions even for a deleted item.
  44. TEAM-33568 Found a bug in the Upload and Preview File widget: the document was displayed on the edit form of an app item only after an additional click on the page content. The bug has been fixed. Now, the file is displayed immediately after opening the edit form.
  45. TEAM-33645 While creating a web document in the Files workspace, multiple copies of the document were created when the Save button was clicked again. The bug has been fixed. The button is now locked until you finish saving the web document.
  46. TEAM-33401 When chatting in a session, messages from an operator and from a client in LiveChat history were not different and looked the same: the color and left margin markup matched. The bug has been fixed. The messages are now displayed correctly.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_2_op.html b/platform/2025_2_op.html new file mode 100644 index 0000000..28819a1 --- /dev/null +++ b/platform/2025_2_op.html @@ -0,0 +1,181 @@ + + + + + 2025.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2025.2

+
+ +
+

2025.2

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2025.2 includes all updates for BRIX SaaS 2025.2, as well as the following improvements:

+
    +
  1. Added features to improve the security and fault tolerance of your deployment by configuring advanced parameters in BRIX Enterprise: SecurityContext, Taints and Tolerations, Affinity and AntiAffinity. Now, you can control where and how pods will run, as well as customize their interaction with nodes and other pods.
  2. A new Long Term Support release of BRIX 2024.10 LTS has been committed. This version will be supported for a long time. You can upgrade to this version directly from the previous release, 2024.4 LTS.
  3. Added a feature to configure some parameters of portable services in Kubernetes infrastructure. This will ensure that the service will meet corporate requirements and also improve scalability during operation.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_3.html b/platform/2025_3.html new file mode 100644 index 0000000..a93fc95 --- /dev/null +++ b/platform/2025_3.html @@ -0,0 +1,261 @@ + + + + + 2025.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX SaaS / 2025.3

+
+ +
+

2025.3

+
+ +
+
+
+ +
+ +

Here is the list of changes that you can explore right now by activating the BRIX trial version.

+

After April 15, 2025, all changes will become available to our clients in their active companies. Please note, the list may grow after the release.

+

Please pay special attention to any updates with the #BreakingChangeAlert tag. They might require you to take extra steps to adapt or adjust your current configuration.

+

Server scripts tracing

+
    +
  1. TEAM-33039 Improved the search in the recorded trace page. You can now search:
+
    +
  • By name of the spans that make up the trace.
  • By names of attributes and events.
+

Matches are highlighted in yellow on the page. Also added navigation — you can quickly switch from one found record to another.

+
    +
  1. TEAM-34471 In the module settings on the Event Handling tab, you can now view the total list of traces recorded by all enabled event handlers in the module. Previously, you could access the traces of a certain handler only on its page.
  2. TEAM-33328 In the module settings on the API Methods tab, you can now view the total list of traces recorded by all API methods created in the module. Previously, you could access traces of a certain method only on its page.
+

Business and work calendar

+

TEAM-33499 In Administration > Business Calendar, you can now export a customized calendar, as well as download a calendar from another system in .zip or .csv format.

+

Business processes

+
    +
  1. TEAM-3206 In Administration > Process Monitor on the process page, you can now select several running instances and interrupt them.
  2. TEAM-8091 In the process instance page, the History tab now displays information about the execution of each activity on the process flow chart. You can see the executor, the date and time the activity was started, and its duration.
  3. TEAM-33962 When publishing a process, the performance indicators used in the process flow chart are checked. If an indicator is not published or created in a disabled module, users will see an error.
+

Modules

+

TEAM-30821 In the module settings on the Business Process Activities tab, the list of records now displays the unique code of the activity specified when it was created.

+

Widgets

+

TEAM-18509 In the Code widget, you can open the settings window in full-screen mode for easy scripting.

+

Apps

+
    +
  1. TEAM-24002 Improved editing of app items. Now when saving a form, only the changed fields are updated, not the entire item. This improvement prevents situations where field values could be swapped and not saved during concurrent editing of an item.

    +In addition, a bulk editing form for app items now includes options for each field:
+
    +
  • Leave unchanged. Select to skip editing the current value in the field on item forms.
  • Clear. Select to remove the value from the field and leave it blank on the form.
+
    +
  1. TEAM-10181 To display items in the form of tiles and Kanban board on the app page, the following components support line breaks: item names and fields of the Status, Category, Email, Account, and Full name types. Now in these modes, users will immediately see item names and field values.
+

Item search

+
    +
  1. TEAM-33768 In the search-by-parameter window on the app page, you can now specify several items in the field of the Users (one, many) type.
  2. TEAM-34535 In the BRIX mobile application, added a button for canceling a request and exiting the search mode. It is available in the window for searching app items by parameters.
+

Substituting users

+
    +
  1. TEAM-20200 Added a feature to create substitution rules for users. Now you can specify multiple substitutes and customize the conditions under which tasks will be distributed among them. This provides flexibility in managing tasks during the absence of employees. To make the feature available, enable the front_enable_substitution_rules feature flag.
+

Main operating principles:

+
    +
  • An unlimited number of task allocation rules can be created for a single substitution.
  • A rule is assigned to a certain absent employee.
  • If a task does not match any of the rules, it is assigned to the specified substitute.
  • Rules can be edited or deleted if they are not used in active substitution.
  • If the conditions of several rules overlap, you can set the priority of selection.
  • When reassigning a task manually, the substitution rules are not taken into account.
  • In cyclic substitution setup, current tasks remain with the original executor and new tasks are reassigned through the chain of substitutions.

    +To create a rule:
+
    +
  1. Create a substitution and fill in the required fields.
  2. In the Rules field, click Create.
  3. In the window that opens, specify:
+
    +
  • Rule name.
  • Conditions to filter the tasks.
  • User to whom the tasks will be reassigned.
+
    +
  1. Save the rule.
+
    +
  1. TEAM-31168 Improved the assignment of tasks to an employee for whom a substitute has been created. Now, if a substitute employee creates a task and specifies an absent user as the executor, the task is not reassigned, but remains assigned to the absent user.
+

Document management

+

TEAM-31041 You can now upload an .rtf file as a document template and use it in a business process in the Generate from Template activity.

+

Projects

+

TEAM-34190 Accelerated the loading of the project task view form. Optimized loading window display.

+

Service

+
    +
  1. TEAM-28887 Added a feature on the session page to attach to the message files that are uploaded to session-related app items in fields of the Files type. For example, you can forward a file from a call to a client, and you do not need to download it to a computer beforehand. The operator can now select files:
+
    +
  • From a local computer or smart phone.
  • From the Files workspace.
  • From linked items of the app.
+
    +
  1. TEAM-34242 On the session page with an external user who contacted via email, the client data is now displayed better. If there are multiple recipients, one of them is marked as the primary client. This is either the first user who contacted a live chat or the user the operator started the session with.
+

Telephony

+

TEAM-31626 Added the Telephony workspace to accumulate and store data on incoming and outgoing calls. For each recorded call, an item of the Calls app is created, where the data is stored.

+

A Call Log widget is added. It allows you to display calls on a separate page and on viewing forms of other apps of the system. In the widget, you can customize the columns of the table with records, filters for searching, as well as the criteria for selecting items for displaying. For example, you can show only calls of the current user, incoming or outgoing, etc. When you open a call page, you can view the call data and see the contact of the call, the user who received or made the call, the start and end date of the call, its duration, listen to the call recording, etc.

+

In the Administration workspace, you can customize the appearance of incoming, outgoing, and missed call pages separately. You can also choose which user action buttons to display: hang up, reassign call, put on hold, create CRM task, event, or note, etc.

+

In addition, you can create a custom call summary page. It can be filled with widgets and opened automatically, for example, when a call comes in, or by a button in the call page.

+

Telephony workspace, Call Log widget, and call settings in Administration > Telephony are available if BRIX Communication Management license is enabled, as well as those licenses where communication management functionality is enabled (BRIX Sales Management, BRIX CX, and outdated BRIX CRM).

+

TS SDK and API

+
    +
  1. TEAM-33701 When using the Web API method to create a folder in a document categorization (POST /pub/v1/nomenclature), added a check for the existence of the document registry to which the folder is created. #BreakingChangeAlert
+
    +
  1. TEAM-34088 Improved the manualRegister method. Now manual registration of documents using this method is prohibited if automatic registration is set up in the folder. In scripts where the method is used, an error will be displayed under such conditions. #BreakingChangeAlert
  2. Added a feature to create instances of objects of the Role type using methods:
+
    +
  • create(type: RoleType, code: string). Initializes a role by type and code.
  • createByItemRef (item: UserGroupItemRef | UserItemRef | OrganisationStructureItemRef). Initializes a role by reference object.
+
    +
  1. The Node.js version for server scripts execution has been updated to v.20.
+

Bugs fixed

+
    +
  1. TEAM-32713 If a non-existent method in Server.rpc was used in the widget script, the widget was published and then an error occurred. Now when publishing, a script is checked for validity.
  2. TEAM-33600 When working in scripts with FormData, .has() and .getAll() methods could not be processed if the request was sent from JS code. The bug has been fixed — the methods work correctly.
  3. TEAM-34265 Improved the user creation form in Administration > Users. Removed uninformative warning about work schedule changes.
  4. TEAM-34484 If the Imports constant was used in a script with an API method, errors were incorrectly detected when checking it even if no errors were displayed when publishing the method. The behavior has been fixed — the validation is performed correctly.
  5. TEAM-34555 When deleting a workspace that is used as an optional dependency (Imports) in a script created at the module level, “TypeError: Cannot read properties of null (reading ‘find’)” occurred. This caused the settings modal window to freeze. The bug has been fixed.
  6. TEAM-34564 The values of fields of the String (markdown) and String (string) types were displayed incorrectly. The bug has been fixed. The String (markdown) field allows you to enter a value in multiple lines, while String (string) is a single-line field.
  7. TEAM-31708 If a mandatory widget field was switched to Read-only mode, the mandatory field requirement failed to reactivate. The asterisk icon next to the field was missing. The bug has been fixed.
  8. TEAM-33127 When expanding the Panel with Header widget on the app view form, the window scrollbar appeared and disappeared. The widget display has been fixed.
  9. TEAM-34042 Fixed the styles of the Live Chat Messages widget. Improved widget displaying next to other components on the item view form in BRIX mobile application.
  10. TEAM-33694 Improved the system processes of approving and sending documents for information:
+
    +
  • Corrected text in the process start button on the start form.
  • Added validation to the Approval due date field. It is now impossible to specify a past date.
  • Eliminated the “Error: 5” window popping up when sending a document for information.
+
    +
  1. TEAM-34137 Removed the duplicate Add Version button on the file view page in the Files workspace. You can now upload a new version by clicking the plus icon.
  2. TEAM-24165 Improved editing of the project plan. The main way to change the plan is now in edit mode from the project view form. Items from other apps open correctly in edit mode. Previously, the project view form was displayed when trying to open an item.
  3. TEAM-27950 Fixed display of tasks in the My Project Tasks widget. Tasks are now displayed for users according to the configured access rights in the Project tasks app.
  4. TEAM-28588 When accessing approval sheets in scripts, the “DocflowListType is not defined” error was returned. Now the script is executed correctly.
  5. TEAM-29206 Made improvements: if access to an app is edited, access rights are not changed or inherited for the folder tree included in it.
  6. TEAM-30365 Fixed display of a folder tree on the form of another app. Now the list of records from the required folder is correctly displayed in the window of selecting an item from a field of the App type.
  7. TEAM-31826 Optimized the page with the result of searching for items by parameters in apps for which the folder tree is enabled.
  8. TEAM-33425 In the Files workspace, errors 503 and 504 occurred when deleting a large number of files from the trash. The errors have been fixed.
  9. TEAM-33525 In the Files workspace, the “Cannot read properties of null (reading ‘isFile’)” error occurred when moving several files using the Drag-and-Drop method. The error has been fixed.
  10. TEAM-33829 When uploading a file with a long name to an app form of the Document type, the buttons on the top panel were displayed incorrectly in the Upload and Preview File widget. The widget panel layout has been fixed.
  11. TEAM-33947 When opening a file after review or approval, the sidebar with properties was not displayed on the view page. The panel display has been fixed.
  12. TEAM-34011 Fixed the hasPermission and getPermissions functions for files. They now return permissions taking inheritance into account.
  13. TEAM-34361 User avatar thumbnails were displayed incorrectly if a non-square image was used. The bug has been fixed.
  14. TEAM-34423 The Project Tasks filter was not applied in the Tasks workspace. The records were displayed only after the page reloaded. The bug has been fixed.
  15. TEAM-34800 In the Signatures Archive widget, links to download a signature file looked like regular records. The display of links in the widget has been fixed.
  16. TEAM-34937 If a project file folder was deleted in the Files workspace, users could not upload documents in the project page. Now, if the project folder is deleted, it is automatically created in the Files workspace when the employee opens the project. Documents attachment works correctly.
  17. TEAM-33965 If you change the name of a published business process performance indicator and then cancel its publication, its name was not updated in the general list of indicators. Now the name is displayed correctly.
  18. TEAM-13226 Added validation to the solution export process: if an activity created at the module level is used in a business process and this module is not included in the solution, the user will see an error with a detailed description of the problem.
  19. TEAM-17188 Table column values were not passed from a child process to a parent process when variables were correctly mapped. The bug has been fixed.
  20. TEAM-19400 When publishing a business process, added check for used functions in the Script activity. Previously, if a function was deleted, the process was published without errors. Now users will not be able to publish the process.
  21. TEAM-21482 When debugging a business process, the Scripts tab did not display errors found in the compiled scripts. Now all errors are displayed correctly.
  22. TEAM-22542 An error was found when exporting a solution because of the absence of a certain group in the business process swimlane. The bug has been corrected.
  23. TEAM-31225 An error was found: if a variable was created in a business process with the same code as a variable previously removed from context, the process was not published. The bug has been fixed.

    +Please note, starting with version 2025.3, context variables can be completely deleted via the web interface only before the business process is published. If the process version is published, assign unique codes to the variables when creating new variables.
  24. TEAM-31582 If during a business process, an app item on which the process is running was deleted using the delete() method in a script, the process execution was interrupted at that step. The bug has been fixed.
  25. TEAM-34031 Fixed the Email notification text about a new task. Users will now see a notification saying “You’ve been assigned a new task”.
  26. TEAM-34234 The customized business process start event form was not migrating to another company when exporting a process as part of a solution. The bug has been fixed.
  27. TEAM-34303 If a Chart widget is created with a data source of the Report type and specifying a measurement by app statuses, the page did not display the result and a 404 error was displayed in the log. The bug has been fixed.
  28. TEAM-34620 The API method to retrieve a list of process instances (GET /pub/v1/bpm/instance/bytemplateid/{id}/list) was not executed, and an error was displayed in the request response. The behavior has been fixed. If the query is incorrect, the user will see a detailed error.
  29. TEAM-16957 Found a bug: more than one user could be added to a group of the Role type if you specify the role in the user page. The bug has been fixed.
  30. TEAM-18975 Fixed generation of the code that is assigned to an app status when it is created. Previously, spaces were replaced with dashes, which prevented the status from being referenced in scripts.
  31. TEAM-20407 The component import process now checks whether a page, workspace, or app is locked. Previously, components could be imported but remained inaccessible due to locking. Now the user will see a user-friendly error message in the import process.
  32. TEAM-22916 Now when creating a solution, a separate field shows the generated solution code and the user can edit it.
  33. TEAM-28713 When the status of an app item was changed during a business process using a script or activity, its page did not display the new status. The bug has been fixed.
  34. TEAM-28824 Fixed the layout in the access restriction notification window. Added proper spacing to the list of users who can grant access.
  35. TEAM-29144 Fixed the display of the cross icon in the search bar at the top of the page. Previously, the icon was displayed even when the row was empty.
  36. TEAM-31841 The Allow bulk editing option could not be activated in the app form settings. The user checked the option, followed the steps for bulk editing, but the changes were not applied to the selected items. The bug has been fixed.
  37. TEAM-33308 In BRIX mobile application for IOS devices, the three dot icon for creating a new item was not displayed on the app pages. The bug has been fixed.
  38. TEAM-34177 If solutions with the same codes were imported into a company, conflicts occurred when updating the solutions. The bug has been fixed.
  39. TEAM-34262 Found a bug when attempting to copy a custom app to a system workspace. The bug has been fixed. The app is now added correctly.
  40. TEAM-34263 If the user enabled ascending or descending sorting for a field of the Date/Time type in the Kanban board settings, the sorting was not applied on the app page. The bug has been fixed.
  41. TEAM-34264 If the Create an app item action was configured in the Button widget, the item page did not open after filling out the creation form. The bug has been fixed.
+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2025_3_op.html b/platform/2025_3_op.html new file mode 100644 index 0000000..6d4479e --- /dev/null +++ b/platform/2025_3_op.html @@ -0,0 +1,182 @@ + + + + + 2025.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
+
+ + + +
+ + +
+ +
+ + + + +
+ + + +
+
+
+
+
+ + +
+

New releases > BRIX On-Premises / 2025.3

+
+ +
+

2025.3

+
+ +
+
+
+ +
+ +

Version BRIX On-Premises 2025.3 includes all updates for BRIX SaaS 2025.3, as well as the following improvements:

+
    +
  1. Added support for SecurityContext, NodeAffinity, PodAntiaffinity, and PodDisruptionBudget for more secure and reliable installation of BRIX Enterprise in the infrastructure.
  2. Fixed BRIX versioning check during updates. This will avoid missing intermediate versions.
+

 

+ + + + + +
+
+ +
+
+
+ + + + + + + + + + + diff --git a/platform/2fa-integration-1.png b/platform/2fa-integration-1.png deleted file mode 100644 index cbe21e7..0000000 Binary files a/platform/2fa-integration-1.png and /dev/null differ diff --git a/platform/2fa-integration-2.png b/platform/2fa-integration-2.png deleted file mode 100644 index c371f72..0000000 Binary files a/platform/2fa-integration-2.png and /dev/null differ diff --git a/platform/3.11.gif b/platform/3.11.gif deleted file mode 100644 index 206ac77..0000000 Binary files a/platform/3.11.gif and /dev/null differ diff --git a/platform/3.11.png b/platform/3.11.png deleted file mode 100644 index becdf89..0000000 Binary files a/platform/3.11.png and /dev/null differ diff --git a/platform/3.16.png b/platform/3.16.png deleted file mode 100644 index 4808203..0000000 Binary files a/platform/3.16.png and /dev/null differ diff --git a/platform/3.177.png b/platform/3.177.png deleted file mode 100644 index 4f57371..0000000 Binary files a/platform/3.177.png and /dev/null differ diff --git a/platform/3.19.png b/platform/3.19.png deleted file mode 100644 index a97fb16..0000000 Binary files a/platform/3.19.png and /dev/null differ diff --git a/platform/3.22.png b/platform/3.22.png deleted file mode 100644 index 4c74219..0000000 Binary files a/platform/3.22.png and /dev/null differ diff --git a/platform/3.24.png b/platform/3.24.png deleted file mode 100644 index 2199dfc..0000000 Binary files a/platform/3.24.png and /dev/null differ diff --git a/platform/3.25.png b/platform/3.25.png deleted file mode 100644 index 8fe34fb..0000000 Binary files a/platform/3.25.png and /dev/null differ diff --git a/platform/3.3.png b/platform/3.3.png deleted file mode 100644 index 04bbcef..0000000 Binary files a/platform/3.3.png and /dev/null differ diff --git a/platform/3.55.png b/platform/3.55.png deleted file mode 100644 index 191f36a..0000000 Binary files a/platform/3.55.png and /dev/null differ diff --git a/platform/3.555.png b/platform/3.555.png deleted file mode 100644 index 8701080..0000000 Binary files a/platform/3.555.png and /dev/null differ diff --git a/platform/3.6.png b/platform/3.6.png deleted file mode 100644 index e8b5bbd..0000000 Binary files a/platform/3.6.png and /dev/null differ diff --git a/platform/3.88.png b/platform/3.88.png deleted file mode 100644 index 9f77dd8..0000000 Binary files a/platform/3.88.png and /dev/null differ diff --git a/platform/360003861992.html b/platform/360003861992.html index 710974b..3afafe9 100644 --- a/platform/360003861992.html +++ b/platform/360003861992.html @@ -1,20 +1,19 @@  - + - Организационная структура + Organizational chart - + - - - - + + + @@ -24,7 +23,6 @@ - @@ -36,16 +34,16 @@ - + 
- -

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

-

Моделирование организационной структуры является одним из первых этапов настройки системы ELMA365.

-

ОргС1

-

Назначение организационной структуры

-

В ELMA365 организационная структура отражает реальную структуру вашей компании. На основе оргструктуры можно распределять роли в бизнес‑процессах. Также она используется для назначения прав доступа в различных разделах системы.

-

ОргС2

-

С чего начать моделирование

-

Перейдите в раздел Администрирование > Орг. структура.

+

An Organizational Chart defines the hierarchy of divisions and jobs in the organization.It describes how the roles, authority, and responsibilities of a company’s employees are assigned.

+

Modeling an org сhart is one of the first steps in setting up BRIX.

+

OC1

+

Purpose of the org chart

+

In BRIX, the org chart reflects the real structure of your company. According to the org chart, roles are assigned to participants of the business processes. It is also used to assign access permissions to various workspaces of the system.

+

org_chart_process_01

+

Start modeling

+

To start modeling, go to Administration > Org Chart.

начало внимание

-

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

+

Only users included in the Administrators group can create or edit the org chart.

конец внимание

-

По умолчанию на страницу оргструктуры уже добавлен головной элемент.

-

ОргС3

-

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

-

ОргС4

-

Элементы оргструктуры

-

Элементы оргструктуры используются для описания иерархии в компании. В ELMA365 есть три вида элементов: должность, группа сотрудников и отдел.

+

By default, the head element is already added to the org chart page. OC3

+

To add a new item, hover the mouse over an existing item and click on one of the icons that appear.

+

OC4

+

Org chart items

+

Organizational chart items are used to describe the hierarchy in the company. In BRIX there are three types of items: job position, group, and department.

- - - - - -

ОргС5

+

OC5

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

+

Job position. You can select only one employee for a job position. For example, CEO, chief accountant, secretary, etc.;

ОргС6

+

OC6

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

+

Group. Defines a group of users with common job responsibilities.

ОргС7

+

OC7

Отдел. Состоит из неограниченного количества сотрудников и одного начальника отдела. Внутри отдела можно создавать группы сотрудников и отдельные должности.

+

Department. Consists of an unlimited number of employees and one department head. Inside the department, you can create groups of employees and individual job positions.

-

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

-

ОргС8

-

Если добавленный элемент нужно переименовать, удалить или переместить в рамках модели оргструктуры, наведите на него курсор и выберите нужное действие.

-

ОргС9

-

При перемещении элемента выберите вышестоящую должность.

-

ОргС10

-

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

-

organizational-structure-12

-

Сохранение оргструктуры

-

Чтобы оргструктура стала доступна для использования, её нужно сохранить. Для этого на верхней панели страницы нажмите кнопку Сохранить.

-

После этого сотрудники могут просмотреть её в разделе Компания > Структура компании.

-

Назначение пользователей на должности

-

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

-

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

-

Перейдите в раздел Администрирование > Пользователи и выполните одно из следующих действий:

- -

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

-

поле должность

-

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

-

company-structure-1

-

Изменение оргструктуры

-

Если в ходе работы у вас появилась необходимость внести коррективы в организационную структуру, перейдите на страницу Орг. структура, внесите изменения и нажмите кнопку Сохранить. После этого внесённые изменения станут доступны в системе.

-

Экспорт оргструктуры

-

Вы можете загрузить оргструктуру себе на компьютер в формате .png или .pdf. Для этого на верхней панели страницы нажмите кнопку Экспорт в PNG или Экспорт в PDF. Оргструктура также выгружается при экспорте конфигурации системы.

+

To configure the department structure, click on its name or on the Expand button.

+

OC8

+

If you want to rename, move, or delete an item of the org chart, hover the mouse over the item and select the action you want to perform.

+

OC9

+

To move an item, select the job position that stands higher in the organizational hierarchy. OC10

+

You can also reorder the items belonging to one level of hierarchy by clicking up or down. This will not change the hierarchy but the order in which the items are displayed in the org chart.

+

org_chart_sort

+

Save the org chart

+

To apply changes and make the org chart available, you need to save it. To do this, click the Save button on the top panel of the page. After that users will be able to view it in Company > Company Structure.

+

Assign users to job positions

+

After having created and saved the org chart, you can assign users to job positions. To do this, go to Administration > Users. Select a user and click on the Edit button. In the Position field, start typing the job title or click the magnifying glass icon to view the company structure and select the desired item.

+

brix-orgchart-01
+ 

+

If you select a position that is already occupied by another employee, you will see a warning showing the user assigned to this position. You can remove the user from the position or assign them to another position by editing their profile. After saving these changes you will be able to assign the new user to the desired position.

+

brix-orgchart-02

+

Edit the org chart

+

If you want to edit the organizational chart, go to the Org Chart page, make the changes and click the Save button. The changes will be immediately applied.

+

Export the org chart

+

You can download the org chart as a .png or .pdf file. To do that, click Export to PNG or Export to PDF in the toolbar. The org chart is also downloaded during the export of the system configuration.

- +
@@ -198,7 +189,7 @@
-

В этой статье

+

In this topic

@@ -209,63 +200,30 @@