/// <summary>
        /// Create a <c>Campaign</c>.
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="code">Code.
        /// If you don't provide this data, MS CRM gives an automated number
        /// </param>
        /// <param name="typeCode"><see cref="CampaignTypeCode"/></param>
        /// <param name="description"></param>
        /// <param name="transactioncurrencyId"></param>
        /// <param name="actualStart">Actual Start date</param>
        /// <param name="actualEnd">Actual End date</param>
        /// <param name="proposedStart">Propesed Start date</param>
        /// <param name="proposedEnd">Proposed End date</param>
        /// <param name="status"><see cref="CampaignActiveStatusCode"/> 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>
        /// Created record Id (<see cref="Guid"/>)
        /// </returns>
        public Guid Create(string name, string code, CampaignTypeCode typeCode, string description, Guid transactioncurrencyId, DateTime?actualStart, DateTime?actualEnd, DateTime?proposedStart, DateTime?proposedEnd, CampaignActiveStatusCode status, int customStatusCode = 0)
        {
            ExceptionThrow.IfNullOrEmpty(name, "name");
            ExceptionThrow.IfGuidEmpty(transactioncurrencyId, "transactioncurrencyId");

            int statusCode = (int)status;

            if (status == CampaignActiveStatusCode.CustomStatusCode)
            {
                ExceptionThrow.IfNegative(customStatusCode, "customStatusCode");
                statusCode = customStatusCode;
            }

            Entity entity = new Entity(this.EntityName);

            entity["name"]     = name;
            entity["typecode"] = new OptionSetValue((int)typeCode);
            entity["transactioncurrencyid"] = new EntityReference("transactioncurrency", transactioncurrencyId);
            entity["istemplate"]            = false;
            entity["description"]           = description;
            entity["statuscode"]            = new OptionSetValue(statusCode);

            if (!string.IsNullOrEmpty(code))
            {
                entity["codename"] = code;
            }

            if (actualStart.HasValue && actualStart.Value != DateTime.MinValue)
            {
                entity["actualstart"] = actualStart.Value;
            }

            if (actualEnd.HasValue && actualEnd.Value != DateTime.MinValue)
            {
                entity["actualend"] = actualEnd.Value;
            }

            if (proposedStart.HasValue && proposedStart.Value != DateTime.MinValue)
            {
                entity["proposedstart"] = proposedStart.Value;
            }

            if (proposedEnd.HasValue && proposedEnd.Value != DateTime.MinValue)
            {
                entity["proposedend"] = proposedEnd.Value;
            }

            return(this.OrganizationService.Create(entity));
        }
 /// <summary>
 /// Create a <c>Campaign</c>.
 /// </summary>
 /// <param name="name">Name</param>
 /// <param name="code">Code.
 /// If you don't provide this data, MS CRM gives an automated number
 /// </param>
 /// <param name="typeCode"><see cref="CampaignTypeCode"/></param>
 /// <param name="description"></param>
 /// <param name="transactioncurrencyId"></param>
 /// <param name="actualStart">Actual Start date</param>
 /// <param name="actualEnd">Actual End date</param>
 /// <param name="statusCode"><see cref="CampaignActiveStatusCode"/> 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>
 /// Created record Id (<see cref="Guid"/>)
 /// </returns>
 public Guid Create(string name, string code, CampaignTypeCode typeCode, string description, Guid transactioncurrencyId, DateTime actualStart, DateTime actualEnd, CampaignActiveStatusCode statusCode, int customStatusCode = 0)
 {
     return(Create(name, code, typeCode, description, transactioncurrencyId, actualStart, actualEnd, null, null, statusCode, customStatusCode));
 }