Как сделать копирование записи(всех полей,которых больше 100) средствами бизнес процесса или может можно как-то это сделать сценарием?
Добрый день, мне надо. что бы при создании записи в разделе копировались значения и родительской записи, так как полей больше 70
Есть деталь, которая является раделом, т.е на ней отображены отфильтрованные записи раздела
При нажатии кнопки добавить, у меня создается новая запись, мне нужно. что бы при создании новой записи , копировались данные из родительской записи
Нравится
Да, возможно. Сделайте БП, запуск по записи. Читать родительскую запись, далее добавить запись в раздел и открыть страницу на редактирование только что созданной записи. У меня так реализовано добавление доп.соглашения к договору.
Можно развить дальше и сделать отдельную кнопку для запуска процесса.
Алексей Следь,
мне надо что бы все 100+ полей копировались одной коллекцией, добавлять вручную такое мне не особо по душе
Dima Avdoshin,
Не понял. Один раз настроить в БП элемент добавить данные и все. Все 100+ полей будут копировать автоматически при создании новой записи. Если сложно настроить элемент добавить данные, то можно все сделать добавление данных скриптом в том же процессе. Можно через InsertSelect
Алексей Следь,
InsertSelect не вызвет событийную модель, что не есть хорошо.
Dima Avdoshin,
Как вариант можно заместить логику нажатия по плюсу на детале.
И не открывать страницу в режиме добавления записи, а открывать страницу в режиме копирования записи, где источником данных будет текущая (родительская) запись, на которой и находится деталь.
А все колонки из родительской скопирует базовая логика системы:
В режиме копирования система сама копирует значения всех полей, которые на объекте отмечены признаком "Копировать".
Владислав Литвинчук пишет:
InsertSelect не вызвет событийную модель, что не есть хорошо.
Если проблема только в этом, можно создавать Entity, наполнять её поля и затем вызывать Save. Или, как изначально предложили, средствами стандартных элементов БП для работы с данными.
По изначальному вопросу темы:
Вы хотите копировать из одноимённых полей одного объекта в другой?
А то, если просто создать копию записи, то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».
Зверев Александр,
то в реестре есть кнопка копирования записи, при нажатии на неё создаётся новая запись с заполненными полями, у которых в объекте включена галка «Копировать данные при копировании записи».
Да именно это мне нужно, каким образом я могу вызвать ее программно?
Сходу нашёлся пример только из интерфейса 5.Х в базовой карточке. От него можно отталкиваться, выкинув лишнее.
row = dataSource.Rows[0].Clone() as Terrasoft.Core.Entities.Entity; Guid currentUserContactId = Page.UserConnection.CurrentUser.ContactId; EntityPrimaryColumnValue = Guid.NewGuid(); row.SetColumnValue(primaryColumnName, EntityPrimaryColumnValue); row.SetColumnValue("CreatedOn", DateTime.Now); row.SetColumnValue("CreatedById", currentUserContactId); row.SetColumnValue("ModifiedOn", DateTime.Now); row.SetColumnValue("ModifiedById", currentUserContactId); var columnNames = new List<string>(); foreach (var column in row.Schema.Columns) { if (column.HasDefValue && ((column.IsLookupType || column.IsMultiLookupType) && column.ReferenceSchema.PrimaryDisplayColumn != null) && !columnNames.Contains(column.Name)) { columnNames.Add(column.Name); } } row.LoadLookupDisplayValues(columnNames); dataSource.Insert(row);
У объекта Entity есть метод .Clone() (или вызываемый им же конструктор Entity(Entity source)). Запускаем его, получаем новый объект в памяти. При необходимости заполняем текущими датой и пользователем стандартные 4 поля, затем те поля, значения которых в Вашей логике нужно поменять относительно образца. Все остальные поля, у которых в дизайнере есть галочка, скопировались автоматически. Id, естественно, будет уже новый.
Цикл из примера не нужен, ведь поля для отображения справочников нас сейчас не интересуют. И в конце запускаем у своего Entity метод .Save(), чтобы эта запись из памяти попала в базу. Кажется, ничего не упустил.
Но это всё на уровне C#-скрипта в процессе. Если надо в JS-логике, подобно кнопке копирования, нужно смотреть, как она устроена.
Не совсем понимаю, что Вы хотите сделать и почему бы не использовать ту самую кнопку копирования в любом разделе или аналогичное действие в детали.