unit srvArticulos_Impl; {----------------------------------------------------------------------------} { This unit was automatically generated by the RemObjects SDK after reading } { the RODL file associated with this project . } { } { This is where you are supposed to code the implementation of your objects. } {----------------------------------------------------------------------------} interface uses {vcl:} Classes, SysUtils, {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, {Ancestor Implementation:} DataAbstractService_Impl, {Used RODLs:} DataAbstract4_Intf, {Generated:} uDABusinessProcessor, uDABin2DataStreamer, uDADataStreamer, uDAScriptingProvider, uDAClasses, FactuGES_Intf, uDAInterfaces; type { TsrvArticulos } TsrvArticulos = class(TDataAbstractService, IsrvArticulos) Diagrams: TDADiagrams; bpArticulos: TDABusinessProcessor; Bin2DataStreamer: TDABin2DataStreamer; schArticulos: TDASchema; DataDictionary: TDADataDictionary; procedure DARemoteServiceBeforeGetDatasetData(const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer); procedure DARemoteServiceCreate(Sender: TObject); procedure DataAbstractServiceBeforeAcquireConnection(aSender: TObject; var aConnectionName: string); function EliminarImagen(const ID_ARTICULO: Integer): Boolean; function AnadirImagen(const ID_ARTICULO: Integer; const Imagen: Binary): Boolean; end; implementation {$R *.dfm} uses {Generated:} FactuGES_Invk, uDataModuleServer, uROClasses, uSistemaFunc, uDatabaseUtils, schArticulosClient_Intf, uRestriccionesUsuarioUtils; procedure Create_srvArticulos(out anInstance : IUnknown); begin anInstance := TsrvArticulos.Create(NIL); end; { srvArticulos } function TsrvArticulos.AnadirImagen(const ID_ARTICULO: Integer; const Imagen: Binary): Boolean; var AConn : IDAConnection; dsData: IDADataset; dsCommand: IDASQLCommand; aAux : String; begin Result := False; AConn := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionManager.GetDefaultConnectionName); try try dsData := schArticulos.NewDataset(AConn, 'ExisteImagen', ['ID'], [ID_ARTICULO]); dsData.Active := True; Result := (dsData.FieldValues[0] > 0); AConn.CommitTransaction; except RaiseError('Error al buscar articulo con imagen'); AConn.RollbackTransaction; end; finally dsData := NIL; end; if Result then begin try try aAux := DarFicheroJPGTemporal; Imagen.SaveToFile(aAux); dsCommand := schArticulos.NewCommand(AConn, 'ModificarImagen'); dsCommand.ParamByName('ID').AsInteger := ID_ARTICULO; dsCommand.ParamByName('IMAGEN').LoadFromFile(aAux); dsCommand.Execute; AConn.CommitTransaction; Result := True; except RaiseError('Error al modificar la imagen'); AConn.RollbackTransaction; end; finally DeleteFile(aAux); dsCommand := NIL; end; end; end; procedure TsrvArticulos.DARemoteServiceBeforeGetDatasetData( const Dataset: IDADataset; const IncludeSchema: Boolean; const MaxRecords: Integer); begin if DataSet.Name = nme_Articulos then begin { Aquí se asegura que el usuario sólo accede a los Articulos de las empresas a las que tiene permiso para acceder filtrando DataSet por ID_EMPRESA. } FiltrarAccesoUsuario(Session, Connection, schArticulos, DataSet, fld_ArticulosID_EMPRESA); end; end; procedure TsrvArticulos.DARemoteServiceCreate(Sender: TObject); begin //SessionManager := dmServer.SessionManager; end; procedure TsrvArticulos.DataAbstractServiceBeforeAcquireConnection( aSender: TObject; var aConnectionName: string); begin ConnectionName := dmServer.ConnectionName; end; function TsrvArticulos.EliminarImagen(const ID_ARTICULO: Integer): Boolean; var AConn : IDAConnection; dsCommand: IDASQLCommand; begin Result := False; AConn := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionManager.GetDefaultConnectionName); try try dsCommand := schArticulos.NewCommand(AConn, 'EliminarImagen'); with dsCommand do ParamByName('ID').AsInteger := ID_ARTICULO; dsCommand.Execute; AConn.CommitTransaction; Result := True; except RaiseError('Error al eliminar la imagen'); AConn.RollbackTransaction; end; finally dsCommand := NIL; end; end; initialization TROClassFactory.Create('srvArticulos', Create_srvArticulos, TsrvArticulos_Invoker); finalization end.