Envio de archivos Web Service
pero no funciona con archivos d mas de 4 megas
/**************************************************************************
AUTOR : JORGE BINDA
PROPOSITO : Abre y Guarda el Documento directamente en el Alfresco
ARGUMENTO : HOJA DE TRAMITE, NUMERO DE CORRELATIVO Y AREA
RETORNO : MSG
FECHA : 07/04/2011
---------------------------------------------------------------------------
ID AUTOR FECHA PROPOSITO
---------------------------------------------------------------------------
@1
**************************************************************************/
SoapConnection conn // Define SoapConnection
ws_cmsservice proxy_obj // Declare proxy
long rVal, lLog
string ls_cadena
//contenidoecmbean str_objrpta
rptawsbean str_objrpta
blob lblb_docum
string str_endpoint
////Conexion al web services
////str_endpoint = "http://10.0.0.6:8080/WS_CMS/ws_cms?wsdl"
//str_endpoint = "http://192.168.0.174:8084/WS_CMS/ws_cms?wsdl"
//conn = create SoapConnection //Instanciando la conexion
//
//lLog = conn.SetOptions("SoapLog=~"C:\mySoapLog.log~"")
//
//rVal = Conn.CreateInstance(proxy_obj,"ws_cmsservice",str_endpoint)
//
//// Creando el Objeto Proxy
try
string ls_codigo
String ls_app_path
ls_app_path = GetCurrentDirectory()
//Selecciono el Archivo a abrir
STRING ls_pathname, ls_filename, ls_filtro
LONG ll_File
BLOB lbl_data, lbl_temp
ls_filtro = "PDF Files (*.pdf),*.pdf," + "DOC Files (*.doc),*.doc,"
IF GetFileOpenName ( "Archivo de Documento: ", ls_pathname, ls_filename , "PDF", ls_filtro) = 1 THEN
//Cargamos el archivo si sobre pasa el valor permitido
ll_File = FileOpen(ls_pathname, StreamMode!)
DO WHILE FileRead(ll_file,lbl_temp) > 0
lbl_data += lbl_temp
LOOP
FileClose(ll_file)
IF ll_File <> -1 THEN
FileRead(ll_file, lbl_data)
FileClose(ll_file)
byte lbyte_array[]
String ls_null, ls_uuid, ls_uuid_ant
setnull(ls_null)
//Buscamos el uuid anterior para ver si es nuevo o actualiza
Select x_digital_alfresco Into :ls_uuid_ant From Tflujo Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;
//Convertimos el Archivo BLOB en ARRAY DE BITS para enviarlo al Alfresco
lbyte_array[] = GetByteArray(lbl_data)
//Genera la ruta donde se guarda o actualiza el archivo
//Obtiene la descripcion del area y si hay comas se las quito
String ls_area, ls_mes, ls_ruta
select replace(x_remitente,',',' ') into :ls_area from tremitente where c_remitente = :c_area;
//Obtiene el nombre del mes
ls_mes = string(datetime(today()),'MM')
ls_mes = f_nombre_mes(ls_mes)
ls_ruta = ls_area+'/'+leftA(c_expediente,4)+'/'+ls_mes
//Fin genera ruta
String ls_nomarc
ls_nomarc = trim(c_expediente)+'_'+String(n_correlativo)+'.pdf'
//ls_filename
//Conexion al web services
//str_endpoint = "http://10.0.0.6:8080/WS_CMS/ws_cms?wsdl"
str_endpoint = "http://192.168.0.174:8084/WS_CMS/ws_cms?wsdl"
conn = create SoapConnection //Instanciando la conexion
lLog = conn.SetOptions("SoapLog=~"C:\mySoapLog.log~"")
rVal = Conn.CreateInstance(proxy_obj,"ws_cmsservice",str_endpoint)
// Creando el Objeto Proxy
//Genera nombre del archivo
If isnull (ls_uuid_ant) or ls_uuid_ant = '' Then
//Inserta
str_objrpta = proxy_obj.registrardocumento('MIIDjjCCAvegAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBijELMAkGA1UEBhMCVVMx', ls_nomarc,ls_ruta, lbyte_array)
/*ws_blob ws_blob_doc
ws_blob_doc = lbyte_array
str_objrpta = proxy_obj.registrardocumento3('MIIDjjCCAvegAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBijELMAkGA1UEBhMCVVMx', ls_nomarc, ls_ruta, ws_blob_doc)
*/
Else
//Actualiza
str_objrpta = proxy_obj.actualizarDocumento('MIIDjjCCAvegAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBijELMAkGA1UEBhMCVVMx',ls_uuid_ant, ls_nomarc,ls_ruta, lbyte_array)
End If
//Obtenemos el uuid que arroja el Alfresco cuando graba en su bd
ls_uuid = str_objrpta.uuid
If str_objrpta.codmsg = 'ok' Then
//Graba el uuid en la tabla flujo y el nombre original
Update Tflujo Set x_digital_Alfresco = :ls_uuid, x_nombre_original = :ls_filename Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;
//Borra el Adjunto Digital que tenía antes
Integer li_digital, li_null
SetNull(li_null)
SELECT ID_DIGITAL Into :li_digital FROM Tflujo Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;
Delete from tdoc_digital WHERE ID_DIGITAL = :li_digital;
Update Tflujo Set ID_DIGITAL = :li_null Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;
Commit;
messagebox('Sistema de Trámite Documentario','Archivo cargado corréctamente' )
ElseIf str_objrpta.codmsg = 'nok' Then
messagebox('Sistema de Trámite Documentario',str_objrpta.cadmsg )
End If
End If
End If
// Control de errores del webservices
Catch ( SoapException e )
messagebox("Error", e.GetMessage() )
messagebox ("Error", "No se puede invocar al WebService ~n"+string('ws_cmsservice'))
// Envia el menseje de error de existir
end try
destroy conn
ChangeDirectory(ls_app_path)
GarbageCollect()