Rev 4988 | Rev 5506 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'=====================================================' Jira Issues Enquiry' Designed to be called via AJAX and to return' JSON formatted data to dynamic page'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><!--#include file="common/formating.asp"--><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT><%'------------ Variable Definition -------------Dim parOprDim parPv_idDim resultDim iJSON,jJSON, el, this, post, newitemDim allIssues' Basic ParametersparOpr = QStrPar("Opr")parPv_id = QStrPar("pv_id")result = -1post = "None"' Init the output JSON class' Operations can add data' Default data will be added at the endDim oJSONSet oJSON = New aspJSON'' getIssues - Get issues for the current PV_ID and create a hash'Sub getIssuesSet allIssues = CreateObject ("Scripting.Dictionary")Dim rsTemp, sqlstr, keysqlstr = "SELECT iss_key FROM JIRA_ISSUES WHERE pv_id="& parPv_idSet rsTemp = OraDatabase.DbCreateDynaset( sqlstr, cint(0))While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))key = rsTemp("iss_key")If NOT allIssues.Exists(key) ThenallIssues.add key, 1End IfrsTemp.MoveNextWEndrsTemp.Close()Set rsTemp = nothingEnd Sub'' Determine the operation to be performed'If (parOpr = "getAllKeys") Then' Examine the Jira subsystem and determine ALL available project keys' Return an HTML string that is a <select></select> box' This is designed to be inserted into an element'result = 0'Dim objXML, qryqry = "/rest/api/2/project"Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")objXML.Open "GET", Application("JIRA_URL") & qry, falseobjXML.setRequestHeader "Authorization", "Basic " & Base64Encode(Application("JIRA_CREDENTIALS"))On Error Resume NextobjXML.Send("")if Err.Number <> 0 thenresult = 1oJSON.data("emsgSummary") = Err.DescriptionOn Error Goto 0elseOn Error Goto 0If objXML.status = 403 thenresult = 1oJSON.data("emsgSummary") = "Jira Server Access Denied"ElseIf objXML.status <> 200 thenresult = 1oJSON.data("emsgSummary") = objXML.responseTextElseSet jJSON = New aspJSONjJSON.loadJSON( objXML.responseText )oJSON.data("keyListCount") = jJSON.data.CountDim strstr = "<select id='keyListSelect'>"For Each el In jJSON.dataSet this = jJSON.data.item(el)str = str & "<option value='"&this.item("key")&"'>" &_this.item("key") & ":" & this.item("name") &_"</option>"Nextstr = str & "</select>"end ifend ifoJSON.data("keyList") = str'' getIssuesElseIf (parOpr = "getIssues") ThenDim project, projectList, issues, issueList, query, order, parCount, parStartAtgetIssues()project = QStrPar("Project")issues = QStrPar("Issue")parStartAt = QStrPar("StartAt")parCount = QStrPar("Count")qry = "/rest/api/2/search"order = " ORDER BY key DESC"projectList = ""If project = "ALL" ThenprojectList = ""ElseprojectList = "project=" & projectEnd If' Convert comma or space seperated list into and 'IN' queryissueList = ""Dim aList, entry, delIf issues <> "ALL" AND issues <> "" AND project <> "ALL" ThenissueList = issueList & " AND key in ("del = ""issues = Replace(issues ," ",",",1,-1)aList = Split(issues, ",")For Each entry in aListIf entry <> "" ThenissueList = issueList & del & project & "-" & entrydel = ","End IfNextissueList = issueList & ")"End If' Create the JSON input via code' Can do it as a string, as thats all we wantset iJSON = New aspJSONWith iJSON.data.Add "jql", projectList & issueList & order.Add "validateQuery", "false".Add "startAt", CStr(parStartAt).Add "maxResults", CStr(parCount).Add "fields", iJSON.Collection()With .item("fields").Add 0, "key".Add 1, "summary".Add 2, "status".Add 3, "priority".Add 4, "issuetype"End WithEnd Withpost = iJSON.JSONoutput()Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")objXML.Open "POST", Application("JIRA_URL") & qry , falseobjXML.setRequestHeader "Authorization", "Basic " & Base64Encode(Application("JIRA_CREDENTIALS"))objXML.setRequestHeader "Content-Type", "application/json"On Error Resume NextobjXML.Send(post)if Err.Number <> 0 thenresult = 1oJSON.data("emsgSummary") = Err.DescriptionOn Error Goto 0elseOn Error Goto 0If objXML.status = 400 thenresult = 1Set jJSON = New aspJSONjJSON.loadJSON( objXML.responseText )oJSON.data("emsgSummary") = jJSON.data("errorMessages").item(0)ElseIf objXML.status = 403 thenresult = 1oJSON.data("emsgSummary") = "Jira Server Access Denied"ElseIf objXML.status <> 200 thenresult = 1oJSON.data("emsgSummary") = objXML.responseTextElseSet jJSON = New aspJSONjJSON.loadJSON( objXML.responseText )' Response.Write "<br>Pretty JSON display<pre>"' Response.Write jJSON.JSONoutput()' Response.Write "</pre>"'oJSON.data("issueCount") = jJSON.data("total")oJSON.data("startAt") = jJSON.data("startAt")oJSON.data("maxResults") = jJSON.data("maxResults")Set oJSON.data("issues") = oJSON.Collection()' Select the fields to be returnedDim fields'On Error Resume NextFor Each el In jJSON.data("issues")Set this = jJSON.data("issues").item(el)Set fields = this.item("fields")Set newitem = oJSON.AddToCollection(oJSON.data("issues"))newitem.add "key",this.item("key")newitem.add "url",Application("JIRA_URL") & "/browse/" & this.item("key")newitem.add "statusIcon",fields.item("status").item("iconUrl")newitem.add "status",fields.item("status").item("name")newitem.add "issuetypeIcon",fields.item("issuetype").item("iconUrl")newitem.add "issuetype",fields.item("issuetype").item("name")newitem.add "priorityIcon",fields.item("priority").item("iconUrl")newitem.add "priority",fields.item("priority").item("name")newitem.add "summary",fields.item("summary")If allIssues.Exists(this.item("key")) Thennewitem.add "inuse",1End IfNextresult = 0end ifend if'' insertIssues' Insert Issues into the Release Manager entry'ElseIf (parOpr = "insertIssues") Thenissues = QStrPar("Issue")If parPv_id = "" OR issues = "" Thenresult = 1oJSON.data("emsgSummary") = "Action called with invalid arguments." & parPv_id & issuesElseDim SqlQry, issArr , iss_id, rsQryissArr = Split ( issues, ",")objEH.ErrorRedirect = FALSEobjEH.TryORA ( OraSession )On Error Resume Next' Import issues if they do not already existFor Each iss_id In issArrIf Err.Number = 0 ThenSqlQry = "SELECT * FROM JIRA_ISSUES WHERE pv_id=" & parPv_id & " AND iss_key='"& LTrim(iss_id) & "'"Set rsQry = OraDatabase.DbCreateDynaset( SqlQry, ORADYN_DEFAULT )OraDatabase.ExecuteSQL SqlQryIf ((rsQry.BOF) OR (rsQry.EOF)) ThenSqlQry = " INSERT INTO JIRA_ISSUES ( pv_id, iss_key, date_time_stamp )" &_" VALUES ( " & parPv_id & ", '"& LTrim(iss_id) &"', "& ORA_SYSDATETIME &")"OraDatabase.ExecuteSQL SqlQryIf Err.Number = 0 ThenSqlQry = "BEGIN Log_Action ( "& parPv_id &", 'jira_issue_added', "& objAccessControl.UserId &", 'Issue number: "& LTrim(iss_id) &"' ); END;"OraDatabase.ExecuteSQL SqlQryEnd IfSet rsQry = nothingEnd IfEnd IfNext' SQL error detection and reportingobjEH.CatchORA ( OraSession )If objEH.LastOraFailed Thenresult = 2oJSON.data("error") = 1oJSON.data("emsgSummary") = objEH.MessageSummaryoJSON.data("emsgDetails") = objEH.MessageDetailsoJSON.data("SqlQry") = SqlQryElseresult = 0End IfEnd IfElseoJSON.data("emsgSummary") = "Unknown operation requested:" & parOprEnd If'' Create JSON data for the user' Important fields' result'' Debug fields' Request (Array)''Write single valueoJSON.data("result") = result' DEBUG: An array of the user provided requestsoJSON.data("JiraPost") = postSet oJSON.data("Request") = oJSON.Collection()Set newitem = oJSON.AddToCollection(oJSON.data("Request"))Dim variableNamefor each variableName in Request.QueryStringnewitem.add variableName, Request.QueryString(variableName)next'Return the objectResponse.Write oJSON.JSONoutput()%>