VbWorkflowPersistenceProvider.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Abp;
  2. using Abp.Domain.Repositories;
  3. using Abp.Domain.Uow;
  4. using Abp.Linq;
  5. using Newtonsoft.Json;
  6. using System.Dynamic;
  7. using VberZero.Authorization;
  8. using VberZero.Session;
  9. using VberZero.Tools.StringModel;
  10. using VberZero.Workflow;
  11. using VberZero.Workflow.DesignInfo;
  12. using VberZero.Workflow.Persistence;
  13. using WorkflowCore.Models;
  14. namespace VberZero.Workflows;
  15. public class VbWorkflowPersistenceProvider : VberPersistenceProvider
  16. {
  17. public VbWorkflowPersistenceProvider(IRepository<WorkflowEventInfo, string> eventRepository, IRepository<WorkflowExecutionPointerInfo, string> executionPointerRepository, IRepository<WorkflowInfo, string> workflowRepository, IRepository<WorkflowSubscriptionInfo, string> eventSubscriptionRepository, IGuidGenerator guidGenerator, IAsyncQueryableExecuter asyncQueryableExecuter, IRepository<WorkflowExecutionErrorInfo, string> executionErrorRepository, IRepository<WorkflowDefinitionInfo, string> workflowDefinitionRepository) : base(eventRepository, executionPointerRepository, workflowRepository, eventSubscriptionRepository, guidGenerator, asyncQueryableExecuter, executionErrorRepository, workflowDefinitionRepository)
  18. {
  19. }
  20. public new IVzSession AbpSession { get; set; }
  21. [UnitOfWork]
  22. public override async Task<string> CreateNewWorkflow(WorkflowInstance workflow, CancellationToken cancellationToken = new())
  23. {
  24. var entity = GenerateWorkflow(workflow);
  25. if (workflow.Reference.NotEmpty())
  26. {
  27. var customId = GetWorkflowIdFromReference(workflow.Reference);
  28. if (customId.NotEmpty())
  29. {
  30. entity.Id = customId;
  31. }
  32. }
  33. if (AbpSession.UserId.HasValue)
  34. {
  35. var name = AbpSession.GetClaimValue(VzClaimTypes.RealName);
  36. entity.CreateUserIdentityName = name;
  37. }
  38. await _workflowRepository.InsertAsync(entity);
  39. await CurrentUnitOfWork.SaveChangesAsync();
  40. return workflow.Id;
  41. }
  42. protected virtual string GetWorkflowIdFromReference(string reference)
  43. {
  44. try
  45. {
  46. dynamic dyObj = JsonConvert.DeserializeObject<ExpandoObject>(reference);
  47. return dyObj.WorkflowId.ToString();
  48. }
  49. catch (Exception e)
  50. {
  51. Console.WriteLine(e);
  52. return null;
  53. }
  54. }
  55. }