Hello Timofey.
I`m getting the following error when I try to execute exchange mechanism beetween server and mobile.
On the server in the web service is all ok, function for sending data is executing.
Function in the web service module for sending data to mobile is:
Code |
---|
Function PerformExchange(DeviceCode, DeviceData) SetPrivilegedMode(True); //1. Initialization (if necessary) ExchangeNode = ExchangePlans.Mobile.ThisNode().GetObject(); If Not ValueIsFilled(ExchangeNode.Code) Then ExchangeNode.Code="001"; ExchangeNode.Description="Main"; ExchangeNode.Write(); EndIf; ExchangeNode = ExchangePlans.Mobile.FindByCode(DeviceCode); If ExchangeNode.IsEmpty() Then NewNode = ExchangePlans.Mobile.CreateNode(); NewNode.Code = DeviceCode; NewNode.Description = DeviceCode; NewNode.Write(); RecordDataChanges(NewNode.Ref); ExchangeNode = NewNode.Ref; EndIf; //2. Retrieving data from the mobile device ExchangeNode = ExchangePlans.Mobile.FindByCode(DeviceCode); XMLReader = New XMLReader; XMLReader.SetString(DeviceData.Get()); MessageReader = ExchangePlans.CreateMessageReader(); MessageReader.BeginRead(XMLReader); ExchangePlans.DeleteChangeRecords(MessageReader.Sender,MessageReader.ReceivedNo); BeginTransaction(); While CanReadXML(XMLReader) Do Data = ReadXML(XMLReader); If Not Data = Undefined Then Data.DataExchange.Sender = MessageReader.Sender; Data.DataExchange.Load = True; Data.Write(); EndIf; EndDo; CommitTransaction(); MessageReader.EndRead(); XMLReader.Close(); //3. Exporting data to the mobile device ExchangeNode = ExchangePlans.Mobile.FindByCode(DeviceCode); XMLWriter = New XMLWriter; XMLWriter.SetString("UTF-8"); XMLWriter.WriteXMLDeclaration(); MessageWriter = ExchangePlans.CreateMessageWriter(); MessageWriter.BeginWrite(XMLWriter, ExchangeNode); XMLWriter.WriteNamespaceMapping("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XMLWriter.WriteNamespaceMapping("v8", "http://v8.1c.ru/data"); ChangeSelection = ExchangePlans.SelectChanges(ExchangeNode, MessageWriter.MessageNo);//, Users.GetExchangePermissionsFilter(SystemUser)); While ChangeSelection.Next() Do Data = ChangeSelection.Get(); WriteXML(XMLWriter, Data);// Writing data to the message EndDo; MessageWriter.EndWrite(); Return New ValueStorage(XMLWriter.Close(), New Deflation(9)); EndFunction |
On the mobile when processing server response i`m getting the following error
"Error setting value of context attribute(Sender)".
Can you please help me to fix this?
The function is:
Code |
---|
&AtServer Procedure ExecuteDataExchange() Export Address = Constants.ServerAdress.Get(); Definitions = New WSDefinitions(Address,"admin", "admin"); URI = "http://localhost/ws1"; Proxy = New WSProxy(Definitions, URI, "WebExchange", "WebExchangeSoap"); Proxy.User = "admin"; Proxy.Password = "admin"; SysInfo = New SystemInfo; MobileDeviceCode = String(SysInfo.ClientID); //1. Initialization (if necessary) Node = ExchangePlans.Mobile.ThisNode(); If Not ValueIsFilled(Node.Code) Or Node.Code <> MobileDeviceCode Then NodeObject = Node.GetObject(); NodeObject.Code = MobileDeviceCode; NodeObject.Description = MobileDeviceCode; NodeObject.Write(); EndIf; MainExchangeNode = ExchangePlans.Mobile.FindByCode("001"); If MainExchangeNode.IsEmpty() Then NewNode = ExchangePlans.Mobile.CreateNode(); NewNode.Code="001"; NewNode.Description="Main"; NewNode.Write(); MainExchangeNode = NewNode.Ref; EndIf; //2. Exchange with the main base ExchangeData = Proxy.PerformExchange(MobileDeviceCode, GenerateExchangePackage(MainExchangeNode)); //3. Processing data received from the main base XMLReader = New XMLReader; XMLReader.SetString(ExchangeData.Get()); MessageReader = ExchangePlans.CreateMessageReader(); MessageReader.BeginRead(XMLReader); ExchangePlans.DeleteChangeRecords(MessageReader.Sender,MessageReader.ReceivedNo); BeginTransaction(); While CanReadXML(XMLReader) Do Data = ReadXML(XMLReader); If Not Data = Undefined Then Message(MessageReader.Sender); Data.DataExchange.Sender = MessageReader.Sender; Data.DataExchange.Load = True; Data.Write(); EndIf; EndDo; CommitTransaction(); MessageReader.EndRead(); XMLReader.Close(); EndProcedure |