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

Есть простой сериализуемый класс 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
20.10.2016, 09:14
    #39330318
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[ensemble] Проблемы с сериализацией списка в сообщении
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
20.10.2016, 09:55
    #39330367
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[ensemble] Проблемы с сериализацией списка в сообщении
По-моему в этом месте в список вставляется не тот объект: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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / [ensemble] Проблемы с сериализацией списка в сообщении / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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