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; } }
/// <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(); } }
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); }
public void ConstructorWithParamsTest() { var item = new DetailCriteria(1); Assert.AreEqual(1, item.Id); }
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(); }
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; }
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(); } }
/// <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(); } }
/// <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(); } }