Exemplo n.º 1
0
        public async Task ExportRtModelAsync(IOspSession session, OspObjectId queryId, string filePath,
                                             CancellationToken?cancellationToken)
        {
            ArgumentValidation.Validate(nameof(session), session);
            ArgumentValidation.Validate(nameof(queryId), queryId);
            ArgumentValidation.ValidateExistingFile(nameof(filePath), filePath);

            var exporter = new ExportRtModel(this);
            await exporter.Export(session, queryId, filePath, cancellationToken);
        }
Exemplo n.º 2
0
        public async Task <string> ExportRtModel(string tenantId, OspObjectId queryId)
        {
            ArgumentValidation.ValidateString(nameof(tenantId), tenantId);
            ArgumentValidation.Validate(nameof(queryId), queryId);

            var request = new RestRequest("models/ExportRt", Method.POST);

            request.AddQueryParameter("tenantId", tenantId);
            request.AddJsonBody(new ExportModelRequestDto {
                QueryId = queryId
            });

            IRestResponse <string> response = await Client.ExecuteAsync <string>(request);

            ValidateResponse(response);

            return(response.Data);
        }
        public async Task Export(IOspSession session, OspObjectId queryId, string filePath, CancellationToken?cancellationToken)
        {
            var query = await _tenantContext.Repository.GetRtEntityAsync(session, new RtEntityId(Constants.SystemQueryCkId, queryId));

            if (CheckCancellation(cancellationToken))
            {
                throw new OperationCanceledException();
            }

            if (query == null)
            {
                throw new ModelExportException($"Query '{queryId}‘ does not exist.");
            }

            DataQueryOperation dataQueryOperation = new DataQueryOperation();

            var sortingDtoList =
                JsonConvert.DeserializeObject <ICollection <SortDto> >(query.GetAttributeStringValueOrDefault("Sorting"));

            dataQueryOperation.SortOrders = sortingDtoList.Select(dto =>
                                                                  new SortOrderItem(dto.AttributeName.ToPascalCase(), (SortOrders)dto.SortOrder));
            var fieldFilterDtoList =
                JsonConvert.DeserializeObject <ICollection <FieldFilterDto> >(
                    query.GetAttributeStringValueOrDefault("FieldFilter"));

            dataQueryOperation.FieldFilters = fieldFilterDtoList.Select(dto =>
                                                                        new FieldFilter(TransformAttributeName(dto.AttributeName), (FieldFilterOperator)dto.Operator,
                                                                                        dto.ComparisonValue));

            var ckId = query.GetAttributeStringValueOrDefault("QueryCkId");

            var resultSet = await _tenantContext.Repository.GetRtEntitiesByTypeAsync(session, ckId, dataQueryOperation);

            var entityCacheItem = _tenantContext.CkCache.GetEntityCacheItem(ckId);

            RtModelRoot model = new RtModelRoot();

            model.RtEntities.AddRange(resultSet.Result.Select(entity =>
            {
                var exEntity = new RtEntity
                {
                    Id            = entity.RtId.ToOspObjectId(),
                    WellKnownName = entity.WellKnownName,
                    CkId          = entity.CkId,
                };

                exEntity.Attributes.AddRange(entity.Attributes.Select(pair =>
                {
                    var attributeCacheItem = entityCacheItem.Attributes[pair.Key];
                    return(new RtAttribute
                    {
                        Id = attributeCacheItem.AttributeId,
                        Value = pair.Value
                    });
                }));

                return(exEntity);
            }));

            await using StreamWriter streamWriter = new StreamWriter(filePath);
            RtSerializer.Serialize(streamWriter, model);

            await session.CommitTransactionAsync();
        }
 public static ObjectId ToObjectId(this OspObjectId objectId)
 {
     return(new ObjectId(objectId.ToString()));
 }