Пример #1
3
		public CrmQuery Join( string in_fromEntity, LinkEntity in_linkEntity ) {
			// TODO: We look at the root query first. Double-think is this the right thing?
			if( m_query.EntityName == in_fromEntity ) {
				m_query.LinkEntities.Add( in_linkEntity );
			}
			else {
				LinkEntity link = FindEntityLink( m_query.LinkEntities, in_fromEntity );
				if( link != null ) {
					link.LinkEntities.Add( in_linkEntity );
				}
			}
			m_lastAddedLink = in_linkEntity;
			return this;
		}
Пример #2
0
        public static void ProjectAttributes(Entity e, Entity projected, LinkEntity le, XrmFakedContext context)
        {
            var sAlias = string.IsNullOrWhiteSpace(le.EntityAlias) ? le.LinkToEntityName : le.EntityAlias;

            if (le.Columns.AllColumns && le.Columns.Columns.Count == 0)
            {
                foreach (var attKey in e.Attributes.Keys)
                {
                    if(attKey.StartsWith(sAlias + "."))
                    {
                        projected[attKey] = e[attKey];
                    }
                }
            }
            else
            {
                foreach (var attKey in le.Columns.Columns)
                {

                    var linkedAttKey = sAlias + "." + attKey;
                    if (e.Attributes.ContainsKey(linkedAttKey))
                        projected[linkedAttKey] = e[linkedAttKey];
                }
            }
            

            foreach (var nestedLinkedEntity in le.LinkEntities)
            {
                ProjectAttributes(e, projected, nestedLinkedEntity, context);
            }
        }
Пример #3
0
 /// <summary>
 /// 创建友情链接
 /// </summary>
 /// <param name="link">友情链接实体</param>
 /// <returns></returns>
 public bool Create(LinkEntity link)
 {
     linkRepository.Insert(link);
     if (link.LinkId > 0)
     {
         link.DisplayOrder = link.LinkId;
         Update(link);
         return true;
     }
     return false;
 }
 private static string GetLinkEntity(LinkEntity link, string LineStart)
 {
     var code = new StringBuilder();
     var linkname = GetVarName(LineStart + "_" + link.LinkToEntityName);
     code.AppendLine();
     code.AppendLine("// Add link-entity " + linkname);
     var join = link.JoinOperator == JoinOperator.Inner ? "" : ", JoinOperator." + link.JoinOperator.ToString();
     code.AppendLine("var " + linkname + " = " + LineStart + ".AddLink(\"" + link.LinkToEntityName + "\", \"" + link.LinkFromAttributeName + "\", \"" + link.LinkToEntityName + "\"" + join + ");");
     if (!string.IsNullOrWhiteSpace(link.EntityAlias))
     {
         code.AppendLine(linkname + ".EntityAlias = \"" + link.EntityAlias + "\";");
     }
     code.Append(GetColumns(link.Columns, linkname + ".Columns"));
     code.Append(GetFilter(link.LinkCriteria, linkname + ".LinkCriteria"));
     foreach (var sublink in link.LinkEntities)
     {
         code.Append(GetLinkEntity(sublink, linkname));
     }
     return code.ToString();
 }
Пример #5
0
 /// <summary>
 /// 是否具有编辑友情链接的权限
 /// </summary>
 /// <param name="link">链接实体</param>
 /// <returns></returns>
 public bool Link_Edit(LinkEntity link)
 {
     return Link_Manage(link.OwnerType, link.OwnerId);
 }
Пример #6
0
        public static IQueryable <Entity> TranslateLinkedEntityToLinq(XrmFakedContext context, LinkEntity le, IQueryable <Entity> query, ColumnSet previousColumnSet, string linkFromAlias = "")
        {
            var leAlias = string.IsNullOrWhiteSpace(le.EntityAlias) ? le.LinkToEntityName : le.EntityAlias;

            context.EnsureEntityNameExistsInMetadata(le.LinkFromEntityName);
            context.EnsureEntityNameExistsInMetadata(le.LinkToEntityName);

            if (!context.AttributeExistsInMetadata(le.LinkToEntityName, le.LinkToAttributeName))
            {
                OrganizationServiceFaultQueryBuilderNoAttributeException.Throw(le.LinkToAttributeName);
            }

            var inner = context.CreateQuery <Entity>(le.LinkToEntityName);

            //if (!le.Columns.AllColumns && le.Columns.Columns.Count == 0)
            //{
            //    le.Columns.AllColumns = true;   //Add all columns in the joined entity, otherwise we can't filter by related attributes, then the Select will actually choose which ones we need
            //}

            if (string.IsNullOrWhiteSpace(linkFromAlias))
            {
                linkFromAlias = le.LinkFromAttributeName;
            }
            else
            {
                linkFromAlias += "." + le.LinkFromAttributeName;
            }

            switch (le.JoinOperator)
            {
            case JoinOperator.Inner:
            case JoinOperator.Natural:
                query = query.Join(inner,
                                   outerKey => outerKey.KeySelector(linkFromAlias, context),
                                   innerKey => innerKey.KeySelector(le.LinkToAttributeName, context),
                                   (outerEl, innerEl) => outerEl
                                   .JoinAttributes(innerEl, new ColumnSet(true), leAlias, context));

                break;

            case JoinOperator.LeftOuter:
                query = query.GroupJoin(inner,
                                        outerKey => outerKey.KeySelector(le.LinkFromAttributeName, context),
                                        innerKey => innerKey.KeySelector(le.LinkToAttributeName, context),
                                        (outerEl, innerElemsCol) => new { outerEl, innerElemsCol })
                        .SelectMany(x => x.innerElemsCol.DefaultIfEmpty()
                                    , (x, y) => x.outerEl
                                    .JoinAttributes(y, new ColumnSet(true), leAlias, context));


                break;

            default:     //This shouldn't be reached as there are only 3 types of Join...
                throw new PullRequestException(string.Format("The join operator {0} is currently not supported. Feel free to implement and send a PR.", le.JoinOperator));
            }

            //Process nested linked entities recursively
            foreach (LinkEntity nestedLinkedEntity in le.LinkEntities)
            {
                if (string.IsNullOrWhiteSpace(le.EntityAlias))
                {
                    le.EntityAlias = le.LinkToEntityName;
                }

                query = TranslateLinkedEntityToLinq(context, nestedLinkedEntity, query, le.Columns, le.EntityAlias);
            }
            return(query);
        }
Пример #7
0
        public async Task <List <PatientTherapy> > getPatientOrder(string patientguid, string patientEncounter, string SearchFilters, string searchOrder, DateTime startDate, DateTime endDate, bool forFulfillment, string orderId, string caseId = null)
        {
            if (string.IsNullOrEmpty(patientguid) && string.IsNullOrEmpty(caseId) && string.IsNullOrEmpty(patientEncounter) && string.IsNullOrEmpty(orderId))
            {
                throw new ValidationException("Parameter missing");
            }

            List <PatientTherapy> PatientTherapy = new List <PatientTherapy>();

            #region Patient Therapies Query
            QueryExpression query = new QueryExpression("mzk_patientorder");

            FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.And);

            childFilter.AddCondition("mzk_type", ConditionOperator.Equal, Convert.ToInt32(mzk_patientordermzk_Type.Thrapy));

            if (!string.IsNullOrEmpty(orderId))
            {
                childFilter.AddCondition("mzk_patientorderid", ConditionOperator.Equal, new Guid(orderId));
            }
            if (SearchFilters != mzk_orderstatus.Cancelled.ToString())
            {
                childFilter.AddCondition("mzk_orderstatus", ConditionOperator.NotEqual, (int)mzk_orderstatus.Cancelled);
            }
            if (!string.IsNullOrEmpty(caseId))
            {
                childFilter.AddCondition("mzk_caseid", ConditionOperator.Equal, new Guid(caseId));
            }

            if (!string.IsNullOrEmpty(patientguid))
            {
                childFilter.AddCondition("mzk_customer", ConditionOperator.Equal, new Guid(patientguid));
            }
            else if (!string.IsNullOrEmpty(patientEncounter))
            {
                childFilter.AddCondition("mzk_patientencounterid", ConditionOperator.Equal, new Guid(patientEncounter));
            }

            if (!string.IsNullOrEmpty(SearchFilters))
            {
                //if (SearchFilters == Convert.ToString(mzk_labfilter.Ordered))
                //    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Ordered));
                //if (SearchFilters == Convert.ToString(mzk_labfilter.Paid))
                //    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Paid));
                //if (SearchFilters == Convert.ToString(mzk_labfilter.Cancelled))
                //    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Cancelled));
            }
            //Search Order
            if (!string.IsNullOrEmpty(searchOrder))
            {
                childFilter.AddCondition("mzk_productidname", ConditionOperator.Like, ("%" + searchOrder + "%"));
            }

            //Search Date
            if (startDate != DateTime.MinValue && endDate != DateTime.MinValue)
            {
                childFilter.AddCondition("createdon", ConditionOperator.Between, new Object[] { startDate, endDate.AddHours(12) });
            }



            query.ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("mzk_patientorderid",
                                                                    "mzk_productid",
                                                                    "mzk_patientencounterid",
                                                                    "mzk_patientordernumber",
                                                                    "mzk_orderdate",
                                                                    "mzk_orderstatus",
                                                                    "mzk_comments", "mzk_frequencyid", "createdon");

            LinkEntity EntityFrequecy = new LinkEntity("mzk_patientorder", "mzk_ordersetup", "mzk_frequencyid", "mzk_ordersetupid", JoinOperator.LeftOuter);
            EntityFrequecy.Columns = new Microsoft.Xrm.Sdk.Query.ColumnSet("mzk_description");
            query.LinkEntities.Add(EntityFrequecy);

            #endregion
            SoapEntityRepository entityRepository = SoapEntityRepository.GetService();

            EntityCollection entitycollection = entityRepository.GetEntityCollection(query);

            foreach (Entity entity in entitycollection.Entities)
            {
                PatientTherapy model = new PatientTherapy();

                if (!this.getPatientOrder(model, entity, forFulfillment, orderId, mzk_entitytype.TherapyOrder))
                {
                    continue;
                }

                if (entity.Attributes.Contains("mzk_productid"))
                {
                    model.Therapy = ((EntityReference)entity["mzk_productid"]).Name;
                }

                if (entity.Attributes.Contains("mzk_comments"))
                {
                    model.Description = entity.Attributes["mzk_comments"].ToString();
                }

                if (entity.Attributes.Contains("mzk_frequencyid"))
                {
                    model.FrequencyId = ((EntityReference)entity.Attributes["mzk_frequencyid"]).Id.ToString();
                }

                if (entity.Attributes.Contains("mzk_ordersetup3.mzk_description"))
                {
                    model.Frequency = ((AliasedValue)entity.Attributes["mzk_ordersetup3.mzk_description"]).Value.ToString();
                }

                PatientTherapy.Add(model);
            }

            return(PatientTherapy);
        }
Пример #8
0
        public OrganizationResponse Execute(OrganizationRequest req, XrmFakedContext context)
        {
            var request = req as RetrieveRequest;

            if (request.Target == null)
            {
                throw new ArgumentNullException("Target", "RetrieveRequest without Target is invalid.");
            }

            var service      = context.GetOrganizationService();
            var targetId     = context.GetRecordUniqueId(request.Target);
            var resultEntity = service.Retrieve(request.Target.LogicalName, targetId, request.ColumnSet);

            resultEntity.ApplyDateBehaviour(context);

            if (request.RelatedEntitiesQuery != null && request.RelatedEntitiesQuery.Count > 0)
            {
                foreach (var relatedEntitiesQuery in request.RelatedEntitiesQuery)
                {
                    if (relatedEntitiesQuery.Value == null)
                    {
                        throw new ArgumentNullException("relateEntitiesQuery.Value",
                                                        string.Format("RelatedEntitiesQuery for \"{0}\" does not contain a Query Expression.",
                                                                      relatedEntitiesQuery.Key.SchemaName));
                    }

                    var fakeRelationship = context.GetRelationship(relatedEntitiesQuery.Key.SchemaName);
                    if (fakeRelationship == null)
                    {
                        throw new Exception(string.Format("Relationship \"{0}\" does not exist in the metadata cache.",
                                                          relatedEntitiesQuery.Key.SchemaName));
                    }

                    var             relatedEntitiesQueryValue    = (QueryExpression)relatedEntitiesQuery.Value;
                    QueryExpression retrieveRelatedEntitiesQuery = relatedEntitiesQueryValue.Clone();

                    if (fakeRelationship.RelationshipType == XrmFakedRelationship.enmFakeRelationshipType.OneToMany)
                    {
                        var isFrom1to2 = relatedEntitiesQueryValue.EntityName == fakeRelationship.Entity1LogicalName ||
                                         request.Target.LogicalName != fakeRelationship.Entity1LogicalName ||
                                         string.IsNullOrWhiteSpace(relatedEntitiesQueryValue.EntityName);

                        if (isFrom1to2)
                        {
                            var fromAttribute = isFrom1to2 ? fakeRelationship.Entity1Attribute : fakeRelationship.Entity2Attribute;
                            var toAttribute   = isFrom1to2 ? fakeRelationship.Entity2Attribute : fakeRelationship.Entity1Attribute;

                            var linkEntity = new LinkEntity
                            {
                                Columns = new ColumnSet(false),
                                LinkFromAttributeName = fromAttribute,
                                LinkFromEntityName    = retrieveRelatedEntitiesQuery.EntityName,
                                LinkToAttributeName   = toAttribute,
                                LinkToEntityName      = resultEntity.LogicalName
                            };

                            if (retrieveRelatedEntitiesQuery.Criteria == null)
                            {
                                retrieveRelatedEntitiesQuery.Criteria = new FilterExpression();
                            }

                            retrieveRelatedEntitiesQuery.Criteria
                            .AddFilter(LogicalOperator.And)
                            .AddCondition(linkEntity.LinkFromAttributeName, ConditionOperator.Equal, resultEntity.Id);
                        }
                        else
                        {
                            var link = retrieveRelatedEntitiesQuery.AddLink(fakeRelationship.Entity1LogicalName, fakeRelationship.Entity2Attribute, fakeRelationship.Entity1Attribute);
                            link.LinkCriteria.AddCondition(resultEntity.LogicalName + "id", ConditionOperator.Equal, resultEntity.Id);
                        }
                    }
                    else
                    {
                        var isFrom1                = fakeRelationship.Entity1LogicalName == retrieveRelatedEntitiesQuery.EntityName;
                        var linkAttributeName      = isFrom1 ? fakeRelationship.Entity1Attribute : fakeRelationship.Entity2Attribute;
                        var conditionAttributeName = isFrom1 ? fakeRelationship.Entity2Attribute : fakeRelationship.Entity1Attribute;

                        var linkEntity = new LinkEntity
                        {
                            Columns = new ColumnSet(false),
                            LinkFromAttributeName = linkAttributeName,
                            LinkFromEntityName    = retrieveRelatedEntitiesQuery.EntityName,
                            LinkToAttributeName   = linkAttributeName,
                            LinkToEntityName      = fakeRelationship.IntersectEntity,
                            LinkCriteria          = new FilterExpression
                            {
                                Conditions =
                                {
                                    new ConditionExpression(conditionAttributeName, ConditionOperator.Equal, resultEntity.Id)
                                }
                            }
                        };
                        retrieveRelatedEntitiesQuery.LinkEntities.Add(linkEntity);
                    }

                    var retrieveRelatedEntitiesRequest = new RetrieveMultipleRequest
                    {
                        Query = retrieveRelatedEntitiesQuery
                    };

                    //use of an executor directly; if to use service.RetrieveMultiple then the result will be
                    //limited to the number of records per page (somewhere in future release).
                    //ALL RECORDS are needed here.
                    var executor = new RetrieveMultipleRequestExecutor();
                    var retrieveRelatedEntitiesResponse = executor
                                                          .Execute(retrieveRelatedEntitiesRequest, context) as RetrieveMultipleResponse;

                    if (retrieveRelatedEntitiesResponse.EntityCollection.Entities.Count == 0)
                    {
                        continue;
                    }

                    resultEntity.RelatedEntities
                    .Add(relatedEntitiesQuery.Key, retrieveRelatedEntitiesResponse.EntityCollection);
                }
            }

            return(new RetrieveResponse
            {
                Results = new ParameterCollection
                {
                    { "Entity", resultEntity }
                }
            });
        }
Пример #9
0
        public void When_using_joins_attribute_projection_shouldnt_affect_column_sets()
        {
            var context = new XrmFakedContext();

            Entity invoice_entity = new Entity("invoice");

            invoice_entity.Id = Guid.NewGuid();

            Entity op_entity = new Entity("new_onlinepayment");

            op_entity.Id = Guid.NewGuid();
            //op_entity.Attributes.Add("new_ps", new OptionSetValue(opstatus_new));
            op_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            op_entity.Attributes.Add("new_amount", null);
            op_entity.Attributes.Add("new_invoiceid", new EntityReference("invoice", invoice_entity.Id));
            op_entity.Attributes.Add("new_pproviderid", new EntityReference("new_paymentprovider", Guid.NewGuid()));

            //create pmr
            Entity pmr_entity = new Entity("new_invoicepaymentmethod");

            pmr_entity.Id = Guid.NewGuid();
            pmr_entity.Attributes.Add("new_paymentvalue", new Money(100));
            pmr_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            pmr_entity.Attributes.Add("statecode", new OptionSetValue(0));
            pmr_entity.Attributes.Add("new_invoicepaymentmethodid", pmr_entity.Id);
            pmr_entity.Attributes.Add("new_invoiceid", new EntityReference("invoice", invoice_entity.Id));

            //create joining entity
            Entity opi_entity = new Entity("new_onlinepaymentitem");

            opi_entity.Id = Guid.NewGuid();
            opi_entity.Attributes.Add("new_onlinepaymentid", new EntityReference("new_onlinepayment", op_entity.Id));
            opi_entity.Attributes.Add("new_invoicepaymentmethodid", new EntityReference("new_invoicepaymentmethod", pmr_entity.Id));
            opi_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            opi_entity.Attributes.Add("statecode", new OptionSetValue(0));

            //create these objects in crm
            context.Initialize(new List <Entity>()
            {
                invoice_entity, pmr_entity, op_entity, opi_entity
            });

            //create the mock service
            IOrganizationService service = context.GetFakedOrganizationService();

            QueryExpression query = new QueryExpression("new_onlinepaymentitem");

            query.Criteria.AddCondition("new_onlinepaymentid", ConditionOperator.Equal, op_entity.Id);

            LinkEntity LinkPayments = new LinkEntity(
                "new_onlinepaymentitem", "new_invoicepaymentmethod",
                "new_invoicepaymentmethodid", "new_invoicepaymentmethodid",
                JoinOperator.Inner);

            LinkPayments.LinkCriteria.AddCondition("statecode", ConditionOperator.Equal, 0);
            LinkPayments.LinkCriteria.AddCondition("statuscode", ConditionOperator.Equal, 1);
            query.LinkEntities.Add(LinkPayments);

            query.ColumnSet = new ColumnSet("new_invoicepaymentmethodid");

            EntityCollection paymentitems = service.RetrieveMultiple(query);

            Assert.True(paymentitems.Entities.Count == 1);
        }
Пример #10
0
        public static void Should_Not_Fail_On_Conditions_In_Link_Entities()
        {
            var fakedContext = new XrmFakedContext();
            var fakedService = fakedContext.GetFakedOrganizationService();

            var testEntity1 = new Entity("entity1")
            {
                Attributes = new AttributeCollection
                {
                    { "entity1attr", "test1" }
                }
            };
            var testEntity2 = new Entity("entity2")
            {
                Attributes = new AttributeCollection
                {
                    { "entity2attr", "test2" }
                }
            };

            testEntity1.Id = fakedService.Create(testEntity1);
            testEntity2.Id = fakedService.Create(testEntity2);

            var testRelation = new XrmFakedRelationship
            {
                IntersectEntity    = "TestIntersectEntity",
                Entity1LogicalName = "entity1",
                Entity1Attribute   = "entity1attr",
                Entity2LogicalName = "entity2",
                Entity2Attribute   = "entity2attr"
            };

            fakedContext.AddRelationship(testRelation.Entity2LogicalName, testRelation);
            fakedService.Associate(testEntity1.LogicalName, testEntity1.Id, new Relationship(testRelation.Entity2LogicalName), new EntityReferenceCollection {
                testEntity2.ToEntityReference()
            });

            var query = new QueryExpression
            {
                EntityName = "entity1",
                Criteria   = new FilterExpression {
                    FilterOperator = LogicalOperator.And
                },
                ColumnSet = new ColumnSet(true)
            };

            var link = new LinkEntity
            {
                JoinOperator          = JoinOperator.Natural,
                LinkFromEntityName    = "entity1",
                LinkFromAttributeName = "entity1attr",
                LinkToEntityName      = "entity2",
                LinkToAttributeName   = "entity2attr",
                LinkCriteria          = new FilterExpression
                {
                    FilterOperator = LogicalOperator.And,
                    Conditions     = { new ConditionExpression {
                                           AttributeName = "entity2attr", Operator = ConditionOperator.Equal, Values = { "test2" }
                                       } }
                }
            };

            query.LinkEntities.Add(link);

            var result = fakedService.RetrieveMultiple(query);

            Assert.NotEmpty(result.Entities);
            Assert.Equal(1, result.Entities.Count);
        }
Пример #11
0
 /// <summary>
 /// Assumes that the linkFromAttributeName and the linkToAttributeName are the same
 /// </summary>
 /// <param name="link">The link.</param>
 /// <param name="linkToEntityName">Name of the link to entity.</param>
 /// <param name="linkAttributesName">Name of the link from and link to attribute.</param>
 /// <param name="joinType">Type of the join to perform.</param>
 /// <returns></returns>
 public static LinkEntity AddLink(this LinkEntity link, string linkToEntityName, string linkAttributesName, JoinOperator joinType)
 {
     return(link.AddLink(linkToEntityName, linkAttributesName, linkAttributesName, joinType));
 }
 private static string GetLinkedEntityFetchNode(LinkEntity l)
 {
     return
         l == null
             ? ""
             : "<link-entity name='" + l.LinkToEntityName + "' from='" + l.LinkToAttributeName + "' to='" +
               l.LinkFromAttributeName + "'>"
               + "<filter type='and'>"
               + String.Join("", l.LinkCriteria.Conditions.Select(GetConditionFetchNode))
               + "</filter>"
               + "</link-entity>";
 }
 /// <summary>
 /// Enumerates over all LinkEntitites in the LinkEntity, in a depth-first search
 /// </summary>
 /// <param name="link"></param>
 /// <returns></returns>
 private static IEnumerable<LinkEntity> WalkAllLinkedEntities(LinkEntity link)
 {
     foreach (var child in link.LinkEntities)
     {
         yield return child;
         foreach (var grandchild in WalkAllLinkedEntities(child))
         {
             yield return grandchild;
         }
     }
 }
Пример #14
0
		public CrmQuery Join( string in_fromEntity, string in_fromField, string in_toEntity, string in_toField ) {
			LinkEntity linkEntity = JoinExpression( in_fromEntity, in_fromField, in_toEntity, in_toField ) ;
			return Join( in_fromEntity, linkEntity );
		}
        /// <summary>
        /// Gets a <c>QueryExpression</c> instance with it's properties set to the values supplied
        /// </summary>
        /// <param name="entityName">The name of the <c>BusinessEntity</c> as a <c>string</c> to be queried</param>
        /// <param name="modifiedDate">The <c>string</c> value for the date to be queried from</param>
        /// <param name="adapter">An instance of a <c>CRM2011Adapter</c> used to retrieve the INTEGRATION user's <c>Guid</c></param>
        /// <param name="isDynamic">True if the object provider calling into this method is a <c>DynamicObbjectProvider</c> and false otherwise</param>
        /// <param name="columnSet">A CRM <c>ColumnSet</c> that contains the columns to be returned from the query.</param>
        /// <returns>An instance of a <c>QueryExpression</c> that can used as a parameter to a <c>RetrieveMultipleRequest</c></returns>
        /// <remarks>The method generates a query that is retrieved by the modified date supplied as well as the IntegrationReady flag and the modified by
        /// property not being equal to the INTEGRATION user's id</remarks>
        public static QueryExpression GetReaderQueryExpression(string entityName, DateTime modifiedDate, DynamicCrmAdapter adapter, bool isDynamic, ColumnSet columnSet)
        {
            if (adapter == null)
            {
                throw new AdapterException(string.Format(CultureInfo.CurrentCulture, Resources.ArgumentNullExceptionMessage), new ArgumentNullException("adapter")) { ExceptionId = AdapterException.SystemExceptionGuid };
            }

            ValidatePropertyQueryParameters(entityName, "modifiedon");
            QueryExpression queryHelper = new QueryExpression(entityName) { Distinct = false, Criteria = new FilterExpression(), ColumnSet = columnSet };
            queryHelper.ColumnSet.AllColumns = true;

            if (entityName != null)
            {
                if (entityName == "activitymimeattachment")
                {
                    LinkEntity emailLink = new LinkEntity()
                    {
                        LinkFromEntityName = "activitymimeattachment",
                        LinkFromAttributeName = "activityid",
                        LinkToEntityName = "email",
                        LinkToAttributeName = "activityid",
                        LinkCriteria =
                        {
                            Conditions =
                            {
                              new ConditionExpression(
                                "modifiedon", ConditionOperator.GreaterEqual, modifiedDate)
                            }
                        }
                    };

                    queryHelper.LinkEntities.Add(emailLink);
                }
                else
                {
                    queryHelper.Criteria.Conditions.Add(new ConditionExpression("modifiedon", ConditionOperator.GreaterEqual, modifiedDate));
                }
            }

            if (!isDynamic)
            {
                queryHelper.Criteria.Conditions.Add(new ConditionExpression(CRM2011AdapterUtilities.DynamicsIntegrationReady, ConditionOperator.Equal, true));
            }

            return queryHelper;
        }
Пример #16
0
        public void Testing_191()
        {
            // create a contact
            var contact = new Entity
            {
                LogicalName = "contact",
                Id          = Guid.NewGuid(),
            };

            // link a child to the contact
            var child = new Entity
            {
                LogicalName = "child",
                Id          = Guid.NewGuid(),
                Attributes  = new AttributeCollection {
                    { "contactid", new EntityReference("contact", contact.Id) }
                }
            };

            // link a pet to the child
            var pet = new Entity
            {
                LogicalName = "pet",
                Id          = Guid.NewGuid(),
                Attributes  = new AttributeCollection {
                    { "childid", new EntityReference("child", child.Id) }
                }
            };

            // initialise
            var context = new XrmFakedContext();

            context.Initialize(new[] { contact, child, pet });
            var service = context.GetFakedOrganizationService();

            // join contact and child and pet
            var query2 = new QueryExpression("contact");

            LinkEntity link2 = new LinkEntity()
            {
                LinkFromEntityName    = "contact",
                LinkFromAttributeName = "contactid",
                LinkToEntityName      = "child",
                LinkToAttributeName   = "contactid",
                JoinOperator          = JoinOperator.LeftOuter,
                Columns = new ColumnSet("contactid")
            };

            query2.LinkEntities.Add(link2);

            LinkEntity link22 = new LinkEntity()
            {
                LinkFromEntityName    = "child",
                LinkFromAttributeName = "childid",
                LinkToEntityName      = "pet",
                LinkToAttributeName   = "childid",
                JoinOperator          = JoinOperator.LeftOuter,
                Columns = new ColumnSet("childid")
            };

            link2.LinkEntities.Add(link22);

            var count2 = service.RetrieveMultiple(query2).Entities.Count;

            Console.WriteLine(count2); // returns 1 record

            var results = service.RetrieveMultiple(query2);

            Assert.Equal(true, results.Entities[0].Attributes.ContainsKey("child.contactid"));
            Assert.Equal(true, results.Entities[0].Attributes.ContainsKey("pet.childid")); //test fails unless link22 is Inner join
        }
Пример #17
0
        /// <summary>
        /// Retrieves a single Membership from CRM based on the Membership ID for renewal
        /// We need to check for a Membership that is Pending Renewal, has no Payment Received Date, and has no Paid Invoice
        /// </summary>
        public Membership GetMembership(Guid membershipId)
        {
            QueryExpression query = new QueryExpression {
                EntityName = "mag_membership", ColumnSet = new ColumnSet("mag_idnumber")
            };

            query.Criteria.AddCondition("mag_membershipid", ConditionOperator.Equal, membershipId);
            query.Criteria.AddCondition("statuscode", ConditionOperator.Equal, (int)MembershipStatusCode.PendingRenewal);
            query.Criteria.AddCondition("mag_paymentreceived", ConditionOperator.Null);


            // get the latest membership
            query.AddOrder("createdon", OrderType.Descending);

            // join on the related contact
            LinkEntity contact = new LinkEntity
            {
                LinkFromEntityName    = "mag_membership",
                LinkToEntityName      = "contact",
                LinkFromAttributeName = "mag_contactid",
                LinkToAttributeName   = "contactid",
                EntityAlias           = "contact",
                Columns = new ColumnSet("contactid", "mag_salutationcode", "gendercode", "firstname", "lastname", "telephone2",
                                        "telephone3", "mobilephone", "emailaddress1", "address1_line1", "address1_line2",
                                        "address1_line3", "address1_city", "address1_postalcode", "birthdate", "mag_yearofbirth")
            };

            query.LinkEntities.Add(contact);

            // join to related product (membership type)
            LinkEntity product = new LinkEntity
            {
                LinkFromEntityName    = "mag_membership",
                LinkToEntityName      = "product",
                LinkFromAttributeName = "mag_membershiptypeid",
                LinkToAttributeName   = "productid",
                EntityAlias           = "product",
                Columns = new ColumnSet("productid", "name", "price")
            };

            query.LinkEntities.Add(product);

            // join to an invoice and check
            LinkEntity invoice = new LinkEntity
            {
                LinkFromEntityName    = "mag_membership",
                LinkToEntityName      = "invoice",
                LinkFromAttributeName = "mag_invoiceid",
                LinkToAttributeName   = "invoiceid",
            };

            invoice.LinkCriteria.AddCondition("statecode", ConditionOperator.NotEqual, (int)InvoiceStateCode.Paid);
            query.LinkEntities.Add(invoice);

            EntityCollection results = this._sdk.RetrieveMultiple(query);

            this._tracer.Trace("results.Entities.Count={0}", results.Entities.Count);

            Membership membership = (from e in results.Entities.ToList()
                                     select new Membership
            {
                MembershipId = e.Id,
                MembershipNumber = e.Get <string>("mag_idnumber"),
                IsRegularGift = e.Get <bool>("mag_isregulargift"),
                Member = new Contact
                {
                    ContactId = e.Get <Guid>("contact.contactid"),
                    SalutationName = e.Attributes.ContainsKey("contact.mag_salutationcode") ? e.FormattedValues["contact.mag_salutationcode"] : "",
                    SalutationCode = e.Get <int>("contact.mag_salutationcode"),
                    Gender = e.Get <int>("contact.gendercode"),
                    FirstName = e.Get <string>("contact.firstname"),
                    LastName = e.Get <string>("contact.lastname"),
                    HomePhone = e.Get <string>("contact.telephone2"),
                    WorkPhone = e.Get <string>("contact.telephone3"),
                    MobilePhone = e.Get <string>("contact.mobilephone"),
                    EmailAddress = e.Get <string>("contact.emailaddress1"),
                    Street = e.Get <string>("contact.address1_line1"),
                    Street2 = e.Get <string>("contact.address1_line2"),
                    Suburb = e.Get <string>("contact.address1_line3"),
                    City = e.Get <string>("contact.address1_city"),
                    PostalCode = e.Get <string>("contact.address1_postalcode"),
                    DateOfBirth = ConvertToLocalTime(e.GetNullable <DateTime>("contact.birthdate")),
                    YearOfBirth = e.Get <int>("contact.mag_yearofbirth")
                },
                MembershipType = new MembershipType
                {
                    MembershipTypeId = e.Get <Guid>("product.productid"),
                    Name = e.Get <string>("product.name"),
                    Price = e.Get <decimal>("product.price"),
                }
            }).Take(1).SingleOrDefault();

            return(membership);
        }
 /// <summary>
 /// Determines whether [has condition in with values] [the specified column name and value pairs].
 /// </summary>
 /// <param name="link">The link.</param>
 /// <param name="columnNameAndValuePairs">The column name and value pairs.</param>
 /// <returns></returns>
 public static bool HasConditionInWithValues(this LinkEntity link, params object[] columnNameAndValuePairs)
 {
     return(link.LinkCriteria.HasConditionInWithValues(columnNameAndValuePairs) || link.LinkEntities.Any(l => l.HasConditionInWithValues(columnNameAndValuePairs)));
 }
Пример #19
0
        public ActionResult _EditLinksStatus(IEnumerable<long> linkIds, bool isEnabled)
        {
            LinkEntity link = new LinkEntity();
            foreach (long linkId in linkIds)
            {
                link = linkService.Get(linkId);

                if (!authorizer.Link_Edit(link))
                {
                    return Redirect(SiteUrls.Instance().SystemMessage(TempData, new SystemMessageViewModel
                    {
                        Body = "对不起,您没有这个权限",
                        Title = "没有权限",
                        StatusMessageType = StatusMessageType.Hint
                    }));
                }

                link.IsEnabled = isEnabled;
                linkService.Update(link);
            }
            return new EmptyResult();
        }
Пример #20
0
 /// <summary>
 /// 删除友情链接
 /// </summary>
 /// <param name="link">友情链接实体</param>
 /// <returns></returns>
 public void Delete(LinkEntity link)
 {
     linkRepository.Delete(link);
     categoryService.ClearCategoriesFromItem(link.LinkId, 0, TenantTypeIds.Instance().Link());
 }
Пример #21
0
		/**
		 * Join uses LinkEntity to establish a relation between two entities.
		 * Use Where to add criteria using the 'to' entity.
		 */
		public static LinkEntity JoinExpression( string in_fromEntity, string in_fromField, string in_toEntity, string in_toField ) {
			LinkEntity linkEntity = new LinkEntity();
			linkEntity.LinkFromEntityName = in_fromEntity;
			linkEntity.LinkFromAttributeName = in_fromField;
			linkEntity.LinkToEntityName = in_toEntity;
			linkEntity.LinkToAttributeName = in_toField;
			linkEntity.JoinOperator = JoinOperator.Inner;
			return linkEntity;
		}
Пример #22
0
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the tracing service
            ITracingService tracingService =
                (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)
                                              serviceProvider.GetService(typeof(IPluginExecutionContext));

            // The InputParameters collection contains all the data passed in the message request.
            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {
                // Obtain the target entity from the input parameters.
                Entity claim = (Entity)context.InputParameters["Target"];

                // Obtain the organization service reference which you will need for
                // web service calls.
                IOrganizationServiceFactory serviceFactory =
                    (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

                try
                {
                    int curr          = 0;
                    int numberOfUSers = 0;

                    QueryExpression query = new QueryExpression("rev_config");
                    query.ColumnSet.AddColumn("rev_counter");

                    Guid            teamId    = new Guid("d5ec2386-1da3-e911-a964-000d3a37fb59");
                    QueryExpression userQuery = new QueryExpression("systemuser");
                    userQuery.ColumnSet = new ColumnSet(true);
                    LinkEntity          teamLink      = new LinkEntity("systemuser", "teammembership", "systemuserid", "systemuserid", JoinOperator.Inner);
                    ConditionExpression teamCondition = new ConditionExpression("teamid", ConditionOperator.Equal, teamId);
                    teamLink.LinkCriteria.AddCondition(teamCondition);
                    userQuery.LinkEntities.Add(teamLink);

                    EntityCollection retrievedUsers = service.RetrieveMultiple(userQuery);
                    var userlist = new List <Entity>();
                    foreach (Entity user in retrievedUsers.Entities)
                    {
                        var userId  = user.Id;
                        var current = user.Contains("fullname") ? user["fullname"].ToString() : "";
                        //tracingService.Trace("user at place" + user.ToString());
                        userlist.Add(user);
                        //tracingService.Trace("name of users " + current);
                        numberOfUSers++;
                    }

                    EntityCollection counter = service.RetrieveMultiple(query);
                    if (counter.Entities.Count == 0)
                    {
                        Entity newcount = new Entity("rev_config");
                        newcount.Attributes.Add("rev_name", "counterName");
                        newcount.Attributes.Add("rev_counter", 0);
                        service.Create(newcount);
                        tracingService.Trace("counter is empty");
                    }
                    if (counter.Entities.Count == 1)
                    {
                        foreach (Entity count in counter.Entities)
                        {
                            var count1 = count.Contains("rev_counter") ? count["rev_counter"].ToString() : "";
                            curr = Int32.Parse(count1);
                            int next = Int32.Parse(count1);
                            next = next + 1;
                            if (next + 1 > numberOfUSers)
                            {
                                next = 0;
                            }
                            tracingService.Trace("next: " + next);
                            count["rev_counter"] = next;
                            service.Update(count);
                        }
                    }

                    claim.Attributes["ownerid"] = userlist[curr].ToEntityReference();


                    tracingService.Trace("user list at 0" + userlist[curr]["fullname"].ToString());
                    service.Update(claim);
                }

                catch (FaultException <OrganizationServiceFault> ex)
                {
                    throw new InvalidPluginExecutionException("An error occurred in FollowUpPlugin.", ex);
                }

                catch (Exception ex)
                {
                    tracingService.Trace("FollowUpPlugin: {0}", ex.ToString());
                    throw;
                }
            }
        }
        public void When_using_joins_attribute_projection_shouldnt_affect_column_sets()
        {
            var context = new XrmFakedContext();

            Entity invoice_entity = new Entity("invoice");
            invoice_entity.Id = Guid.NewGuid();

            //create the onlinePayment structure
            int opstatus_completed = 108550002;
            int opstatus_new = 108550000;

            Entity op_entity = new Entity("new_onlinepayment");
            op_entity.Id = Guid.NewGuid();
            //op_entity.Attributes.Add("new_ps", new OptionSetValue(opstatus_new));
            op_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            op_entity.Attributes.Add("new_amount", null);
            op_entity.Attributes.Add("new_invoiceid", new EntityReference("invoice", invoice_entity.Id));
            op_entity.Attributes.Add("new_pproviderid", new EntityReference("new_paymentprovider", Guid.NewGuid()));

            //create pmr
            Entity pmr_entity = new Entity("new_invoicepaymentmethod");
            pmr_entity.Id = Guid.NewGuid();
            pmr_entity.Attributes.Add("new_paymentvalue", new Money(100));
            pmr_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            pmr_entity.Attributes.Add("statecode", new OptionSetValue(0));
            pmr_entity.Attributes.Add("new_invoicepaymentmethodid", pmr_entity.Id);
            pmr_entity.Attributes.Add("new_invoiceid", new EntityReference("invoice", invoice_entity.Id));

            //create joining entity
            Entity opi_entity = new Entity("new_onlinepaymentitem");
            opi_entity.Id = Guid.NewGuid();
            opi_entity.Attributes.Add("new_onlinepaymentid", new EntityReference("new_onlinepayment", op_entity.Id));
            opi_entity.Attributes.Add("new_invoicepaymentmethodid", new EntityReference("new_invoicepaymentmethod", pmr_entity.Id));
            opi_entity.Attributes.Add("statuscode", new OptionSetValue(1));
            opi_entity.Attributes.Add("statecode", new OptionSetValue(0));

            //create these objects in crm
            context.Initialize(new List<Entity>() { invoice_entity, pmr_entity, op_entity, opi_entity });

            //create the mock service
            IOrganizationService service = context.GetFakedOrganizationService();

            QueryExpression query = new QueryExpression("new_onlinepaymentitem");
            query.Criteria.AddCondition("new_onlinepaymentid", ConditionOperator.Equal, op_entity.Id);

            LinkEntity LinkPayments = new LinkEntity(
                "new_onlinepaymentitem", "new_invoicepaymentmethod",
                "new_invoicepaymentmethodid", "new_invoicepaymentmethodid",
                JoinOperator.Inner);
            LinkPayments.LinkCriteria.AddCondition("statecode", ConditionOperator.Equal, 0);
            LinkPayments.LinkCriteria.AddCondition("statuscode", ConditionOperator.Equal, 1);
            query.LinkEntities.Add(LinkPayments);

            query.ColumnSet = new ColumnSet("new_invoicepaymentmethodid");

            EntityCollection paymentitems = service.RetrieveMultiple(query);
            Assert.True(paymentitems.Entities.Count == 1);
        }
Пример #24
0
        public async Task <List <PatientVisitAppointment> > getVisitAppointments(string patientId, VisitAppointmentFilterBy filterBy)
        {
            SoapEntityRepository repo          = SoapEntityRepository.GetService();
            Configuration        configuration = new Configuration();

            configuration = configuration.getConfiguration();
            List <PatientVisitAppointment> listObj = new List <PatientVisitAppointment>();
            QueryExpression query = new QueryExpression("msdyn_workorder");

            query.ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("mzk_visitnumber", "mzk_visitstatus",
                                                                    "mzk_visittype", "mzk_proposedvisitdatetime", "mzk_scheduledenddatetime", "mzk_scheduledstartdatetime",
                                                                    "msdyn_servicerequest", "mzk_actualvisitstartdatetime", "mzk_actualvisitenddatetime", "mzk_schedulestatus");

            query.Criteria.AddCondition("mzk_visittype", ConditionOperator.NotNull);
            query.Criteria.AddCondition("mzk_visitstatus", ConditionOperator.NotEqual, 275380003);//Cancelled



            if (filterBy == VisitAppointmentFilterBy.Today)
            {
                FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

                FilterExpression filterExp1    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp1 = filterExp1.AddFilter(LogicalOperator.Or);
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000); //Proposed
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001); //Confirmed
                filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));

                FilterExpression filterExp2 = filterExpMain.AddFilter(LogicalOperator.And);
                filterExp2.AddCondition("mzk_schedulestatus", ConditionOperator.Equal, 275380001);//Scheduled
                FilterExpression typeFilter  = filterExp2.AddFilter(LogicalOperator.Or);
                FilterExpression nurseFilter = typeFilter.AddFilter(LogicalOperator.And);
                nurseFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380000);//Nurse Visit
                nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));
                FilterExpression deliveryFilter = typeFilter.AddFilter(LogicalOperator.And);
                deliveryFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380001);//Delivery Visit
                deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));

                FilterExpression filterExp3    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp3 = filterExp3.AddFilter(LogicalOperator.Or);
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002); //Completed
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380016); //Delivered
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380015); //Visit Started
                filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
                //filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00));
                //filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
                //filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00));
                //filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));
            }
            else if (filterBy == VisitAppointmentFilterBy.Past)
            {
                FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

                FilterExpression filterExp1    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp1 = filterExp1.AddFilter(LogicalOperator.Or);
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000); //Proposed
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001); //Confirmed
                if (configuration.pastVisitMonths != 0)
                {
                    filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date.AddMonths(-configuration.pastVisitMonths));
                }
                filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date);

                FilterExpression filterExp2 = filterExpMain.AddFilter(LogicalOperator.And);
                filterExp2.AddCondition("mzk_schedulestatus", ConditionOperator.Equal, 275380001);//Scheduled
                FilterExpression typeFilter  = filterExp2.AddFilter(LogicalOperator.Or);
                FilterExpression nurseFilter = typeFilter.AddFilter(LogicalOperator.And);
                nurseFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380000);//Nurse Visit
                if (configuration.pastVisitMonths != 0)
                {
                    nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date.AddMonths(-configuration.pastVisitMonths));
                }
                nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date);
                FilterExpression deliveryFilter = typeFilter.AddFilter(LogicalOperator.And);
                deliveryFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380001);//Delivery Visit
                if (configuration.pastVisitMonths != 0)
                {
                    deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date.AddMonths(-configuration.pastVisitMonths));
                }
                deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date);
                //nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                //nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));

                FilterExpression filterExp3    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp3 = filterExp3.AddFilter(LogicalOperator.Or);
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002); //Completed
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380016); //Delivered
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380015); //Visit Started
                if (configuration.pastVisitMonths != 0)
                {
                    filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date.AddMonths(-configuration.pastVisitMonths));
                }
                filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date);
                #region Old Filter
                //FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

                //FilterExpression filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
                //if (configuration.pastVisitMonths != 0)
                //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
                //filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.Now.Date);

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
                //if (configuration.pastVisitMonths != 0)
                //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
                //filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.Now.Date);

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
                //if (configuration.pastVisitMonths != 0)
                //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
                //filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.Now.Date);
                #endregion
            }
            else if (filterBy == VisitAppointmentFilterBy.Future)
            {
                FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

                FilterExpression filterExp1    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp1 = filterExp1.AddFilter(LogicalOperator.Or);
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000); //Proposed
                subFilterExp1.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001); //Confirmed
                //if (configuration.pastVisitMonths != 0)
                //    filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date.AddMonths(-configuration.futureVisitMonths));
                filterExp1.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date);

                FilterExpression filterExp2 = filterExpMain.AddFilter(LogicalOperator.And);
                filterExp2.AddCondition("mzk_schedulestatus", ConditionOperator.Equal, 275380001);//Scheduled
                FilterExpression typeFilter  = filterExp2.AddFilter(LogicalOperator.Or);
                FilterExpression nurseFilter = typeFilter.AddFilter(LogicalOperator.And);
                nurseFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380000);//Nurse Visit
                if (configuration.futureVisitMonths != 0)
                {
                    nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date.AddMonths(configuration.futureVisitMonths));
                }
                nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date);
                FilterExpression deliveryFilter = typeFilter.AddFilter(LogicalOperator.And);
                deliveryFilter.AddCondition("mzk_visittype", ConditionOperator.Equal, 275380001);//Delivery Visit
                if (configuration.futureVisitMonths != 0)
                {
                    deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date.AddMonths(configuration.futureVisitMonths));
                }
                deliveryFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date);
                //nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 00, 00, 00));
                //nurseFilter.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 23, 59, 59));

                FilterExpression filterExp3    = filterExpMain.AddFilter(LogicalOperator.And);
                FilterExpression subFilterExp3 = filterExp3.AddFilter(LogicalOperator.Or);
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002); //Completed
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380016); //Delivered
                subFilterExp3.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380015); //Visit Started
                if (configuration.futureVisitMonths != 0)
                {
                    filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.UtcNow.Date.AddMonths(configuration.futureVisitMonths));
                }
                filterExp3.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.UtcNow.Date);
                #region Old Filter
                //FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

                //FilterExpression filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
                //filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.Now.Date);
                //if (configuration.futureVisitMonths != 0)
                //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
                //filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.Date);
                //if (configuration.futureVisitMonths != 0)
                //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));

                //filterExp = filterExpMain.AddFilter(LogicalOperator.And);
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
                //filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.Date);
                //if (configuration.futureVisitMonths != 0)
                //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));
                #endregion

                //FilterExpression filterExp = query.Criteria.AddFilter(LogicalOperator.Or);

                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380004);//Ready for Dispense

                //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
            }



            //if (filterBy == VisitAppointmentFilterBy.Today)
            //{
            //    FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

            //    FilterExpression filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
            //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00));
            //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
            //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00));
            //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
            //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00));
            //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessEqual, new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59));
            //}
            //else if (filterBy == VisitAppointmentFilterBy.Past)
            //{
            //    FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

            //    FilterExpression filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
            //    if (configuration.pastVisitMonths != 0)
            //        filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
            //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.Now.Date);

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
            //    if (configuration.pastVisitMonths != 0)
            //        filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
            //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.Now.Date);

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
            //    if (configuration.pastVisitMonths != 0)
            //        filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddMonths(-configuration.pastVisitMonths));
            //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.Now.Date);
            //}
            //else if (filterBy == VisitAppointmentFilterBy.Future)
            //{
            //    FilterExpression filterExpMain = query.Criteria.AddFilter(LogicalOperator.Or);

            //    FilterExpression filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
            //    filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddHours(5));
            //    if (configuration.futureVisitMonths != 0)
            //        filterExp.AddCondition("mzk_proposedvisitdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
            //    filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.AddHours(5));
            //    if (configuration.futureVisitMonths != 0)
            //        filterExp.AddCondition("mzk_scheduledstartdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));

            //    filterExp = filterExpMain.AddFilter(LogicalOperator.And);
            //    filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380002);//Completed
            //    filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.GreaterThan, DateTime.Now.Date.AddHours(5));
            //    if (configuration.futureVisitMonths != 0)
            //        filterExp.AddCondition("mzk_actualvisitstartdatetime", ConditionOperator.LessThan, DateTime.Now.AddMonths(configuration.futureVisitMonths));


            //    //FilterExpression filterExp = query.Criteria.AddFilter(LogicalOperator.Or);

            //    //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380001);//Confirmed
            //    //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380004);//Ready for Dispense

            //    //filterExp.AddCondition("mzk_visitstatus", ConditionOperator.Equal, 275380000);//Proposed
            //}


            query.AddOrder("mzk_visitnumber", OrderType.Ascending);
            //query.AddOrder("mzk_scheduledstartdatetime", OrderType.Descending);
            LinkEntity workOrderType = new LinkEntity("msdyn_workorder", "msdyn_workordertype", "msdyn_workordertype", "msdyn_workordertypeid", JoinOperator.Inner);
            workOrderType.Columns     = new ColumnSet("mzk_duration", "mzk_durationunit");
            workOrderType.EntityAlias = "WorkOrderType";
            query.LinkEntities.Add(workOrderType);

            LinkEntity entityTypePatient = new LinkEntity("msdyn_workorder", "account", "msdyn_serviceaccount", "accountid", JoinOperator.Inner);

            entityTypePatient.Columns     = new Microsoft.Xrm.Sdk.Query.ColumnSet(false);
            entityTypePatient.EntityAlias = "Patient";
            entityTypePatient.LinkCriteria.AddCondition("primarycontactid", ConditionOperator.Equal, new Guid(patientId));

            query.LinkEntities.Add(entityTypePatient);

            LinkEntity entityTypeResource = new LinkEntity("msdyn_workorder", "bookableresource", "mzk_resource", "bookableresourceid", JoinOperator.LeftOuter);

            entityTypeResource.Columns     = new Microsoft.Xrm.Sdk.Query.ColumnSet("name", "userid", "bookableresourceid");
            entityTypeResource.EntityAlias = "BookingResource";

            query.LinkEntities.Add(entityTypeResource);

            LinkEntity entityTypeUser = new LinkEntity("bookableresource", "systemuser", "userid", "systemuserid", JoinOperator.LeftOuter);

            entityTypeUser.Columns     = new Microsoft.Xrm.Sdk.Query.ColumnSet("entityimage");
            entityTypeUser.EntityAlias = "ResourceUser";

            entityTypeResource.LinkEntities.Add(entityTypeUser);

            EntityCollection entitycol = repo.GetEntityCollection(query);

            if (entitycol != null && entitycol.Entities != null)
            {
                foreach (Entity entity in entitycol.Entities)
                {
                    PatientVisitAppointment modelObj = new PatientVisitAppointment();

                    modelObj.WorkOrderId = entity.Id.ToString();

                    if (entity.Attributes.Contains("mzk_visitnumber"))
                    {
                        modelObj.VisitNumber = entity["mzk_visitnumber"].ToString();
                    }
                    if (entity.Attributes.Contains("mzk_visitstatus"))
                    {
                        modelObj.VisitStatus = entity.FormattedValues["mzk_visitstatus"].ToString();
                    }

                    if (entity.Attributes.Contains("mzk_visittype"))
                    {
                        modelObj.VisitType = entity.FormattedValues["mzk_visittype"].ToString();
                    }


                    if (entity.Attributes.Contains("mzk_proposedvisitdatetime"))
                    {
                        modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_proposedvisitdatetime"]);
                    }

                    if (modelObj.VisitStatus.Equals("Proposed"))
                    {
                        if (entity.Attributes.Contains("mzk_proposedvisitdatetime"))
                        {
                            modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_proposedvisitdatetime"]);
                            if (entity.Attributes.Contains("WorkOrderType.mzk_duration"))
                            {
                                if (entity.Attributes.Contains("WorkOrderType.mzk_durationunit"))
                                {
                                    if (entity.FormattedValues["WorkOrderType.mzk_durationunit"].Equals("Minutes"))
                                    {
                                        modelObj.VisitEndDate = modelObj.VisitStartDate.AddMinutes(Convert.ToDouble(entity.GetAttributeValue <AliasedValue>("WorkOrderType.mzk_duration").Value));
                                    }
                                    else if (entity.FormattedValues["WorkOrderType.mzk_durationunit"].Equals("Hours"))
                                    {
                                        modelObj.VisitEndDate = modelObj.VisitStartDate.AddHours(Convert.ToDouble(entity.GetAttributeValue <AliasedValue>("WorkOrderType.mzk_duration").Value));
                                    }
                                }
                            }
                        }
                    }
                    //if (modelObj.VisitStatus.Equals("Scheduled"))
                    //{
                    //    if (entity.Attributes.Contains("mzk_scheduledenddatetime"))
                    //    {
                    //        modelObj.VisitEndDate = Convert.ToDateTime(entity["mzk_scheduledenddatetime"]);
                    //    }

                    //    if (entity.Attributes.Contains("mzk_scheduledstartdatetime"))
                    //    {
                    //        modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_scheduledstartdatetime"]);
                    //    }
                    //}
                    if (modelObj.VisitStatus.Equals("Completed"))
                    {
                        if (entity.Attributes.Contains("mzk_actualvisitenddatetime"))
                        {
                            modelObj.VisitEndDate = Convert.ToDateTime(entity["mzk_actualvisitenddatetime"]);
                        }

                        if (entity.Attributes.Contains("mzk_actualvisitstartdatetime"))
                        {
                            modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_actualvisitstartdatetime"]);
                        }
                    }

                    //if (modelObj.VisitType != null && modelObj.VisitType.Equals("Nursing Visit"))
                    //{
                    //    if (entity.Attributes.Contains("mzk_expectedarrivalstarttimewindow"))
                    //        modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_expectedarrivalstarttimewindow"]);
                    //    if (entity.Attributes.Contains("mzk_expectedarrivalendtimewindow"))
                    //        modelObj.VisitEndDate = Convert.ToDateTime(entity["mzk_expectedarrivalendtimewindow"]);
                    //}

                    if (entity.Attributes.Contains("msdyn_servicerequest"))
                    {
                        modelObj.CaseId = (entity["msdyn_servicerequest"] as EntityReference).Id.ToString();
                    }

                    if (entity.Attributes.Contains("BookingResource.bookableresourceid"))
                    {
                        modelObj.ResourceId = (entity["BookingResource.bookableresourceid"] as AliasedValue).Value.ToString();
                    }

                    if (entity.Attributes.Contains("ResourceUser.entityimage") && entity["ResourceUser.entityimage"] != null)
                    {
                        modelObj.ResourceImage = Convert.ToBase64String((entity["ResourceUser.entityimage"] as AliasedValue).Value as Byte[]);
                    }

                    if (entity.Attributes.Contains("BookingResource.name"))
                    {
                        modelObj.ResourceName = (entity["BookingResource.name"] as AliasedValue).Value.ToString();
                    }

                    if (entity.Attributes.Contains("BookingResource.userid"))
                    {
                        modelObj.UserId = ((entity["BookingResource.userid"] as AliasedValue).Value as EntityReference).Id.ToString();
                    }
                    if (entity.Attributes.Contains("mzk_schedulestatus"))
                    {
                        if ((entity["mzk_schedulestatus"] as OptionSetValue).Value.Equals(275380001))
                        {
                            if (entity.Attributes.Contains("mzk_scheduledenddatetime"))
                            {
                                modelObj.VisitEndDate = Convert.ToDateTime(entity["mzk_scheduledenddatetime"]);
                            }

                            if (entity.Attributes.Contains("mzk_scheduledstartdatetime"))
                            {
                                modelObj.VisitStartDate = Convert.ToDateTime(entity["mzk_scheduledstartdatetime"]);
                            }
                        }
                    }

                    listObj.Add(modelObj);
                }
            }

            return(listObj);
        }
Пример #25
0
        /// <summary>
        /// This method first connects to the Organization service. Afterwards,
        /// creates/retrieve a system user,
        /// retrieve a system user to check if it is associate with the salesperson role. 
        /// Note: Creating a user is only supported
        /// in on-premises/active directory environment.
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptforDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptforDelete)
        {
            try
            {
                //<snippetDoesUserBelongToRole1>
                // Connect to the Organization service. 
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    _serviceProxy.EnableProxyTypes();

                    CreateRequiredRecords();

                    
                    // Retrieve a user.
                    SystemUser user = _serviceProxy.Retrieve(SystemUser.EntityLogicalName,
                        _userId, new ColumnSet(new String [] {"systemuserid", "firstname", "lastname"})).ToEntity<SystemUser>();

                    if (user != null)
                    {
                        Console.WriteLine("{1} {0} user account is retrieved.", user.LastName, user.FirstName);
                        // Find a role.
                        QueryExpression query = new QueryExpression
                        {
                            EntityName = Role.EntityLogicalName,
                            ColumnSet = new ColumnSet("roleid"),
                            Criteria = new FilterExpression
                            {
                                Conditions =
                                {
    
                                    new ConditionExpression
                                    {
                                        AttributeName = "name",
                                        Operator = ConditionOperator.Equal,
                                        Values = {_givenRole}
                                    }
                                }
                            }
                        };

                        // Get the role.
                        EntityCollection givenRoles = _serviceProxy.RetrieveMultiple(query);

                        if (givenRoles.Entities.Count > 0)
                        {
                            Role givenRole = givenRoles.Entities[0].ToEntity<Role>();

                            Console.WriteLine("Role {0} is retrieved.", _givenRole);

                            Console.WriteLine("Checking association between user and role.");
                            // Establish a SystemUser link for a query.
                            LinkEntity systemUserLink = new LinkEntity()
                            {
                                LinkFromEntityName = SystemUserRoles.EntityLogicalName,
                                LinkFromAttributeName = "systemuserid",
                                LinkToEntityName = SystemUser.EntityLogicalName,
                                LinkToAttributeName = "systemuserid",
                                LinkCriteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression(
                                            "systemuserid", ConditionOperator.Equal, user.Id)
                                    }
                                }
                            };

                            // Build the query.
                            QueryExpression linkQuery = new QueryExpression()
                            {
                                EntityName = Role.EntityLogicalName,
                                ColumnSet = new ColumnSet("roleid"),
                                LinkEntities =
                                {
                                    new LinkEntity()
                                    {
                                        LinkFromEntityName = Role.EntityLogicalName,
                                        LinkFromAttributeName = "roleid",
                                        LinkToEntityName = SystemUserRoles.EntityLogicalName,
                                        LinkToAttributeName = "roleid",
                                        LinkEntities = {systemUserLink}
                                    }
                                },
                                Criteria =
                                {
                                    Conditions =
                                    {
                                        new ConditionExpression("roleid", ConditionOperator.Equal, givenRole.Id)
                                    }
                                }
                            };
                            
                            // Retrieve matching roles.
                            EntityCollection matchEntities = _serviceProxy.RetrieveMultiple(linkQuery);

                            // if an entity is returned then the user is a member
                            // of the role
                            Boolean isUserInRole = (matchEntities.Entities.Count > 0);

                            if(isUserInRole)
                                Console.WriteLine("User do not belong to the role.");
                            else
                                Console.WriteLine("User belong to this role.");

                        }
                    }
                }
                //</snippetDoesUserBelongToRole1>
            }
            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
 protected string GetEntityNameOrAliasForSource(AliasedSource source, out bool isAlias, out LinkEntity linkEntity)
 {
     if (source != null)
     {
         isAlias = !string.IsNullOrEmpty(source.Alias);
         var sourceTable = source.Source as Table;
         var sourceName  = string.IsNullOrEmpty(source.Alias) ? GetTableLogicalEntityName(sourceTable) : source.Alias;
         linkEntity = this.QueryExpression.FindLinkEntity(sourceName, isAlias);
         if (linkEntity == null)
         {
             // If this is for the main entity - it doesn;t support alias name..
             isAlias = false;
             return(QueryExpression.EntityName);
         }
         return(sourceName);
     }
     throw new NotSupportedException("A condition in the WHERE clause contains refers to an unknown table / entity.");
 }
Пример #27
0
 /// <summary>
 /// Assumes that the linkFromAttributeName and the linkToAttributeName are the same
 /// </summary>
 /// <param name="link">The link.</param>
 /// <param name="linkToEntityName">Name of the link to entity.</param>
 /// <param name="linkAttributesName">Name of the link from and link to attribute.</param>
 /// <returns></returns>
 public static LinkEntity AddLink(this LinkEntity link, string linkToEntityName, string linkAttributesName)
 {
     return(link.AddLink(linkToEntityName, linkAttributesName, linkAttributesName));
 }
Пример #28
0
        public static int GetToalRecordsCount(IOrganizationService Service, string _fetchXml)
        {
            int result            = 0;
            var conversionRequest = new FetchXmlToQueryExpressionRequest
            {
                FetchXml = _fetchXml
            };
            var conversionResponse =
                (FetchXmlToQueryExpressionResponse)Service.Execute(conversionRequest);
            QueryExpression queryExpression = conversionResponse.Query;

            QueryExpression qe = new QueryExpression("annotation");

            LinkEntity _linkEntity = new LinkEntity();

            _linkEntity.JoinOperator = JoinOperator.Inner;
            _linkEntity.LinkCriteria = queryExpression.Criteria;
            foreach (var a in queryExpression.LinkEntities)
            {
                _linkEntity.LinkEntities.Add(a);
            }
            _linkEntity.LinkFromAttributeName = "objectid";
            GetPrimaryIdAttribute(Service, queryExpression.EntityName, out _PrimaryIdAttribute, out _PrimaryNameAttribute);
            _linkEntity.LinkToAttributeName = _PrimaryIdAttribute;

            _linkEntity.LinkToEntityName = queryExpression.EntityName;
            qe.LinkEntities.Add(_linkEntity);

            List <string> _columns = new List <string>();

            foreach (var a in queryExpression.ColumnSet.Columns)
            {
                _columns.Add(a);
            }
            if (!_columns.Contains(_PrimaryNameAttribute))
            {
                _columns.Add(_PrimaryNameAttribute);
            }
            qe.LinkEntities[0].Columns.AddColumns(_columns.ToArray());
            qe.LinkEntities[0].EntityAlias = "Regarding";
            qe.ColumnSet = new ColumnSet(false);

            int queryCount = 5000;
            int pageNumber = 1;

            qe.PageInfo                        = new PagingInfo();
            qe.PageInfo.Count                  = queryCount;
            qe.PageInfo.PageNumber             = pageNumber;
            qe.PageInfo.PagingCookie           = null;
            qe.PageInfo.ReturnTotalRecordCount = true;

            while (true)
            {
                EntityCollection enColl = Service.RetrieveMultiple(qe);

                result += enColl.Entities.Count;
                if (enColl.MoreRecords)
                {
                    qe.PageInfo.PageNumber             = ++pageNumber;
                    qe.PageInfo.PagingCookie           = enColl.PagingCookie;
                    qe.PageInfo.ReturnTotalRecordCount = true;
                }
                else
                {
                    break;
                }
            }
            return(result);
        }
Пример #29
0
        /// <summary>
        ///     Return the entity record which is configured as the logical parent of this records autonumber
        /// </summary>
        public Entity GetParentEntity(Entity entity, XrmAutonumber autonumber, IEnumerable <string> fields)
        {
            //Need to split the links to the parent and create a query which returns the parent record via the links
            if (!entity.Contains(autonumber.FirstLinkLookup))
            {
                return(null);
            }

            //Create a query which traverses through the keys and entities we defined in our autonumber links
            var query = new QueryExpression();

            query.ColumnSet = XrmService.CreateColumnSet(fields);
            LinkEntity carry = null;

            //for each foreign key entity pairing work from last to first
            for (var i = autonumber.LinksToParent.LinkToParents.Count(); i > 0; i--)
            {
                var thisLink = autonumber.LinksToParent.LinkToParents.ElementAt(i - 1);
                //if this is the last item we need to create it as the type of entity we are returning
                if (i == autonumber.LinksToParent.LinkToParents.Count())
                {
                    query.EntityName = thisLink.LinkTarget;
                }
                //otherwise if this is not the last item we need to add a link from the previous type to this type
                else
                {
                    var previousPair = autonumber.LinksToParent.LinkToParents.ElementAt(i);
                    if (carry == null)
                    {
                        carry = query.AddLink(thisLink.LinkTarget, previousPair.LinkFieldTarget, previousPair.LinkFieldSource);
                    }
                    else
                    {
                        carry = carry.AddLink(thisLink.LinkTarget, previousPair.LinkFieldTarget, previousPair.LinkFieldSource);
                    }
                }
                //if this is the first item we need to add a filter on the first id with the value in the lookup from the record we are creating the autonumber for
                if (i == 1)
                {
                    var thisLookupId = entity.GetLookupGuid(thisLink.LinkFieldSource);
                    if (!thisLookupId.HasValue)
                    {
                        return(null);
                    }
                    if (autonumber.LinksToParent.LinkToParents.Count() != 1)
                    {
                        carry.LinkCriteria.AddCondition(carry.LinkToEntityName + "id", ConditionOperator.Equal, thisLookupId.Value);
                    }
                    else
                    {
                        query.Criteria.AddCondition(query.EntityName + "id", ConditionOperator.Equal, thisLookupId.Value);
                    }
                }
            }
            //Run the query and if a result return it
            var parent = XrmService.RetrieveMultiple(query);

            if (parent.Entities.Count > 0)
            {
                return(parent.Entities[0]);
            }
            return(null);
        }
Пример #30
0
        public static Entity[] GetSdkMessageProcessingSteps(this IOrganizationService service, Guid?pluginAssemblyId = null, Guid?pluginTypeId = null)
        {
            //var attributes = new string[]
            //{
            //    Constants.Crm.Attributes.NAME,
            //    Constants.Crm.Attributes.STATE_CODE,
            //    Constants.Crm.Attributes.STATUS_CODE,
            //    "sdkmessageprocessingstepid",
            //    Constants.Crm.Attributes.PLUGIN_TYPE_ID,
            //    Constants.Crm.Attributes.EVENT_HANDLER
            //};

            var query = new QueryExpression();

            query.EntityName = Constants.Crm.Entities.PROCESSING_STEP;
            query.ColumnSet  = new ColumnSet(true);
            query.Criteria   = new FilterExpression(LogicalOperator.And);
            query.Criteria.AddCondition("ishidden", ConditionOperator.Equal, false);

            var sdkmessage       = query.AddLink(Constants.Crm.Entities.MESSAGE, "sdkmessageid", "sdkmessageid");
            var sdkmessagefilter = query.AddLink(Constants.Crm.Entities.MESSAGE_FILTER, "sdkmessagefilterid", "sdkmessagefilterid", JoinOperator.LeftOuter);

            sdkmessage.Columns.AddColumns(Constants.Crm.Attributes.NAME, "sdkmessageid");
            sdkmessage.EntityAlias = "message";

            sdkmessagefilter.Columns.AddColumns(Constants.Crm.Attributes.PRIMARY_OBJECT_TYPE_CODE, "sdkmessagefilterid");
            sdkmessagefilter.EntityAlias = "filter";

            if (pluginTypeId != null && pluginTypeId != Guid.Empty)
            {
                query.Criteria.AddCondition(Constants.Crm.Attributes.PLUGIN_TYPE_ID, ConditionOperator.Equal, pluginTypeId);
            }

            query.Orders.Add(new OrderExpression(Constants.Crm.Attributes.NAME, OrderType.Ascending));

            if (pluginAssemblyId != null && pluginAssemblyId != Guid.Empty)
            {
                var link = new LinkEntity
                {
                    LinkFromEntityName    = Constants.Crm.Entities.PROCESSING_STEP,
                    LinkToEntityName      = Constants.Crm.Entities.PLUGIN_TYPE,
                    LinkFromAttributeName = Constants.Crm.Attributes.PLUGIN_TYPE_ID,
                    LinkToAttributeName   = Constants.Crm.Attributes.PLUGIN_TYPE_ID,
                    JoinOperator          = JoinOperator.Natural,
                    EntityAlias           = Constants.Crm.Entities.PLUGIN_TYPE,
                    Columns = new ColumnSet(new string[] { Constants.Crm.Attributes.FRIENDLY_NAME, "typename", "pluginassemblyid" }),
                };

                link.LinkCriteria.AddCondition("pluginassemblyid", ConditionOperator.Equal, pluginAssemblyId);

                query.LinkEntities.Add(link);
            }

            //var resp = service.Execute(new QueryExpressionToFetchXmlRequest() { Query = query }) as QueryExpressionToFetchXmlResponse;

            /*
             * Sample query (Cinteros Utils 2013 plugin) :
             * <fetch distinct="false" no-lock="false" mapping="logical" >
             * <entity name="sdkmessageprocessingstep" >
             *  <attribute name="ishidden" /> etc. etc.
             *  <filter type="and" >
             *    <condition attribute="ishidden" operator="eq" value="0" />
             *    <condition attribute="plugintypeid" operator="eq" value="{DDA87658-1E6B-434E-9C31-9C4F0FA1D6C5}" />
             *  </filter>
             *  <order attribute="name" descending="false" />
             *  <link-entity name="sdkmessage" from="sdkmessageid" to="sdkmessageid" link-type="inner" alias="message" >
             *    <attribute name="name" />
             *    <attribute name="sdkmessageid" />
             *  </link-entity>
             *  <link-entity name="sdkmessagefilter" from="sdkmessagefilterid" to="sdkmessagefilterid" link-type="outer" alias="filter" >
             *    <attribute name="primaryobjecttypecode" />
             *    <attribute name="sdkmessagefilterid" />
             *  </link-entity>
             *  <link-entity name="plugintype" to="plugintypeid" from="plugintypeid" link-type="natural" alias="plugintype" >
             *    <attribute name="friendlyname" />
             *    <attribute name="typename" />
             *    <attribute name="pluginassemblyid" />
             *    <filter type="and" >
             *      <condition attribute="pluginassemblyid" operator="eq" value="{28AB47CE-8F70-4093-A4F0-672378CB3F8B}" />
             *    </filter>
             *  </link-entity>
             * </entity>
             * </fetch>
             */

            return(service.RetrieveMultiple(query).Entities.ToArray <Entity>());
        }
Пример #31
0
        public static void Should_Not_Fail_On_Conditions_In_Link_Entities_Multiple()
        {
            var fakedContext = new XrmFakedContext();
            var fakedService = fakedContext.GetOrganizationService();

            fakedContext.AddRelationship("new_invoicepaymentmethod_invoicedetail",
                                         new XrmFakedRelationship("new_invoicepaymentmethod_invoicedetail",
                                                                  "invoicedetailid", "new_invoicepaymentmethodid",
                                                                  "invoicedetail",
                                                                  "new_invoicepaymentmethod"));

            Entity product01 = new Entity("product");

            product01.Id = Guid.NewGuid();
            product01.Attributes.Add("name", "Test Product");

            Entity invoicedetail01 = new Entity("invoicedetail");

            invoicedetail01.Id = Guid.NewGuid();
            invoicedetail01.Attributes.Add("invoicedetailid", invoicedetail01.Id);
            invoicedetail01.Attributes.Add("new_productid", new EntityReference("product", product01.Id));

            Entity pmr01 = new Entity("new_invoicepaymentmethod");

            pmr01.Id = Guid.NewGuid();
            pmr01.Attributes.Add("new_invoicepaymentmethodid", pmr01.Id);
            pmr01.Attributes.Add("new_name", "PMR0000000001");


            Entity invoicedetail02 = new Entity("invoicedetail");

            invoicedetail02.Id = Guid.NewGuid();
            invoicedetail02.Attributes.Add("invoicedetailid", invoicedetail02.Id);
            invoicedetail02.Attributes.Add("new_productid", new EntityReference("product", product01.Id));

            Entity pmr02 = new Entity("new_invoicepaymentmethod");

            pmr02.Id = Guid.NewGuid();
            pmr02.Attributes.Add("new_invoicepaymentmethodid", pmr02.Id);
            pmr02.Attributes.Add("new_name", "PMR0000000002");

            fakedService.Create(product01);

            fakedService.Create(invoicedetail01);
            fakedService.Create(invoicedetail02);
            fakedService.Create(pmr01);
            fakedService.Create(pmr02);

            fakedService.Associate("invoicedetail", invoicedetail01.Id, new Relationship("new_invoicepaymentmethod_invoicedetail"), new EntityReferenceCollection()
            {
                pmr01.ToEntityReference()
            });
            fakedService.Associate("invoicedetail", invoicedetail02.Id, new Relationship("new_invoicepaymentmethod_invoicedetail"), new EntityReferenceCollection()
            {
                pmr02.ToEntityReference()
            });


            EntityCollection invoiceDetails = new EntityCollection();

            QueryExpression query = new QueryExpression("invoicedetail");

            query.ColumnSet = new ColumnSet(true);
            LinkEntity link1 = new LinkEntity();

            link1.JoinOperator          = JoinOperator.Natural;
            link1.LinkFromEntityName    = "invoicedetail";
            link1.LinkFromAttributeName = "invoicedetailid";
            link1.LinkToEntityName      = "new_invoicepaymentmethod_invoicedetail";
            link1.LinkToAttributeName   = "invoicedetailid";

            LinkEntity link2 = new LinkEntity();

            link2.JoinOperator          = JoinOperator.Natural;
            link2.LinkFromEntityName    = "new_invoicepaymentmethod_invoicedetail";
            link2.LinkFromAttributeName = "new_invoicepaymentmethodid";
            link2.LinkToEntityName      = "new_invoicepaymentmethod";
            link2.LinkToAttributeName   = "new_invoicepaymentmethodid";
            link2.LinkCriteria          = new FilterExpression(LogicalOperator.And);

            ConditionExpression condition1 = new ConditionExpression("new_invoicepaymentmethodid", ConditionOperator.Equal, pmr02.Id);

            link2.LinkCriteria.Conditions.Add(condition1);
            link1.LinkEntities.Add(link2);
            query.LinkEntities.Add(link1);

            invoiceDetails = fakedService.RetrieveMultiple(query);

            Assert.Equal(1, invoiceDetails.Entities.Count);
            Assert.Equal(invoicedetail02.Id, invoiceDetails.Entities[0].Id);
        }
Пример #32
0
        private List <MetaPlugin> GetPlugins(string[] solutions)
        {
            if (solutions == null || solutions.Length == 0)
            {
                return(new List <MetaPlugin>());
            }

            var pluginQuery = new QueryExpression("sdkmessageprocessingstep")
            {
                ColumnSet = new ColumnSet("eventhandler", "stage", "mode", "rank", "sdkmessageid", "filteringattributes", "name"),
                Criteria  = new FilterExpression()
            };

            pluginQuery.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);

            var sdkMessageFilterQuery = new LinkEntity("sdkmessageprocessingstep", "sdkmessagefilter", "sdkmessagefilterid", "sdkmessagefilterid", JoinOperator.Inner)
            {
                Columns      = new ColumnSet("primaryobjecttypecode"),
                EntityAlias  = "sdkmessagefilter",
                LinkCriteria = new FilterExpression()
            };

            pluginQuery.LinkEntities.Add(sdkMessageFilterQuery);

            var solutionComponentQuery = new LinkEntity("sdkmessageprocessingstep", "solutioncomponent", "sdkmessageprocessingstepid", "objectid", JoinOperator.Inner)
            {
                Columns      = new ColumnSet(),
                LinkCriteria = new FilterExpression()
            };

            pluginQuery.LinkEntities.Add(solutionComponentQuery);

            var solutionQuery = new LinkEntity("solutioncomponent", "solution", "solutionid", "solutionid", JoinOperator.Inner)
            {
                Columns      = new ColumnSet(),
                LinkCriteria = new FilterExpression()
            };

            solutionQuery.LinkCriteria.AddCondition("uniquename", ConditionOperator.In, solutions);
            solutionComponentQuery.LinkEntities.Add(solutionQuery);

            var plugins = new List <MetaPlugin>();

            foreach (var plugin in service.RetrieveMultiple(pluginQuery).Entities)
            {
                var metaPlugin = new MetaPlugin()
                {
                    Name = plugin.GetAttributeValue <string>("name"),
                    Rank = plugin.GetAttributeValue <int>("rank"),
                    FilteredAttributes = plugin.GetAttributeValue <string>("filteringattributes"),
                    Mode          = plugin.GetAttributeValue <OptionSetValue>("mode").Value,
                    Stage         = plugin.GetAttributeValue <OptionSetValue>("stage").Value,
                    MessageName   = plugin.GetAttributeValue <EntityReference>("sdkmessageid").Name,
                    AssemblyName  = plugin.GetAttributeValue <EntityReference>("eventhandler").Name,
                    PrimaryEntity = plugin.GetAttributeValue <AliasedValue>("sdkmessagefilter.primaryobjecttypecode").Value as string
                };
                plugins.Add(metaPlugin);
            }

            return(plugins);
        }
Пример #33
0
        public static void Should_Not_Fail_On_Conditions_In_Link_Entities()
        {
            var fakedContext = new XrmFakedContext();
            var fakedService = fakedContext.GetFakedOrganizationService();

            var testEntity1 = new Entity("entity1")
            {
                Attributes = new AttributeCollection
                {
                    {"entity1attr", "test1" }
                }
            };
            var testEntity2 = new Entity("entity2")
            {
                Attributes = new AttributeCollection
                {
                    {"entity2attr", "test2" }
                }
            };

            testEntity1.Id = fakedService.Create(testEntity1);
            testEntity2.Id = fakedService.Create(testEntity2);

            var testRelation = new XrmFakedRelationship
            {
                IntersectEntity = "TestIntersectEntity",
                Entity1LogicalName = "entity1",
                Entity1Attribute = "entity1attr",
                Entity2LogicalName = "entity2",
                Entity2Attribute = "entity2attr"
            };
            fakedContext.AddRelationship(testRelation.Entity2LogicalName, testRelation);
            fakedService.Associate(testEntity1.LogicalName, testEntity1.Id, new Relationship(testRelation.Entity2LogicalName), new EntityReferenceCollection { testEntity2.ToEntityReference() });

            var query = new QueryExpression
            {
                EntityName = "entity1",
                Criteria = new FilterExpression { FilterOperator = LogicalOperator.And },
                ColumnSet = new ColumnSet(true)
            };

            var link = new LinkEntity
            {
                JoinOperator = JoinOperator.Natural,
                LinkFromEntityName = "entity1",
                LinkFromAttributeName = "entity1attr",
                LinkToEntityName = "entity2",
                LinkToAttributeName = "entity2attr",
                LinkCriteria = new FilterExpression
                {
                    FilterOperator = LogicalOperator.And,
                    Conditions = { new ConditionExpression { AttributeName = "entity2attr", Operator = ConditionOperator.Equal, Values = { "test2" } } }
                }
            };
            query.LinkEntities.Add(link);

            var result = fakedService.RetrieveMultiple(query);
            Assert.NotEmpty(result.Entities);
            Assert.Equal(1, result.Entities.Count);
        }
Пример #34
0
        internal Dictionary <Guid, SecurityRole> GetSecurityRoles(Guid rootBUId)
        {
            var privPotc = new LinkEntity(PRIVILEGE, PRIVILEGE_OTC, "privilegeid", "privilegeid", JoinOperator.LeftOuter)
            {
                Columns     = new ColumnSet("objecttypecode"),
                EntityAlias = PRIVILEGE_POTCH
            };
            var rpR = new LinkEntity(ROLEPRIVILEGES, ROLE, "roleid", "parentrootroleid", JoinOperator.LeftOuter)
            {
                Columns      = new ColumnSet("name", "roleid", "roletemplateid"),
                LinkCriteria = new FilterExpression()
            };

            rpR.LinkCriteria.AddCondition("businessunitid", ConditionOperator.Equal, rootBUId);
            rpR.EntityAlias = ROLEPRIVILEGE_ROLE_ALIAS;

            var privRp = new LinkEntity(PRIVILEGE, ROLEPRIVILEGES, "privilegeid", "privilegeid", JoinOperator.LeftOuter)
            {
                Columns = new ColumnSet("privilegedepthmask")
            };

            privRp.LinkEntities.Add(rpR);
            privRp.LinkEntities.Add(privPotc);
            privRp.EntityAlias = PRIVILEGE_ROLEPRIVILEGE_ALIAS;

            var query = new QueryExpression(PRIVILEGE)
            {
                ColumnSet = new ColumnSet("accessright", "canbeglobal", "canbedeep", "canbelocal", "canbebasic")
            };

            query.LinkEntities.Add(privRp);

            var entities = new List <Entity>();

            query.PageInfo.PageNumber = 1;

            var resp = service.RetrieveMultiple(query);

            entities.AddRange(resp.Entities);
            while (resp.MoreRecords)
            {
                query.PageInfo.PageNumber   = query.PageInfo.PageNumber + 1;
                query.PageInfo.PagingCookie = resp.PagingCookie;
                resp = service.RetrieveMultiple(query);
                entities.AddRange(resp.Entities);
            }

            var roles = new Dictionary <Guid, SecurityRole>();

            foreach (var e in entities.Where(e => e.Attributes.ContainsKey(ROLEPRIVILEGE_ROLE_ALIAS + ".roleid")))
            {
                var entityName = e.GetAttributeValue <AliasedValue>(PRIVILEGE_POTCH + ".objecttypecode").Value as string;
                if (entityName == "none")
                {
                    continue;
                }

                var rp = ToRolePrivilege(e);
                if (rp.AccessRight == AccessRights.None)
                {
                    continue;
                }
                var roleId = (Guid)e.GetAttributeValue <AliasedValue>(ROLEPRIVILEGE_ROLE_ALIAS + ".roleid").Value;
                if (!roles.ContainsKey(roleId))
                {
                    roles[roleId] = new SecurityRole()
                    {
                        Name   = e.GetAttributeValue <AliasedValue>(ROLEPRIVILEGE_ROLE_ALIAS + ".name").Value as string,
                        RoleId = roleId
                    };

                    if (e.Attributes.ContainsKey(ROLEPRIVILEGE_ROLE_ALIAS + ".roletemplateid"))
                    {
                        roles[roleId].RoleTemplateId = (e.GetAttributeValue <AliasedValue>(ROLEPRIVILEGE_ROLE_ALIAS + ".roletemplateid").Value as EntityReference).Id;
                    }

                    roles[roleId].Privileges = new Dictionary <string, Dictionary <AccessRights, RolePrivilege> >();
                }

                if (!roles[roleId].Privileges.ContainsKey(entityName))
                {
                    roles[roleId].Privileges.Add(entityName, new Dictionary <AccessRights, RolePrivilege>());
                }

                roles[roleId].Privileges[entityName].Add(rp.AccessRight, rp);
            }
            return(roles);
        }
Пример #35
0
        protected static Expression TranslateLinkedEntityFilterExpressionToExpression(LinkEntity le, ParameterExpression entity)
        {
            //In CRM 2011, condition expressions are at the LinkEntity level without an entity name
            //From CRM 2013, condition expressions were moved to outside the LinkEntity object at the QueryExpression level,
            //with an EntityName alias attribute

            //If we reach this point, it means we are translating filters at the Link Entity level (2011),
            //Therefore we need to prepend the alias attribute because the code to generate attributes for Joins (JoinAttribute extension) is common across versions

            if (le.LinkCriteria != null)
            {
                foreach (var ce in le.LinkCriteria.Conditions)
                {
                    var entityAlias = !string.IsNullOrEmpty(le.EntityAlias) ? le.EntityAlias : le.LinkToEntityName;
                    ce.AttributeName = entityAlias + "." + ce.AttributeName;
                }
            }

            return(TranslateFilterExpressionToExpression(le.LinkCriteria, entity));
        }
Пример #36
0
 /// <summary>
 /// Walks the whole LinkEntity Tree, returning the LinkedEntity with the specific alias, or null if not found.
 /// </summary>
 /// <param name="link"></param>
 /// <param name="alias"></param>
 /// <returns></returns>
 public static LinkEntity GetLinkEntity(this LinkEntity link, string alias)
 {
     return(link.EntityAlias == alias ? link : link.LinkEntities.FirstOrDefault(l => l.GetLinkEntity(alias) != null));
 }
Пример #37
0
 /// <summary>
 /// 是否具有删除友情链接的权限
 /// </summary>
 /// <param name="link">链接实体</param>
 /// <returns></returns>
 public bool Link_Delete(LinkEntity link)
 {
     return Link_Edit(link);
 }
        public void Execute(IServiceProvider serviceProvider)
        {
            _assemblyTypeName = this.GetType().AssemblyQualifiedName;
            _tracingService   = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            service        = serviceFactory.CreateOrganizationService(context.UserId);

            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {
                // Obtain the target entity from the input parameters.
                Entity targetEntity = (Entity)context.InputParameters["Target"];

                // Verify that the target entity represents an account.
                // If not, this plug-in was not registered correctly.
                if (targetEntity.LogicalName != "defra_lobserviceuserlink")
                {
                    return;
                }
                try
                {
                    if (targetEntity.Attributes.Contains("defra_servicerole") && targetEntity.Attributes["defra_servicerole"] != null)
                    {
                        EntityReference serviceRoleEntityRef = (EntityReference)targetEntity.Attributes["defra_servicerole"];
                        QueryExpression serviceQuery         = new QueryExpression("defra_lobservice");
                        serviceQuery.Criteria.AddCondition(new ConditionExpression("statecode", ConditionOperator.Equal, 0));
                        // take all columns
                        serviceQuery.ColumnSet = new ColumnSet(true);
                        // this is the intersect condition
                        LinkEntity serviceLink = new LinkEntity("defra_lobservice", "defra_lobserivcerole", "defra_lobserviceid", "defra_lobservice", JoinOperator.Inner);
                        // this is the condition to use the specific Team
                        ConditionExpression queryCondition  = new ConditionExpression("defra_lobserivceroleid", ConditionOperator.Equal, serviceRoleEntityRef.Id);
                        ConditionExpression queryCondition1 = new ConditionExpression("statecode", ConditionOperator.Equal, 0);
                        // add the condition to the intersect
                        serviceLink.LinkCriteria.AddCondition(queryCondition);
                        serviceLink.LinkCriteria.AddCondition(queryCondition1);
                        // add the intersect to the query
                        serviceQuery.LinkEntities.Add(serviceLink);

                        //get the results
                        EntityCollection retrievedServices = service.RetrieveMultiple(serviceQuery);
                        _tracingService.Trace("services record count" + retrievedServices.Entities.Count);
                        if (retrievedServices.Entities.Count > 0)
                        {
                            Entity serviceEntity = retrievedServices.Entities[0];
                            if (serviceEntity.Attributes.Contains("defra_ownerbu") && serviceEntity.Attributes["defra_ownerbu"] != null)
                            {
                                EntityReference serviceBusinessUnit = (EntityReference)serviceEntity.Attributes["defra_ownerbu"];
                                if (serviceBusinessUnit != null)
                                {
                                    string ownerBusinessUnitName = serviceBusinessUnit.Name;
                                    _tracingService.Trace("Service Business Unit Name" + ownerBusinessUnitName);
                                    string ownerTeam = ownerBusinessUnitName + "-CM-OWNER";
                                    _tracingService.Trace("Service Business Unit Owner team" + ownerTeam);
                                    QueryExpression teamQuery = new QueryExpression("team");
                                    teamQuery.ColumnSet = new ColumnSet(true);
                                    teamQuery.Criteria.AddCondition("name", ConditionOperator.Equal, ownerTeam);

                                    EntityCollection entities   = service.RetrieveMultiple(teamQuery);
                                    Entity           teamEntity = entities.Entities.Count > 0 ? entities[0] : null;

                                    if (teamEntity != null)
                                    {
                                        _tracingService.Trace("Enrloment Owner Team ID:" + teamEntity.Id);
                                        //Share the contact record
                                        if (targetEntity.Attributes.Contains("defra_serviceuser") && targetEntity.Attributes["defra_serviceuser"] != null)
                                        {
                                            EntityReference serviceUser = (EntityReference)targetEntity.Attributes["defra_serviceuser"];
                                            ShareRecord(teamEntity.Id, serviceUser);
                                        }

                                        //Assign the ownership
                                        SetRecordOwner(teamEntity.Id, targetEntity);
                                    }
                                }
                            }
                        }
                    }
                }

                // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
                catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
                {
                    // You can handle an exception here or pass it back to the calling method.
                    throw ex;
                }
            }
        }
Пример #39
0
        public async Task <List <PatientProcedure> > getPatientOrder(string patientguid, string patientEncounter, string SearchFilters, string searchOrder, DateTime startDate, DateTime endDate, bool forFulfillment, string orderId, string caseId = null, bool isCancel = true, int pageNumber = 0)
        {
            if (string.IsNullOrEmpty(patientguid) && string.IsNullOrEmpty(caseId) && string.IsNullOrEmpty(patientEncounter) && string.IsNullOrEmpty(orderId))
            {
                throw new ValidationException("Parameter missing");
            }

            List <PatientProcedure> PatientProcedure   = new List <PatientProcedure>();
            mzk_patientorder        patientOrderEntity = new mzk_patientorder();

            #region Patient Procedure Query
            QueryExpression  query       = new QueryExpression(mzk_patientorder.EntityLogicalName);
            FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.And);

            if (!string.IsNullOrEmpty(orderId))
            {
                childFilter.AddCondition("mzk_patientorderid", ConditionOperator.Equal, new Guid(orderId));
            }
            if (SearchFilters != mzk_orderstatus.Cancelled.ToString())
            {
                childFilter.AddCondition("mzk_orderstatus", ConditionOperator.NotEqual, (int)mzk_orderstatus.Cancelled);
            }
            if (!string.IsNullOrEmpty(caseId))
            {
                childFilter.AddCondition("mzk_caseid", ConditionOperator.Equal, new Guid(caseId));
            }
            if (!string.IsNullOrEmpty(patientguid))
            {
                childFilter.AddCondition("mzk_customer", ConditionOperator.Equal, new Guid(patientguid));
            }
            else if (!string.IsNullOrEmpty(patientEncounter))
            {
                childFilter.AddCondition("mzk_patientencounterid", ConditionOperator.Equal, new Guid(patientEncounter));
            }

            if (isCancel == false)
            {
                childFilter.AddCondition("mzk_orderstatus", ConditionOperator.NotEqual, Convert.ToInt32(mzk_orderstatus.Cancelled));
            }

            //Search Filter
            if (!string.IsNullOrEmpty(SearchFilters))
            {
                if (SearchFilters == Convert.ToString(mzk_procedurefilter.Ordered))
                {
                    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Ordered));
                }
                if (SearchFilters == Convert.ToString(mzk_procedurefilter.Started))
                {
                    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Started));
                }
                if (SearchFilters == Convert.ToString(mzk_procedurefilter.Canceled))
                {
                    childFilter.AddCondition("mzk_orderstatus", ConditionOperator.Equal, Convert.ToInt32(mzk_orderstatus.Cancelled));
                }
            }

            //Search Order
            if (!string.IsNullOrEmpty(searchOrder))
            {
                childFilter.AddCondition("mzk_productidname", ConditionOperator.Like, ("%" + searchOrder + "%"));
            }

            //Search Date
            if (startDate != DateTime.MinValue && endDate != DateTime.MinValue)
            {
                childFilter.AddCondition("createdon", ConditionOperator.Between, new Object[] { startDate, endDate.AddHours(12) });
            }

            //Patient Order Type :: Procedure
            childFilter.AddCondition("mzk_type", ConditionOperator.Equal, (int)mzk_patientordermzk_Type.Procedure);
            query.ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("mzk_patientorderid",
                                                                    "mzk_productid",
                                                                    "mzk_patientencounterid",
                                                                    "mzk_patientordernumber",
                                                                    "mzk_orderdate",
                                                                    "mzk_orderstatus",
                                                                    "mzk_comments",
                                                                    "mzk_userid", "createdon",
                                                                    "mzk_statusmanagerdetail",
                                                                    "mzk_treatmentlocation", "mzk_orderinglocation");

            LinkEntity EntityProduct = new LinkEntity("mzk_patientorder", "product", "mzk_productid", "productid", JoinOperator.LeftOuter);
            EntityProduct.Columns = new Microsoft.Xrm.Sdk.Query.ColumnSet("mzk_cptcodeid");

            LinkEntity EntityUser = new LinkEntity("mzk_patientorderid", "systemuser", "mzk_userid", "systemuserid", JoinOperator.LeftOuter);
            EntityUser.Columns = new Microsoft.Xrm.Sdk.Query.ColumnSet("positionid");

            query.LinkEntities.Add(EntityProduct);
            query.LinkEntities.Add(EntityUser);

            if (!forFulfillment && pageNumber > 0)
            {
                query.PageInfo                        = new Microsoft.Xrm.Sdk.Query.PagingInfo();
                query.PageInfo.Count                  = Convert.ToInt32(AppSettings.GetByKey("PageSize"));
                query.PageInfo.PageNumber             = pageNumber;
                query.PageInfo.PagingCookie           = null;
                query.PageInfo.ReturnTotalRecordCount = true;
            }
            #endregion
            SoapEntityRepository entityRepository = SoapEntityRepository.GetService();

            EntityCollection entitycollection = entityRepository.GetEntityCollection(query);

            foreach (Entity entity in entitycollection.Entities)
            {
                PatientProcedure model = new PatientProcedure();

                if (!this.getPatientOrder(model, entity, forFulfillment, orderId, mzk_entitytype.ProcedureOrder))
                {
                    continue;
                }

                if (entity.Attributes.Contains("mzk_productid"))
                {
                    model.Title = ((EntityReference)entity.Attributes["mzk_productid"]).Name;
                }

                if (entity.Attributes.Contains("product3.mzk_cptcodeid"))
                {
                    model.CPTCode = ((EntityReference)(entity.Attributes["product3.mzk_cptcodeid"] as AliasedValue).Value).Name;
                }
                else
                if (entity.Attributes.Contains("product1.mzk_cptcodeid"))
                {
                    model.CPTCode = ((EntityReference)(entity.Attributes["product1.mzk_cptcodeid"] as AliasedValue).Value).Name;
                }

                if (entity.Attributes.Contains("mzk_userid"))
                {
                    model.CareProvider   = ((EntityReference)entity.Attributes["mzk_userid"]).Name;
                    model.CareProviderId = ((EntityReference)entity.Attributes["mzk_userid"]).Id.ToString();
                }
                if (entity.Attributes.Contains("systemuser4.positionid"))
                {
                    model.Designation = ((EntityReference)(entity.Attributes["systemuser4.positionid"] as AliasedValue).Value).Name;
                }
                else
                if (entity.Attributes.Contains("systemuser2.positionid"))
                {
                    model.Designation = ((EntityReference)(entity.Attributes["systemuser2.positionid"] as AliasedValue).Value).Name;
                }
                if (entity.Attributes.Contains("mzk_comments"))
                {
                    model.Notes = entity.Attributes["mzk_comments"].ToString();
                }

                if (entity.Attributes.Contains("mzk_treatmentlocation"))
                {
                    model.treatmentLocationId = entity.GetAttributeValue <EntityReference>("mzk_treatmentlocation").Id.ToString();
                    model.treatmentLocation   = entity.GetAttributeValue <EntityReference>("mzk_treatmentlocation").Name;
                }

                PatientOrderLog log = this.getOrderStatusLogDetails(Convert.ToInt32(model.OrderStatus), model.Id);

                if (log != null)
                {
                    model.StatusNotes = log.Comments;
                }

                PatientProcedure.Add(model);
            }

            if (pageNumber > 0 && entitycollection != null)
            {
                Pagination.totalCount = entitycollection.TotalRecordCount;
            }

            return(PatientProcedure);
        }
        public static LinkEntity ToLinkEntity(this XElement el, XrmFakedContext ctx)
        {
            //Create this node
            var linkEntity = new LinkEntity();

            linkEntity.LinkFromEntityName = el.Parent.GetAttribute("name").Value;
            linkEntity.LinkFromAttributeName = el.GetAttribute("from").Value;
            linkEntity.LinkToAttributeName = el.GetAttribute("to").Value;
            linkEntity.LinkToEntityName = el.GetAttribute("name").Value;  

            if(el.GetAttribute("alias") != null)
            {
                linkEntity.EntityAlias = el.GetAttribute("alias").Value;
            }

            //Process other link entities recursively
            var convertedLinkEntityNodes = el.Elements()
                                    .Where(e => e.Name.LocalName.Equals("link-entity"))
                                    .Select(e => e.ToLinkEntity(ctx))
                                    .ToList();

            foreach(var le in convertedLinkEntityNodes)
            {
                linkEntity.LinkEntities.Add(le);
            }

            //Process column sets
            linkEntity.Columns = el.ToColumnSet();

            //Process filter
            linkEntity.LinkCriteria = el.Elements()
                                        .Where(e => e.Name.LocalName.Equals("filter"))
                                        .Select(e => e.ToFilterExpression(ctx))
                                        .FirstOrDefault();

            return linkEntity;
        }
Пример #41
0
        public static Entity[] GetSdkMessageProcessingSteps(this IOrganizationService service, Guid? pluginAssemblyId = null, Guid? pluginTypeId = null)
        {
            var attributes = new string[] 
            { 
                Constants.Crm.Attributes.NAME, 
                Constants.Crm.Attributes.STATE_CODE, 
                Constants.Crm.Attributes.STATUS_CODE, 
                "sdkmessageprocessingstepid", 
                Constants.Crm.Attributes.PLUGIN_TYPE_ID, 
                Constants.Crm.Attributes.EVENT_HANDLER 
            };

            var query = new QueryExpression();
            query.EntityName = Constants.Crm.Entities.PROCESSING_STEP;
            query.ColumnSet = new ColumnSet(attributes);
            query.Criteria = new FilterExpression(LogicalOperator.And);
            query.Criteria.AddCondition("ishidden", ConditionOperator.Equal, false);
            
            if (pluginTypeId != null)
            {
                query.Criteria.AddCondition(Constants.Crm.Attributes.PLUGIN_TYPE_ID, ConditionOperator.Equal, pluginTypeId);
            }

            query.Orders.Add(new OrderExpression(Constants.Crm.Attributes.NAME, OrderType.Ascending));

            if (pluginAssemblyId != null)
            {
                var link = new LinkEntity
                {
                    LinkFromEntityName = Constants.Crm.Entities.PROCESSING_STEP,
                    LinkToEntityName = Constants.Crm.Entities.PLUGIN_TYPE,
                    LinkFromAttributeName = Constants.Crm.Attributes.PLUGIN_TYPE_ID,
                    LinkToAttributeName = Constants.Crm.Attributes.PLUGIN_TYPE_ID,
                    JoinOperator = JoinOperator.Natural,
                    EntityAlias = Constants.Crm.Entities.PLUGIN_TYPE,
                    Columns = new ColumnSet(new string[] { Constants.Crm.Attributes.FRIENDLY_NAME, "typename", "pluginassemblyid" }),
                };

                link.LinkCriteria.AddCondition("pluginassemblyid", ConditionOperator.Equal, pluginAssemblyId);

                query.LinkEntities.Add(link);
            }

            return service.RetrieveMultiple(query).Entities.ToArray<Entity>();
        }
Пример #42
0
 /// <summary>
 /// Adds the column name and value pairs to the linkCriteria of the given LinkEntity
 /// </summary>
 /// <param name="linkEntity">The link entity.</param>
 /// <param name="columnNameAndValuePairs">List of pairs that look like this:
 /// (string name of the column, value of the column) ie. "name", "John Doe"</param>
 /// <returns></returns>
 public static LinkEntity WhereEqual(this LinkEntity linkEntity, params object[] columnNameAndValuePairs)
 {
     linkEntity.LinkCriteria.WhereEqual(linkEntity.LinkToEntityName, columnNameAndValuePairs);
     return(linkEntity);
 }
Пример #43
0
        private static bool UserInRole(OrganizationServiceProxy serviceProxy,
            Guid userId, Guid roleId)
        {
            // Establish a SystemUser link for a query.
            LinkEntity systemUserLink = new LinkEntity()
            {
                LinkFromEntityName = SystemUserRoles.EntityLogicalName,
                LinkFromAttributeName = "systemuserid",
                LinkToEntityName = SystemUser.EntityLogicalName,
                LinkToAttributeName = "systemuserid",
                LinkCriteria =
                {
                    Conditions = 
                    {
                        new ConditionExpression(
                            "systemuserid", ConditionOperator.Equal, userId)
                    }
                }
            };

            // Build the query.
            QueryExpression query = new QueryExpression()
            {
                EntityName = Role.EntityLogicalName,
                ColumnSet = new ColumnSet("roleid"),
                LinkEntities = 
                {
                    new LinkEntity()
                    {
                        LinkFromEntityName = Role.EntityLogicalName,
                        LinkFromAttributeName = "roleid",
                        LinkToEntityName = SystemUserRoles.EntityLogicalName,
                        LinkToAttributeName = "roleid",
                        LinkEntities = {systemUserLink}
                    }
                },
                Criteria =
                {
                    Conditions = 
                    {
                        new ConditionExpression("roleid", ConditionOperator.Equal, roleId)
                    }
                }
            };

            // Retrieve matching roles.
            EntityCollection ec = serviceProxy.RetrieveMultiple(query);

            if (ec.Entities.Count > 0)
                return true;

            return false;
        }
Пример #44
0
        private void comboBox2_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //RetrieveRecordChangeHistoryRequest changeRequest = new RetrieveRecordChangeHistoryRequest();

            ArrayList  lstUserRoles = new ArrayList();
            SystemUser objSysUsr    = new SystemUser();

            objSysUsr = (SystemUser)this.comboBox2.SelectedItem;
            //changeRequest.Target = new EntityReference("systemuser", Guid.Parse(objSysUsr.SystemUserID));

            //RetrieveRecordChangeHistoryResponse changeResponse = (RetrieveRecordChangeHistoryResponse)svcClient.OrganizationServiceProxy.Execute(changeRequest);

            QueryExpression queryExpression = new QueryExpression();

            queryExpression.EntityName = "role"; //role entity name
            ColumnSet cols = new ColumnSet();

            cols.AddColumn("name"); //We only need role name
            queryExpression.ColumnSet = cols;
            ConditionExpression ce = new ConditionExpression();

            ce.AttributeName = "systemuserid";
            ce.Operator      = ConditionOperator.Equal;
            ce.Values.Add(objSysUsr.SystemUserID);
            //system roles
            LinkEntity lnkEntityRole = new LinkEntity();

            lnkEntityRole.LinkFromAttributeName = "roleid";
            lnkEntityRole.LinkFromEntityName    = "role"; //FROM
            lnkEntityRole.LinkToEntityName      = "systemuserroles";
            lnkEntityRole.LinkToAttributeName   = "roleid";
            //system users
            LinkEntity lnkEntitySystemusers = new LinkEntity();

            lnkEntitySystemusers.LinkFromEntityName    = "systemuserroles";
            lnkEntitySystemusers.LinkFromAttributeName = "systemuserid";
            lnkEntitySystemusers.LinkToEntityName      = "systemuser";
            lnkEntitySystemusers.LinkToAttributeName   = "systemuserid";
            lnkEntitySystemusers.LinkCriteria          = new FilterExpression();
            lnkEntitySystemusers.LinkCriteria.Conditions.Add(ce);
            lnkEntityRole.LinkEntities.Add(lnkEntitySystemusers);
            queryExpression.LinkEntities.Add(lnkEntityRole);
            EntityCollection entColRoles = svcClient.OrganizationServiceProxy.RetrieveMultiple(queryExpression);

            if (entColRoles != null && entColRoles.Entities.Count > 0)
            {
                foreach (Entity entRole in entColRoles.Entities)
                {
                    lstUserRoles.Add(entRole["name"].ToString());
                }
            }

            lstUserRoles.Sort();

            this.listView2.Visibility  = Visibility.Visible;
            this.listView2.ItemsSource = lstUserRoles;

            QueryExpression query = new QueryExpression("team");

            query.ColumnSet = new ColumnSet(true);
            LinkEntity link = query.AddLink("teammembership", "teamid", "teamid");

            link.LinkCriteria.AddCondition(new ConditionExpression("systemuserid", ConditionOperator.Equal, objSysUsr.SystemUserID));

            ArrayList        lstTeam     = new ArrayList();
            EntityCollection entColTeams = svcClient.OrganizationServiceProxy.RetrieveMultiple(query);

            foreach (Entity entTeams in entColTeams.Entities)
            {
                lstTeam.Add(entTeams["name"].ToString());
            }

            lstTeam.Sort();
            this.listView3.Visibility  = Visibility.Visible;
            this.listView3.ItemsSource = lstTeam;
        }
Пример #45
0
 /// <summary>
 /// Adds the type T as a child linked entity to the LinkEntity, additionally ensuring it is active.
 /// Assumes both entities have the same attribute name to link on.
 /// </summary>
 /// <typeparam name="T">The type of the entity that is to be linked</typeparam>
 /// <param name="link">The link.</param>
 /// <param name="linkAttributesName">Name of the link from and link to attribute.</param>
 /// <returns></returns>
 public static LinkEntity AddLink <T>(this LinkEntity link, string linkAttributesName) where T : Entity
 {
     return(link.AddLink <T>(linkAttributesName, linkAttributesName));
 }
Пример #46
0
 /// <summary>
 /// Adds the type T as a child linked entity, additionally ensuring it is active.
 /// Assumes both entities have the same attribute name to link on.
 /// </summary>
 /// <typeparam name="T">The type of the entity that is to me linked</typeparam>
 /// <param name="link">The link.</param>
 /// <param name="linkAttributesName">Name of the link from and link to attribute.</param>
 /// <param name="joinType">Type of the join to perform.</param>
 /// <returns></returns>
 public static LinkEntity AddLink <T>(this LinkEntity link, string linkAttributesName, JoinOperator joinType) where T : Entity
 {
     return(link.AddLink <T>(linkAttributesName, linkAttributesName, joinType));
 }
Пример #47
0
        public void TestLinks()
        {
            ConditionExpression cond = new ConditionExpression( "title", ConditionOperator.Equal, new string[] { "child" } );
            FilterExpression fe = new FilterExpression();
            fe.FilterOperator = LogicalOperator.And;
            fe.Conditions.Add( cond );

            LinkEntity le = new LinkEntity( "subject", "subject", "subjectid", "parentsubject", JoinOperator.Inner );
            le.LinkCriteria = fe;

            QueryExpression qe = new QueryExpression( "subject" );
            qe.LinkEntities.Add( le );

            BusinessEntityCollection bec = m_service.RetrieveMultiple( qe );
            Console.WriteLine( "TestLinks() found: " + bec.BusinessEntities.Count + " entity. " );
            Fest.AssertTrue( bec.BusinessEntities.Count > 0, "found more than zero entities" );
        }
Пример #48
0
 /// <summary>
 /// Adds the type T as a child linked entity, additionally ensuring it is active.
 /// Assumes both entities have the same attribute name to link on.
 /// </summary>
 /// <typeparam name="T">The type of the entity that is to me linked</typeparam>
 /// <param name="link">The link.</param>
 /// <param name="linkAttributesName">Name of the link from and link to attribute.</param>
 /// <param name="joinType">Type of the join to perform.</param>
 /// <param name="anonymousTypeInitializer">An Anonymous Type Initializer where the properties of the anonymous
 /// type are the column names to add</param>
 /// <returns></returns>
 public static LinkEntity AddLink <T>(this LinkEntity link, string linkAttributesName, JoinOperator joinType, Expression <Func <T, object> > anonymousTypeInitializer) where T : Entity
 {
     return(link.AddLink(linkAttributesName, linkAttributesName, joinType, anonymousTypeInitializer));
 }
Пример #49
0
 /// <summary>
 /// 获取图片URL
 /// </summary>
 /// <param name="link">链接实体</param>
 /// <param name="localImage">本地图片</param>
 private void GetLinkImageUrl(LinkEntity link, HttpPostedFileBase localImage)
 {
     link.LinkType = LinkType.ImageLink;
     //本地图片
     if (localImage != null && !string.IsNullOrEmpty(localImage.FileName))
     {
         link.ImageUrl = logoService.UploadLogo(link.LinkId, localImage.InputStream);
     }
     //文字链接
     else if (string.IsNullOrEmpty(link.ImageUrl))
     {
         link.LinkType = LinkType.TextLink;
     }
 }
Пример #50
0
 /// <summary>
 /// Adds the new LinkEntity as a child to this LinkEnity, rather than this LinkEntity's LinkFrom Entity
 /// </summary>
 /// <param name="link"></param>
 /// <param name="linkToEntityName"></param>
 /// <param name="linkFromAttributeName"></param>
 /// <param name="linkToAttributeName"></param>
 /// <returns></returns>
 public static LinkEntity AddChildLink(this LinkEntity link, string linkToEntityName,
                                       string linkFromAttributeName, string linkToAttributeName)
 {
     return(link.AddChildLink(linkToEntityName, linkFromAttributeName, linkToAttributeName, JoinOperator.Inner));
 }
 /// <summary>
 ///     !!ONLY IMPLEMENTED FOR STATIC LOOKUP CODES
 /// </summary>
 public void AddLinkFilter(string entityType, string lookup, string fieldName, object value)
 {
     if (LinkEntity == null)
     {
         LinkEntity = new LinkEntity(RecordTypeAggregated, entityType, lookup,
             XrmEntity.GetPrimaryKeyName(entityType), JoinOperator.Inner);
         LinkEntity.LinkCriteria.AddCondition(new ConditionExpression(fieldName, ConditionOperator.Equal, value));
     }
     else
         throw new InvalidPluginExecutionException("Only one link filter may be added to an aggregate");
 }
Пример #52
0
 /// <summary>
 /// 更新友情链接
 /// </summary>
 /// <param name="link">友情链接实体</param>
 /// <returns></returns>
 public void Update(LinkEntity link)
 {
     link.LastModified = DateTime.UtcNow;
     linkRepository.Update(link);
 }