/// <summary> /// Update an ALM item /// </summary> /// <param name="id">Id of the item</param> /// <param name="changes">An item containing all the fields to change</param> public bool UpdateDefect(string id, ALMItem changes) { var req = new RestRequest(clientConfig.LockEntityAddress); AddDomainAndProject(req); AddDefectAndId(id, req); IRestResponse response = null; try { response = Execute(req, "update defect -> lock item"); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Created) { if (Update(id, changes) == false && HideCustomExceptions == false) { // Todo: Determine what exception should be thrown } } } finally { // then delete the lock req.Method = Method.DELETE; response = Execute(req, "update defect -> unlock item"); } // Delete lock was successful return(response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted || response.StatusCode == HttpStatusCode.NoContent); }
/// <summary> /// Get the list of defects /// </summary> /// <param name="items">Defects result</param> private void ReadDefects(List <ALMItem> items) { int startIndex = 0; int pageSize = 100; int total = 0; do { RestRequest getDefects = new RestRequest(clientConfig.EntitiesAddress); AddDomainAndProject(getDefects); AddDefect(getDefects); getDefects.AddHeader("Accept", "application/xml"); getDefects.AddParameter("page-size", pageSize); // start index appears to be 1-based, despite the documentation on https://MYDOMAIN.saas.hp.com/qcbin/Help/doc_library/api_refs/REST/webframe.html getDefects.AddParameter("start-index", startIndex + 1); IRestResponse response = Execute(getDefects, "get defects"); XDocument doc = XDocument.Parse(response.Content); total = FindTotal(doc); foreach (var entity in doc.Root.Elements()) { items.Add(ALMItem.FromXML(entity.Elements("Fields").Elements())); } // time for the next page startIndex += pageSize; } while (startIndex < total); }
private void Update(string id, ALMItem changes) { var req = new RestRequest("/rest/domains/{domain}/projects/{project}/{Entity Type}/{Entity ID}"); AddDomainAndProject(req); AddDefectAndId(id, req); req.Method = Method.PUT; req.AddHeader("Content-Type", "application/xml"); req.AddHeader("Accept", "application/xml"); req.AddParameter("application/xml", ConvertToFieldXml(changes.Fields), ParameterType.RequestBody); var response = Execute(req, "update"); }
/// <summary> /// Update the item /// </summary> /// <param name="id">The item id to be updated</param> /// <param name="changes">The modified item to be updated</param> private bool Update(string id, ALMItem changes) { var req = new RestRequest(clientConfig.EntityAddress); AddDomainAndProject(req); AddDefectAndId(id, req); req.Method = Method.PUT; req.AddHeader("Content-Type", "application/xml"); req.AddHeader("Accept", "application/xml"); req.AddParameter("application/xml", ConvertToFieldXml(changes.Fields), ParameterType.RequestBody); var response = Execute(req, "update"); return(response.StatusCode == HttpStatusCode.OK); }
/// <summary> /// Update an ALM item /// </summary> /// <param name="id">Id of the item</param> /// <param name="changes">An item containing all the fields to change</param> public void UpdateDefect(string id, ALMItem changes) { var req = new RestRequest("/rest/domains/{domain}/projects/{project}/{Entity Type}/{Entity ID}/lock"); AddDomainAndProject(req); AddDefectAndId(id, req); IRestResponse response = Execute(req, "update defect -> lock item"); try { Update(id, changes); } finally { // then delete the lock req.Method = Method.DELETE; response = Execute(req, "update defect -> unlock item"); } }
/// <summary> /// Construct the item from the XML payload - factory method /// </summary> /// <returns>new ALM Item</returns> public static ALMItem FromXML(IEnumerable <XElement> fields) { ALMItem item = new ALMItem(); foreach (var field in fields) { var name = field.Attribute("Name").Value; var valueElement = field.Element("Value"); if (valueElement == null) { // skip ones with no values continue; } var value = valueElement.Value; item.Fields.Add(name, value); } return(item); }
/// <summary> /// Update the item /// </summary> /// <param name="id">The item id to be updated</param> /// <param name="changes">The modified item to be updated</param> private bool Update(string id, ALMItem changes) { var req = new RestRequest(clientConfig.EntityAddress); AddDomainAndProject(req); AddDefectAndId(id, req); req.Method = Method.PUT; req.AddHeader("Content-Type", "application/xml"); req.AddHeader("Accept", "application/xml"); req.AddParameter("application/xml", ConvertToFieldXml(changes.Fields), ParameterType.RequestBody); var response = Execute(req, "update"); return response.StatusCode == HttpStatusCode.OK; }
/// <summary> /// Update an ALM item /// </summary> /// <param name="id">Id of the item</param> /// <param name="changes">An item containing all the fields to change</param> public bool UpdateDefect(string id, ALMItem changes) { var req = new RestRequest(clientConfig.LockEntityAddress); AddDomainAndProject(req); AddDefectAndId(id, req); IRestResponse response = null; try { response = Execute(req, "update defect -> lock item"); if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Created) { if (Update(id, changes) == false && HideCustomExceptions == false) { // Todo: Determine what exception should be thrown } } } finally { // then delete the lock req.Method = Method.DELETE; response = Execute(req, "update defect -> unlock item"); } // Delete lock was successful return response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted || response.StatusCode == HttpStatusCode.NoContent; }
/// <summary> /// Construct the item from the XML payload - factory method /// </summary> /// <returns>new ALM Item</returns> public static ALMItem FromXML(IEnumerable<XElement> fields) { ALMItem item = new ALMItem(); foreach (var field in fields) { var name = field.Attribute("Name").Value; var valueElement = field.Element("Value"); if (valueElement == null) { // skip ones with no values continue; } var value = valueElement.Value; item.Fields.Add(name, value); } return item; }