powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [ensemble] Проблемы с сериализацией списка в сообщении
3 сообщений из 3, страница 1 из 1
[ensemble] Проблемы с сериализацией списка в сообщении
    #39330296
Galefrei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Есть простой сериализуемый класс Production.Utils.AG.Event
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Class Production.Utils.AG.Event Extends %SerialObject
{

Property Start As %TimeStamp;

Property End As %TimeStamp;

Property Caption As %String;

Property FuelDelta As %Integer;

Property MotoHours As %Integer;

<Storage name="Default">
<Data name="EventState">
<Value name="1">
<Value>Start</Value>
</Value>
<Value name="2">
<Value>End</Value>
</Value>
<Value name="3">
<Value>Caption</Value>
</Value>
<Value name="4">
<Value>FuelDelta</Value>
</Value>
<Value name="5">
<Value>MotoHours</Value>
</Value>
</Data>
<State>EventState</State>
<StreamLocation>^Production.Utils.AG.EventS</StreamLocation>
<Type>%Library.CacheSerialState</Type>
</Storage>

}
И есть класс сообщения в Ensemble, который внутри себя содержит список объектов класса Event
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Class Production.Messages.AG.GetStageResponse Extends Ens.Response
{

Property Events As list Of Production.Utils.AG.Event;

<Storage name="Default">
<Data name="GetStageResponseDefaultData">
<Subscript>"GetStageResponse"</Subscript>
<Value name="1">
<Value>Events</Value>
</Value>
</Data>
<DefaultData>GetStageResponseDefaultData</DefaultData>
<Type>%Library.CacheStorage</Type>
</Storage>
}
Это сообщение используется внутри бизнес-операции AG.GetStage
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Class Production.Operations.AG.GetStage Extends Production.Operations.AG.BaseOperation
{

Method GetStage(
  pRequest As Production.Messages.AG.GetStageRequest,
  pResponse As Production.Messages.AG.GetStageResponse) As %String
{
    set st = $$$OK
    
    try
    {
        set agUrl = ^AG.Settings("AutographServiceUrl")
        set agScheme = ^AG.Settings("AutographSchemeName")
    
        set url = agUrl_"/GetStage/"_agScheme_"/"_pRequest.Id_"/"_..TimeStampToAutograph(pRequest.Start)_"/"_..TimeStampToAutograph(pRequest.End)_"/"_pRequest.Parameter
        set jsonObj = ..GetJson(url).GetAt(1).Value
    
        set pResponse = ##class(Production.Messages.AG.GetStageResponse).%New()
    
        set mhIdx = 0
        set fdIdx = 0
        set parameters = jsonObj.Params
        for i = 1:1:parameters.Count()
        {
            set parameter = parameters.GetAt(i)
            if (parameter = "Engine1Motohours") set mhIdx = i
            if (parameter = pRequest.Parameter_"UpDnVol") set fdIdx = i
        }
    
        set items = jsonObj.Items
        for i = 1:1:items.Count()
        {
            set item = items.GetAt(i)
        
            set event = ##class(Production.Utils.AG.Event).%New()
            set event.Start = ..TimeStampFromAutograph(item.SD)
            set event.End = ..TimeStampFromAutograph(item.ED)
            set event.Caption = item.Caption
        
            if (mhIdx) set event.MotoHours = ..TimeFromAutograph(item.Values.GetAt(mhIdx))
            if (fdIdx) set event.FuelDelta = ..TimeFromAutograph(item.Values.GetAt(fdIdx))
        
            do pResponse.Events.Insert(item)   
        }
    }
    catch e
    {
        set st = e.AsStatus()    
    }
    
    return st
}

XData MessageMap
{
<MapItems>
    <MapItem MessageType="Production.Messages.AG.GetStageRequest">
        <Method>GetStage</Method>
    </MapItem>
 </MapItems>
}

}
При попытке использования данной операции возникает очень странная ошибка:
Код: plaintext
ОШИБКА #5002: Ошибка: <LIST>%SerializeObject+5^Production.Messages.AG.GetStageResponse.1
Версия Ensemble: 2014.1.0.591.0. Воспроизвести проблему на локальной рабочей станции не удалось.

Куда копать?
...
Рейтинг: 0 / 0
[ensemble] Проблемы с сериализацией списка в сообщении
    #39330318
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galefrei ,А если вместо
Код: plaintext
Property Events As list Of Production.Utils.AG.Event;
сделать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Class Production.Utils.AG.EventList Extends %ListOfObjects 
{

Parameter ELEMENTTYPE = "Production.Utils.AG.Event";

}

Class Production.Messages.AG.GetStageResponse Extends Ens.Response
{

 Property Events As Production.Utils.AG.EventList ;

...
}

?
PS:
...
Рейтинг: 0 / 0
[ensemble] Проблемы с сериализацией списка в сообщении
    #39330367
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему в этом месте в список вставляется не тот объект:Galefrei
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        for i = 1:1:items.Count()
        {
            set item = items.GetAt(i)
        
            set event = ##class(Production.Utils.AG.Event).%New()
            set event.Start = ..TimeStampFromAutograph(item.SD)
            set event.End = ..TimeStampFromAutograph(item.ED)
            set event.Caption = item.Caption
        
            if (mhIdx) set event.MotoHours = ..TimeFromAutograph(item.Values.GetAt(mhIdx))
            if (fdIdx) set event.FuelDelta = ..TimeFromAutograph(item.Values.GetAt(fdIdx))
        
            do pResponse.Events.Insert(item  event )   
        }
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [ensemble] Проблемы с сериализацией списка в сообщении
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]