/// <summary> /// <c>Qualify</c> a <c>Lead</c> and create an account, contact, or opportunity records that are linked to the originating lead. /// <para> /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.qualifyleadrequest(v=crm.8).aspx /// </para> /// </summary> /// <param name="id"><c>Lead</c> Id</param> /// <param name="qualifyTo">Lead qualified to entity type</param> /// <param name="existingRecordType">Existing record entity type</param> /// <param name="existingRecordId">If you qualify with existing record (account or contact) set record Id</param> /// <param name="currencyId"> /// If you want create an <c>Opportunity</c> set <c>TransactionCurrency Id</c>, otherwise leave NULL. /// <para> /// If you want create an <c>Opportunity</c> and do not know / sure <c>TransactionCurrency Id</c> leave NULL, this method will find <c>TransactionCurrency Id</c> /// </para> /// </param> /// <param name="campaignId"></param> /// <param name="status"><see cref="LeadQualifiedStatusCode"/> status code</param> /// <param name="customStatusCode">If you're using your custom statuscodes set this, otherwise you can set "0 (zero)" or null</param> /// <returns>Resturns created entities after qualification in <see cref="QualifyLeadResponse.CreatedEntities"/> property.</returns> public QualifyLeadResponse Qualify(Guid id, QualifyLeadTo qualifyTo, ExistingEntityType?existingRecordType, Guid?existingRecordId, Guid?currencyId, Guid?campaignId, LeadQualifiedStatusCode status = LeadQualifiedStatusCode.Qualified, int customStatusCode = 0) { ExceptionThrow.IfGuidEmpty(id, "id"); ExceptionThrow.IfNegative((int)qualifyTo, "qualifyTo"); int statusCode = (int)status; if (status == LeadQualifiedStatusCode.CustomStatusCode) { ExceptionThrow.IfNegative(customStatusCode, "customStatusCode"); statusCode = customStatusCode; } bool isAccount = (qualifyTo.HasFlag(QualifyLeadTo.Account) || qualifyTo.HasFlag(QualifyLeadTo.AccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact)) && !qualifyTo.HasFlag(QualifyLeadTo.None); bool isContact = (qualifyTo.HasFlag(QualifyLeadTo.Contact) || qualifyTo.HasFlag(QualifyLeadTo.AccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact)) && !qualifyTo.HasFlag(QualifyLeadTo.None); bool isOpportunity = (qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithAccountAndContact) || qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithExistingRecord)) && !qualifyTo.HasFlag(QualifyLeadTo.None); QualifyLeadRequest request = new QualifyLeadRequest() { LeadId = new EntityReference(this.EntityName.ToLower(), id), CreateAccount = isAccount, CreateContact = isContact, CreateOpportunity = isOpportunity, Status = new OptionSetValue(statusCode) }; if (campaignId.HasValue) { ExceptionThrow.IfGuid(campaignId.Value, "campaignId"); request.SourceCampaignId = new EntityReference("campaign", campaignId.Value); } if (isOpportunity) { var currencyEntityReference = currencyId.HasValue && !currencyId.Value.IsGuidEmpty() ? new EntityReference("transactioncurrency", currencyId.Value) : GetTransactionCurrency("lead", id); ExceptionThrow.IfNull(currencyEntityReference, "OpportunityCurrency"); ExceptionThrow.IfGuidEmpty(currencyEntityReference.Id, "OpportunityCurrency.Id"); request.OpportunityCurrencyId = currencyEntityReference; if (qualifyTo.HasFlag(QualifyLeadTo.OpportunityWithExistingRecord)) { ExceptionThrow.IfNull(existingRecordType, "existingRecordType"); ExceptionThrow.IfGuidEmpty(existingRecordId.Value, "existingRecordId"); request.OpportunityCustomerId = new EntityReference(existingRecordType.Description(), existingRecordId.Value); } } return((QualifyLeadResponse)this.OrganizationService.Execute(request)); }