update
All checks were successful
Deploy Static Site / deploy (push) Successful in 6m6s

This commit is contained in:
2025-05-29 16:42:45 +04:00
parent e217f89702
commit 00717a92fb
2681 changed files with 173810 additions and 0 deletions

View File

@ -0,0 +1,260 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Create a custom microservice</title>
<meta name="generator" content="Help+Manual" />
<meta name="keywords" content="" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="BRIX is an application with a microservice architecture. It consists of small-scale, loosely connected modules called microservices. These services are dedicated to certain..." />
<meta name="picture" content="" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Full documentation for BRIX365 platform. Low-code developer guide. User guide. Admin guide. Developer guide." />
<meta property="og:url" content="https://brix365.com/en/help" />
<meta property="og:image" content="" />
<link rel="icon" href="favicon.png" type="image/png" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="./jquery-ui.min.css" />
<link rel="stylesheet" href="default.css" />
<link rel="stylesheet" href="./search-yandex.css" />
<link rel="stylesheet" href="./article.css" />
<link rel="stylesheet" href="./glossary.css" />
<link rel="stylesheet" href="./theme.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="helpman_settings.js"></script>
<script type="text/javascript" src="helpman_topicinit.js"></script>
<script type="text/javascript" src="highlight.js"></script>
<script type="text/javascript">
$(document).ready(function(){highlight();});
</script>
</head>
<body>
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
<header class="header elma-365">
<div class="container">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-en.svg" alt="header logo">
</a>
<!-- <div class="hero__search-form" id="search-panel">
<form class="search-form" onsubmit="ym(83180416,'reachGoal','poisk')">
<label class="search-form__label">
<span id="reset-search" class="search__icon"></span>
<input class="search-form__input" type="text">
</label>
<input class="search-form__submit" type="submit" value="Submit">
</form>
</div> -->
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
<div class="hero__search">
<a href="#" id="search-icon" class="hero__search-icon">
<img src="search-icon-white.svg" alt="search string">
</a>
<a href="#" id="side-menu-icon" class="hero__side-icon">
<img src="side_menu.svg" alt="side menu">
</a>
</div>
<div class="header__navi">
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a class="project-link" href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://brix365.com/en/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li><li><a class="project-link" href="https://brix365.com/en/help/business_solutions/-elma365-store.html">Business Solutions</a></li></ul></span></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li><li><a href="https://tssdk.brix365.com/" target="_blank">SDK</a></li></ul>
</div>
</div>
</header>
<main class="main container">
<aside class="sidebar" id="sidebar">
<div class="sidebar__header">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-light-en.svg">
</a>
<span class="sidebar__close elma-365-close" id="close"></span>
</div>
<div class="sidebar__wrapper" id="side-menu">
</div>
</aside>
<article class="article" id="article">
<div class="article-inner">
<div class="content">
<header class="article__header">
<div class="article__bread" style="display:flex; gap:10px;">
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
<div class="topic__breadcrumbs">
<p><a href="solutions-building.html">Build solutions in BRIX</a> / Create a custom microservice</p>
</div>
</div>
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Create a custom microservice</span></h1>
</div>
</header>
<section class="article__content">
<div class="scroll-top-inner">
<a href="#h1-article" class="scroll-top"></a>
</div>
<!-- Placeholder for topic body. -->
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">BRIX is an application with a microservice architecture. It consists of small-scale, loosely connected modules called microservices. These services are dedicated to certain business needs, and they are mostly used for one or several basic functions. </span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Services are deployed independently. They can be written in different programming languages and use different data storage methods. Read more in the <a href="architecture.html" class="topiclink">Architecture</a> article.</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">You can create your own service and locate it inside the Kubernetes cluster. This allows you to expand the systems functionality. For example, you can create a service for working with *</span><span style="font-family: Inter; font-weight: bold;">.xlsx</span><span style="font-family: Inter;"> files. It can read rows of data and save them to apps.</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">You need to create custom services only when other options dont suffice. For example, you may need to add an external library. To create an integration with an external system, it is enough to use a <a href="solutions-building.html" class="topiclink">solution</a>.</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">You can write a service in any programming language. You just need a Docker image to deploy it in BRIX. </span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Below is an example of creating a service using .NET Core 5.</span></p>
<h2 class="p_Heading2"><span class="f_Heading2">Create a service with .NET</span></h2>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Open Visual Studio 2019. Create a new project and configure the settings as shown on screenshots below.</span></p>
<p style="line-height: 1.28; margin: 0 0 11px 0;"><span style="font-family: Inter;">As BRIX is deployed on Ubuntu, enable Docker and select Linux as the container type.</span></p>
<p style="line-height: 1.28; margin: 0 0 11px 0;"><img alt="create-service-1" width="940" height="612" style="margin:0;width:940px;height:612px;border:none" src="create-service-1.png"/></p>
<p style="line-height: 1.28; margin: 0 0 11px 0;"><img alt="create-service-2" width="810" height="460" style="margin:0;width:810px;height:460px;border:none" src="create-service-2.png"/></p>
<p style="line-height: 1.28; margin: 0 0 11px 0;"><img alt="create-service-3" width="753" height="473" style="margin:0;width:753px;height:473px;border:none" src="create-service-3.png"/></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Visual Studio will create a default project. You can run it in Docker to make sure that the service works and can be accessed.</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">After testing, move on to the next step.</span></p>
<h2 class="p_Heading2"><span class="f_Heading2">Prepare the project and upload it to Docker Hub</span></h2>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">To let the system download a Docker image, you need to place it in a Docker repository. In our example, we are going to use the <a href="https://hub.docker.com/" target="_blank" class="weblink">Docker Hub</a> public repository. To use it, you need to register an account.</span></p>
<ol style="list-style-type:upper-roman">
<li value="1" style="line-height: 1.20; margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-family: Inter;">Select the project you need and right-click on its name.</span></li><li value="2" style="line-height: 1.20; margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-family: Inter;">Click </span><span style="font-family: Inter; font-weight: bold;">Add</span><span style="font-family: Inter;"></span><span style="font-family: Inter; font-weight: bold;">Docker Support…</span><span style="font-family: Inter;"> (depends on the target platform). Wait until the configuration is finished.</span></li><li value="3" style="line-height: 1.20; margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-family: Inter;">Right-click the projects name.</span></li><li value="4" style="line-height: 1.20; margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-family: Inter;">Select </span><span style="font-family: Inter; font-weight: bold;">Add</span><span style="font-family: Inter;"> </span><span style="font-family: Inter; font-weight: bold;"></span><span style="font-family: Inter;"> </span><span style="font-family: Inter; font-weight: bold;">Container Orchestrator Support…</span><span style="font-family: Inter;">, then choose </span><span style="font-family: Inter; font-weight: bold;">Docker Compose</span><span style="font-family: Inter;">. Wait until the configuration is finished.</span></li><li value="5" style="line-height: 1.28; margin-top: 0; margin-right: 0; margin-bottom: 11px;"><span style="font-family: Inter;">Right-click the projects name.</span></li><li value="6" style="line-height: 1.20; margin-top: 7px; margin-right: 0; margin-bottom: 7px;"><span style="font-family: Inter;">Select </span><span style="font-family: Inter; font-weight: bold;">Publish — Docker Container Registry — Docker Hub</span><span style="font-family: Inter;">.</span></li></ol>
<p style="line-height: 1.20; margin: 7px 0 7px 0;"><img alt="create-service-4" width="787" height="547" style="margin:0;width:787px;height:547px;border:none" src="create-service-4.png"/></p>
<p style="line-height: 1.20; margin: 7px 0 7px 0;"><img alt="create-service-5" width="792" height="437" style="margin:0;width:792px;height:437px;border:none" src="create-service-5.png"/></p>
<ol style="list-style-type:upper-roman" start="7">
<li value="7" style="line-height: 1.20; background: #ffffff; margin-top: 10px; margin-right: 0; margin-bottom: 0;"><span style="font-family: Inter;">Specify the login and password to Docker Hub and publish the project.</span></li></ol>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><img alt="create-service-6" width="655" height="396" style="margin:0;width:655px;height:396px;border:none" src="create-service-6.png"/></p>
<ol style="list-style-type:upper-roman" start="8">
<li value="8" style="line-height: 1.20; background: #ffffff; margin-top: 10px; margin-right: 0; margin-bottom: 0;"><span style="font-family: Inter;">When you click </span><span style="font-family: Inter; font-weight: bold;">Finish</span><span style="font-family: Inter;">, a page in Visual Studio will open. Here you can specify a tag for the image before publishing. You can use it to version the service.</span></li></ol>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><img alt="create-service-7" width="1004" height="523" style="margin:0;width:1004px;height:523px;border:none" src="create-service-7.png"/></p>
<ol style="list-style-type:upper-roman" start="9">
<li value="9" style="line-height: 1.20; background: #ffffff; margin-top: 10px; margin-right: 0; margin-bottom: 0;"><span style="font-family: Inter;">Click </span><span style="font-family: Inter; font-weight: bold;">Publish</span><span style="font-family: Inter;">. Visual Studio will build the Docker image and send it to the <a href="https://hub.docker.com" target="_blank" class="weblink">Docker Hub</a> repository.</span></li></ol>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-family: Inter;">This public repository is used only as an example. Use private repositories for your services or create your own using <a href="https://docs.docker.com/registry/" target="_blank" class="weblink">docker-registry</a>.</span></p>
<h2 class="p_Heading2"><span class="f_Heading2">Run and test custom service</span></h2>
<ol style="list-style-type:upper-roman">
<li value="1" class="p_Normal">Create a deployment for pod management. A pod runs a container based on the provided Docker image.</li></ol>
<p class="p_Normal">To do that, run the following command:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;create&nbsp;deployment&nbsp;&lt;microservice_name&gt;&nbsp;--image=&lt;image_name&gt;&nbsp;-n&nbsp;&lt;namespace&gt;</span></p>
<p class="p_Normal">Where:</p>
<ul style="list-style-type:disc">
<li class="p_Normal"><span style="font-weight: bold;">&lt;microservice_name&gt;</span> is the name of your service.</li><li class="p_Normal"><span style="font-weight: bold;">&lt;image_name&gt;</span> is the address where the image is stored (username/repository:tag).</li><li class="p_Normal"><span style="font-weight: bold;">&lt;namespace&gt;</span> is the namespace where the service will be created.</li></ul>
<ol style="list-style-type:upper-roman">
<li value="2" class="p_Normal">Create a service to access your service:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;create&nbsp;service&nbsp;clusterip&nbsp;&lt;microservice_name&gt;&nbsp;--tcp=80:80&nbsp;-n&nbsp;&lt;namespace&gt;</span></p>
<ol style="list-style-type:upper-roman">
<li value="3" class="p_Normal">Make sure the service has appeared in the pod list. To do that, run the following command:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;get&nbsp;pods&nbsp;-n&nbsp;&lt;namespace&gt;</span></p>
<p class="p_Normal">You will see a list of services with statuses. Your service should be in the <span style="font-weight: bold;">Running</span> status.</p>
<ol style="list-style-type:upper-roman">
<li value="4" class="p_Normal">Test the service by running the <code><b>curl</b></code> image container in a Kubernetes cluster as an example:</li></ol>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;run&nbsp;-i&nbsp;curl&nbsp;--rm&nbsp;--image=curlimages/curl:latest&nbsp;--&nbsp;curl&nbsp;http://</span><span class="f_CodeExample" style="font-weight: bold;">&lt;microservice_name&gt;</span><span class="f_CodeExample">.</span><span class="f_CodeExample" style="font-weight: bold;">&lt;namespace&gt;</span><span class="f_CodeExample">:80/api/State</span></p>
<p class="p_Normal">If the test is successful and the service responds, you will see the following message:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">{&quot;type&quot;:&quot;GET&quot;,&quot;version&quot;:&quot;47.0.200.1129&quot;}</span></p>
<p class="p_Normal">After testing you can move on to the next step.</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">начало&nbsp;внимание</span></p>
<p class="p_Normal">To create custom microservices in BRIX, you can also use the functionality of the <a href="portable-microservices.html" class="topiclink">portable services</a>.</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">конец&nbsp;внимание</span></p>
<h2 class="p_Heading2"><span class="f_Heading2">Example of using a service in a widget</span></h2>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-size: 15px; font-family: Inter;">Lets see how a service can be used.</span></p>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-size: 15px; font-family: Inter;">We need to write a client-side script. When the widget is initialized, the server method </span><code><b>WeatherForecast()</b></code><span style="font-size: 15px; font-family: Inter;"> will be called.</span></p>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-size: 15px; font-family: Inter; font-weight: bold; background-color: #ffffff;">Client-side script:</span></p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">async function onInit(): Promise&lt;void&gt;&nbsp;{</span><br />
<span class="f_CodeExample"> &nbsp;&nbsp;&nbsp;await Server.rpc.WeatherForecast();</span><br />
<span class="f_CodeExample">}</span></p>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-size: 15px; font-family: Inter; background-color: #ffffff;">Now lets write the script on the server side. </span></p>
<p style="line-height: 1.20; background: #ffffff; margin: 10px 0 0 0;"><span style="font-size: 15px; font-family: Inter; font-weight: bold; background-color: #ffffff;">Server script:</span></p>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample">async function WeatherForecast(): Promise&lt;void&gt; {</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp;Context.data.test = &quot;debug&quot;;</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp;try {</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp;const res = await fetch(`http://</span><span class="f_CodeExample" style="font-weight: bold;">&lt;microservice_name&gt;.&lt;namespace&gt;</span><span class="f_CodeExample">:80/WeatherForecast`);</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp;if (!res.ok) {</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Context.data.test = `request fail: ${res.statusText}`;</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp;}</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp;Context.data.test = JSON.stringify(await res.json());</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp;}</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp;catch (error) { &nbsp; &nbsp; &nbsp; </span><br />
<span class="f_CodeExample"> &nbsp; &nbsp; &nbsp; &nbsp;Context.data.test = typeof(error) === 'object' ? `error: ${JSON.stringify(error)}` : `${error}`;</span><br />
<span class="f_CodeExample"> &nbsp; &nbsp;}</span><br />
<span class="f_CodeExample">}</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-family: Inter;">Lets add the widget to a page. The result will be the following:</span></p>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><img alt="create-service-8" width="1024" height="321" style="margin:0;width:1024px;height:321px;border:none" src="create-service-8.png"/></p>
<h2 class="p_Heading2"><span class="f_Heading2">Delete a service</span></h2>
<p style="line-height: 1.20; margin: 7px 0 16px 0;"><span style="font-size: 15px; font-family: Inter; color: #172b4d; background-color: #ffffff;">To delete the service, run the following command:</span></p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;delete&nbsp;deployment&nbsp;&lt;microservice_name&gt;&nbsp;-n&nbsp;&lt;namespace&gt;</span></p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;delete&nbsp;service&nbsp;&lt;microservice_name&gt;&nbsp;-n&nbsp;&lt;namespace&gt;</span></p>
<div class="bottom-nav">
<a id="prev-link" class="topic__navi_prev" href="custom_services.html">
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
class="bottom-nav__link">custom_services.html</span>
</a>
<a id="next-link" class="topic__navi_next" href="lowcode-devops-pm.html">
<span class="bottom-nav__link">lowcode-devops-pm.html</span> <span
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
</a>
</div>
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
<div class="feedback" id="feedback"><div class="feedback-help"><span><b>Was this helpful?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx" style="display: none;">Thanks for your feedback!</div><div class="feedback__popup" id="feedback__popup_why" style="display: none;"><div class="feedback__popup-header">Please specify why:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Recommendations did not help me</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Article is hard to understand</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Didn`t answer my question</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Content does not match the topic</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Other</label></div><div class="feedback__popup" id="feedback__popup-other" style="display: none;"><div class="feedback__popup-header">How we can improve it?</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Submit"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg" class="small-img" alt="like"><spanclass="feedback-form__btn-group_yes-btn">Yes</spanclass="feedback-form__btn-group_yes-btn"></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg" class="small-img" alt="dislike"><spanclass="feedback-form__btn-group_no-btn">No</spanclass="feedback-form__btn-group_no-btn"></label></div><select name="category"><option disabled="">Please specify why</option><option value="bad_recommendation" selected="">Recommendations did not help me</option><option value="difficult_text">Article is hard to understand</option><option value="no_answer">Didn`t answer my question</option><option value="bad_header">Content does not match the topic</option><option value="other_reason">Other</option></select><input type="submit"></form></div><div class="found_typo"><p style="margin: 0px; margin-top: 16px !important;"><span><b>Found a typo?</b></span> Select it and press <i>Ctrl+Enter</i> to send us feedback</p></div></div>
</section>
</div>
<aside class="article__sidebar" style="display:none">
<input type="checkbox" />
<div class="article__arrow"></div>
<div class="table-of-contents elma365-right" id="toc2Content">
<h3 class="h3-toc">In this topic</h3>
<nav id="toc2"></nav>
</div>
</aside>
</div>
</article>
</main>
<footer class="footer">
<div class="footer-container">
<div class="footer-mobile">
<ul class="footer-mobile__list"><li><a href="https://brix365.com/en/" target="_blank">BRIX</a></li><li><a href="https://tssdk.brix365.com/en/latest/" target="_blank">SDK</a></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li></ul><ul class="footer-mobile__list"><li><a href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li></ul>
</div>
<div class="footer-wrap">
<div><span class="mobile-question-popup">Send feedback</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Ask a question</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Send"></div></form><div class="hidden fade-in question-success-xs">Sent</div></div>
<div class="footer-flex-b">
<span class="footer-copy">&copy; 2025 BRIX</span>
<ul class="footer-list">
<li class="footer-item">
<a href="#" class="arrow-top" style="display: block;"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<iframe name="hmnavigation" style="display:none!important"></iframe>
<script src="./jquery-ui.js"></script>
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
<script src="./jquery.tocify.min.js"></script>
<script src="./TypoReporter.min.js"></script>
<script src="./google-search.js"></script>
<script src="./main.js"></script>
</body>
</html>