コード例 #1
0
        public void Complex1()
        {
            var termA = new FilterTerm(WorkitemParent);

            termA.Equal(Oid.FromToken("Theme:5", Meta));
            termA.Equal(Oid.FromToken("Theme:6", Meta));

            var termB = new FilterTerm(WorkitemScope);

            termB.Equal(Oid.FromToken("Scope:0", Meta));

            var termC = new FilterTerm(WorkitemParent);

            termC.NotEqual(Oid.FromToken("Theme:7", Meta));
            termC.NotEqual(Oid.FromToken("Theme:8", Meta));

            var termD = new FilterTerm(WorkitemScope);

            termD.NotEqual(Oid.FromToken("Scope:1", Meta));

            var and1 = new AndFilterTerm(termA, termB);
            var and2 = new AndFilterTerm(termC, termD);

            var o = new OrFilterTerm(and1, and2);

            Assert.AreEqual(
                "((Workitem.Parent='Theme%3a5','Theme%3a6';Workitem.Scope='Scope%3a0')|(Workitem.Parent!='Theme%3a7','Theme%3a8';Workitem.Scope!='Scope%3a1'))",
                o.Token);
        }
コード例 #2
0
        protected Object GetSingleListValue(VersionOne.SDK.APIClient.Attribute attribute)
        {
            if (attribute.Value != null && attribute.Value.ToString() != "NULL")
            {
                IAssetType assetType = _metaAPI.GetAssetType("List");
                Query      query     = new Query(assetType);

                IAttributeDefinition assetIDAttribute = assetType.GetAttributeDefinition("ID");
                query.Selection.Add(assetIDAttribute);

                IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
                query.Selection.Add(nameAttribute);

                FilterTerm assetName = new FilterTerm(assetIDAttribute);
                assetName.Equal(attribute.Value.ToString());
                query.Filter = assetName;

                QueryResult result = _dataAPI.Retrieve(query);
                return(result.Assets[0].GetAttribute(nameAttribute).Value.ToString());
            }
            else
            {
                return(DBNull.Value);
            }
        }
コード例 #3
0
        public GroupFilterTerm GetFilter(IAssetType type)
        {
            var terms = new List <IFilterTerm>();

            foreach (var value in values)
            {
                var term = new FilterTerm(type.GetAttributeDefinition(Name));

                switch (value.Action)
                {
                case FilterValuesActions.Equal:
                    term.Equal(value.Value);
                    break;

                case FilterValuesActions.NotEqual:
                    term.NotEqual(value.Value);
                    break;

                case FilterValuesActions.Greater:
                    term.Greater(value.Value);
                    break;

                default:
                    throw new NotSupportedException();
                }

                terms.Add(term);
            }

            return(Operation == FilterActions.And ? (GroupFilterTerm) new AndFilterTerm(terms.ToArray()) : new OrFilterTerm(terms.ToArray()));
        }
コード例 #4
0
        /// <summary>
        /// Get collection of reference fields for asset type.
        /// </summary>
        /// <param name="assetTypeToken">AssetType token</param>
        public List <string> GetReferenceFieldList(string assetTypeToken)
        {
            var attributeDefinitionAssetType = services.Meta.GetAssetType("AttributeDefinition");

            var nameAttributeDef          = attributeDefinitionAssetType.GetAttributeDefinition("Name");
            var assetNameAttributeDef     = attributeDefinitionAssetType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name");
            var isCustomAttributeDef      = attributeDefinitionAssetType.GetAttributeDefinition("IsCustom");
            var attributeTypeAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("AttributeType");

            var assetTypeTerm = new FilterTerm(assetNameAttributeDef);

            assetTypeTerm.Equal(assetTypeToken);

            var isCustomTerm = new FilterTerm(isCustomAttributeDef);

            isCustomTerm.Equal("true");

            var attributeTypeTerm = new FilterTerm(attributeTypeAttributeDef);

            attributeTypeTerm.Equal("Text");

            var result = GetFieldList(new AndFilterTerm(assetTypeTerm, isCustomTerm, attributeTypeTerm), new List <IAttributeDefinition> {
                nameAttributeDef
            });
            var fieldList = new List <string>();

            result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttributeDef).Value.ToString()));

            return(fieldList);
        }
コード例 #5
0
            /// <summary>
            /// Returns an Entity of Type T with the given ID or null if the ID is invalid
            /// </summary>
            /// <typeparam name="T">Entity Type to retrieve</typeparam>
            /// <param name="displayID">DisplayID of the Entity to retrieve</param>
            /// <returns>an instance of an Entity of Type T or null if ID is invalid</returns>
            public T GetByDisplayID <T>(string displayID) where T : ProjectAsset
            {
                var assetTypeToken   = GetAssetTypeToken(typeof(T));
                var projectAssetType = instance.MetaModel.GetAssetType(assetTypeToken);
                var idDef            = projectAssetType.GetAttributeDefinition("Number");

                var query  = new Query(projectAssetType);
                var idTerm = new FilterTerm(idDef);

                idTerm.Equal(displayID);
                query.Filter = idTerm;

                var result = instance.Services.Retrieve(query);

                if (result.Assets.Count == 0)
                {
                    return(null);
                }

                var asset = result.Assets[0];

                // need to validate here to make sure the DisplayID is for the proper type
                // This is a problem with Epics and Stories.
                return(instance.wrapperManager.Create <T>(asset.Oid.Token, true));
            }
コード例 #6
0
        /// <summary>
        /// Attempts to match owners of the workitem in the external system to users in VersionOne.
        /// </summary>
        /// <param name="ownerNames">Comma seperated list of usernames.</param>
        /// <returns>Oids of matching users in VersionOne.</returns>
        //TODO refactor
        private IEnumerable <Oid> GetOwnerOids(string ownerNames)
        {
            var result = new List <Oid>();

            if (!string.IsNullOrEmpty(ownerNames))
            {
                var memberType = services.Meta.GetAssetType("Member");
                var ownerQuery = new Query(memberType);

                var terms = new List <IFilterTerm>();

                foreach (var ownerName in ownerNames.Split(','))
                {
                    var term = new FilterTerm(memberType.GetAttributeDefinition("Username"));
                    term.Equal(ownerName);
                    terms.Add(term);
                }

                ownerQuery.Filter = new AndFilterTerm(terms.ToArray());

                var matches = services.Retrieve(ownerQuery).Assets;
                result.AddRange(matches.Select(owner => owner.Oid));
            }

            return(result.ToArray());
        }
コード例 #7
0
        // TODO it is known that primary workitem statuses do not have to be unique in VersionOne. In this case, the following method fails.
        private IDictionary <string, string> QueryPropertyValues(string propertyName)
        {
            var res       = new Dictionary <string, string>();
            var assetType = services.Meta.GetAssetType(propertyName);
            var valueDef  = assetType.GetAttributeDefinition("Name");
            IAttributeDefinition inactiveDef;

            var query = new Query(assetType);

            query.Selection.Add(valueDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);

            foreach (var asset in services.Retrieve(query).Assets)
            {
                var name = asset.GetAttribute(valueDef).Value.ToString();
                res.Add(name, asset.Oid.ToString());
            }

            return(res);
        }
コード例 #8
0
        public List <Asset> FilterListOfAssets()
        {
            var assetType     = _context.MetaModel.GetAssetType("Task");
            var query         = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);

            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(taskAsset =>
                                  LogResult(taskAsset.Oid.Token,
                                            GetValue(taskAsset.GetAttribute(nameAttribute).Value),
                                            GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString())));

            /***** OUTPUT EXAMPLE *****
             * Task:1153
             * Code Review
             * 0
             *
             * Task:1154
             * Design Component
             * 0 ...
             ******************/

            return(result.Assets);
        }
コード例 #9
0
        private PropertyValues QueryPropertyValues(string propertyName)
        {
            var res       = new PropertyValues();
            var assetType = connector.MetaModel.GetAssetType(propertyName);
            var nameDef   = assetType.GetAttributeDefinition(Entity.NameProperty);
            IAttributeDefinition inactiveDef;

            var query = new Query(assetType);

            query.Selection.Add(nameDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);

            res.Add(new ValueId());

            foreach (var asset in connector.Services.Retrieve(query).Assets)
            {
                var name = asset.GetAttribute(nameDef).Value as string;
                res.Add(new ValueId(asset.Oid, name));
            }

            return(res);
        }
コード例 #10
0
        public void HistorySingleAssetTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices  services  = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var memberType          = metaModel.GetAssetType("Member");
            var idAttribute         = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute      = memberType.GetAttributeDefinition("Email");

            // the boolean parameter specifies we want the historical data
            var query = new Query(memberType, true);

            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);

            var idTerm = new FilterTerm(idAttribute);

            idTerm.Equal("Member:20");
            query.Filter = idTerm;

            var result = services.Retrieve(query);

            Assert.AreNotEqual(0, result.Assets.Count);
        }
コード例 #11
0
        protected string GetCustomListTypeAssetOIDFromV1(string AssetType, string AssetValue)
        {
            IAssetType           assetType     = _metaAPI.GetAssetType(AssetType);
            Query                query         = new Query(assetType);
            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
            FilterTerm           term          = new FilterTerm(nameAttribute);

            term.Equal(AssetValue);
            query.Filter = term;

            QueryResult result;

            try
            {
                result = _dataAPI.Retrieve(query);
            }
            catch
            {
                return(null);
            }

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #12
0
        private Query GetPropertyValuesQuery(string propertyName, out IAttributeDefinition nameDef)
        {
            IAssetType assetType;

            try {
                assetType = services.Meta.GetAssetType(propertyName);
            } catch (MetaException ex) {
                throw new AssetTypeException(string.Format("{0} is unknown asset type.", propertyName), ex);
            }

            nameDef = assetType.GetAttributeDefinition("Name");

            IAttributeDefinition inactiveDef;
            var query = new Query(assetType);

            query.Selection.Add(nameDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);
            return(query);
        }
コード例 #13
0
        protected string CheckForDuplicateIterationByName(string ScheduleOID, string Name)
        {
            IAssetType assetType = _metaAPI.GetAssetType("Timebox");
            Query      query     = new Query(assetType);

            IAttributeDefinition scheduleAttribute = assetType.GetAttributeDefinition("Schedule");

            query.Selection.Add(scheduleAttribute);
            FilterTerm scheduleFilter = new FilterTerm(scheduleAttribute);

            scheduleFilter.Equal(GetNewAssetOIDFromDB(ScheduleOID));

            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");

            query.Selection.Add(nameAttribute);
            FilterTerm nameFilter = new FilterTerm(nameAttribute);

            nameFilter.Equal(Name);

            query.Filter = new AndFilterTerm(scheduleFilter, nameFilter);
            QueryResult result = _dataAPI.Retrieve(query);

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #14
0
        protected string CheckForDuplicateInV1(string AssetType, string AttributeName, string AttributeValue)
        {
            //if (AssetType.StartsWith("Custom_"))
            //{
            //    return null;
            //}

            IAssetType assetType = _metaAPI.GetAssetType(AssetType);
            //_logger.Info("CheckForDuplicateInV1: assetType is {0} amd value is {1} ", AssetType, AttributeValue);

            Query query = new Query(assetType);

            IAttributeDefinition valueAttribute = assetType.GetAttributeDefinition(AttributeName);

            query.Selection.Add(valueAttribute);
            FilterTerm idFilter = new FilterTerm(valueAttribute);

            idFilter.Equal(AttributeValue);
            query.Filter = idFilter;
            QueryResult result = _dataAPI.Retrieve(query);

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token.ToString());
            }
            else
            {
                return(null);
            }
        }
コード例 #15
0
        public List <Asset> HistorySingleAsset()
        {
            var memberType          = _context.MetaModel.GetAssetType("Member");
            var query               = new Query(memberType, true);
            var idAttribute         = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute      = memberType.GetAttributeDefinition("Email");

            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);
            var idTerm = new FilterTerm(idAttribute);

            idTerm.Equal("Member:20");
            query.Filter = idTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(asset =>
                                  LogResult(asset.Oid.Token,
                                            GetValue(asset.GetAttribute(changeDateAttribute).Value),
                                            GetValue(asset.GetAttribute(emailAttribute).Value)));

            /***** OUTPUT EXAMPLE *****
             * Member:1000:105
             * 4/2/2007 1:22:03 PM
             * [email protected]
             *
             * Member:1000:101
             * 3/29/2007 4:10:29 PM
             * [email protected]
             ******************/

            return(result.Assets);
        }
コード例 #16
0
        internal static string GetAssetIDFromName(string AssetType, string Name, IMetaModel MetaAPI, IServices DataAPI)
        {
            IAssetType           assetType     = MetaAPI.GetAssetType(AssetType);
            Query                query         = new Query(assetType);
            IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
            FilterTerm           term          = new FilterTerm(nameAttribute);

            term.Equal(Name);
            query.Filter = term;

            QueryResult result;

            try
            {
                result = DataAPI.Retrieve(query);
            }
            catch
            {
                return(String.Empty);
            }

            if (result.TotalAvaliable > 0)
            {
                return(result.Assets[0].Oid.Token);
            }
            else
            {
                return(String.Empty);
            }
        }
		public void Filter() {
			var query = new Query(new MockAssetType());
			var term = new FilterTerm(new MockAttributeDefinition("Name"));
			term.Equal("Jerry's Story");
			query.Filter = term;
			var testMe = new QueryURLBuilder(query);
			const string expectedUrl = "Data/Mock?sel=&where=Mock.Name='Jerry''s+Story'";
			Assert.AreEqual(expectedUrl, Uri.UnescapeDataString(testMe.ToString()));
		}
コード例 #18
0
        private IEnumerable<string> GetCustomFields(string assetTypeName, FieldType fieldType)
        {
            var attrType = services.Meta.GetAssetType(AttributeDefinitionType);
            var assetType = services.Meta.GetAssetType(assetTypeName);
            var isCustomAttributeDef = attrType.GetAttributeDefinition("IsCustom");
            var nameAttrDef = attrType.GetAttributeDefinition(Entity.NameProperty);

            var termType = new FilterTerm(attrType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name"));
            termType.Equal(assetTypeName);

            IAttributeDefinition inactiveDef;
            FilterTerm termState = null;

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                termState = new FilterTerm(inactiveDef);
                termState.Equal("False");
            }

            var fieldTypeName = string.Empty;
            var attributeTypeName = string.Empty;

            switch (fieldType)
            {
                case FieldType.List:
                    fieldTypeName = "OneToManyRelationDefinition";
                    attributeTypeName = "Relation";
                    break;
                case FieldType.Numeric:
                    fieldTypeName = "SimpleAttributeDefinition";
                    attributeTypeName = "Numeric";
                    break;
                case FieldType.Text:
                    fieldTypeName = "SimpleAttributeDefinition";
                    attributeTypeName = "Text";
                    break;
            }

            var assetTypeTerm = new FilterTerm(attrType.GetAttributeDefinition(AssetTypeAttribute));
            assetTypeTerm.Equal(fieldTypeName);

            var attributeTypeTerm = new FilterTerm(attrType.GetAttributeDefinition("AttributeType"));
            attributeTypeTerm.Equal(attributeTypeName);

            var isCustomTerm = new FilterTerm(isCustomAttributeDef);
            isCustomTerm.Equal("true");

            var result = GetFieldList(new AndFilterTerm(termState, termType, assetTypeTerm, isCustomTerm, attributeTypeTerm),
                new List<IAttributeDefinition> { nameAttrDef });

            var fieldList = new List<string>();
            result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttrDef).Value.ToString()));

            return fieldList;
        }
		public void MultipleAttributes() {
			var query = new Query(new MockAssetType());
			query.Selection.Add(new MockAttributeDefinition("DefaultRole"));
			query.Selection.Add(new MockAttributeDefinition("Name"));
			query.Selection.Add(new MockAttributeDefinition("Nickname"));
			var term = new FilterTerm(new MockAttributeDefinition("Name"));
			term.Equal("Jerry");
			query.Filter = term;
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname&where=Mock.Name='Jerry'", testMe.ToString());
		}
コード例 #20
0
        public void Filter()
        {
            var query = new Query(new MockAssetType());
            var term  = new FilterTerm(new MockAttributeDefinition("Name"));

            term.Equal("Jerry's Story");
            query.Filter = term;
            var          testMe      = new QueryURLBuilder(query);
            const string expectedUrl = "Data/Mock?sel=&where=Mock.Name='Jerry''s+Story'";

            Assert.AreEqual(expectedUrl, Uri.UnescapeDataString(testMe.ToString()));
        }
		public void Complex1() {
			var termA = new FilterTerm(WorkitemParent);
			termA.Equal(Oid.FromToken("Theme:5", Meta));
			termA.Equal(Oid.FromToken("Theme:6", Meta));

			var termB = new FilterTerm(WorkitemScope);
			termB.Equal(Oid.FromToken("Scope:0", Meta));

			var termC = new FilterTerm(WorkitemParent);
			termC.NotEqual(Oid.FromToken("Theme:7", Meta));
			termC.NotEqual(Oid.FromToken("Theme:8", Meta));

			var termD = new FilterTerm(WorkitemScope);
			termD.NotEqual(Oid.FromToken("Scope:1", Meta));

			var and1 = new AndFilterTerm(termA, termB);
			var and2 = new AndFilterTerm(termC, termD);

			var o = new OrFilterTerm(and1, and2);
			Assert.AreEqual(
				"((Workitem.Parent='Theme%3a5','Theme%3a6';Workitem.Scope='Scope%3a0')|(Workitem.Parent!='Theme%3a7','Theme%3a8';Workitem.Scope!='Scope%3a1'))",
				o.Token);
		}
コード例 #22
0
        public void MultipleAttributes()
        {
            var query = new Query(new MockAssetType());

            query.Selection.Add(new MockAttributeDefinition("DefaultRole"));
            query.Selection.Add(new MockAttributeDefinition("Name"));
            query.Selection.Add(new MockAttributeDefinition("Nickname"));
            var term = new FilterTerm(new MockAttributeDefinition("Name"));

            term.Equal("Jerry");
            query.Filter = term;
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname&where=Mock.Name='Jerry'", testMe.ToString());
        }
コード例 #23
0
        public User CreateUserToDeactivate(string username)
        {
            User user = CreateTestUser(username);

            user.Deactivate = true;
            IAssetType member = model.GetAssetType("Member");
            Query      query  = new Query(member);
            FilterTerm term   = new FilterTerm(member.GetAttributeDefinition("Username"));

            term.Equal(username);
            query.Filter = term;
            QueryResult result = services.Retrieve(query);

            user.V1MemberAsset = result.Assets[0];
            return(user);
        }
コード例 #24
0
    private void Execute()
    {
        var connector = V1Connector
                        .WithInstanceUrl(instanceUrl)
                        .WithUserAgentHeader("Examples", "0.1")
                        .WithUsernameAndPassword(username, password)
                        .Build();

        var services = new Services(connector);

        var storyType = services.Meta.GetAssetType("Story");

        var query = new Query(storyType);

        var nameAttribute       = storyType.GetAttributeDefinition("Name");
        var idAttribute         = storyType.GetAttributeDefinition("ID");
        var taggedWithAttribute = storyType.GetAttributeDefinition("TaggedWith");

        query.Selection.Add(nameAttribute);
        query.Selection.Add(taggedWithAttribute);

        var term = new FilterTerm(idAttribute);

        term.Equal("Story:1004");
        query.Filter = term;

        var result = services.Retrieve(query);

        foreach (var story in result.Assets)
        {
            WriteLine(story.Oid.Token);
            WriteLine(story.GetAttribute(nameAttribute).Value);
            WriteLine(string.Join(",", story.GetAttribute(taggedWithAttribute).Values.Cast <string>()));

            // Itentional duplicate calls here, server will handle de-dedupe on query
            story.AddAttributeValue(taggedWithAttribute, "FIRST TAG");
            story.AddAttributeValue(taggedWithAttribute, "FIRST TAG");
            story.AddAttributeValue(taggedWithAttribute, "SECOND TAG");
            story.RemoveAttributeValue(taggedWithAttribute, "SECOND TAG");

            services.Save(story);
            story.AcceptChanges();

            WriteLine(string.Join(",", story.GetAttribute(taggedWithAttribute).Values.Cast <string>()));
        }
    }
コード例 #25
0
        private QueryResult FindExistingChangeset(int revision)
        {
            var q = new Query(ChangeSetType);

            q.Selection.Add(ChangeSetType.GetAttributeDefinition("Reference"));
            q.Selection.Add(ChangeSetType.GetAttributeDefinition("Links.URL"));

            var referenceTerm = new FilterTerm(ChangeSetType.GetAttributeDefinition("Reference"));

            referenceTerm.Equal(revision);

            IFilterTerm term = referenceTerm;

            q.Filter = term;
            q.Paging = new Paging(0, 1);

            return(V1Connection.Data.Retrieve(q));
        }
		public void QueryStoryByMoment() {
			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment = storyAsset.GetAttribute(momentDef).Value;
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName);

			storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
			services.Save(storyAsset);

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName);

			var filter = new FilterTerm(momentDef);
			filter.Equal(moment);
			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName, "Data query should return latest workitem snapshot ignoring Moment filter");
		}
コード例 #27
0
		public void Asset_with_valid_Guid_Attribute()
		{
			var payloadGuid = Guid.Parse("98771fb4-71b8-42ec-be8b-69414daa020e");

			var subject = new Services(Meta, DataConnector);
			var publicationType = Meta.GetAssetType("Publication");
			var payloadAttribute = publicationType.GetAttributeDefinition("Payload");
			var query = new Query(publicationType);
			query.Selection.Add(payloadAttribute);
			var filter = new FilterTerm(payloadAttribute);
			filter.Equal(payloadGuid);
			query.Filter = filter;
			var result = subject.Retrieve(query);

			var payloadFromResult = (Guid)result.Assets[0].GetAttribute(payloadAttribute).Value;

			Assert.AreEqual(payloadGuid, payloadFromResult);
		}
コード例 #28
0
        protected string GetV1IDCustomFieldName(string InternalAssetTypeName)
        {
            if (String.IsNullOrEmpty(_config.V1Configurations.CustomV1IDField) == false)
            {
                string customFieldName = String.Empty;

                IAssetType assetType = _metaAPI.GetAssetType("AttributeDefinition");
                Query      query     = new Query(assetType);

                IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name");
                query.Selection.Add(nameAttribute);

                IAttributeDefinition isCustomAttribute = assetType.GetAttributeDefinition("IsCustom");
                query.Selection.Add(isCustomAttribute);

                IAttributeDefinition assetNameAttribute = assetType.GetAttributeDefinition("Asset.Name");
                query.Selection.Add(assetNameAttribute);

                FilterTerm assetName = new FilterTerm(assetNameAttribute);
                assetName.Equal(InternalAssetTypeName);
                //assetName.Equal("PrimaryWorkitem");
                FilterTerm isCustom = new FilterTerm(isCustomAttribute);
                isCustom.Equal("true");
                query.Filter = new AndFilterTerm(assetName, isCustom);

                QueryResult result = _dataAPI.Retrieve(query);

                foreach (Asset asset in result.Assets)
                {
                    string attributeValue = asset.GetAttribute(nameAttribute).Value.ToString();
                    if (attributeValue.StartsWith(_config.V1Configurations.CustomV1IDField) == true)
                    {
                        customFieldName = attributeValue;
                        break;
                    }
                }
                return(customFieldName);
            }
            else
            {
                return(null);
            }
        }
コード例 #29
0
        public void Execute()
        {
            //Set up a connection to VersionOne using simple authentication
            V1Connector connector = V1Connector
                                    .WithInstanceUrl(instanceUrl)
                                    .WithUserAgentHeader("Examples", "0.1")
                                    .WithAccessToken(accessToken)
                                    .Build();

            IServices services = new Services(connector);

            //Determine which VersionOne Asset you would like to look for
            IAssetType storyType = services.Meta.GetAssetType("Story");

            //Prepare this query object.  I am saying "Hey, I want to query a story
            Query query = new Query(storyType);

            //Define the attributes that you would like to access from that Story
            IAttributeDefinition nameAttribute   = storyType.GetAttributeDefinition("Name");
            IAttributeDefinition numberAttribute = storyType.GetAttributeDefinition("Number");

            //Add them to the query object since we need to get these specific attributes
            query.Selection.Add(nameAttribute);
            query.Selection.Add(numberAttribute);

            //Since we need to get a specific Story or Stories that meet some criteria, we set up a filter
            FilterTerm term = new FilterTerm(numberAttribute);

            term.Equal("S-01001");
            query.Filter = term;

            // We do the actually query on the server here and get our results to be processed soon after
            QueryResult result = services.Retrieve(query);


            foreach (Asset story in result.Assets)
            {
                //This first line grabs and prints the system identifier OID of the current Story
                Console.WriteLine(story.Oid.Token);
                Console.WriteLine(story.GetAttribute(nameAttribute).Value);
                Console.WriteLine(story.GetAttribute(numberAttribute).Value);
            }
        }
コード例 #30
0
        public void QueryTrackedEpicsByProject()
        {
            var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin");
            var metaModel     = new MetaModel(metaConnector);

            var epicType  = metaModel.GetAssetType("Epic");
            var scopeType = metaModel.GetAssetType("Scope");

            var          query   = new Query(epicType);
            const string scopeId = "Scope:1025";

            var notClosedScopeAttribute = scopeType.GetAttributeDefinition("AssetState");
            var notClosedEpicAttribute  = epicType.GetAttributeDefinition("AssetState");

            var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute);

            notClosedEpicTerm.NotEqual("Closed");

            var notClosedScopeTerm = new FilterTerm(notClosedScopeAttribute);

            notClosedScopeTerm.NotEqual("Closed");
            var scopeAttribute = epicType.GetAttributeDefinition("Scope.ParentMeAndUp");

            scopeAttribute = scopeAttribute.Filter(notClosedScopeTerm);

            var scopeTerm = new FilterTerm(scopeAttribute);

            scopeTerm.Equal(scopeId);
            var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp");

            superAndUpAttribute = superAndUpAttribute.Filter(scopeTerm);
            var superAndUpTerm = new FilterTerm(superAndUpAttribute);

            superAndUpTerm.NotExists();

            var filter = new AndFilterTerm(scopeTerm, notClosedEpicTerm, superAndUpTerm);

            query.Filter = filter;
            var builder = new QueryURLBuilder(query);
            var result  = builder.ToString();

            Assert.AreEqual("Data/Epic?sel=&where=(Epic.Scope.ParentMeAndUp[AssetState!='Closed']='Scope%3a1025';Epic.AssetState!='Closed';-Epic.SuperAndUp[Scope.ParentMeAndUp[AssetState!='Closed']='Scope:1025'])", result);
        }
コード例 #31
0
        private List <RequiredFieldsDto> GetRequiredFields(string assetType)
        {
            var fields = new List <RequiredFieldsDto>();
            var attributeDefinitionAssetType = metaModel.GetAssetType("AttributeDefinition");
            var nameAttributeDef             = attributeDefinitionAssetType.GetAttributeDefinition("Name");
            var assetNameAttributeDef        = attributeDefinitionAssetType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name");
            var taskType = metaModel.GetAssetType(assetType);

            var query = new Query(attributeDefinitionAssetType);

            query.Selection.Add(nameAttributeDef);
            var assetTypeTerm = new FilterTerm(assetNameAttributeDef);

            assetTypeTerm.Equal(assetType);
            query.Filter = new AndFilterTerm(new IFilterTerm[] { assetTypeTerm });

            QueryResult result;

            try {
                result = services.Retrieve(query);
            } catch (Exception ex) {
                logger.Error("Cannot get meta data for " + assetType, ex);
                return(null);
            }

            foreach (var asset in result.Assets)
            {
                try {
                    var name = asset.GetAttribute(nameAttributeDef).Value.ToString();

                    if (IsRequiredField(taskType, name))
                    {
                        var reqFieldData = new RequiredFieldsDto(name, taskType.GetAttributeDefinition(name).DisplayName);
                        fields.Add(reqFieldData);
                    }
                } catch (Exception ex) {
                    logger.Error("Cannot get meta data for " + assetType, ex);
                }
            }

            return(fields);
        }
コード例 #32
0
        public void Asset_with_valid_Guid_Attribute()
        {
            var payloadGuid = Guid.Parse("98771fb4-71b8-42ec-be8b-69414daa020e");

            var subject          = new Services(Meta, DataConnector);
            var publicationType  = Meta.GetAssetType("Publication");
            var payloadAttribute = publicationType.GetAttributeDefinition("Payload");
            var query            = new Query(publicationType);

            query.Selection.Add(payloadAttribute);
            var filter = new FilterTerm(payloadAttribute);

            filter.Equal(payloadGuid);
            query.Filter = filter;
            var result = subject.Retrieve(query);

            var payloadFromResult = (Guid)result.Assets[0].GetAttribute(payloadAttribute).Value;

            Assert.AreEqual(payloadGuid, payloadFromResult);
        }
コード例 #33
0
        private T GetListValueByName <T>(IAssetType listType, string value) where T : Entity
        {
            var nameDef = listType.GetAttributeDefinition("Name");

            var query    = new Query(listType);
            var nameTerm = new FilterTerm(nameDef);

            nameTerm.Equal(value);
            query.Filter = nameTerm;
            query.OrderBy.MajorSort(nameDef, OrderBy.Order.Ascending);

            var result = Services.Retrieve(query);

            if (result.Assets.Count == 0)
            {
                throw new ArgumentOutOfRangeException("value", string.Format("There is no {0} value with name: {1}", listType.Token, value));
            }

            return(CreateWrapper <T>(new AssetID(result.Assets[0].Oid.Token), false));
        }
コード例 #34
0
        /// <summary>
        /// Get Source values from VersionOne server
        /// </summary>
        public List <string> GetSourceList()
        {
            var assetType = services.Meta.GetAssetType("StorySource");
            var nameDef   = assetType.GetAttributeDefinition("Name");
            IAttributeDefinition inactiveDef;

            var query = new Query(assetType);

            query.Selection.Add(nameDef);

            if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef))
            {
                var filter = new FilterTerm(inactiveDef);
                filter.Equal("False");
                query.Filter = filter;
            }

            query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending);

            return(services.Retrieve(query).Assets.Select(asset => asset.GetAttribute(nameDef).Value.ToString()).ToList());
        }
コード例 #35
0
        public void QueryStoryHistoryByMoment()
        {
            var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

            storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
            var moment = storyAsset.GetAttribute(momentDef).Value;

            Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName);

            storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
            services.Save(storyAsset);

            storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
            Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName);

            var filter = new FilterTerm(momentDef);

            filter.Equal(moment);
            storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true)[0];
            Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName, "Historical query should behave with respect to provided Moment");
        }
		public void QueryTrackedEpicsByProject() {
			var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin");
			var metaModel = new MetaModel(metaConnector);

			var epicType = metaModel.GetAssetType("Epic");
			var scopeType = metaModel.GetAssetType("Scope");

			var query = new Query(epicType);
			const string scopeId = "Scope:1025";

			var notClosedScopeAttribute = scopeType.GetAttributeDefinition("AssetState");
			var notClosedEpicAttribute = epicType.GetAttributeDefinition("AssetState");

			var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute);
			notClosedEpicTerm.NotEqual("Closed");

			var notClosedScopeTerm = new FilterTerm(notClosedScopeAttribute);
			notClosedScopeTerm.NotEqual("Closed");
			var scopeAttribute = epicType.GetAttributeDefinition("Scope.ParentMeAndUp");
			scopeAttribute = scopeAttribute.Filter(notClosedScopeTerm);

			var scopeTerm = new FilterTerm(scopeAttribute);
			scopeTerm.Equal(scopeId);
			var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp");
			superAndUpAttribute = superAndUpAttribute.Filter(scopeTerm);
			var superAndUpTerm = new FilterTerm(superAndUpAttribute);
			superAndUpTerm.NotExists();
			
			var filter = new AndFilterTerm(scopeTerm, notClosedEpicTerm, superAndUpTerm);
			query.Filter = filter;
			var builder = new QueryURLBuilder(query);
			var result = builder.ToString();
			Assert.AreEqual("Data/Epic?sel=&where=(Epic.Scope.ParentMeAndUp[AssetState!='Closed']='Scope%3a1025';Epic.AssetState!='Closed';-Epic.SuperAndUp[Scope.ParentMeAndUp[AssetState!='Closed']='Scope:1025'])", result);
		}
        /// <summary>
        /// Use the Filter property of the Query object to filter the results that are returned. 
        /// This query will retrieve only Story assets with a "ToDo" of zero.
        /// </summary>
        public void FilterListOfAssetsTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices services = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var assetType = metaModel.GetAssetType("Task");
            var query = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);
            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = services.Retrieve(query);

            result.Assets.ForEach(asset =>
                    Assert.AreEqual(0, asset.GetAttribute(todoAttribute).Value));
        }
        public void HistorySingleAssetTest()
        {
            IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl));
            IServices services = new Services(
                metaModel,
                new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password));

            var memberType = metaModel.GetAssetType("Member");
            var idAttribute = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute = memberType.GetAttributeDefinition("Email");

            // the boolean parameter specifies we want the historical data
            var query = new Query(memberType, true);
            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);

            var idTerm = new FilterTerm(idAttribute);
            idTerm.Equal("Member:20");
            query.Filter = idTerm;

            var result = services.Retrieve(query);

            Assert.AreNotEqual(0, result.Assets.Count);
        }
		public void QueryStoryHistoryByMoment() {
			var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0");

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			var moment = storyAsset.GetAttribute(momentDef).Value;
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName);

			storyAsset.SetAttributeValue(nameDef, ChangedStoryName);
			services.Save(storyAsset);

			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName);

			var filter = new FilterTerm(momentDef);
			filter.Equal(moment);
			storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true)[0];
			Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName, "Historical query should behave with respect to provided Moment");
		}
コード例 #40
0
        public List<Asset> HistorySingleAsset()
        {
            var memberType = _context.MetaModel.GetAssetType("Member");
            var query = new Query(memberType, true);
            var idAttribute = memberType.GetAttributeDefinition("ID");
            var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate");
            var emailAttribute = memberType.GetAttributeDefinition("Email");
            query.Selection.Add(changeDateAttribute);
            query.Selection.Add(emailAttribute);
            var idTerm = new FilterTerm(idAttribute);
            idTerm.Equal("Member:20");
            query.Filter = idTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(asset =>
                LogResult(asset.Oid.Token,
                    GetValue(asset.GetAttribute(changeDateAttribute).Value),
                    GetValue(asset.GetAttribute(emailAttribute).Value)));

            /***** OUTPUT EXAMPLE *****
             Member:1000:105
             4/2/2007 1:22:03 PM
             [email protected]

             Member:1000:101
             3/29/2007 4:10:29 PM
             [email protected]
             ******************/

            return result.Assets;

        }
コード例 #41
0
        public List<Asset> FilterListOfAssets()
        {
            var assetType = _context.MetaModel.GetAssetType("Task");
            var query = new Query(assetType);
            var nameAttribute = assetType.GetAttributeDefinition("Name");
            var todoAttribute = assetType.GetAttributeDefinition("ToDo");

            query.Selection.Add(nameAttribute);
            query.Selection.Add(todoAttribute);

            var toDoTerm = new FilterTerm(todoAttribute);
            toDoTerm.Equal(0);
            query.Filter = toDoTerm;
            var result = _context.Services.Retrieve(query);

            result.Assets.ForEach(taskAsset =>
                LogResult(taskAsset.Oid.Token,
                    GetValue(taskAsset.GetAttribute(nameAttribute).Value),
                    GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString())));

            /***** OUTPUT EXAMPLE *****
             Task:1153
             Code Review
             0

             Task:1154
             Design Component
             0 ...
             ******************/

            return result.Assets;

        }