internal void Handle(AddDevicesToDiagnosticsTask input) {
         var output = new AddDevicesToDiagnosticsTaskResponse();
         output.swlr = SwlResult.GENERAL_FAIL;

         using (var dbConn = DatabaseManager.DbConn()) {
            dbConn.BeginTransaction();

            var ti = dbConn.ExecuteBpl(new DiagnosticsTaskGetById { TaskId = input.TaskId });
            if (ti == null) {
               output.swlr = SwlResult.NOT_FOUND;
               goto Exit;
            }

            var exDeviceIds = new List<BplIdentity>();

            foreach (var deviceId in input.DeviceIds) {
               BplCollection<DiagnosticsTaskDevice> dtds = null;

               if (ti.TaskType.UsesSingleInstance()) {
                  dtds = dbConn.ExecuteBpl(new DiagnosticsTaskDeviceGetByDeviceIdTaskType { DeviceId = deviceId, TaskType = ti.TaskType });
               }

               if (dtds != null && dtds.Count > 0) {
                  exDeviceIds.Add(deviceId);
               } else {
                  dbConn.ExecuteBpl(new DiagnosticsTaskDeviceAdd {
                     TaskDeviceId = BplIdentity.Get(Guid.NewGuid().ToString()),
                     TaskId = input.TaskId,
                     DeviceId = deviceId
                  });
               }
            }

            dbConn.CommitTransaction();

            if (exDeviceIds.Count > 0) {
               output.swlr = SwlResult.ALREADY_EXISTS;
               output.DeviceIds = exDeviceIds.ToArray();
            } else {
               output.swlr = SwlResult.OK;
            }
         }

         Exit:
         Reply(output);
      }
      private void _btnDeviceAddOnClick(object sender, EventArgs e) {
         if (_selectedTask == null) {
            MessageBox.Show("Select task first", "Task not selected", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            return;
         }

         var exclDev = new List<DeviceLogisticInfo>();

         foreach (var item in listDevices.Items) {
            var deviceItem = (DeviceListItem)item;

            var di = new DeviceLogisticInfo();
            di.DeviceId = deviceItem.Device.DeviceId;
            exclDev.Add(di);
         }

         var frm = new FrmSelectDevice(exclDev);
         var dr = frm.ShowDialog(this);
         if (dr != DialogResult.OK) {
            return;
         }

         if ((frm.SelectedDevices == null) || (frm.SelectedDevices.Count == 0)) {
            return;
         }

         var req = new AddDevicesToDiagnosticsTask();
         req.TaskId = _selectedTask.TaskId;
         req.DeviceIds = frm.SelectedDevices.Select(d => d.DeviceId).ToArray();

         SendRequest(req);
      }