unit fs02iopSrv_03_SrvMethods;

interface

uses
    fs02iop_00_lib,
    fs02iopSrv_00_FS_lib,

    //Dialogs,
    System.SysUtils, System.Classes, System.Json,
    DataSnap.DSProviderDataModuleAdapter,
    Datasnap.DSServer, Datasnap.DSAuth;

type
  TServerMethods1 = class(TDSServerModule)
  private
    { Private declarations }
  public
    { Public declarations }

    //-----------------------------------
    //Методы, созданные по умолчанию
    //(можно использовать для тестирования)
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    //-----------------------------------


    //-----------------------------------
    //"Наши" методы...   :-)
    //Список FS-скриптов
    function FS_Scripts_List:string;
    //FS-скрипт: комментарий к скрипту
    function FS_Script_Comment(sMnemo:string):string;
    //FS-скрипт: описание к скрипта
    function FS_Script_Info(sMnemo:string):string;
    //FS-скрипт: список входных параметров FSI
    function FS_Script_ParamsIn(sMnemo:string):string;
    //FS-скрипт: список вЫходных параметров FSI
    function FS_Script_ParamsOut(sMnemo:string):string;
    //FS-скрипт: Выполнить
    function FS_Script_Execute(sMnemo:string; sParamsIn:string; sParamsOut:string):string;
    //-----------------------------------

  end;

implementation


{$R *.dfm}


uses
  fs02iopSrv_01_main,
  System.StrUtils;

//********************************************
//Методы, созданные по умолчанию (можно использовать для тестирования)
function TServerMethods1.EchoString(Value: string): string;
begin
  Result := Value;
end;
function TServerMethods1.ReverseString(Value: string): string;
begin
  Result := System.StrUtils.ReverseString(Value);
end;
//********************************************

//********************************************
//"Наши" методы...   :-)

function TServerMethods1.FS_Scripts_List:string;
//Список FS-скриптов
Var
  List:TStrings;
begin
  Result:='';
  List:=TStringList.Create;
  TRY
    fsScr_List_Get(fMain.qTMPrt, List);
    Result:=List.Text;
  FINALLY
    FreeAndNil(List);
  END;
end;

function TServerMethods1.FS_Script_Comment(sMnemo:string):string;
//FS-скрипт: комментарий к скрипту
begin
  Result:='';
end;

function TServerMethods1.FS_Script_Info(sMnemo:string):string;
//FS-скрипт: описание к скрипта
begin
  Result:='Ошибка!';
  sMnemo:=MnemoCode_Normalize(sMnemo);
  if sMnemo<>'' then begin
     sMnemo:=PrepareForSQL(AnsiLowerCase(sMnemo));
     Result:=DB_Table_Field_AsString(
                                     fMain.qTMPrt,
                                     'fs_scripts',
                                     'info',
                                     'mnemocode_lower='+#39+sMnemo+#39
                                    );
  end;
end;

function TServerMethods1.FS_Script_ParamsIn(sMnemo:string):string;
//FS-скрипт: список входных параметров FSI (константы FS)
Var
  List:TStrings;
  i:integer;
  sName:string;
begin
  Result:='Ошибка!';
  sMnemo:=MnemoCode_Normalize(sMnemo);
  if sMnemo<>'' then begin
     sMnemo:=PrepareForSQL(AnsiLowerCase(sMnemo));
     List:=TStringList.Create;
     TRY
       List.Text:=DB_Table_Field_AsString(
                                          fMain.qTMPrt,
                                          'fs_scripts',
                                          'params_in',
                                          'mnemocode_lower='+#39+sMnemo+#39
                                         );
       for i:=0 to (List.Count-1) do
        begin
          sName:=trim(List.Names[i]);
          if sName<>'' then begin
             List.Values[sName]:=' ';
          end
          else begin
             List[i]:='';
          end;
       end;
       TStrings_DeleteEmptyLine(List);
       Result:=List.Text;
     FINALLY
       FreeAndNil(List);
     END;
  end;
end;

function TServerMethods1.FS_Script_ParamsOut(sMnemo:string):string;
//FS-скрипт: список вЫходных параметров FSI (переменные FS)
Var
  List:TStrings;
  i:integer;
  sName:string;
begin
  Result:='Ошибка!';
  sMnemo:=MnemoCode_Normalize(sMnemo);
  if sMnemo<>'' then begin
     sMnemo:=PrepareForSQL(AnsiLowerCase(sMnemo));
     List:=TStringList.Create;
     TRY
       List.Text:=DB_Table_Field_AsString(
                                          fMain.qTMPrt,
                                          'fs_scripts',
                                          'params_out',
                                          'mnemocode_lower='+#39+sMnemo+#39
                                         );
       for i:=0 to (List.Count-1) do
        begin
          sName:=trim(List.Names[i]);
          if sName<>'' then begin
             List.Values[sName]:=' ';
          end
          else begin
             List[i]:='';
          end;
       end;
       TStrings_DeleteEmptyLine(List);
       Result:=List.Text;
     FINALLY
       FreeAndNil(List);
     END;
  end;
end;

function TServerMethods1.FS_Script_Execute(sMnemo:string; sParamsIn:string; sParamsOut:string):string;
//FS-скрипт: Выполнить
begin
  Result:='Ошибка!';
  sMnemo:=MnemoCode_Normalize(sMnemo);
  if sMnemo<>'' then begin
     Result:=fMain.fsiScript_Execute_RT(sMnemo,
                                        sParamsIn,
                                        sParamsOut
                                        );
  end;
end;
//********************************************


end.