Аналог GetRegistryValue() на RSL
Сохранить в файлеОбсудить в форуме
Описание
В некоторых случаях необходимо иметь доступ к реестру настроек RS-Bank, не нет возможности подгрузить модуль BankInter, где имеется стандартная процедура GetRegistryValue(), например, при необходимости получить доступ к реестру настроек из autoinc.mac. Данный пример дублирует эту процедуру на RSL.
Текст примера
/*---------------------------------------------------------------------------- Аналог процедуры GetRegistryValue() модуля BankInter на языке RSL. ------------------------------------------------------------------------------ Параметры: PathKey - полное наименование параметра настроек; TypeValue - тип значения переменной настроек, Value - возвращаемое значение параметра настроек, ErrCode - возвращаемый код ошибки при выполнении процедуры (0 - успешное выполнение процедуры). Возвр.значение: тип возвращаемого значения параметра настроек (V_UNDEF в случае ошибки выполнения процедуры). ----------------------------------------------------------------------------*/ macro GetRegistryValueRSL(PathKey, TypeValue, Value, ErrCode) const НетОшибки = 0, НеверныйТипЗначенияПараметраНастройки = 5, НеверноеЗначениеПараметраНастройки = 6, ПараметрНастроекНеНайден = 7, NumParmValue = 2, NumParmErrCode = 3; var ob, obj; SetParm(NumParmErrCode, НетОшибки); ob = TBFile("regparm", "R", 1, "..\\dbfile\\regparm.dbt", "..\\dbfile\\bank.def"); ob.("ParentID") = 0; PathKey = StrUpr(PathKey); while (StrBrk(PathKey, "\\") != 0) ob.("Name") = SubStr(PathKey, 1, StrBrk(PathKey, "\\")-1); if (not ob.getEQ) SetParm(NumParmErrCode, ПараметрНастроекНеНайден); return V_UNDEF; end; ob.("ParentID") = ob.("KeyID"); PathKey = SubStr(PathKey, StrBrk(PathKey, "\\")+1); end; ob.("Name") = PathKey; if (not ob.getEQ) SetParm(NumParmErrCode, ПараметрНастроекНеНайден); return V_UNDEF; end; obj = TBFile("regval", "R", 0, "..\\dbfile\\regval.dbt", "..\\dbfile\\bank.def"); obj.("KeyID") = ob.("KeyID"); obj.("Oper") = {oper}; if (obj.getEQ) if (TypeValue == V_UNDEF) if (obj.("Type") == 0) SetParm(NumParmValue, obj.("LintValue")); return V_INTEGER; elif (obj.("Type") == 1) SetParm(NumParmValue, obj.("LdoubleValue")); return V_DOUBLE; elif (obj.("Type") == 2) SetParm(NumParmValue, obj.("StringValue")); return V_STRING; end; elif (TypeValue == V_INTEGER) if (obj.("Type") == 0) SetParm(NumParmValue, obj.("LintValue")); return V_INTEGER; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; elif (TypeValue == V_DOUBLE) if (obj.("Type") == 1) SetParm(NumParmValue, obj.("LdoubleValue")); return V_DOUBLE; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; elif (TypeValue == V_STRING) if (obj.("Type") == 2) SetParm(NumParmValue, obj.("StringValue")); return V_STRING; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; end; else obj.("KeyID") = ob.("KeyID"); obj.("Oper") = 0; if (not obj.getEQ) SetParm(NumParmErrCode, ПараметрНастроекНеНайден); return V_UNDEF; end; if (TypeValue == V_UNDEF) if (obj.("Type") == 0) SetParm(NumParmValue, obj.("LintValue")); return V_INTEGER; elif (obj.("Type") == 1) SetParm(NumParmValue, obj.("LdoubleValue")); return V_DOUBLE; elif (obj.("Type") == 2) SetParm(NumParmValue, obj.("StringValue")); return V_STRING; end; elif (TypeValue == V_INTEGER) if (obj.("Type") == 0) SetParm(NumParmValue, obj.("LintValue")); return V_INTEGER; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; elif (TypeValue == V_DOUBLE) if (obj.("Type") == 1) SetParm(NumParmValue, obj.("LdoubleValue")); return V_DOUBLE; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; elif (TypeValue == V_STRING) if (obj.("Type") == 2) SetParm(NumParmValue, obj.("StringValue")); return V_STRING; else SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки); return V_UNDEF; end; end; end; end;