Столкнулся с проблемой заполнения List через ParseJson.
DeclareModule Test ; Interface NewTest _set(*LocationList) _set2(List LocationList()) Destroy() EndInterface ; Declare New() EndDeclareModule Module Test Structure TestClass *vTable EndStructure Structure Location x.l y.l EndStructure Procedure New() ;FUNC Global Class|Structure Protected *obj.TestClass *obj = AllocateStructure(TestClass) If *obj *obj\vTable = ?vTable_TestClass EndIf ProcedureReturn *obj EndProcedure ; Procedure _set(*this.TestClass, *LocationList) ;test 1 Protected Result.i, json.i, Input$ Input$ = "[ {" + Chr(34) + "x" + Chr(34) + ": 10, " + Chr(34) + "y" + Chr(34) + ": 20}, " + "{" + Chr(34) + "x" + Chr(34) + ": 30, " + Chr(34) + "y" + Chr(34) + ": 50}, " + "{" + Chr(34) + "x" + Chr(34) + ": -5, " + Chr(34) + "y" + Chr(34) + ": 100} ]" json = ParseJSON(#PB_Any, Input$) If IsJSON(json) ExtractJSONList(JSONValue(json), *LocationList.Location()) FreeJSON(json) Result = #True Else Result = #False EndIf ProcedureReturn Result EndProcedure ; Procedure _set2(*this.TestClass, List LocationList()) ;Test 2 Protected Result.i, json.i, Input$ Input$ = "[ {" + Chr(34) + "x" + Chr(34) + ": 10, " + Chr(34) + "y" + Chr(34) + ": 20}, " + "{" + Chr(34) + "x" + Chr(34) + ": 30, " + Chr(34) + "y" + Chr(34) + ": 50}, " + "{" + Chr(34) + "x" + Chr(34) + ": -5, " + Chr(34) + "y" + Chr(34) + ": 100} ]" json = ParseJSON(#PB_Any, Input$) If IsJSON(json) ExtractJSONList(JSONValue(json), LocationList.Location()) FreeJSON(json) Result = #True Else Result = #False EndIf ProcedureReturn Result EndProcedure Procedure Destroy(*this.TestClass) If *this FreeStructure(*this) EndIf EndProcedure ; DataSection vTable_TestClass: data.i @_set() data.i @_set2() data.i @Destroy() EndDataSection EndModule Structure Location x.l y.l EndStructure NewList Locations.Location() Define T.Test::NewTest T = Test::New() t\_set(@Locations.Location()) t\_set2(Locations()) ForEach Locations() Debug Str(Locations()\x) + ", " + Str(Locations()\y) Next
В общем у меня в Procedure _set (Реальная процедура имеет другое имя, так для теста) поступает ответ от сервера в виде Array.Structure (mysql список записей в таблитце) и нужно передать в Procedure_set List.Structure()
Но получаю ошибку в виде:
[16:07:47] [COMPILER] Строка 91: The list doesn't match with the procedure parameter. [16:15:11] [COMPILER] Строка 40: *LocationList() is not a function, array, list, map or macro.
Есть у кого идеи.
И да вот JSON ответ сервера:
[ {"id":"1","hwid":"123","author":"test","name":"Ftest","version":"1.0.0.0","version_auth":"1.0.0.0","url_update":"http://test","update_data":"0","hash":"123","date":"0","moderate":"0","price_type":"0","price":"0","acess":"0"}, {"id":"2","hwid":"234","author":"test","name":"test2","version":"1.0.0.0","version_auth":"1.1.1.1","url_update":"http://ya.ru","update_data":"0","hash":"43543534","date":"44444","moderate":"1","price_type":"0","price":"0","acess":"0"} ]
И да, я могу вернуть из Procedure JSON-ответ и обработать, но хотелось бы узнать возможно ли сделать это в Procedure.
Отредактировано Ste1nS (10.01.2021 14:37:58)