Менеджер (из пространства имен Ultima.Documents) предназначен для работы с документами.
Интерфейс менеджера IDocumentManager реализует следующие методы:
•GetDocumentType(long id, bool demandReadPermission = false) – возвращает тип указанного документа и, опционально, есть ли у текущего пользователя право на его чтение:
▪id – идентификатор документа;
▪demandReadPermission – в значении true проверяет, есть ли у текущего пользователя право на чтение документа;
•GetDocumentTypeID(long id) – возвращает идентификатор типа указанного документа:
▪id – идентификатор документа;
•GetDocumentSubtypeID(long id) – возвращает идентификатор подтипа указанного документа:
▪id – идентификатор документа;
•GetDocument(long id, bool includeDeleted = false) – возвращает экземпляр документа с указанным идентификатором:
▪id – идентификатор документа;
▪includeDeleted – если в качестве значения параметра указать true, будут возвращены значения в том числе и удаленных строк табличных частей документа (но только тех табличных частей, для которых включено мягкое удаление Soft deletion);
•NewDocument(Type documentType, long? subtypeId = null, IDictionary<string, object> parameters = null, IDocument template = null) – создает новый документ, возвращает экземпляр созданного документа определенного подтипа (если подтип документа указан, будут проверены права на его создание):
▪documentType – тип документа;
▪subtypeId – подтип документа (опционально);
▪parameters – список параметров для создания (опционально);
▪template – начальное значение (опционально);
•SaveDocument(IDocument document) – сохраняет документ:
▪document – сохраняемый документ;
•SaveDocuments(params IDocument[] documents) – сохраняет документы:
▪documents – сохраняемые документы.
Метод проверяет, что каждый документ передается ровно один раз. Это защищает от ситуации, когда в списке один и тот же документ участвует в двух разных состояниях, например, таких:
var doc1 = DocumentManager.GetDocument<SaleDocument>(123); var doc2 = DocumentManager.GetDocument<SaleDocument>(123); // тот же самый код документа doc1.AgentID = 1; doc2.AgentID = 2; // разные значения полей SaveDocuments(doc1, doc2); // состояние документа неопределено |
•SaveAndGetDocument(IDocument document) – сохраняет документ и затем получает его из базы данных, возвращает копию загруженного документа:
▪document – сохраняемый документ;
•DeleteDocument(long id) – удаляет указанный документ:
▪id – идентификатор удаляемого документа;
•ReviveDocument(long id) – пытается восстановить указанный документ:
▪id – идентификатор восстанавливаемого документа;
•AddLink(long parentDocumentId, long childDocumentId, long linkTypeId) – создает связь между двумя документами:
▪parentDocumentId – идентификатор документа-родителя;
▪childDocumentId – идентификатор документа-потомка;
▪linkTypeId – идентификатор типа ссылки;
•GetDocumentParents(long documentId) – возвращает список идентификаторов документов-родителей указанного документа:
▪documentId – идентификатор документа;
•GetDocumentChildren(long documentId) – возвращает список идентификаторов документов-потомков указанного документа:
▪documentId – идентификатор документа;
•GetDocumentFamily(long documentId) – возвращает список идентификаторов всех документов, с которыми связан указанный документ:
▪documentId – идентификатор документа;
•GetAllowedSubtypes(long typeId, AccessOperation accOperation) – возвращает список подтипов для указанного типа документа, доступ на выполнение указанной операции над которыми есть у текущего пользователя:
▪typeId – идентификатор типа документа;
▪accOperation – операция.
[Import] private IDocumentManager DocumentManager { get; set; }
var newDoc = DocumentManager.NewDocument<SaleDocument>();
var oldDoc = DocumentManager.GetDocument<PurchaseDocument>(123);
// Создание копии документа с табличными частями. // Флаги Save и Deleted при этом не копируются. var copyDoc = DocumentManager.NewDocument(oldDoc); DocumentManager.SaveDocument(copyDoc); |
Интерфейс IEntityExtensions (из пространства имен Ultima.EditableObjects) реализует расширенные методы интерфейса IEntity – единого интерфейса классов объектов метаданных (справочников, документов и т.д.) – и позволяет получить исходные значения свойств документа.