Skip to content

IDocumentFactory

zehavibarak edited this page Dec 27, 2023 · 2 revisions

Methods

Name Usage
IDocumentContext GetInstance(Recipient)
IDocumentContext GetInstance(Document)
CreateAsync<TModel>(TModel)
<IDocumentContext> CreateAsync<TModel>(TModel, IEnumerable<IFormFile>)
<IDocumentContext> CreateAsync<TModel>(TModel, parent)
<IDocumentContext> CopyAsync(Document)
<IDocumentContext> CopyAsync(Document, int)
SynchronizeMappingAsync() Recreate Entries and Cube tables, see database

IDocumentContext

public class MyService {
    private readonly IDocumentStorage _store;
    private readonly IDocumentFactory _factory;
    public MyService(IDocumentStorage store, IDocumentFactory factory) {
        _store = store;
        _factory = factory;
    }
    public async Task AccessAsync() {
        var document = await _store.GetDocumentAsync(1);
        var ctx = _factory.GetContext(document);
        ...
        await ctx.UpdateAsync();
    }
}

Document chaining

In some scenarios, documents may be linked to other documents.

When documents are created using IDocumentFactory service, it may receive a parentId argument.

await _documentFactory.CreateAsync("myForm", new MyModel {}, parentId);

You can access the parent id from IDocumentContext service.

public class MyForm : FormBase<MyModel> {
  public override async Task FlowResumeAsync([NotNull] MyFormModel model)
  {
    var parentId = _documentContext.Document.ParentId;
    // retrieve chained documents
    var children = from document in _store.Documents where document.ParentId == parentId select document;
  }
}

In an Angular component, you can then retrieve the document chain.

  onBind(data: DocumentModel<any>) { 
    data.children.forEach(c=> );
    
    let parent = data.parent;
    while (parent) {
        parent = parent.parent;
    }
  }

  /***
  * get full document info
  */
  onChainExpand(id: number) {
    this._ documentInfo.get(id).subscribe((d: DocumentModel) => );
  }

Release Notes

Angular npm, Flutter pub.dev and Nuget packages.

Clone this wiki locally