...

Клонирование документа произвольного типа.

Тема в разделе "Разработчикам", создана пользователем m.borisov, 23 дек 2019.

  1. m.borisov

    m.borisov New Member

    Есть проект, где требуется создать Процесс, на вход которому будет подаваться документ, из него должна создаваться копия, а затем уже выполняться различная логика.
    Пока стоят два основных вопроса:
    1) Создание документа заранее неизвестного типа.
    2) Копирование данных исходного документа.
    Если со вторым можно попробовать поработать через:
    var md = Model.Metadata.MetadataLoader.LoadMetadata(MyObject.GetType()) as ClassMetadata;

    То с первым и наверное главным - непонятно что делать.

    Кто-то встречался с подобным, можете посоветовать в какую сторону смотреть? Спасибо!
     
  2. pushkarev

    pushkarev Active Member

    В точности такую задачу не решал, но могу посоветовать несколько подходов к решению задачи:
    1. Можно в процессе предусмотреть отдельные ветки или прямо в скрипте через if или case сделать создание копии документов и копирование атрибутов. Тут сложных приемов не потребуется, но каждый тип документа нужно будет явно прописывать и дорабатывать процесс при появлении новых.
    2. Посмотреть как реализован стандартный метод копирования документов в ELMA. Эта кнопка доступна из карточки документа, можно найти соответствующий контроллер в папке с ELMA и посмотреть как он реализован и если это подойдет, то использовать аналогичный код в своем сценарии. Но не факт, что подойдет, т.к. при стандартном копировании открывается форма создания документа с предзаполненными параметрами и не факт, что создание получится сделать автоматически. Нужно смотреть, если подойдет, то это будет лучшим вариантом.
    3. Сделать создание документа через тот метод, что вы пишите, а дальше через рефлексию получить свойства копируемого документа и скопировать их в соответствующие поля нового документа. Я делал сравнение документов через такой механизм, работало успешно.
     
  3. m.borisov

    m.borisov New Member

    Алексей, спасибо огромное!!!
     
  4. m.borisov

    m.borisov New Member

    var oDoc = DocumentManager.Instance.Copy(SourceDoc, false);
    oDoc.Save();
    return oDoc;
     
    1 это нравится

Поделиться: