private void UpdateChild(IDataContext dataContext, int itemId)
        {
            if (HasNonKeyChildren)
            {
                var criteria = new DetailCriteria(itemId) { AllowLazyLoading = true };
                var item = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ReferencedProcessName, criteria);

                if (item != null && item.Id == itemId)
                {
                    UpdateFields(dataContext, item);

                    ((ISavable)item).Save();
                }
            }
        }
        private IEnumerable<IDynamicObject> GetSingleReverseCrossReferenceItems(IDynamicObject item)
        {
            var rcrItem = (IReverseCrossReferenceItem)item.GetValueByPropertyName(Property.Name);

            if (rcrItem == null)
                return Enumerable.Empty<IDynamicObject>();

            var criteria = new DetailCriteria(rcrItem.Id) { AllowLazyLoading = true };
            var editableRoot = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ElementProcessName, criteria);

            if (editableRoot == null || editableRoot.Id <= 0)
                return Enumerable.Empty<IDynamicObject>();

            return Enumerable.Repeat(editableRoot, 1);
        }
        private IEnumerable<IDynamicObject> GetMultiReverseCrossReferenceItems(IDynamicObject item)
        {
            var rcrItems = (ICollection)item.GetValueByPropertyName(Property.Name);

            if (rcrItems == null)
                return Enumerable.Empty<IDynamicObject>();

            var result = new List<IDynamicObject>();

            foreach (IReverseCrossReferenceItem rcrItem in rcrItems)
            {
                var criteria = new DetailCriteria(rcrItem.Id) { AllowLazyLoading = true };
                var editableItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ElementProcessName, criteria);

                if (editableItem != null && editableItem.Id > 0)
                    result.Add(editableItem);
            }

            return result;
        }
        /// <summary>
        /// Loads editable root items.
        /// </summary>
        /// <param name="processName">The process system name.</param>
        /// <param name="ids">The item ids.</param>
        /// <returns>Returns a collection of editable root items.</returns>
        private List<IEditableRoot> GetItems(string processName, IEnumerable<int> ids)
        {
            var result = new List<IEditableRoot>();

            foreach (var id in ids)
            {
                var criteria = new DetailCriteria(id) { AllowLazyLoading = true };
                var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(processName, criteria);

                if (editItem != null && editItem.Id > 0)
                    result.Add(editItem);
            }

            return result;
        }
 /// <summary>Iterates the items.</summary>
 /// <param name="processName">Name of the process.</param>
 /// <param name="ids">The collection of ids.</param>
 /// <returns>The collection of <see cref="IEditableRoot"/>.</returns>
 private IEnumerable<IEditableRoot> IterateItems(string processName, IReadOnlyList<int> ids)
 {
     for (var i = ids.Count - 1; i >= 0; i--)
     {
         var criteria = new DetailCriteria(ids[i]) { AllowLazyLoading = true };
         var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(processName, criteria);
         if (editItem != null && editItem.Id > 0)
             yield return editItem;
     }
 }
Exemplo n.º 6
0
        /// <summary>
        /// Executes the update.
        /// </summary>
        /// <param name="job">The job.</param>
        /// <param name="itemId">The item identifier.</param>
        /// <param name="fieldUpdaters">The field updaters.</param>
        /// <param name="dynamicItem">The dynamic item.</param>
        /// <param name="context">The context.</param>
        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
        private bool ExecuteUpdate(
            IProcessSynchronizer job,
            int itemId,
            IEnumerable<IFieldUpdater> fieldUpdaters,
            ISyncDynamicItem dynamicItem,
            SynchronizationContext context)
        {
            try
            {
                var criteria = new DetailCriteria(itemId) { AllowLazyLoading = true };
                var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(job.ProcessName, criteria);

                if (editItem == null || editItem.Id != itemId)
                {
                    context.AddError(string.Format(CultureInfo.InvariantCulture, "Failed to load item with Id = {0}.", itemId));
                    return false;
                }

                foreach (var fieldUpdater in fieldUpdaters)
                {
                    fieldUpdater.Update(dynamicItem, editItem);

                    if (fieldUpdater.IsKey)
                    {
                        editItem.KeyFields.Add(fieldUpdater.FieldName);
                    }
                }

                if (!((ITrackStatus)editItem).IsValid)
                {
                    AddValidationErrors(editItem, context);
                    return false;
                }

                ((ISavable)editItem).Save();

                return true;
            }
            catch (Exception ex)
            {
                context.AddException(ex);
            }

            return false;
        }
        /// <summary>
        /// Links items to destination field.
        /// </summary>
        /// <param name="source">
        /// The source item.
        /// </param>
        /// <param name="destination">
        /// The destination item.
        /// </param>
        private void ExecuteLink(IEditableRoot source, IEditableRoot destination)
        {
            var crList = (ICrossRefItemList)destination.GetValueByPropertyName(Property.Name);
            if (crList == null)
            {
                throw new InvalidOperationException("Destination field is null.");
            }

            var filterList = new FilterList();
            if (crList.Count > 0)
            {
                // Exclude items that are already linked.
                filterList.Add(CreateLinkedItemsFilter(FilterOperator.NotIn, crList.Cast<ICrossRefItemInfo>().Select(x => x.Id)));
            }

            if (!string.IsNullOrEmpty(SourceDataFilterDefinition))
            {
                filterList.Add(CreateSourceDataFilter(source));
            }

            foreach (var infoItem in GetSourceItems(filterList))
            {
                var ancestor = infoItem.GetAncestorByProcessName(ReferencedProcessName);
                if (ancestor == null || crList.Contains(ancestor.Id))
                    continue;

                crList.Assign(ancestor.Id);

                if (FieldUpdaters.Count == 0)
                    continue;

                var criteria = new DetailCriteria(infoItem.Id) { AllowLazyLoading = true };
                var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(SourceDataProcessName, criteria);
                if (editItem == null || editItem.Id <= 0)
                    continue;

                var sourceData = new DataTriggerSourceData();
                sourceData.SourceItems[DataTriggerFieldMappingExpressionNames.SourceDataProcess] = editItem;

                UpdateFieldValues(sourceData, editItem);

                ((ISavable)editItem).Save();
            }
        }
Exemplo n.º 8
0
        private IList DoRemove(IDataContext dataContext)
        {
            var itemIds = FindItems(dataContext, true);
            var result = new List<object>();

            foreach (var itemId in itemIds)
            {
                var criteria = new DetailCriteria(itemId) { AllowLazyLoading = true };
                var item = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ProcessName, criteria);

                if (item == null || item.Id != itemId)
                    continue;

                if (ResultCalculator != null)
                {
                    var resultDataContext = EditableRootDataContextFactory.CreateDataContext(item);
                    result.Add(ResultCalculator.GetValue(resultDataContext));
                }

                ((IEditableBusinessObject)item).Delete();
                ((ISavable)item).Save();
            }

            return ResultCalculator != null ? result : null;
        }
        private IEnumerable<IDynamicObject> GetSingleCrossReferenceItems(IDynamicObject item)
        {
            var crId = (int?)item.GetValueByPropertyName(Property.Name);

            if (!crId.HasValue)
                return Enumerable.Empty<IDynamicObject>();

            var criteria = new DetailCriteria(crId.Value) { AllowLazyLoading = true };
            var crItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ElementProcessName, criteria);

            if (crItem == null || crItem.Id <= 0)
                return Enumerable.Empty<IDynamicObject>();

            return Enumerable.Repeat(crItem, 1);
        }
Exemplo n.º 10
0
        public void ConstructorWithParamsTest()
        {
            var item = new DetailCriteria(1);

            Assert.AreEqual(1, item.Id);
        }
Exemplo n.º 11
0
        private IList DoUpdate(IDataContext dataContext, IEnumerable<int> itemIds)
        {
            var result = new List<object>();

            foreach (var itemId in itemIds)
            {
                var criteria = new DetailCriteria(itemId) { AllowLazyLoading = true };
                var item = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ProcessName, criteria);

                if (item == null || item.Id != itemId)
                    continue;

                UpdateFieldValues(dataContext, item);
                item = (IEditableRoot)((ISavable)item).Save();

                if (ResultCalculator != null)
                {
                    var resultDataContext = EditableRootDataContextFactory.CreateDataContext(item);
                    result.Add(ResultCalculator.GetValue(resultDataContext));
                }
            }

            return ResultCalculator != null ? result : null;
        }
        private void ExecuteLink(IEditableRoot source, IEditableRoot destination)
        {
            var infoItem = GetSourceItem(CreateSourceDataFilter(source));
            if (infoItem == null)
                return;

            var ancestor = infoItem.GetAncestorByProcessName(ReferencedProcessName);
            if (ancestor == null)
                return;

            if (destination.GetValueByPropertyName(Property.Name) == ancestor.Id)
                return;

            destination.SetValueByPropertyName(Property.Name, ancestor.Id);

            if (FieldUpdaters.Count == 0)
                return;

            var criteria = new DetailCriteria(infoItem.Id) { AllowLazyLoading = true };
            var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(SourceDataProcessName, criteria);
            if (editItem == null || editItem.Id <= 0)
                return;

            var sourceData = new DataTriggerSourceData();
            sourceData.SourceItems[DataTriggerFieldMappingExpressionNames.SourceDataProcess] = editItem;

            UpdateFieldValues(sourceData, editItem);
            ((ISavable)editItem).Save();
        }
Exemplo n.º 13
0
            private IEditableRoot LoadEdit()
            {
                if (InfoItem == null)
                {
                    return null;
                }

                var criteria = new DetailCriteria(InfoItem.Id) { AllowLazyLoading = true, UpdateCalculatedFields = false };
                var editItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(ProcessName, criteria);

                if (editItem == null || editItem.Id != InfoItem.Id)
                {
                    throw new ItemNotFoundException();
                }

                return editItem;
            }
Exemplo n.º 14
0
        private void ExecuteStartVersion(IEditableRoot item)
        {
            foreach (var info in GetItemsToModify(item))
            {
                var criteria = new DetailCriteria(info.Id) { AllowLazyLoading = true };
                var destinationItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(DestinationProcess, criteria) as ISupportVersioning;
                if (destinationItem == null)
                    throw new InvalidOperationException(
                        string.Format(CultureInfo.InvariantCulture, "The process '{0}' does not support versioning.", DestinationProcess));

                destinationItem = destinationItem.StartNewVersion();

                UpdateFieldValues(item, destinationItem);
                UpdateListFieldValues(item, destinationItem);

                ((ISavable)destinationItem).Save();
            }
        }
Exemplo n.º 15
0
 /// <summary>
 /// Removes destination items based on trigger setup.
 /// </summary>
 /// <param name="item">The editable root item that invoked the data trigger.</param>
 private void ExecuteRemove(IEditableRoot item)
 {
     foreach (var info in GetItemsToModify(item))
     {
         var criteria = new DetailCriteria(info.Id) { AllowLazyLoading = true };
         var destinationItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(DestinationProcess, criteria);
         ((IEditableBusinessObject)destinationItem).Delete();
         ((ISavable)destinationItem).Save();
     }
 }
Exemplo n.º 16
0
        /// <summary>
        /// Updates destination items based on trigger setup.
        /// </summary>
        /// <param name="item">The editable root item that invoked the data trigger.</param>
        private void ExecuteUpdate(IEditableRoot item)
        {
            var itemsToModify = GetItemsToModify(item);
            foreach (var info in itemsToModify)
            {
                var criteria = new DetailCriteria(info.Id) { AllowLazyLoading = true };
                var destinationItem = DynamicTypeManager.GetEditableRoot<IEditableRoot>(DestinationProcess, criteria);

                UpdateFieldValues(item, destinationItem);
                UpdateListFieldValues(item, destinationItem);

                ((ISavable)destinationItem).Save();
            }
        }