예제 #1
0
        private Crate <StandardQueryCM> ExtractQueryCrate(ICrateStorage storage)
        {
            var configurationControls = storage
                                        .CrateContentsOfType <StandardConfigurationControlsCM>()
                                        .SingleOrDefault();

            if (configurationControls == null)
            {
                throw new ApplicationException("Action was not configured correctly");
            }

            var actionUi = new ActivityUi();

            actionUi.ClonePropertiesFrom(configurationControls);

            var criteria = JsonConvert.DeserializeObject <List <FilterConditionDTO> >(
                actionUi.QueryBuilder.Value
                );

            // This is weird to use query's name as the way to address MT type.
            // MT type has unique ID that should be used for this reason. Query name is something that is displayed to user. It should not contain any internal data.
            var queryCM = new StandardQueryCM(
                new QueryDTO()
            {
                Name     = MT.DocuSignEnvelope.GetEnumDisplayName(),
                Criteria = criteria
            }
                );

            return(Crate <StandardQueryCM> .FromContent(QueryCrateLabel, queryCM));
        }
        private Crate <StandardQueryCM> ExtractQueryCrate(string mtObject)
        {
            var configurationControls = Storage
                                        .CrateContentsOfType <StandardConfigurationControlsCM>()
                                        .SingleOrDefault();

            if (configurationControls == null)
            {
                throw new ApplicationException("Action was not configured correctly");
            }

            var actionUi = new ActionUi();

            actionUi.ClonePropertiesFrom(configurationControls);

            var criteria = JsonConvert.DeserializeObject <List <FilterConditionDTO> >(
                actionUi.QueryBuilder.Value
                );

            var queryCM = new StandardQueryCM(
                new QueryDTO()
            {
                Name     = mtObject,
                Criteria = criteria
            }
                );

            return(Crate <StandardQueryCM> .FromContent(QueryCrateLabel, queryCM));
        }
예제 #3
0
        public override async Task Run()
        {
            var queryPicker = GetControl <RadioButtonGroup>("QueryPicker");
            List <FilterConditionDTO> conditions;
            Guid?selectedObjectId = null;

            if (queryPicker.Radios[0].Selected)
            {
                var             upstreamCrateChooser = (UpstreamCrateChooser)(queryPicker).Radios[0].Controls[0];
                var             selectedCrate        = upstreamCrateChooser.SelectedCrates.FirstOrDefault();
                StandardQueryCM queryCM = null;

                if (selectedCrate != null)
                {
                    queryCM = Payload.CratesOfType <StandardQueryCM>().FirstOrDefault(x => x.Label == selectedCrate.Label.selectedKey)?.Content;
                }

                if (queryCM?.Queries == null || queryCM.Queries.Count == 0)
                {
                    RaiseError("No upstream crate found");
                    return;
                }

                var query = queryCM.Queries[0];

                conditions       = query.Criteria ?? new List <FilterConditionDTO>();
                selectedObjectId = ExtractUpstreamTypeId(query);
            }
            else
            {
                var filterPane       = (FilterPane)queryPicker.Radios[1].Controls[1];
                var availableObjects = (DropDownList)queryPicker.Radios[1].Controls[0];
                var criteria         = filterPane.Value == null ? null : JsonConvert.DeserializeObject <FilterDataDTO>(filterPane.Value);

                if (availableObjects.Value == null)
                {
                    RaiseError("This action is designed to query the Fr8 Warehouse for you, but you don't currently have any objects stored there.");
                    return;
                }

                Guid objectId;
                if (Guid.TryParse(availableObjects.Value, out objectId))
                {
                    selectedObjectId = objectId;
                }

                conditions = criteria == null || criteria.ExecutionType == FilterExecutionType.WithoutFilter
                    ? new List <FilterConditionDTO>()
                    : criteria.Conditions;
            }

            // If no object is found in MT database, return empty result.
            if (!selectedObjectId.HasValue)
            {
                var searchResult = new StandardPayloadDataCM();
                Payload.Add(Crate.FromContent("Found MT Objects", searchResult));
                Success();
                return;
            }

            //STARTING NASTY CODE
            //TODO discuss this with Alex (bahadir)
            var envIdCondition = conditions.FirstOrDefault(c => c.Field == "EnvelopeId");

            if (envIdCondition != null && envIdCondition.Value == "FromPayload")
            {
                envIdCondition.Value = GetCurrentEnvelopeId();
            }
            //END OF NASTY CODE

            using (var uow = _container.GetInstance <IUnitOfWork>())
            {
                var objectId = selectedObjectId.GetValueOrDefault();
                var mtType   = uow.MultiTenantObjectRepository.FindTypeReference(objectId);

                if (mtType == null)
                {
                    RaiseError("Invalid object selected");
                    return;
                }
                Type manifestType = mtType.ClrType;
                var  queryBuilder = MTSearchHelper.CreateQueryProvider(manifestType);
                var  converter    = CrateManifestToRowConverter(manifestType);
                var  foundObjects = queryBuilder.Query(uow, CurrentUserId, conditions.ToList()).ToArray();
                var  searchResult = new StandardPayloadDataCM();
                foreach (var foundObject in foundObjects)
                {
                    searchResult.PayloadObjects.Add(converter(foundObject));
                }
                Payload.Add(Crate.FromContent("Found MT Objects", searchResult));
            }

            Success();
        }