/// <summary> /// Copy a <c>Contract</c>. /// <para> /// For more information look at https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.clonecontractrequest(v=crm.8).aspx /// </para> /// </summary> /// <param name="id"> /// <c>Contract</c> Id to be copied /// </param> /// <param name="includeCanceledLines"> /// Indicates whether the canceled line items of the originating contract are to be included in the copy (clone) contract. /// Default value is <c>false</c>. /// </param> /// <returns> /// Returns cloned (created) <c>Contract</c> in <see cref="CloneContractResponse.Entity"/> property. /// </returns> public CloneContractResponse Copy(Guid id, bool includeCanceledLines = false) { ExceptionThrow.IfGuidEmpty(id, "id"); CloneContractRequest request = new CloneContractRequest() { ContractId = id, IncludeCanceledLines = includeCanceledLines }; return((CloneContractResponse)this.OrganizationService.Execute(request)); }
public void PerformTestSetup() { MessageName = "Clone"; var contractEntity = EntityFactory.CreateContract(); CloneContractRequest = new CloneContractRequest { ContractId = contractEntity.Id, IncludeCanceledLines = true }; }
/// <summary> /// This method first connects to the Organization service. Afterwards, /// a Contract Template and several Contracts are created, demonstrating how to /// create and work with the Contract entity. /// </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 { //<snippetWorkingWithContracts1> // 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)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); CreateRequiredRecords(); #region Create Contract Template // First, attempt to retrieve the Contract Template. Otherwise, // create the template. QueryExpression templateQuery = new QueryExpression() { EntityName = ContractTemplate.EntityLogicalName, ColumnSet = new ColumnSet("contracttemplateid"), Criteria = { Conditions = { new ConditionExpression("abbreviation", ConditionOperator.Equal, "SCT") } } }; EntityCollection ec = _serviceProxy.RetrieveMultiple(templateQuery); if (ec.Entities.Count > 0) { _contractTemplateId = ec.Entities[0].Id; Console.Write("Template retrieved, "); } else { ContractTemplate contractTemplate = new ContractTemplate() { Name = "Sample Contract Template", BillingFrequencyCode = new OptionSetValue((int)ContractTemplateBillingFrequencyCode.Monthly), Abbreviation = "SCT", AllotmentTypeCode = new OptionSetValue((int)ContractTemplateAllotmentTypeCode.NumberofCases), EffectivityCalendar = "--------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++-------------------------------------------------------" }; _contractTemplateId = _serviceProxy.Create(contractTemplate); Console.Write("Template created, "); } #endregion #region Create Contract // Create a Contract from the Contract Template. Contract contract = new Contract() { Title = "Sample Contract", ContractTemplateId = new EntityReference { Id = _contractTemplateId, LogicalName = ContractTemplate.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, BillingCustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), BillingStartOn = new DateTime(2015, 1, 1), BillingEndOn = new DateTime(2020, 1, 1) }; _contractId = _serviceProxy.Create(contract); Console.Write("parent contract created, "); // Create a contract line item. ContractDetail contractLineItem = new ContractDetail() { Title = "Sample Contract Line Item", ContractId = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), Price = new Money(20.0M), TotalAllotments = 20 }; _serviceProxy.Create(contractLineItem); Console.Write("contract line attached, "); #endregion #region Clone contract twice //<snippetCloneContract> // Create the first clone of the contract. CloneContractRequest cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = false }; CloneContractResponse cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _firstCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; //</snippetCloneContract> Console.Write("first clone created, "); // Create the second clone of the contract. cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = true }; cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _secondCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; Console.Write("second clone created. \n"); // Retrieve all Contracts. QueryExpression contractQuery = new QueryExpression() { EntityName = Contract.EntityLogicalName, ColumnSet = new ColumnSet("contractid"), Criteria = { Conditions = { new ConditionExpression("customerid", ConditionOperator.Equal, _accountId) } } }; EntityCollection contracts = _serviceProxy.RetrieveMultiple(contractQuery); // Display the retrieved Contract Ids. for (int i = 0; i < contracts.Entities.Count; i++) { Console.WriteLine("Retrieved contract with Id: {0}", ((Contract)contracts.Entities[i]).ContractId); } #endregion #region Deactivate a cloned contract // In order to deactivate a contract (put it on hold), it is first // necessary to invoice the contract. SetStateRequest setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(2) }; _serviceProxy.Execute(setStateRequest); Console.Write("Contract invoiced, "); // Now that the contract has been invoiced, it is possible to put // the contract on hold. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.OnHold), Status = new OptionSetValue(4) }; _serviceProxy.Execute(setStateRequest); Console.Write("and put on hold.\n"); #endregion #region Renew an invoiced contract // In order to renew a contract, it must be invoiced first, and // then canceled. //<snippetSetStateForContract> // Invoice the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(3) }; _serviceProxy.Execute(setStateRequest); //</snippetSetStateForContract> Console.Write("Contract invoiced, "); //<snippetCancelContract> // Cancel the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Canceled), Status = new OptionSetValue(5) }; _serviceProxy.Execute(setStateRequest); //</snippetCancelContract> Console.Write("canceled, "); //<snippetRenewContract> // Renew the canceled contract. RenewContractRequest renewRequest = new RenewContractRequest() { ContractId = _contractId, IncludeCanceledLines = true, Status = 1 }; RenewContractResponse renewResponse = (RenewContractResponse)_serviceProxy.Execute(renewRequest); // Retrieve Id of renewed contract. _renewedId = ((Contract)renewResponse.Entity).ContractId.Value; //</snippetRenewContract> // Display the Id of the renewed contract. Console.WriteLine("and renewed."); #endregion DeleteRequiredRecords(promptforDelete); } //</snippetWorkingWithContracts1> } // 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; } }
/// <summary> /// This method first connects to the Organization service. Afterwards, /// a Contract Template and several Contracts are created, demonstrating how to /// create and work with the Contract entity. /// </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 { //<snippetWorkingWithContracts1> // 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)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); CreateRequiredRecords(); #region Create Contract Template // First, attempt to retrieve the Contract Template. Otherwise, // create the template. QueryExpression templateQuery = new QueryExpression() { EntityName = ContractTemplate.EntityLogicalName, ColumnSet = new ColumnSet("contracttemplateid"), Criteria = { Conditions = { new ConditionExpression("abbreviation", ConditionOperator.Equal, "SCT") } } }; EntityCollection ec = _serviceProxy.RetrieveMultiple(templateQuery); if (ec.Entities.Count > 0) { _contractTemplateId = ec.Entities[0].Id; Console.Write("Template retrieved, "); } else { ContractTemplate contractTemplate = new ContractTemplate() { Name = "Sample Contract Template", BillingFrequencyCode = new OptionSetValue((int)ContractTemplateBillingFrequencyCode.Monthly), Abbreviation = "SCT", AllotmentTypeCode = new OptionSetValue((int)ContractTemplateAllotmentTypeCode.NumberofCases), EffectivityCalendar = "--------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++-------------------------------------------------------" }; _contractTemplateId = _serviceProxy.Create(contractTemplate); Console.Write("Template created, "); } #endregion #region Create Contract // Create a Contract from the Contract Template. Contract contract = new Contract() { Title = "Sample Contract", ContractTemplateId = new EntityReference { Id = _contractTemplateId, LogicalName = ContractTemplate.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, BillingCustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), BillingStartOn = new DateTime(2015, 1, 1), BillingEndOn = new DateTime(2020, 1, 1) }; _contractId = _serviceProxy.Create(contract); Console.Write("parent contract created, "); // Create a contract line item. ContractDetail contractLineItem = new ContractDetail() { Title = "Sample Contract Line Item", ContractId = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), Price = new Money(20.0M), TotalAllotments = 20 }; _serviceProxy.Create(contractLineItem); Console.Write("contract line attached, "); #endregion #region Clone contract twice //<snippetCloneContract> // Create the first clone of the contract. CloneContractRequest cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = false }; CloneContractResponse cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _firstCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; //</snippetCloneContract> Console.Write("first clone created, "); // Create the second clone of the contract. cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = true }; cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _secondCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; Console.Write("second clone created. \n"); // Retrieve all Contracts. QueryExpression contractQuery = new QueryExpression() { EntityName = Contract.EntityLogicalName, ColumnSet = new ColumnSet("contractid"), Criteria = { Conditions = { new ConditionExpression("customerid", ConditionOperator.Equal, _accountId) } } }; EntityCollection contracts = _serviceProxy.RetrieveMultiple(contractQuery); // Display the retrieved Contract Ids. for (int i = 0; i < contracts.Entities.Count; i++) { Console.WriteLine("Retrieved contract with Id: {0}", ((Contract)contracts.Entities[i]).ContractId); } #endregion #region Deactivate a cloned contract // In order to deactivate a contract (put it on hold), it is first // necessary to invoice the contract. SetStateRequest setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(2) }; _serviceProxy.Execute(setStateRequest); Console.Write("Contract invoiced, "); // Now that the contract has been invoiced, it is possible to put // the contract on hold. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.OnHold), Status = new OptionSetValue(4) }; _serviceProxy.Execute(setStateRequest); Console.Write("and put on hold.\n"); #endregion #region Renew an invoiced contract // In order to renew a contract, it must be invoiced first, and // then canceled. //<snippetSetStateForContract> // Invoice the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(3) }; _serviceProxy.Execute(setStateRequest); //</snippetSetStateForContract> Console.Write("Contract invoiced, "); //<snippetCancelContract> // Cancel the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Canceled), Status = new OptionSetValue(5) }; _serviceProxy.Execute(setStateRequest); //</snippetCancelContract> Console.Write("canceled, "); //<snippetRenewContract> // Renew the canceled contract. RenewContractRequest renewRequest = new RenewContractRequest() { ContractId = _contractId, IncludeCanceledLines = true, Status = 1 }; RenewContractResponse renewResponse = (RenewContractResponse)_serviceProxy.Execute(renewRequest); // Retrieve Id of renewed contract. _renewedId = ((Contract)renewResponse.Entity).ContractId.Value; //</snippetRenewContract> // Display the Id of the renewed contract. Console.WriteLine("and renewed."); #endregion DeleteRequiredRecords(promptforDelete); } //</snippetWorkingWithContracts1> } // 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; } }
[STAThread] // Required to support the interactive login experience static void Main(string[] args) { CrmServiceClient service = null; try { service = SampleHelpers.Connect("Connect"); if (service.IsReady) { // Create any entity records that the demonstration code requires SetUpSample(service); #region Demonstrate // TODO Add demonstration code here #region Create Contract Template // First, attempt to retrieve the Contract Template. Otherwise, // create the template. QueryExpression templateQuery = new QueryExpression() { EntityName = ContractTemplate.EntityLogicalName, ColumnSet = new ColumnSet("contracttemplateid"), Criteria = { Conditions = { new ConditionExpression("abbreviation", ConditionOperator.Equal, "SCT") } } }; EntityCollection ec = _serviceProxy.RetrieveMultiple(templateQuery); if (ec.Entities.Count > 0) { _contractTemplateId = ec.Entities[0].Id; Console.Write("Template retrieved, "); } else { ContractTemplate contractTemplate = new ContractTemplate() { Name = "Sample Contract Template", BillingFrequencyCode = new OptionSetValue((int)ContractTemplateBillingFrequencyCode.Monthly), Abbreviation = "SCT", AllotmentTypeCode = new OptionSetValue((int)ContractTemplateAllotmentTypeCode.NumberofCases), EffectivityCalendar = "--------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++---------------+++++++++-------------------------------------------------------" }; _contractTemplateId = _serviceProxy.Create(contractTemplate); Console.Write("Template created, "); } #endregion #region Create Contract // Create a Contract from the Contract Template. Contract contract = new Contract() { Title = "Sample Contract", ContractTemplateId = new EntityReference { Id = _contractTemplateId, LogicalName = ContractTemplate.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, BillingCustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), BillingStartOn = new DateTime(2015, 1, 1), BillingEndOn = new DateTime(2020, 1, 1) }; _contractId = _serviceProxy.Create(contract); Console.Write("parent contract created, "); // Create a contract line item. ContractDetail contractLineItem = new ContractDetail() { Title = "Sample Contract Line Item", ContractId = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, CustomerId = new EntityReference { Id = _accountId, LogicalName = Account.EntityLogicalName }, ActiveOn = new DateTime(2015, 1, 1), ExpiresOn = new DateTime(2020, 1, 1), Price = new Money(20.0M), TotalAllotments = 20 }; _serviceProxy.Create(contractLineItem); Console.Write("contract line attached, "); #endregion #region Clone contract twice // Create the first clone of the contract. CloneContractRequest cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = false }; CloneContractResponse cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _firstCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; Console.Write("first clone created, "); // Create the second clone of the contract. cloneRequest = new CloneContractRequest() { ContractId = _contractId, IncludeCanceledLines = true }; cloneResponse = (CloneContractResponse)_serviceProxy.Execute(cloneRequest); _secondCloneId = ((Contract)cloneResponse.Entity).ContractId.Value; Console.Write("second clone created. \n"); // Retrieve all Contracts. QueryExpression contractQuery = new QueryExpression() { EntityName = Contract.EntityLogicalName, ColumnSet = new ColumnSet("contractid"), Criteria = { Conditions = { new ConditionExpression("customerid", ConditionOperator.Equal, _accountId) } } }; EntityCollection contracts = _serviceProxy.RetrieveMultiple(contractQuery); // Display the retrieved Contract Ids. for (int i = 0; i < contracts.Entities.Count; i++) { Console.WriteLine("Retrieved contract with Id: {0}", ((Contract)contracts.Entities[i]).ContractId); } #endregion #region Deactivate a cloned contract // In order to deactivate a contract (put it on hold), it is first // necessary to invoice the contract. SetStateRequest setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(2) }; _serviceProxy.Execute(setStateRequest); Console.Write("Contract invoiced, "); // Now that the contract has been invoiced, it is possible to put // the contract on hold. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _firstCloneId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.OnHold), Status = new OptionSetValue(4) }; _serviceProxy.Execute(setStateRequest); Console.Write("and put on hold.\n"); #endregion #region Renew an invoiced contract // In order to renew a contract, it must be invoiced first, and // then canceled. // Invoice the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Invoiced), Status = new OptionSetValue(3) }; _serviceProxy.Execute(setStateRequest); Console.Write("Contract invoiced, "); // Cancel the contract. setStateRequest = new SetStateRequest() { EntityMoniker = new EntityReference { Id = _contractId, LogicalName = Contract.EntityLogicalName }, State = new OptionSetValue((int)ContractState.Canceled), Status = new OptionSetValue(5) }; _serviceProxy.Execute(setStateRequest); Console.Write("canceled, "); // Renew the canceled contract. RenewContractRequest renewRequest = new RenewContractRequest() { ContractId = _contractId, IncludeCanceledLines = true, Status = 1 }; RenewContractResponse renewResponse = (RenewContractResponse)_serviceProxy.Execute(renewRequest); // Retrieve Id of renewed contract. _renewedId = ((Contract)renewResponse.Entity).ContractId.Value; // Display the Id of the renewed contract. Console.WriteLine("and renewed."); #endregion #endregion Demonstrate } else { const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Common Data Service"; if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR)) { Console.WriteLine("Check the connection string values in cds/App.config."); throw new Exception(service.LastCrmError); } else { throw service.LastCrmException; } } } catch (Exception ex) { SampleHelpers.HandleException(ex); } finally { if (service != null) { service.Dispose(); } Console.WriteLine("Press <Enter> to exit."); Console.ReadLine(); } }