コード例 #1
0
        /// <summary>
        /// Method executed when parent <see cref="Coordinator"/> enters the <c>ValidateTransaction</c> phase.
        /// </summary>
        /// <param name="businessObject">Optional parameter.</param>
        public override void OnValidateTransaction(IBusinessObject businessObject)
        {
            var presentGroupsId = from node in ((Configuration)this.businessObject.AlternateVersion).Value.Descendants()
                                  where node.Name.LocalName == "group" && node.Attribute("id") != null && node.Attribute("id").Value.Length != 0
                                  select node.Attribute("id").Value;

            var modifiedGroupsId = from node in this.businessObject.Value.Descendants()
                                   where node.Name.LocalName == "group" && node.Attribute("id") != null && node.Attribute("id").Value.Length != 0
                                   select node.Attribute("id").Value;

            var deletedGroupsId = from grpId in presentGroupsId
                                  where modifiedGroupsId.Contains(grpId) == false
                                  select grpId;

            Configuration conf = (Configuration)businessObject;

            if (conf.Key == "contractors.group")
            {
                ContractorMapper mapper = DependencyContainerManager.Container.Get <ContractorMapper>();

                //check if any group that contains attached contractors has been deleted
                foreach (string group in deletedGroupsId)
                {
                    int count = mapper.GetContractorGroupMembershipsCount(new Guid(group));

                    if (count > 0)
                    {
                        throw new ClientException(ClientExceptionId.ContractorsGroupDeleteException, null, "count:" + count.ToString(CultureInfo.InvariantCulture));
                    }
                }
            }
            else if (conf.Key == "items.group")
            {
                ItemMapper mapper = DependencyContainerManager.Container.Get <ItemMapper>();

                //check if any group that contains attached contractors has been deleted
                foreach (string group in deletedGroupsId)
                {
                    int count = mapper.GetItemGroupMembershipsCount(new Guid(group));

                    if (count > 0)
                    {
                        throw new ClientException(ClientExceptionId.ItemsGroupDeleteException, null, "count:" + count.ToString(CultureInfo.InvariantCulture));
                    }
                }
            }
        }