СЭД «ДЕЛО»
Руководство пользователя
×

3.6 Модификация данных объекта

Зачастую, фоновые задачи создаются для выполнения различных модификаций объектов системы. Для модификаций объекта реализованы специальные классы-помощники для объектов, это классы, содержащие имя объекта и окачивающиеся на “_Helper”, так для РК это DOC_RC_Helper, для резолюции RESOLUTION_Helper и т.д.
У каждого такого “_Helper” класса реализованы свои методы для модификации объекта. Например, для РК, в классе DOC_RC_Helper есть методы ApplyDeliveryRule – для заполнения вида доставки, Append_REF_FILE – для прикрепления документа, Append_REF_LINK – добавление связки и др. Для резолюции - Append_REPLY- для добавления исполнителя и др.
При создании экземпляра класса “_Helper” указываются свойства Changes – экземпляр класса Changes и объект для модификации, причем объект должен быть загружен с возможностью редактирования, методом Load с указанием опции LoadOptions.ForEdit или методом LoadForEdit класса EntityHelper.
Методы Changes.Put(EntityBase entity) - регистрирует головную сущность объекта в наборе изменений, Changes.Save() - сохраняет данные Changes.
Пример добавления рубрики к РК документа:
var rcEntity = EntityHelper.Load<DOC_RC_Entity>(new DOC_RC_Ref(4954), LoadOptions.ForEdit);
var helper = new DOC_RC_Helper()
{
    DocRc = rcEntity,
    Changes = new Changes()
};           
helper.Changes.Put(helper.DocRc);
helper.Append_REF_RUBRIC(new RUBRIC_CL_Ref(dueRubric));
helper.Changes.Save();
Для более простых модификаций возможно использовать сохранение измененного объекта с помощью экземпляра класса Changes, без использования класса-помощника. Например, если необходимо поменять один из атрибутов сущности.
Пример изменения признака «на контроле» резолюции:
var resolution = EntityHelper.LoadForEdit<RESOLUTION_Entity>(resolutionRef);
resolution.CONTROL_STATE = 1;
var changes = new Changes();
changes.Put(resolution);
changes.Save();
Некоторые классы-помощники, например, для РК документов, РКПД, резолюций (поручений) содержат метод Create, который регистрирует новый объект. Для РК и РКПД указывается группа документов, для которой создается новый объект, для резолюции вид резолюции (поручение или пункт) и ссылка на родительскую резолюцию.
Пример создания РК c резолюцией:
private void DocRcCreate(string dueDocGroup, string executorDue, string authorDue, string filePath)
{
    var DateTimeNow = DateTime.Now;
    var docRcHelper = new DOC_RC_Helper()
    {
        ViewContext = DOC_RCSaveContext.Current,
        Changes = new Changes(),
        User = UserContext.Current.USER_CL
    };
 
    var docRC = docRcHelper.Create(new DOCGROUP_CL_Ref(dueDocGroup));
    docRC.DOC_DATE = DateTime.Today;
    docRC.FREE_NUM = Guid.NewGuid().ToString("N");
    docRC.AR_RC_VALUE_List[0].SetVal("sum_dog", 350000);
    docRC.CONSISTS = "1";
    docRC.ANNOTAT = "Содержание РК";
 
    docRcHelper.ApplyDefaultRules();           
    AttachFile(docRcHelper, filePath);
 
    var resHelper = new RESOLUTION_Helper(docRcHelper);
    var resolution = resHelper.Create(1, null);
 
    resHelper.ApplyDefaultRules();
    resHelper.Append_REPLY_Department(new DEPARTMENT_Ref(executorDue));
         
    resolution.DUE = authorDue;
    resolution.RESOLUTION_DATE = DateTimeNow;
    resolution.SEND_DATE = DateTimeNow;
    resolution.LEFT_REZOLUTION = 0;
    resolution.RESOLUTION_TEXT = "Текст резолюции";
    docRcHelper.Changes.Save();            
}
private void AttachFile(DOC_RC_Helper docRcHelper, string tempFilePath)
{
    string tempFileName = Path.GetFileName(tempFilePath);
    string fileName = Path.GetFileNameWithoutExtension(tempFileName);
 
    var refFile = docRcHelper.Append_REF_FILE(fileName, "1");
    refFile.DESCRIPTION = tempFileName;
    refFile.NAME = tempFileName;
    refFile.SetContents(tempFilePath);
}
* Примечание. Рекомендуется запоминать сущности в коде вместо многократного прохода через точки. Например, присваивание состава РК как docRC.CONSISTS = "1"; где var docRC = docRcHelper.DocRc, вместо docRcHelper.DocRc.CONSISTS = "1";
 
В данном примере создает РК с доп. реквизитом “sum_dog”, составом (CONSISTS), содержанием (ANNOTAT), добавлением правил по умолчанию (ApplyDefaultRules), файла и резолюции. Для резолюции указаны автор (DUE), дата резолюции (RESOLUTION_DATE), дата рассылки (SEND_DATE), признак рассылки в папку "На контроле" – контролеру и автору, в "Поступившие" и "На исполнении" – исполнителям (LEFT_REZOLUTION = 0) и текст резолюции (RESOLUTION_TEXT).
Онлайн помощь создана в Dr.Explain