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; }
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); } }
/// <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(); }
/// <summary> /// 是否具有编辑友情链接的权限 /// </summary> /// <param name="link">链接实体</param> /// <returns></returns> public bool Link_Edit(LinkEntity link) { return Link_Manage(link.OwnerType, link.OwnerId); }
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); }
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); }
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 } } }); }
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); }
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); }
/// <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; } } }
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; }
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 }
/// <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))); }
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(); }
/// <summary> /// 删除友情链接 /// </summary> /// <param name="link">友情链接实体</param> /// <returns></returns> public void Delete(LinkEntity link) { linkRepository.Delete(link); categoryService.ClearCategoriesFromItem(link.LinkId, 0, TenantTypeIds.Instance().Link()); }
/** * 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; }
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); }
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); }
/// <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."); }
/// <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)); }
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); }
/// <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); }
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>()); }
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); }
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); }
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); }
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); }
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)); }
/// <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)); }
/// <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; } } }
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; }
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>(); }
/// <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); }
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; }
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; }
/// <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)); }
/// <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)); }
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" ); }
/// <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)); }
/// <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; } }
/// <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"); }
/// <summary> /// 更新友情链接 /// </summary> /// <param name="link">友情链接实体</param> /// <returns></returns> public void Update(LinkEntity link) { link.LastModified = DateTime.UtcNow; linkRepository.Update(link); }