Функция удаление записей из таблицы с фильтром, функция обновления полей записи

Как известно, для удаления записей из таблицы, правильней всего создавать
специальный DeleteQuery, но как показала практика - делать это всем лень :)
для таких случаев была написана следующая функция.

function DeleteRecords(Dataset, Dictionary) {
   if (!Assigned(Dataset)) {
      if (!IsEmptyValue(Dataset) &&
         Assigned(Services.InformationsByUSI(Dataset))) {
         Dataset = GetSingleItemByCode(Dataset, 'DeleteRecords');
      } else {
         return;
      }
   }
   if ('DBDataset' == Dataset.ServiceTypeCode) {
      var Table = Dataset.SelectQuery.Items(0).FromTable;
   } else
   if ('Table' == Dataset.ServiceTypeCode) {
      var Table = Dataset;
   } else {
      return;
   }
   var dq = Services.CreateItem('DeleteQuery');
   dq.Table = Table;
   var TableFields = Table.Fields;
   var Filters = dq.Filters;
   var Parameters = dq.Parameters;

   var TableField;
   var FilterFieldType;
   var CompareOperatorType = cotEqual;
   var Parameter;
       
   var Keys = new VBArray(Dictionary.Keys()).toArray();
   var KeysLength = Keys.length;
   for (var i = 0; i KeysLength; i++) {
      TableField = TableFields.ItemsByName(Keys[i]);
      FilterFieldType =
         GetParameterTypeBySQLDataType(TableField.SQLDataType);
      Parameter = AddQueryParameter(Parameters, Keys[i],
         FilterFieldType, Dictionary(Keys[i]));
      AddQueryCompareFilter(Filters, Keys[i], TableField,
         Parameter, CompareOperatorType);
   }
   return dq.Execute();
}

первый параметр - может быть как именем сервиса так и самим объектом Таблица или Датасет;
второй параметр - это набор полей и их значений в виде Словаря.

Функция апдейта:

function UpdateRecord(Dataset, RecordID, Dictionary) {
   if (!Assigned(Dataset)) {
      if (!IsEmptyValue(Dataset) &&
         Assigned(Services.InformationsByUSI(Dataset))) {
         Dataset = GetSingleItemByCode(Dataset, 'UpdateRecord');
      } else {
         return;
      }
   }
   if ('DBDataset' == Dataset.ServiceTypeCode) {
      var Table = Dataset.SelectQuery.Items(0).FromTable;
   } else
   if ('Table' == Dataset.ServiceTypeCode) {
      var Table = Dataset;
   } else {
      return;
   }
   var uq = Services.CreateItem('UpdateQuery');
   uq.Table = Table;
   var TableFields = Table.Fields;
   var Filters = uq.Filters;
   var Parameters = uq.Parameters;
   var Columns = uq.ColumnsValues;

   var TableField;
   var FieldType;
   var CompareOperatorType = cotEqual;
   var Parameter;
   var Column;
       
   TableField = TableFields.ItemsByName('ID');
   Parameter = AddQueryParameter(Parameters, 'ID', sdtGUID, RecordID);
   AddQueryCompareFilter(Filters, 'ID', TableField,
      Parameter, CompareOperatorType);
       
   var Keys = new VBArray(Dictionary.Keys()).toArray();
   var KeysLength = Keys.length;
   for (var i = 0; i KeysLength; i++) {
      TableField = TableFields.ItemsByName(Keys[i]);   
      if (!Assigned(TableField)) {
         continue;
      }
      FieldType = GetParameterTypeBySQLDataType(TableField.SQLDataType);
      AddQueryParameter(Parameters, Keys[i], FieldType,
         Dictionary(Keys[i]));
      Column = Columns.CreateItem();
      Column.ParameterName = Column.KeyValue = Column.Name = Keys[i];
      Column.DataType = FieldType;
      Columns.Add(Column);
   }
   var Result = uq.Execute();
   return Result;
}

первый параметр - может быть как именем сервиса так и самим объектом Таблица или Датасет;
второй параметр - это ID записи в таблице, которую нужно обновить;
третий параметр - это набор полей и их значений в виде Словаря.

Также нужно подключить scr_DB

Пример использования:

var Dictionary = GetNewDictionary();
Dictionary('AccountID') = RecordID;
Dictionary('TypeID') = tOne;
DeleteRecords('tbl_AccountAddress', Dictionary);

var Dictionary = GetNewDictionary();
Dictionary('Name') = 'NewValue';
Dictionary('Name2') = 'NewValue2';
Dictionary('Name3') = 'NewValue3';
UpdateRecord('tbl_Account', RecordID, Dictionary);

Нравится

Поделиться

1 комментарий

С некоторых пор функция UpdateRecord уже есть "в коробке", в скрипте scr_JobManagerUtils, но с небольшой доработкой, чтобы не пытались обновить значение ID.
После

      TableField = TableFields.ItemsByName(Keys[i]); 

добавлено:

      if (TableField.SQLName == 'ID') {
          continue;		
	  }
Показать все комментарии