Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Passing an array to a web service
Message
 
 
To
04/07/2002 17:58:47
General information
Forum:
Visual FoxPro
Category:
Web Services
Miscellaneous
Thread ID:
00675451
Message ID:
00675523
Views:
12
>I have a VFP web service and a VFP client which uses the web service. How do I pass an array to a web service method?
>
>Thanks!

mmm. Maybe there are more options, but due to the lack of a ArrayToXML or ArrayToFile, I did two functions for this, the thing I did it

1 - passing the array to a raw file (ArrayToFile func)
2 - passing to the WebService the file name or the data as XML (you can choose)
3 - Running a FileToArray Method

Here are the functions (they still borrows some chuncks from a Sergey Berezniker utility BrowseArray:
************************************************************
*
* Funcion: ArrayToFile
*
* Pasa un array a un fichero, similar como hace STRTOFILE
*
* Parametros:
*
*   taArray   - Array o matriz (por referencia)
*   tcfichero - fichero donde se guarda
*
* Ejemplos:
*
*   DIMENSION laArray(1)
*   ADIR(laArray,"C:*.*","D")
*   llret = ArrayToFile(@laArray,"C:archivo.txt")
*
* Retorno
*   .T. Correcto
*   .F. No se pasó el array por referencia
*
* Nota
*
*  Se usa en combinacion con FileToArray
*
* Creación           : 10/06/2002 Pablo Roca
* Ultima Modificacion: 10/06/2002 Pablo Roca
*
************************************************************
FUNCTION ArrayToFile
LPARAMETER taArray, tcfichero

LOCAL lnRows, lnCols, lnI, lnJ, lvValue, lnarchivo, lcst

* matriz no pasada por referencia
IF TYPE("taArray[1]") = "U"
   RETURN .F.
ENDIF

* tamaño de la matriz
lnRows = ALEN(taArray,1)
lnCols = MAX(ALEN(taArray,2),1)

lnarchivo=FCREATE(tcfichero)
FPUTS(lnarchivo,TRANSFORM(lnRows,";@L 999")+"x"+TRANSFORM(lnCols,";@L 999"))

FOR lnI = 1 TO lnRows
   lcst = ""
   FOR lnJ = 1 TO lnCols
      IF lnCols = 1
         lvValue = taArray(lnI)
      ELSE
         lvValue = taArray(lnI,lnJ)
      ENDIF
      lcst = lcst+VARTYPE(lvValue)+TRANSFORM(LEN(TRANSFORM(lvValue)),";@L 999")+TRANSFORM(lvValue)
   ENDFOR
   FPUTS(lnarchivo,lcst)
ENDFOR
FCLOSE(lnarchivo)

RETURN .T.

************************************************************
*
* Funcion: FileToArray
*
* Pasa un fichero a un array, similar como hace FILETOSTR
*
* Parametros:
*
*   taArray   - Array o matriz (por referencia)
*   tcfichero - fichero de donde se lee
*
* Ejemplos:
*
*   DIMENSION laArray(1)
*   llret = FileToArray(@laArray,"C:archivo.txt")
*
* Retorno
*
*   .T. Correcto
*   .F. No se pasó el array por referencia
*
* Nota
*
*  Se usa en combinacion con ArrayToFile
*
* Creación           : 10/06/2002 Pablo Roca
* Ultima Modificacion: 10/06/2002 Pablo Roca
*
************************************************************
FUNCTION FileToArray
LPARAMETER taArray, tcfichero

LOCAL lnRows, lnCols, lnI, lnJ, lvValue

LOCAL lnarchivo, lcst, lctipo, lndec, lvValue
* matriz no pasada por referencia
IF TYPE("taArray[1]") = "U"
   RETURN .F.
ENDIF

lnarchivo = FOPEN(tcfichero,10)
lcst = FGETS(lnarchivo)
* Tamaño de la matriz
lnRows = VAL(LEFT(lcst,3))
lnCols = VAL(SUBSTR(lcst,5,3))
DIMENSION taArray(lnRows,lnCols)

FOR lnI = 1 TO lnRows
   lcst = FGETS(lnarchivo,8192)
   lnpos=1
   FOR lnJ = 1 TO lnCols
      lctipo  = SUBSTR(lcst, lnpos,1)
      lcancho = SUBSTR(lcst, lnpos+1,3)
      lnancho = VAL(lcancho)
      lvValue = SUBSTR(lcst, lnpos+4,lnancho)
      DO CASE
         CASE lctipo = "N" OR lctipo = "Y"
            lndec = IIF(AT(SET("POINT"),lvValue)>0,LEN(lvValue)-AT(SET("POINT"),lvValue),0)
            lvValue = ROUND(VAL(lvValue),lndec)
         CASE lctipo = "D"
            lvValue = CTOD(lvValue)
         CASE lctipo = "L"
            lvValue = IIF(lvValue=".T.",.T.,.F.)
         CASE lctipo = "T"
            lvValue = CTOT(lvValue)
      ENDCASE
      lnpos = lnpos + 4 + lnancho
      IF lnCols = 1
         taArray(lnI) = lvValue
      ELSE
         taArray(lnI,lnJ) = lvValue
      ENDIF
   ENDFOR
ENDFOR
FCLOSE(lnarchivo)
RETURN .T.
Pablo Roca
Clavo Congelados, S.A. (La Coruna - Spain)
Sysop of PortalFox

Join MasFoxPro campaign
http://www.masfoxpro.com
Previous
Reply
Map
View

Click here to load this message in the networking platform