/// <summary>Обновить связанные свойства</summary> private void updateDeferredProperties() { dbObject lastObject = null; foreach (DataAboutDeferredProperty propertyData in deferredProperty) { if (lastObject == null || lastObject.GetType() != propertyData.AccessoryType || lastObject.Id != propertyData.Id) { lastObject = (dbObject)Activator.CreateInstance(propertyData.AccessoryType); lastObject.Read(propertyData.Id); } if (lastObject.Id != 0) { object idValue = BarcodeWorker.GetIdByRef( propertyData.PropertyType, propertyData.Value.ToString()); long id = Convert.ToInt64(idValue); if (!id.Equals(0L)) { lastObject.SetValue(propertyData.PropertyName, idValue); lastObject.Sync(); } } } }
/// <summary>Переход</summary> /// <param name="sender">Выбранный тип следующего коплектующего</param> private void button_click(object sender) { Button button = ((Button)sender); Type type = button.Tag as Type; if (isMainDataEntered) { if (warrantlyDataIsValid()) { if (type != null) { MainProcess.ClearControls(); bool isNewObject = accessory.IsNew; //Если выбранный тип совпадает с основным типом - "Сохранение перекрестных ссылок" if (mainType == type && linkId != -1) { accessory.SetValue(mainType.Name.Substring(0, mainType.Name.Length - 1), linkId); //Сохраняем для того что бы получить accessory.Id accessory.Write(); dbObject mainObj = (Accessory)Activator.CreateInstance(mainType); mainObj = (Accessory)mainObj.Read(mainType, linkId, dbObject.IDENTIFIER_NAME); mainObj.SetValue(currentType.Name.Substring(0, currentType.Name.Length - 1), accessory.Id); mainObj.Write(); } //Запись accessory.Write(); //Если документ новый - значит был процесс "Регистрация" if (isNewObject) { //Внесение записи в "Перемещение" Movement.RegisterLighter(accessory.BarCode, accessory.SyncRef, OperationsWithLighters.Registration); } //Отображение string propertyName = type.Name.Substring(0, type.Name.Length - 1); object newAccessory = accessory.GetPropery(propertyName); long newAccessoryId = newAccessory == null ? 0 : Convert.ToInt64(newAccessory); //Переход на связанное комплектующее if ((newAccessoryId != 0 || (newAccessoryId == 0 && linkId != -1 && mainType == type)) && button.Text != okBtnText && button.Text != nextBtnText) { Accessory newObj = (Accessory)Activator.CreateInstance(type); newObj.Read(type, newAccessoryId, dbObject.IDENTIFIER_NAME); MainProcess.Process = new EditBuilder(MainProcess, mainType, mainTopic, type, button.Text, newObj, newObj.BarCode); accessory = newObj; } //Переход на НОВЫЙ выбранный тип комплектующего else { //Если выбранный тип совпадает с основным типом if (mainType == type) { if (mainType == null || linkId == -1) { accessory = (Accessory)accessory.Copy(); accessory.ClearPosition(); MainProcess.Process = new EditBuilder(MainProcess, mainType, mainType, mainTopic); } MainProcess.Process = new EditBuilder(MainProcess, mainType, mainType, mainTopic); } //Не совпадает - "Передача ИД комплектующего с которого переходим" else { MainProcess.Process = new EditBuilder(MainProcess, type, mainType, button.Text, accessory.Id, type == typeof(ElectronicUnits)); } //Если не было произведено копирование полей для следующего комплектующего, то очистить все поля if (!accessory.IsNew) { accessory = null; } } } } } else { showWriteErrorMessage(); } }