public void UpdateStatusFromExternalId_IssueNotExisting() { string externalSystemName = Enviornment.instance.GetVersionOneSource; string externalFieldName = Enviornment.instance.GetVersionOneReference; string externalId = "NOT-EXISTING-ISSUE"; string statusId = "StoryStatus:133"; UpdateResult result = new UpdateResult(); bool success = v1processor.UpdateWorkitem(externalFieldName, externalId, externalSystemName, statusId, result); Assert.IsFalse(success); Assert.IsTrue(result.isDefault()); Assert.IsTrue(result.modificationTime == DateTime.MinValue); Assert.IsTrue(string.IsNullOrEmpty(result.number)); }
public bool isNewer( UpdateResult newer ) { if (newer.modificationTime > this.modificationTime) return true; return false; }
public bool UpdateWorkitem(string externalFieldName, string externalId, string externalSystemName, string statusId, UpdateResult result) { var defectType = metaModel.GetAssetType(PrimaryWorkitemType); IAttributeDefinition externalFieldAttribute = defectType.GetAttributeDefinition(externalFieldName); IAttributeDefinition statusAttribute = defectType.GetAttributeDefinition(Entity.StatusProperty); IAttributeDefinition modificationTimeAttrubute = defectType.GetAttributeDefinition(Entity.ChangeDateUtcProperty); IAttributeDefinition numberAttribute = defectType.GetAttributeDefinition(PrimaryWorkitem.NumberProperty); var filters = new List<IFilter> { Filter.Closed(false), Filter.OfTypes(VersionOneProcessor.StoryType, VersionOneProcessor.DefectType), Filter.Equal(Entity.SourceNameProperty, externalSystemName), Filter.Equal(externalFieldName, externalId), }; var filter = GroupFilter.And(filters.ToArray()); var filterTerms = filter.GetFilter(defectType); var query = new Query(defectType) { Filter = filterTerms }; query.Selection.Add(statusAttribute); query.Selection.Add(externalFieldAttribute); query.Selection.Add(modificationTimeAttrubute); query.Selection.Add(numberAttribute); try { var queryResult = services.Retrieve(query); if (queryResult.Assets.Count <= 0) { logger.Log(LogMessage.SeverityType.Error, string.Format("Failed to update {0} - issue not found", externalId )); return false; } var workitem = queryResult.Assets.First(); string existingStatusId = workitem.GetAttribute(statusAttribute).Value.ToString(); if (existingStatusId.Equals(statusId) == false) { logger.Log(LogMessage.SeverityType.Debug, string.Format("Updating issue {0} with modification time: {1}", externalId, workitem.GetAttribute(modificationTimeAttrubute).Value)); workitem.SetAttributeValue(statusAttribute, statusId); services.Save(workitem); result.number = workitem.GetAttribute(numberAttribute).Value.ToString(); result.modificationTime = (DateTime)workitem.GetAttribute(modificationTimeAttrubute).Value; return true; } else { logger.Log(LogMessage.SeverityType.Debug, string.Format("Skipping update of {0} in VersionOne since status is already set to {1}", externalId, statusId)); } } catch (V1Exception ex) { logger.Log(LogMessage.SeverityType.Error, string.Format(GetMessageFromException(ex))); } catch (Exception ex) { logger.Log(LogMessage.SeverityType.Error, "Internal error: " + ex.Message); } return false; }
private void SynchronizeItemsToVersionOne(List<Workitem> readyForSynachronizationToVersionOne) { if (readyForSynachronizationToVersionOne.Count <= 0) { logger.Log(LogMessage.SeverityType.Info, string.Format("Skipping VersionOne update - nothing to synchronize")); return; } UpdateResult theNewestUpdate = new UpdateResult(DateTime.MinValue, string.Empty); logger.Log(LogMessage.SeverityType.Info, string.Format("There are {0} items to update in VersionOne.", readyForSynachronizationToVersionOne.Count)); foreach (var item in readyForSynachronizationToVersionOne) { var result = workitemWriter.UpdateWorkitem(item); if (result != null && result.isDefault() == false && result.isNewer(theNewestUpdate) == true) { theNewestUpdate = result; } } if (theNewestUpdate.modificationTime > lastValidSynchronisationProfile.LastCheckForSynchronizedWorkitems) { lastValidSynchronisationProfile.LastCheckForSynchronizedWorkitems = theNewestUpdate.modificationTime; lastValidSynchronisationProfile.LastClosedWorkitemId = theNewestUpdate.number; logger.Log(LogMessage.SeverityType.Debug, string.Format("Updating last synchronization time to {0} on item {1}.", lastValidSynchronisationProfile.LastCheckForClosedWorkitems, lastValidSynchronisationProfile.LastClosedWorkitemId)); } }
public UpdateResult UpdateWorkitem(Workitem item) { if (item == null) return null; if(statusMapping == null) statusMapping = v1Processor.GetAvailableStatuses(); try { string externalId = item.ExternalId; string externalSystemName = item.ExternalSystemName; string statusId = ResolveStatusIdFromName(item.Status); UpdateResult result = new UpdateResult(); v1Processor.UpdateWorkitem(externalFieldName, externalId, externalSystemName, statusId, result); return result; }catch (Exception ex) { logger.Log(LogMessage.SeverityType.Error, string.Format("Faild to update item in versionOne, reason: \"{0}\"", ex.Message)); } return null; }