Windows Система обработки заявок

  • Автор темы Автор темы Andi
  • Дата начала Дата начала
anatoliy написал(а):
Скорее установки организации. Что бы можно было с нескольких установок SPult отправлять заявки в одну базу . И что бы можно было однозначно понять что это данные именно наши, а не кто-то пытается подсунуть левый XML, и если ключ не соответствует, то просто игнорируем данные и выдаем 404 ошибку.


Тогда это следующий параметр:

POST /lkds HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: 372
Connection: keep-alive
Cache-Control: no-cache

<?xml version="1.0"?>
<PULT ContentType="request" Name="Test" GUID="E91AF61B9F2E47AA82A23310ECB01D85" IdDB="1">
<DISP Name="Диспетчерская" IdDB="1">
<STREET Name="ул. Pro" IdDB="3">
<HOME Name="д. Pro" IdDB="3">
<LIFT Name="п. 1" ID="3" GUID="C3AE5B687D17410FB52953E84D793F2B" IDPro="1" IdDB="5" Note="Не работает"
<ListStatus>
<Status Name="Открыто МП"/>
<Status Name="Кабина стоит"/>
</ListStatus>
</LIFT>
</HOME>
</STREET>
</DISP>
</PULT>

Данный параметр однозначно определяет одну организацию в LKDSCloud и LKDSDomain
И одну установку LKDSDisp
 
Андрей Ефименко написал(а):
Тогда это следующий параметр:

...
<?xml version="1.0"?>
<PULT ContentType="request" Name="Test" GUID="E91AF61B9F2E47AA82A23310ECB01D85" IdDB="1">
.....
Данный параметр однозначно определяет одну организацию в LKDSCloud и LKDSDomain
И одну установку LKDSDisp

Т.е. это не идентификатор установки SPult? И он останется неизменным, даже если установлю SPult на другой компьютер? Естественно подключение будет к тому-же lkdsdisp или Domain!

А что по поводу выбора ответственного из формы формирования заявки, возможно такое ?
 
anatoliy написал(а):
Т.е. это не идентификатор установки SPult? И он останется неизменным, даже если установлю SPult на другой компьютер? Естественно подключение будет к тому-же lkdsdisp или Domain!

Да так.

В базе данных LKDSDISP это поле GUIDLKDSDISP.png
В базе данных LKDSDOMAIN это поле GUIDLKDSDOMAIN.png

anatoliy написал(а):
А что по поводу выбора ответственного из формы формирования заявки, возможно такое ?

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

Вложения

  • GUIDLKDSDISP.png
    GUIDLKDSDISP.png
    89.3 KB · Просмотры: 0
  • GUIDLKDSDOMAIN.png
    GUIDLKDSDOMAIN.png
    98.2 KB · Просмотры: 0
Андрей Ефименко написал(а):

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

call.jpg
Нижнее поле же есть, и оно не активно. Его и использовать, только первым пунктом, (по умолчанию) будет 0 , т.е.выбор пустой. Или это поле зарезервировано для каких-то других целей?
Ну или давайте подождем мнение других.
 

Вложения

  • call.jpg
    call.jpg
    26 KB · Просмотры: 0
Андрей Ефименко написал(а):
Да так.

В базе данных LKDSDISP это поле Вложение IPB #2481
В базе данных LKDSDOMAIN это поле Вложение IPB #2482
Технически, конечно, можно в форме сделать выбор из выпадающего списка обладателя сервисного ключа с номером сервисного ключа и передать эту информацию в POST запросе.
Сделать только это нужно так, что бы не сильно напрячь других пользователей изменением формы заявки.

Лично мое скромное мнение ни на что не претендующие: в запросе есть вся необходимая информация для выполнения заявки. Более детальная и подробная информация есть в основной базе SQL Spult. Единственное пожелание диспетчеров на которых сейчас мы это обкатываем, увеличить количество вводимых символов в форме Spult . Им приходится часто прибегать к сокращениям слов.
По поводу XML - не хотелось бы чтобы он поменял свою структуру внезапно. Т.К в нашем случае данные из него автоматом обрабатываются, записываются в базу и уже от туда формируется заявка, после чего диспетчеру остается только закрыть заявку написав комментарий и время пуска, когда механик доложит о выполнении.
 
Последнее редактирование модератором:
Nikolaj76 написал(а):
Единственное пожелание диспетчеров на которых сейчас мы это обкатываем, увеличить количество вводимых символов в форме Spult . Им приходится часто прибегать к сокращениям слов.

Имеется в виду увеличить ширину поля SPultZayav.png?

Nikolaj76 написал(а):
По поводу XML - не хотелось бы чтобы он поменял свою структуру внезапно. Т.К в нашем случае данные из него автоматом обрабатываются, записываются в базу и уже от туда формируется заявка, после чего диспетчеру остается только закрыть заявку написав комментарий и время пуска, когда механик доложит о выполнении.

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

Вложения

  • SPultZayav.png
    SPultZayav.png
    4.3 KB · Просмотры: 0
Андрей Ефименко написал(а):
Имеется в виду увеличить ширину поля Вложение IPB #2537?

Сам размер поля устраивает, количество вводимых символов не хватает. Сейчас можно ввести не более 61 символ.
Андрей Ефименко написал(а):
Сама структура XML строки заявки и не будет никогда меняться.
Добавление новых параметров и ветвей в XML строку не должно влиять на ПО, разбирающее эту строку.
Обычно, и это правильно, для разбора XML строки используют готовые разборщики (процедуры), что позволяет пропускать новые параметры и ветви.

У нас данные из SPult обрабатываются с помощью PHP на сервере. Преобразуются в многомерный массив и от туда нужные данные раскладываются в базу SQL. Например имя диспетчерской выглядит так - ["DISP"]["@attributes"]["Name"] Сделано это потому что данный файлик Spult не на чистом XML. Его структура отличается от классического построения. При изменении структуры файла (изменении количества либо наименования тегов) массив тоже измениться. По этой же причине сейчас проблематично для меня обработать неисправности переданные в данном файле. Дело в том что они идут под одним и тем же тегом:
<ListStatus>
<Status Name="Пожарная опасность"/>
<Status Name="Кабина стоит"/>
</ListStatus>

и их количество меняется постоянно ( от 1 и до бесконечности). Можно конечно к ним обратиться с помощью функции foreach, но на мой взгляд удобнее было бы если данная информация шла под одним тегом
<Status> Name="Пожарная опасность. Кабина стоит" </Status>
 
Последнее редактирование модератором:
Nikolaj76 написал(а):
Сделано это потому что данный файлик Spult не на чистом XML. Его структура отличается от классического построения.

Хотелось бы узнать подробнее в чем "нечистость" и отличие от классического построения строки XML, которую SPult передаёт в качестве заявки на обслуживание.
 
В моем понимании( возможно не совпадающем с Вашим)
пример XML:
<?xml version="1.0"?>
<CAT>
<NAME>Izzy</NAME>
<BREED>Siamese</BREED>
<AGE>6</AGE>
<ALTERED>yes</ALTERED>
<DECLAWED>no</DECLAWED>
<LICENSE>Izz138bod</LICENSE>
<OWNER>Colin Wilcox</OWNER>
</CAT>

И Ваш код:
<?xml version="1.0"?>
<PULT ContentType="request" Name="Test" GUID="E91AF61B9F2E47AA82A23310ECB01D85" IdDB="1">
<DISP Name="Диспетчерская" IdDB="1">
<STREET Name="ул. Pro" IdDB="3">
<HOME Name="д. Pro" IdDB="3">
<LIFT Name="п. 1" ID="3" GUID="C3AE5B687D17410FB52953E84D793F2B" IDPro="1" IdDB="5" Note="Не работает"
<ListStatus>
<Status Name="Открыто МП"/>
<Status Name="Кабина стоит"/>
</ListStatus>
</LIFT>
</HOME>
</STREET>
</DISP>
</PULT>
Вопрос (Без каких либо упреков, недовольства либо сарказма в Ваш адрес): Как обработать данный файл тег <Status> если он не один, его количество неизвестно и в каждом запросе отличается? цель обработки- формирование таблички в базе данных где каждый тег это своя ячейка.

P/S: еще раз не воспринимайте это как критику. Вы проделали огромный фронт работ и система Обь востребована в сфере лифтового хозяйства. Вы разработчик и мы в любом случае можем лишь подстраиваться под Ваше программное обеспечение. Но человек по своей натуре лентяй ( и я не исключение) поэтому хотелось бы при взаимодействие с Вашим оборудованием и программным обеспечением совершать как можно меньше лишних телодвижений :rolleyes:
 
Последнее редактирование модератором:
Nikolaj76 написал(а):
В моем понимании( возможно не совпадающем с Вашим)
пример XML:
<?xml version="1.0"?>
<CAT>
<NAME>Izzy</NAME>
<BREED>Siamese</BREED>
<AGE>6</AGE>
<ALTERED>yes</ALTERED>
<DECLAWED>no</DECLAWED>
<LICENSE>Izz138bod</LICENSE>
<OWNER>Colin Wilcox</OWNER>
</CAT>

И Ваш код:
<?xml version="1.0"?>
<PULT ContentType="request" Name="Test" GUID="E91AF61B9F2E47AA82A23310ECB01D85" IdDB="1">
<DISP Name="Диспетчерская" IdDB="1">
<STREET Name="ул. Pro" IdDB="3">
<HOME Name="д. Pro" IdDB="3">
<LIFT Name="п. 1" ID="3" GUID="C3AE5B687D17410FB52953E84D793F2B" IDPro="1" IdDB="5" Note="Не работает"
<ListStatus>
<Status Name="Открыто МП"/>
<Status Name="Кабина стоит"/>
</ListStatus>
</LIFT>
</HOME>
</STREET>
</DISP>
</PULT>
Вопрос (Без каких либо упреков, недовольства либо сарказма в Ваш адрес): Как обработать данный файл тег <Status> если он не один, его количество неизвестно и в каждом запросе отличается? цель обработки- формирование таблички в базе данных где каждый тег это своя ячейка.

P/S: еще раз не воспринимайте это как критику. Вы проделали огромный фронт работ и система Обь востребована в сфере лифтового хозяйства. Вы разработчик и мы в любом случае можем лишь подстраиваться под Ваше программное обеспечение. Но человек по своей натуре лентяй ( и я не исключение) поэтому хотелось бы при взаимодействие с Вашим оборудованием и программным обеспечением совершать как можно меньше лишних телодвижений :rolleyes:

Язык XML стандартизирован
И важно понять соответствует ли XML строка заявки стандарту на язык.
Если есть какие-то сомнения, то хотел бы их получить со ссылками на стандарт.

Почему это важно - использование XML делает описание каких-то параметров расширяемым, т.е. в описание можно добавлять новые параметры и этот не нарушит работу существующего ПО, если это ПО при чтении XML учитывает стандарт.

Конфигурационные файлы ДК "Обь" используют XML. Большие массивы данных передаются между модулями в виде XML.

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

Формируются и читаются XML данных штатными процедурами C++, C#, Java, Swift

Вот пример реального XML описания экранной формы универсального приложения Microsoft:

<Page
x:Class="WSPult.BatteryPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WSPult"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" SizeChanged="Page_SizeChanged">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="Address" Margin="0,0,0,0" Grid.Row="0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" FontSize="18" FontStyle="Italic"/>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock x:Uid="BatteryPageStatus" FontSize="18" />
<TextBlock x:Name="Status" x:Uid="BatteryPageStatusGood" Margin="10,0,0,0" FontSize="18" />
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal">
<TextBlock x:Uid="BatteryPageNextTest" FontSize="18" />
<TextBlock x:Name="Next" x:Uid="BatteryPageTimeTest" Margin="10,0,0,0" FontSize="18" />
</StackPanel>
<StackPanel Grid.Row="3" Orientation="Horizontal">
<TextBlock Text="Uzar:" FontSize="18" />
<TextBlock x:Name="UZar" Text="UZar" Margin="10,0,0,0" FontSize="18" />
<TextBlock Text="Ustart:" Margin="10,0,0,0" FontSize="18" />
<TextBlock x:Name="Ustart" Text="Ustart" Margin="10,0,0,0" FontSize="18" />
<TextBlock Text="Ufinish:" Margin="10,0,0,0" FontSize="18" />
<TextBlock x:Name="Ufinish" Text="Ufinish" Margin="10,0,0,0" FontSize="18" />
</StackPanel>
<Canvas x:Name="PanelGraph" Grid.Row="4">
<Line x:Name="BegVert" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="2"/>
<TextBlock x:Name="BegVertNum" Text="" FontSize="18" />
<Line x:Name="BegGoriz" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="2"/>
<TextBlock x:Name="BegGorizNum" Text="" FontSize="18" />
<Line x:Name="Line1" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num1" Text="" FontSize="18" />
<Line x:Name="Line2" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num2" Text="" FontSize="18" />
<Line x:Name="Line3" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num3" Text="" FontSize="18" />
<Line x:Name="Line4" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num4" Text="" FontSize="18" />
<Line x:Name="Line5" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num5" Text="" FontSize="18" />
<Line x:Name="Line6" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num6" Text="" FontSize="18" />
<Line x:Name="Line7" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num7" Text="" FontSize="18" />
<Line x:Name="Line8" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num8" Text="" FontSize="18" />
<Line x:Name="Line9" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num9" Text="" FontSize="18" />
<Line x:Name="Line10" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num10" Text="" FontSize="18" />
<Line x:Name="Line11" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num11" Text="" FontSize="18" />
<Line x:Name="Line12" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num12" Text="" FontSize="18" />
<Line x:Name="Line13" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num13" Text="" FontSize="18" />
<Line x:Name="Line14" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num14" Text="" FontSize="18" />
<Line x:Name="Line15" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="1"/>
<TextBlock x:Name="Num15" Text="" FontSize="18" />
<Path Stroke="Blue" StrokeThickness="4" >
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure x:Name="Graph">
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock x:Name="CurU" Text="" FontSize="18" />
<TextBlock x:Name="TimEnd" Text="" FontSize="18" />
<Line x:Name="EndTestLine" Stroke="{ThemeResource ApplicationForegroundThemeBrush}" StrokeThickness="2"/>
<TextBlock x:Name="EndTestTime" Text="" FontSize="18" />
</Canvas>
</Grid>
</Page>
 
Сделано это потому что данный файлик Spult не на чистом XML. Его структура отличается от классического построения. При изменении структуры файла (изменении количества либо наименования тегов) массив тоже измениться. По этой же причине сейчас проблематично для меня обработать неисправности переданные в данном файле. Дело в том что они идут под одним и тем же тегом:
<ListStatus>
<Status Name="Пожарная опасность"/>
<Status Name="Кабина стоит"/>
</ListStatus>

и их количество меняется постоянно ( от 1 и до бесконечности). Можно конечно к ним обратиться с помощью функции foreach, но на мой взгляд удобнее было бы если данная информация шла под одним тегом
<Status> Name="Пожарная опасность. Кабина стоит" </Status>

Вы возможно путаете с JSON? там немного другая структура. У ЛКДС XML вроде соответствует требованиям Мелкософта.
И я лично не совсем понимаю зачем каждую Status Name раскидывать в массив. Я их собираю в одну строку и кладу в ячейку базы с описанием неисправности.
 
Добрый день,
по интеграции со сторонним ПО:
1) возможно ли в xml-файл заявки на обслуживание лифта добавить следующие параметры лифта:
1.1) заводской номер;
1.2) регистрационный номер;
для однозначной идентификации лифта.
Бывает, что по одному адресу находится несколько технических средств, например, пассажирский лифт, грузовой, подъемная площадка. Идентификация по значениям аргументов ID, GUID, IdDB тега <LIFT> затруднительна из-за отсутствия доступа к БД.
2) Как можно синхронизироваться с БД лифтов LKDSDisp, LKDSDomain?
Тогда 1) станет не нужным.
 
collapsor написал(а):
Добрый день,
по интеграции со сторонним ПО:
1) возможно ли в xml-файл заявки на обслуживание лифта добавить следующие параметры лифта:
1.1) заводской номер;
1.2) регистрационный номер;
для однозначной идентификации лифта.
Бывает, что по одному адресу находится несколько технических средств, например, пассажирский лифт, грузовой, подъемная площадка. Идентификация по значениям аргументов ID, GUID, IdDB тега <LIFT> затруднительна из-за отсутствия доступа к БД.

Лифт имеет справочные параметры NoteLift.png
Если эти справочные параметры введены, то они передаются в заявке.

collapsor написал(а):
2) Как можно синхронизироваться с БД лифтов LKDSDisp, LKDSDomain?
Тогда 1) станет не нужным.

Для этого нужно иметь доступ к SQL серверу, обслуживающую БД.
LKDSDisp использует MS SQL
LKDSDomain использует MS SQL или PostgreSQL
LKDSServer использует PostgreSQL

Удалённый доступ к MS SQL затруднён, а в случае MS SQL Express невозможен
Удалённый доступ к PostgreSQL возможен

Структура базы данных проста и должна быть понятна, краткое описание, возможно несколько устаревшее, в файле Посмотреть вложение StructBD.pdf
 

Вложения

  • NoteLift.png
    NoteLift.png
    34.1 KB · Просмотры: 0
  • StructBD.pdf
    StructBD.pdf
    1.2 MB · Просмотры: 0
Андрей Ефименко написал(а):
Лифт имеет справочные параметры Вложение IPB #3147
Если эти справочные параметры введены, то они передаются в заявке.
Для этого нужно иметь доступ к SQL серверу, обслуживающую БД.
LKDSDisp использует MS SQL
LKDSDomain использует MS SQL или PostgreSQL
LKDSServer использует PostgreSQL

Удалённый доступ к MS SQL затруднён, а в случае MS SQL Express невозможен
Удалённый доступ к PostgreSQL возможен

Структура базы данных проста и должна быть понятна, краткое описание, возможно несколько устаревшее, в файле Вложение IPB #3148


спасибо
 
Назад
Сверху