Менеджер (из пространства имен Ultima.Documents) предназначен для работы с документами.

DevBookmark_Scripts Интерфейс менеджера 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);

DevBookmark_Scripts Интерфейс IEntityExtensions (из пространства имен Ultima.EditableObjects) реализует расширенные методы интерфейса IEntity – единого интерфейса классов объектов метаданных (справочников, документов и т.д.) – и позволяет получить исходные значения свойств документа.