NetTalk Central

Author Topic: Webservice Question  (Read 3156 times)

osquiabro

  • Hero Member
  • *****
  • Posts: 668
    • View Profile
    • Email
Webservice Question
« on: September 30, 2015, 05:33:49 AM »
is possible that return a image from webservice stored at blob?

kevin plummer

  • Hero Member
  • *****
  • Posts: 1195
    • View Profile
    • Production Accounting and Software Payroll
Re: Webservice Question
« Reply #1 on: September 30, 2015, 05:07:40 PM »
yes - have a look at the xfiles docs if using xml on how to add a binary file to your xml structure.

osquiabro

  • Hero Member
  • *****
  • Posts: 668
    • View Profile
    • Email
Re: Webservice Question
« Reply #2 on: October 01, 2015, 03:38:18 AM »
do you try this?

the problem is that NetwebServiceMethod don't recognize a blob field and return this error:

Variable expected - C:\Apps\CatastroCasos\CatastroWeb10Test\CatastroWeb10037.clw:245,138

packet.append(all(' ',IndentLen) & '<'&p_web.Nocolon('DocumentContent',Net:SingleUnderscore+Net:NoSpaces)&'>' & p_web.AsciiToUtf(Cod:DocumentContent) & '</'&p_web.Nocolon('DocumentContent',Net:SingleUnderscore+Net:NoSpaces)&'><13,10>')

Rob Kolanko

  • Sr. Member
  • ****
  • Posts: 253
    • View Profile
Re: Webservice Question
« Reply #3 on: October 05, 2015, 11:46:23 AM »
I asked Bruce about blob fields during a Nettalk webinar and he said that blob fields are not handled by the templates. However you can send and receive binary data as stringtheory fields.  When sending a blob from a web service,  create a stringtheory return field. In the service method embed,  pass your blob data to the stringtheory object, then do a Base64 encode on the value. The client program will receive the string value in XML or JSON object in the page received from the web service. In the AssignField embed of the XML or JSON object intercept the field name of the stringtheory field. Place the value into a client side string theory object.  Base64 decode the stringtheory value, then copy the value to the blob field on the client database. 

I hope this helps.
Rob

kevin plummer

  • Hero Member
  • *****
  • Posts: 1195
    • View Profile
    • Production Accounting and Software Payroll
Re: Webservice Question
« Reply #4 on: October 05, 2015, 02:09:30 PM »
I'm sending an XML structure with a base64 encoded file to a web service. I think returning an image as part of the response XML could be done in a similar way but I have not tried it. Some of the code below may help.


xml.SaveCurrentFieldToXML   PROCEDURE (Long p_x,Long p_DimCounter,String p_name)
! Start of "Class Method - Data Section"
! [Priority 5000]

! End of "Class Method - Data Section"
  CODE
! Start of "Class Method - Executable Code Section"
! [Priority 2500]
        If p_x = 9
            xml2.Append = 0
            xml2._Indent = self._Indent
            xml2.OmitXMLHeader = 1
            xml2.DontSaveBlanks = 1
            xml2.Save(QInvoice.File,'Files','File')
            self._NoEncodeDecode = 1
            self._sFieldNameLen[p_x] = 0
            self.CurrentField &= xml2.xmlData
        END
       
! Parent Call
  PARENT.SaveCurrentFieldToXML (p_x,p_DimCounter,p_name)
! [Priority 7500]
    If p_x = 9
        xml._NoEncodeDecode = 0
    END



xml2.SaveCurrentFieldToXML   PROCEDURE (Long p_x,Long p_DimCounter,String p_name)
! Start of "Class Method - Data Section"
! [Priority 5000]

! End of "Class Method - Data Section"
  CODE
! Start of "Class Method - Executable Code Section"
! [Priority 2500]
        If p_name = 'FileName'
            L:FileName = self.CurrentField
        END
        If p_name = 'EncodedFile'
            If L:FileName = ''
                Message('No filename')
            ELSE
                st.LoadFile(clip(Glo:DataPath) & Clip(L:FileName))
                st.base64NoWrap = 1
                st.Base64Encode()
                self.CurrentField &= st.GetValuePtr()
            END
        END