/// <summary> /// Sorgt dafür, dass nach dem Commit in die Datenbank ein "refresh" /// der individuellen AccessTokens durchgeführt wird. /// </summary> /// <param name="auftragStatus"></param> public static void RegisterActionForIndivTokensRefresh(AuftragStatus auftragStatus) { // die folgenden lokalen Variabeln sind notwendig, // weil später beim Ausführen der PostCommitAction // die Property 'Context' NULL SEIN WIRD! var orderItemVeId = auftragStatus.Context.OrderItem.VeId; if (!orderItemVeId.HasValue) { return; // Bei Aufträgen ohne Ve (=Formularbestellung) kann kein Token zurückgesetzt werden. } var busAddress = auftragStatus.Context.Bus.Address; var archiveRecordId = orderItemVeId.Value; var contextOrderDataAccess = auftragStatus.Context.OrderDataAccess; var sendEndpointProvider = auftragStatus.Context.Bus; var archiveRecord = auftragStatus.Context.IndexAccess.FindDocument(archiveRecordId.ToString(), false); var recalcTokens = new RecalcIndivTokens { ArchiveRecordId = archiveRecordId, ExistingMetadataAccessTokens = archiveRecord.MetadataAccessTokens.ToArray(), ExistingPrimaryDataDownloadAccessTokens = archiveRecord.PrimaryDataDownloadAccessTokens.ToArray(), ExistingPrimaryDataFulltextAccessTokens = archiveRecord.PrimaryDataFulltextAccessTokens.ToArray() }; auftragStatus.Context.PostCommitActionsRegistry.RegisterPostCommitAction(async() => { await SendToIndexManager(recalcTokens, contextOrderDataAccess, sendEndpointProvider, busAddress); }); }
public static async Task SendToIndexManager(RecalcIndivTokens recalcTokens, IOrderDataAccess dataAccess, ISendEndpointProvider sendEndpointProvider, Uri uri) { var indivTokens = await dataAccess.GetIndividualAccessTokens(recalcTokens.ArchiveRecordId); // Mix the existing tokens with the indiv tokens var download = recalcTokens.ExistingPrimaryDataDownloadAccessTokens.Where(IsNotIndivToken) .Union(indivTokens.PrimaryDataDownloadAccessTokens).Distinct().ToArray(); var fulltext = recalcTokens.ExistingPrimaryDataFulltextAccessTokens.Where(IsNotIndivToken) .Union(indivTokens.PrimaryDataFulltextAccessTokens).Distinct().ToArray(); var metadata = recalcTokens.ExistingMetadataAccessTokens.Where(IsNotIndivToken).Union(indivTokens.MetadataAccessTokens).Distinct() .ToArray(); var ep = await sendEndpointProvider.GetSendEndpoint(new Uri(uri, BusConstants.IndexManagerUpdateIndivTokensMessageQueue)); await ep.Send(new UpdateIndivTokens { ArchiveRecordId = recalcTokens.ArchiveRecordId, CombinedPrimaryDataFulltextAccessTokens = fulltext, CombinedPrimaryDataDownloadAccessTokens = download, CombinedMetadataAccessTokens = metadata }); }