010
Настройка миграции на платформе MyBPM
011
012
Функционал MyBPM для формирования структуры внешней Базы Данных
013 SQL с автоматической выгрузкой и загрузкой данных.
014
015 Порядок действий:
016
017
1. В режиме редактирования, в необходимом Бизнес-объекте
018 выбираем нужное вам поле для выгрузки.
019
020
2. Нажимаем на иконку настроек поля в виде шестеренки в углу
021 поля.
022
023
3. В модальном окне в верхних вкладках выбираем пункт
024 интеграций.
025
026
4. В разделе “Интеграция через БД” отмечаем необходимую
027 опцию:
028
029 - для загрузки из БД данных в MyBPM выбираем пункт “Загружать из
030 IN_таблиц”,
031 - для выгрузки данных из MyBPM в БД выбираем пункт “Выгружать в
032 OUT_таблицу”.
033
034
5. Сохраняем изменения в БО нажатием кнопки “Сохранить”.
035
036

038
039
Настройка признака in/out
040
041
После всех настроек в MyBPM полей интеграции:
042
043
044 - Для загрузки данных в MyBPM формируется структура для SQL в
045 формате DDL файла. Файл предоставляет разработчик MyBPM. Данный
046 файл необходимо запустить в вашей внешней БД PostgreSQL, который
047 создает всю структуру таблиц. Дальнейшее обновление данных должно
048 соответствовать этой структуре. Предоставляются данные для
049 подключения к БД.
050
051 - Для выгрузки данных из MyBPM тоже предоставляются данные для
052 подключения к БД.
053
054
055
!Важно: При изменении полей для интеграции, формируется
056 новая структура БД. Для того чтобы выгрузка произошла корректно,
057 необходимо запустить описанный процесс заново.
058
059
Структура формируется по правилам:
060
061
062
063
064 | № |
065 Структура БО MyBPM |
066 Структура таблиц в БД |
067 Описание |
068
069
070
071
072
073 | 1 |
074 Код бизнес-объекта |
075 Название таблицы с приставкой |
076 |
077
078
079
080 | 2 |
081 Код поля |
082 Название колонки |
083 |
084
085
086
087 | 3 |
088 Содержимое поля в MyBPM |
089 Значения поля |
090 |
091
092
093
094 | 4 |
095 Тип поля |
096 Тип переменной |
097 Ассоциирован с типами SQL согласно логике полей MyBPM |
098
099
100
101 | 5 |
102 Вложенный БО |
103 Внешний таблица со связанными id |
104 Таблица содержит Id вложенного объекта, и Id принимающего |
105
106
107
108 | 6 |
109 Вложенный Композитный объект |
110 Внешние таблицы со связанными id |
111 Количество таблиц соответствует количеству вложенных БО в
112 Композитный объект. Для каждого вложенного объекта формируется своя
113 таблица связки |
114
115
116
117
118
Пример формирования структуры таблицы выгрузки
119 IN из MyBPM.
120
121

123
124
Код бизнес-объекта
125
126

128
129
Код поля
130
131
132 В результате получаем таблицу с названием по коду БО и приставкой in.
133 create table public.in_Natural_client (
134 id bigserial primary key,
135 in_id varchar(100),
136 out_id varchar(32),
137 inserted_date timestamp with time zone default clock_timestamp(),
138 in_status varchar(100) default '' not null,
139 occupied_id bigint,
140 occupied_at timestamp with time zone,
141 removed bool default false,
142 IIN text,
143 Category varchar(32),
144 Date_Birth timestamp with time zone,
145 Date_death timestamp with time zone,
146 SUSN_type bool,
147 Relationship_status text,
148 Client_dep_colvir_ID numeric(24,4),
149 Gender varchar(32),
150 Amount_children numeric(24,4),
151 Client_code text,
152 Full_name text,
153 Global_client_ID numeric(24,4)
154 );
155
156
157
Структура таблицы в описании:
158
159
160
161
162 | Имя колонки в базе |
163 Имя колонки MyBPM |
164 Тип |
165 Описание |
166
167
168
169
170
171 |
172 Global_client_ID |
173 int(8) |
174 Global ID клиента |
175
176
177
178 |
179 Category |
180 Справочник - Category |
181 Категория |
182
183
184
185 |
186 Full_name |
187 VARCHAR(256) |
188 ФИО |
189
190
191
192 |
193 IIN |
194 VARCHAR(256) |
195 ИИН |
196
197
198
199 |
200 Identity |
201 Таблица - Identity |
202 Удостоверение |
203
204
205
206 |
207 Date_Birth |
208 Date |
209 Дата рождения |
210
211
212
213 |
214 Date_death |
215 Date |
216 Дата смерти |
217
218
219
220 |
221 Relationship_status |
222 VARCHAR(256) |
223 Семейное положение |
224
225
226
227 |
228 Email |
229 Таблица - Email |
230 Электронная почта |
231
232
233
234 |
235 Gender |
236 Справочник - Gender |
237 Пол |
238
239
240
241 |
242 Amount_children |
243 NUMERIC |
244 Кол-во детей |
245
246
247
248 |
249 SUSN_type |
250 Bool |
251 Тип СУСН |
252
253
254
255 |
256 Client_dep_colvirID |
257 Numeric |
258 Идентификатор подразделения клиента в колвире |
259
260
261
262
263
Пример с вложенным БО
264
265

267
268
Код вложенного БО
269
270
Сформированная таблица с ключами на существующие таблицы,
271 вложенные в БО. Где Natural_client_id ссылается на id в таблице
272 in_Natural_client, то есть системный авто инкриминированный id, а
273 Place_work_id ссылается на id в таблице in_ Place_work.
274
275
276 create table public.in_Natural_client_Place_work (
277 Natural_client_id varchar(100),
278 Place_work_id varchar(100),
279 in_status varchar(100) default '' not null,
280 inserted_date timestamp with time zone default clock_timestamp(),
281 primary key (Natural_client_id, Place_work_id)
282 );
283
284
285
Пример с вложенным Композитным объектом
286
287

289
290
Код вложенного КО
291
292
В данном случае вложенный КО ссылается на три БО - физические
293 лица, юридические лица, ИП. Где Contracts_id ссылается на id
294 таблицы in_Contracts, а Borrower_id на id в таблицах
295 in_Natural_client, in_Legal_client, in_IP_client
296
297
298 Таблица связка с таблицей физического лица.
299 create table public.in_Contracts_Borrower_Natural_client (
300 Contracts_id varchar(100),
301 Borrower_id varchar(100),
302 in_status varchar(100) default '' not null,
303 inserted_date timestamp with time zone default clock_timestamp(),
304 primary key (Contracts_id, Billing_PR_Natural_client_id)
305 );
306 Таблица связка с таблицей юридического лица.
307 create table public.in_Contracts_Borrower_Legal_client (
308 Contracts_id varchar(100),
309 Borrower_id varchar(100),
310 in_status varchar(100) default '' not null,
311 inserted_date timestamp with time zone default clock_timestamp(),
312 primary key (Contracts_id, Billing_PR_Natural_client_id)
313 );
314 Таблица связка с таблицей ИП.
315 create table public.in_Contracts_Borrower_IP_client (
316 Contracts_id varchar(100),
317 Borrower_id varchar(100),
318 in_status varchar(100) default '' not null,
319 inserted_date timestamp with time zone default clock_timestamp(),
320 primary key (Contracts_id, Billing_PR_Natural_client_id)
321 );
322
323
324
Пример формирования OUT таблицы выгрузки данных
325 из MyBPM
326
327
Для начала проверяется наличие схемы, если такая схема не
328 существует, то создается по принципу:
329
330
331 - приставки out;
332
333 - кода компании в MyBPM;
334
335 - версии в коде сервера (code: OUT_MIGRATION_VERSION);
336
337 - версии в переменной окружения (yaml файл code:MYBPM_
338 OUT_MIGRATION_VERSION); Пример: out_jusan_1_8;
339
340
341

343
344
Код БО
345
346

348
349
Код поля
350
351
Создается таблица с названием соответственно названию БО с
352 кодами полей.
353
354
355 create table Spouse_work_address (
356 id bigserial primary key,
357 system_created_at timestamp with time zone,
358 system_creator_fio varchar(100),
359 system_id varchar(100) unique,
360 inserted_at timestamp with time zone default clock_timestamp(),
361 updated_at timestamp with time zone,
362 Street text,
363 ATO_code text,
364 Structure text,
365 corps text,
366 Microdistrict text,
367 Locality text,
368 Apartment text,
369 House text,
370 Index text
371 );
372
373
374
Структура таблицы в описании:
375
376
377
378
379 | Имя колонки в DWH |
380 Имя колонки MyBPM |
381 Тип |
382 Описание |
383
384
385
386
387
388 |
389 Client_id (==Global_client_ID) |
390 int(8) |
391 Global ID клиента |
392
393
394
395 |
396 Address_type |
397 Справочник - Address_type |
398 Тип адреса |
399
400
401
402 |
403 District |
404 Справочник - District |
405 Район |
406
407
408
409 |
410 City |
411 Справочник - City |
412 Город |
413
414
415
416 |
417 Region |
418 Справочник - Region |
419 Область |
420
421
422
423 |
424 Street |
425 VARCHAR(256) |
426 Улица |
427
428
429
430 |
431 House |
432 VARCHAR(256) |
433 Дом |
434
435
436
437 |
438 Apartment |
439 VARCHAR(256) |
440 Квартира |
441
442
443
444 |
445 ATO_code |
446 VARCHAR(256) |
447 Код АТО |
448
449
450
451 |
452 Locality |
453 VARCHAR(256) |
454 Населенный пункт |
455
456
457
458 |
459 Microdistrict |
460 VARCHAR(256) |
461 Микрорайон |
462
463
464
465 |
466 corps |
467 VARCHAR(256) |
468 Корпус |
469
470
471
472 |
473 Structure |
474 VARCHAR(256) |
475 Строение |
476
477
478
479 |
480 Index |
481 VARCHAR(256) |
482 Индекс |
483
484
485
486
487
Системные поля
488
489
Поля являются системными:
490
491
492 - id bigserial primary key,
493
494 - system_created_at timestamp with time zone,
495
496 - system_creator_fio varchar(100),
497
498 - system_id varchar(100) unique,
499
500 - inserted_at timestamp with time zone default
501 clock_timestamp(),
502
503 - updated_at timestamp with time zone.
504
505
506
507
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:80)
at kz.greetgo.md_reader.core.MdConverter.prepareHtmlFileFrom(MdConverter.java:136)
at kz.greetgo.md_reader.core.MdConverter.convert(MdConverter.java:208)
at kz.greetgo.md_reader.controller.RenderController.downloadToc(RenderController.java:360)
at kz.greetgo.md_reader.controller.RenderController.request(RenderController.java:108)
at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at kz.greetgo.md_reader.interceptors.TextReplaceFilter.doFilter(TextReplaceFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: Server returned HTTP response code: 429 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1397)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1333)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:732)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2101)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122)
at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:71)
... 48 more