Jira Connector
Documentation
Version: 11
Documentation

Jira Connector - Source Code


<?xml version="1.0" encoding="utf-8"?>
<ApiConfig Name="Jira" Slug="jira-connector" 
		   Version="11" 
		   EngineVersion="16" Id="288c083b-6edb-4705-851b-80ecd6357347"
           Desc="Jira Connector can be used to integrate Jira and your defined data source, e.g. Microsoft SQL, Oracle, Excel, Power BI, etc. Get, write, delete Issues, Users, Worklogs, Comments just in a few clicks!"
           Logo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJMAAACZCAYAAAArfghzAAAJk2lDQ1BERUxMIFVQMzIxNlEgQ29sb3IgUHJvZmlsZSwgRDY1MDAAAHicnZZ3UFTJFof73js5AMMMQ4YhDTnDMIDkOATJUVRwyJkhipgQcQUURUQElAURCQom4ioioBhYFBRQMQyyCCjr4iqigvJgfVXuq31Vr+r9qrrPV6dP1znd/UcfAAiWVrbWdrAQAHHxKTxPB2uGf0AgA/sCoAEdCAAmoIRwkxNdvey9waps7VxcwD/0cRRAa/aB5to6Cd+rNMdIeQdw+2xuhVUe+Gf8f4gQGpbMXbXLqyOHm8hLAQDatcrs9JTENW5fZRpvtahVHljjiO/MX+Mt3/nDXzHenjYAwDgAcKSIv/GWvzE3MiR0NSVtNV7j33nXpLZWN8PHXV9Pl+XBsEmITeAx3HkJ4VGxYRoMW5ahjs7/OMT/q5SwjJQ1a5OQuJUXFRGZwlDhqjL0dHQNGbZhsbEMTjxX67/tW3uj7/Tj7n/4TrMA8FktGdv1w6cVAEDFZQAodT98CvYACEgB0NHPTeWlffeh1iY0IABBQAPiQAYoABWgCfSAETAFlsAOOAE34A0CwCbABZEgDvBAOsgCu0EuyAeHwFFQBipBDagHTeAiaANXwHVwE9wF98EIGAd8MAXegHnwESxBEISFyBAVEodkISVIHdKD2JA5ZAe5QJ5QABQMRUDxUCqUBe2B8qEiqAyqguqhC1AHdB26DQ1Bj6EJaBb6E/oCIzAJpsHSMBPWhtmwFewMe8Mb4Qg4Cc6Ec+CDcClcDZ+FW+Hr8F14BObDb+AFBCBEhI7IIZoIG7FB3JBAJBzhITuQPKQEqUaakE6kH3mA8JE55DMKg6KiGChNlCnKEeWD4qKSUDtQBagyVB2qFdWHeoCaQM2jvqHJaCm0OtoEzUH7oyPQ6ehcdAm6Ft2CvoEeQU+hP2IwGDpGGWOEccQEYKIx2zAFmBOYZkw3ZggziVnAYrHiWHWsGdYNG4JNweZij2PPYq9hh7FT2E84Ik4Wp4ezxwXi4nHZuBJcA64LN4ybxi3hhfBKeBO8Gz4UvxVfiK/Bd+Lv4afwSwQKQZlgRvAmRBN2E0oJTYQbhKeE90QiUZ5oTPQgRhF3EUuJ54m3iBPEzyRhkhrJhhRESiUdJJ0hdZMek96TyWQm2ZIcSE4hHyTXk3vJz8mfBKgCWgIcgVCBnQLlAq0CwwJvBfGCSoJWgpsEMwVLBC8J3hOcE8ILMYVshEKEdgiVC3UIjQktUKgUXYobJY5SQGmg3KbMCGOFmcJ2wqHCOcKnhHuFJ6kIVYFqQ+VS91BrqDeoUzQMTZnGoUXT8mnnaIO0eRFhEQMRX5EMkXKRqyJ8OkJn0jn0WHoh/SJ9lP5FVFrUSjRMdL9ok+iw6KKYpJilWJhYnliz2IjYF3GGuJ14jPhh8TbxZxIoCTUJD4l0iZMSNyTmJGmSppJcyTzJi5JPpGApNSlPqW1Sp6QGpBakZaQdpBOlj0v3Ss/J0GUsZaJlimW6ZGZlqbLmslGyxbLXZF8zRBhWjFhGKaOPMS8nJecolypXJTcotySvLO8jny3fLP9MgaDAVghXKFboUZhXlFV0VcxSbFR8ooRXYitFKh1T6ldaZCoz/Zj7mG3MGWUxZY5ypnKj8lMVsoqFSpJKtcpDVYwqWzVG9YTqfTVYzVAtUq1c7Z46rM5Sj1I/oT6kgdYw1ojXqNYY0yRpWmmmaTZqTmjRtVy0srXatN5qK2oHah/W7tf+pmOoE6tTozOuK6zrpJut26n7p56aHlevXO+hPlnfXn+nfrv+OwN1gzCDkwaPDKmGrob7DHsMv7KMWDxWE2vWSNEo2KjCaIxNY7uzC9i3jNHG1sY7ja8YfzZhmaSYXDT5w1TTNMa0wXRmnfK6sHU16ybN5M1CzKrM+OYM82Dzn835FnIWIRbVFi8tFSxDLWstp61UraKtzlq9tdax5lm3WC/amNhst+m2RWwdbPNsB+2E7Xzsyuye28vbR9g32s87GDpsc+h2RDs6Ox52HONIc7ices68k5HTdqc+Z5Kzl3OZ80sXNReeS6cr7OrkesT16Xql9fHr29yAG8ftiNszd2X3JPdfPDAe7h7lHq88dT2zPPu9qF6bvRq8Pnpbexd6j/uo+KT69PgK+gb51vsu+tn6Ffnx/bX9t/vfDZAIiApoD8QG+gbWBi5ssNtwdMNUkGFQbtDoRuWNGRtvb5LYFLvp6mbBzSGbLwWjg/2CG4KXQ9xCqkMWtnC2VGyZ59pwj3HfhFqGFofOhpmFFYVNh5uFF4XPRJhFHImYjbSILImci7KJKot6F+0YXRm9GOMWcyZmJdYvtjkOFxcc1xEvHB8T35cgk5CRMJSonpibyE8ySTqaNM9z5tUmQ8kbk9tTaKsf40CqSure1Ik087TytE/pvumXMigZ8RkDW9W27t86nWmfeXobaht3W0+WXNburIntVturdkA7tuzo2amwM2fn1C6HXXW7Cbtjdv+arZNdlP1hj9+ezhzpnF05k3sd9jbmCuTycsf2me6r/An1U9RPg/v19x/f/y0vNO9Ovk5+Sf5yAbfgzgHdA6UHVg6GHxwsZBWePIQ5FH9o9LDF4boiSlFm0eQR1yOtxYzivOIPRzcfvV1iUFJ5jHAs9Ri/1KW0/bji8UPHl8siy0bKrcubK6Qq9lcsngg9MXzS8mRTpXRlfuWXn6N+flTlUNVazawuOYU5lXbqVY1vTf9p9un6Wona/NqvZ+LP8Os86/rqjerrG6QaChvhxtTG2bNBZ++fsz3X3qTZVNVMb84/D86nnn99IfjC6EXniz2X2JeaLitdrmihtuS1Qq1bW+fbItv47QHtQx1OHT2dpp0tv2j9cuaK3JXyqyJXC7sIXTldK9cyry10J3bPXY+4PtmzuWe817/3YZ9H3+AN5xu3btrf7O236r92y+zWldsmtzvusO+03WXdbR0wHGj51fDXlkHWYOs9o3vt943vdw6tG+oathi+/sD2wc2HnId3R9aPDI36jD4aCxrjPwp9NPM49vG7J2lPlsZ3PUU/zXsm9KzkudTz6heqL5r5LP7VCduJgZdeL8cnuZNvfkv+bXkq5xX5Vcm07HT9jN7MlVn72fuvN7yeepP4Zmku93fK7xVvVd5e/sPyj4F5//mpd7x3K38WvBd/f+aDwYeeBfeF5x/jPi4t5n0S/1T3mf25/4vfl+ml9GXsculX1a+d35y/PV2JW1lJDtfX+6sVgEi2q63Ai5WV98zVXqIYgK+FKytLVSsrX6sBQMYB6E79F4bKmf4rzD3rAAAACXBIWXMAABYlAAAWJQFJUiTwAAANFUlEQVR4nO3d23MT1x3A8WNbF+tqS/IVGwwx0MlMZ/rUJ17yH/Sxj4FCp02bBpIwoSkQmVsbWpqQ0KRpRxp47WPf+gf0qU/pS2YaBDZgW8YXyZZ1tWyp+xM6Qlrvrnals7vnnD3fGWMdWdi70meOVitp5arX60ik3dErucsv7obv2b0ctOeyewFoL/rO8n9i09M//sEd9MP/XUVn7V4emhOYNAqdf/rd1Nzcm4NDQzB8WwKFBCj1BCaVAFJsegpDwglQGglMCgXOPU6FI9F5r8+v9GMBSiWBSRZAcrnd8+FYTOtiApRCAlNbAKlaLs8fOfGGnosLULIEpmYAqZjLzc+eOo1k20laCVBtCUzoNaTgyCjyh0JG/7sA1czxmDAkOD1+9Givv0aAQg7H1A4JNrjdHk8/v87xoByLqR0SFJs+QuLXOhqUIzHJIRGYldpzLCjHYZJDgsJRzX1KveRIUI7CpAQJZqQeHsHpyXGgHINJCRI0OjFp5p91FChHYFKDBPlDQbP/vGNAcY9JCxLcxak8mUs6R4DiGpMWJMhnzraSWtyD4hZTN0iQP2gpJohrUFxi0gMJcpHbt2QkbkFxh0kvJMikXQJ64hIUV5iMQCK4x7vXuAPFDSYjkCCXx2vm4uiNK1BcYAr9LJUq7e7qhkRZ3IBiHlP4wtNUMZ+fHxgYaIz1vqnUgp2VRuICFNOYwj9fTJWakIDQQPN8Rt+lzDwoZjGN/uJZqlwozCMJUgsREqDsjElMkV8+b0Bq3bUhJEBREHOYou8sp8rFYseMBBkFVTs4MG8h+49JUExhiv16JVUpFRVnJPm4G6hysWTegpKJOVDMYBp7Ny1BKmnOSPKxuMuzNiYwjb+3ltorl3TNSPKxGihphjNrcUnHDCjqMU1cXJcglQ3NSPKxEijYZoIvA+/etTMmQFGNafLSRuO9/73MSPKxEihpQ97OJ3uNRj0oajFNvb+ZqlYqr2akNgkkQZXyuyxhgqgGRSWm6Q8zqf29vc4ZyQRQFfof0SlFLSjqMM1czjYgKW4jEQZVKuSJLruFUQmKKkwzH+2kqtWq9jYSQVD1Wg3ld7YRHP2EwagDRQ2mo1dyqYMmJLW7pdaYIKjCzg6rmCCqQFGB6djH+dT+/n5rRoKsAlXI5fpefpujBpTtmOZ+V0gdNCHp3XBujQmAgru6XCaDwtFo/ytjX1SAshXT8Wul1MHBgeqMJB+bBSqfzbKOCbIdlG2YTlwvp2pNSL0+tG+N+wRVLhZQKZ9HviBVr77sJVtB2YLpjU8qqVqtpntGko/NAJVdf8kDJsg2UJZjml+opur1uuEZST4mDQqeWoH9Tr6AANVrlmI6eWO/BQlHE6itdBrNnjyle30oz3JQlmE6dauWkr71PSPJxyRBVSsVtLO1iUZiY7rXi/IsBWUJptO36w1Iai/+73dMEtT2xgYKhMJ2HYfAjCwDZTomaUW+k2aj1hskuyLocUwKFOx3evniOZqZP9l95djJElCmYpJW4JH07U04bWjvdo9jUqDg7m5jZRmNz8xqrh9jmQ7KNExNSG+3n8cSKHjOzhcIoOBoRHH9GM1UUKZgUoKEYwnU5upq42W9fmkbiqNMA0UckxYkHFOgVlbR1HEP8gwPa60Sa5kCiigmPZBwrICq12vwVMs/JEw/7b5WTEUcFDFMRiDhWADl8fvja5+P3ZTW71/S8GH3tWIqoqCIYOoFEo5mUF6fL5795thNOE+6wh/BFY8EKNX6xtQPJByNoDwSpMzXszfbl1OA0q4vTCQg4WgCJW0fxbe+mumAhBOg1OsZE0lIOBpAuSVImw+mFSHhBCjlesJkBiScnaA8w974+pdTmpBwAtThDGMyExLODlAurwTpiwldkHACVGeGMFkBCWclKLfHE1+7P24IEk6Aep1uTFZCwlkByiVBSn8W6wkSToB6lS5MdkDCmQkKZqTVe5G+IOEEKB2Y7ISEMwOUy+2Or/xplAgknNNBaWKiARKOJCiAtHw3TBQSzsmgVDHRBAlHAtSQyxV/8WnIFEg4p4JSxEQjJFw/oFwSpGe/D5gKCedEUIcw0QwJ1wuowaGh+LM7fksg4ZwGqgMTC5BwRkANSZAWbw1bCgnnJFAtTCxBwukBNTg4GH9602sLJJxTQDUwSWfcR4xBwmmBAkhPFty2QsJxDmpJWr8Fl3TiLemMi3YvUT8pgZLOi6fiLiog4TgGFYd7NpiZztq9JCRqByUN4o+vD1IFCccxqAXA9JbdS0GqJqj499cGqISE4xTUccA0Z/dSEOyftEPCNUFdkE6esXtZSAWY/it9/cjuBSHUT6Qb6CzcUHYvSLdO364npG9nOu6eGQ8wfYv4wQQ9bD5cfWT3gqh16lYtger1863DC/EB6lvAtIAY3S2gEbWgTt3YT9SakCD4lwNQO9LXfZd0hS9JV/w5xNfGIEQdqPmFaqJeq7VmJBwHoC6Bo8ZOS04fXUDUgJqP7yUODg4OzUg4hkGdw9dv6+kUAcq8TnxSSdT291VnJPmYIVDn2q/Xjid6BSjynbhWSuw3IUFqgORjBkCdk1+fh16CIkCR6/jVYmK/WtU9I8nHFIM6BAlSfHGcANV/c1cLiere3nl8SFi9gORjCkEpQoJUX7YrQPXesY/zEqTKqxmpTQkHoFQhQZpvKBCgjHf0t7lEtVI5j9q3kfgApQkJ6vpWJwFKf7NXdhJ75XJjRmpHwQGorpAgXW/CFKC6N/PRdmKvVGrNSBAnoHRBgnS/PVyAUu/I5WyiUioempEgxkHphgQZOnCFAHW46Q8ziUqxoDojyccMgTIECTJ8SB0B6nVTH2wmyoVC1xlJPmYAlGFIUE8H+xKgJEjvbyRK+bzuGUk+phhUT5Cgng9D6GRQExfXJUi7hmck+ZhCUD1Dgvo6QKoTQU289zJR3M31PCPJxxSB6gsS1Pehm50Eavw36UQhl+t7RpKPKQDVNySIyEHlnQBq7N3VRGFnh9iMJB/bCIoIJIjYx13wDGry0vqF3Wz2DOkZST62ARQxSBDRD+LhFZQ/FD6T29pCtVqtMeYEFFFIEPGPCOMRFHw82NTxE2htaZEXUMQhQaZ8eCGvoKKTU2hzdaXzRm+7DCOgTIEEmfaxqjyCCkYiqFrdQzsbG6yCMg0SZOoHPvMIKjIxicqFAqoUi6yBSpr9ClPTP4qeR1DwqeIrT1KNj61nAtQrSBe6rlifmY4J4g2Uy+NBo+MTKLOWPnyjt12OBlADg4PJ768NmA4JsgQTxBuokbExtJvNoGqlQi2oIQnS4+uDlkCCLMME8QYqNn0EpRefNk7TBmpwaCj5OO6yDBJkKSaIJ1C+YBAN+wOoXCw0xrSAcrlcyScLbkshNf6u1X8Q4glUZHISrT590hrbDWrI7U4+ueGxHBJkCyaIF1AwO/kCAVQqFFrn2QXKLUFavOm1BRJkGyaIF1DBSBSV8nntG13lZ/2OMSi325NcvO2zDRJkKyaIB1DhaBRtrix37HeCrALl8XqTS3f8tkKCbMcE8QAqEB5p7CroOouo/KzXsds7nHx2J2A7JIgKTBDroAIjIyiX2WqctgqUZ3g4+fwPQSogQdRgglgGFRwdRfX665vdbFAeny/54tMwNZAgqjBBLIPyBUPShvhua2wWKK/fn1y+O0IVJIg6TBCroPyhYAOTmTOU1x9IrvxxlDpIEJWYIBZBwcyEULpx2gxQw4FgcvVehEpIELWYINZAub3ejjFJUMPBYDL95yi1kCCqMUEsgXJ7PIfOIwHKHwol1z4boxoSRD0miCVQXp8PVUqljvP6AeULhZNrn49TDwliAhPECqjBIeWrtBdQgfBIcv2LCSYgQcxgglgBpZYRUIERCdKXk8xAgpjCBNEOyu31oFJe/ed6QAVHR5MbD6aZggQxhwmiGZTSRrg8LVChSCS5+ZcjzEGCmMQE0Qqquren63JKoEKRaHLrqxkmIUHMYoJoBFWt6MMEtYMKR6PJzF9nmYUEMY0JohGUkQBUOBZLZr85xjQkiHlMEMugRmJjye2/zTEPCeICE0QLqPZXDXSrAenvfECCuMEE2Q2qdnCg+7K8QYK4wgTZCapcLOq6HI+QIO4wQXaB0nMXxyskiEtMkB2girsau74R35AgbjFBVoPSmpl4hwRxjQmyClR+e1v1Z06ABHGPCbICVH5HGZNTIEGOwASZDUppZnISJMgxmCCzQDWOES7bx+Q0SJCjMEFmgNrZ2uoYOxES5DhMEElQxd3djkdxToUEORITRArUVjrdOu1kSJBjMUH9gmqflZwOCXI0JqgfUHhWEpBe5XhMUC+gsuvrjVlJQHqdwNTMCCh4nfdWelVAkiUwtaUX1NrSEgqNRgQkWQKTrG6gYEaCY0gKSIcTmBRSAwV7uvf3qgKSSgKTSnJQlVIRVcqlBxKk92xdMIoTmDTCoCRID3OZzIPM17MCkkYCU5cAVOxX2ZQE6d92Lwvt/R+ac9dhflI3hQAAAABJRU5ErkJggg==">

    <VersionHistory>
		<Change Ver="11" Date="2025-01-15" Type="New">Added read/write support for Team field type (Value listed in customfield_NNN_id and customfield_NNN_name fields).</Change>	
		<Change Ver="10" Date="2024-12-04" Type="New">Added read/write support for User field type (value listed in customfield_NNN_accountId and customfield_NNN_email fields).</Change>	
	    <Change Ver="10" Date="2024-12-04" Type="Fix">Adjusted BatchSize to 50 (Was 100) to prevent error when calling Bulk Issue Insert (create_issues). You may get error - No more than 50 issues can be created in a single request.</Change>
		<Change Ver="10" Date="2024-12-04" Type="New">Added an example - how to continue on a specific error message.</Change>
		<Change Ver="10" Date="2024-12-04" Type="New">Added DefaultServiceUrl to set default Service URL on UI when user selects OAuth Connection Type.</Change>
		<Change Ver="10" Date="2024-12-04" Type="Fix">Around 20-25% Performance improvement for Comments Table Read Operation (Reduced last request by adding PagingMaxRowsExpr).</Change>
	    <Change Ver="10" Date="2024-12-04" Type="Fix">CustomColumnsRegex is not working correctly.</Change>
        <Change Ver="10" Date="2024-12-04" Type="New">Added images in OAuth authentication instructions</Change> 
		
        <Change Ver="10" Date="2024-10-30" Type="New">Added Groups, ApplicationRoles Tables</Change>
        <Change Ver="10" Date="2024-10-30" Type="New">Added Insert/Update/Delete operation for Comment Table</Change>
        <Change Ver="10" Date="2024-10-30" Type="Fix">Comments table may not return more than 50 comments per each Issue</Change>
        <Change Ver="10" Date="2024-10-30" Type="Fix">Issues / Users tables return one less row due to pagination issue</Change>
        <Change Ver="10" Date="2024-10-30" Type="Fix">Projects pagination not working (Max 50 projects returned)</Change>
		
        <Change Ver="9" Date="2024-10-03" Type="Fix">Create new issue with Labels fails (Its not treated as Raw fragment)</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Allow to use Formatted Comment (Raw JSON) in create_worklog or update_worklog operations</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Add Environment and EnvironmentFormatted columns (Environment was null in Get Issues)</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Change BodyContentText, Description, Comment datatype to DT_NTEXT from DT_WSTR in get_issues and get_worklogs endpoints to allow larger tahn 2000 chars in ETL tools like SSIS</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Change Environment datatype to DT_NTEXT from DT_WSTR in create_issues and update_issues endpoints to allow larger tahn 2000 chars in ETL tools like SSIS</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Change Labels to DT_WSTR rather than DT_NTEXT in get_issues endpoint</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Allow to Update/Insert formatted values for Custom Paragraph (TextArea) Field (e.g. DescriptionFormatted)</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Add new AggregateProgressPercent feild in get_issues endpoint.</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">Clicking on [Show Advanced Parameters] checkbox throws error for Fields table / endpoint - Invalid ConnectionString format.</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">Change Custom Paragraph fields (e.g. Long Summary) to DT_NTEXT (more than 2000 chars) so ETL tools like SSIS works fine for longer string.</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">Encode value used for textarea field INSERT / UPDATE (i.e. Description) - If you include double quote, new line, tab, slash etc in value error parsing JSON.</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">Improved Speed for metadata fetch (added UseRawCache to avoid multiple API calls).</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">Some fields like DueDate detected as datetime (i.e. DT_DATE) rather than date (i.e. DT_DBDATE - without time part). DT_DATE can return date and time both. Use DT_DBDATE if field should just return date (no time part)</Change>
        <Change Ver="9" Date="2024-10-03" Type="Fix">BREAKING: Improve Speed by reducing number of unused columns from the output (e.g. customfields_value only needed for option fields, customfields_values only needed for array fields, customfields_text only needed for paragraph fields). After this change some of the unsed columns from your ETL Mappings / Reporting tools may be removed or throw error about column is missing, just ignore that warning / error becuase these unwanted columns were always set as null. Refresh your metadata and you will see number of custom field columns reduced drastically from you mappings.</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Allow to Update/Insert raw values for Custom Paragraph (TextArea) Field (e.g. set customfield_1234_text = 'your long description').</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Allow to Update/Insert raw values for Custom Option / Array / User / Team Field (e.g. Radio / Checkboxes / List Multiselect). (e.g. set customfield_1234 = '[{"value":"AA"}, {"value":"BB"}]').</Change>
        <Change Ver="9" Date="2024-10-03" Type="New">Allow to Update/Insert value for Custom Option Field (Dropdown / Radio) by value or option id. To update by Option entry id use customfield_nnnnn_value='BBB' and to update by id  customfield_nnnnn_id = '100023').</Change>

        <Change Date="2024-07-12" Type="New">Add option to Continue on 404 Error (Record not found) on UPDATE / DELETE operations</Change>
        <Change Date="2024-07-12" Type="New">Updated many examples</Change>
        <Change Date="2024-07-12" Type="New">Add JQL Parameter examples and dropdown options</Change>
        <Change Date="2024-07-12" Type="Fix">Added support for Id field in WHERE clause for SELECT / DELETE / UPDATE operations (now you can call FROM YourTable WHERE Id=1234).</Change>
        <Change Date="2024-07-12" Type="Fix">Some fields (e.g. Summary) are too small for ETL tools like SSIS.</Change>
        <Change Date="2024-04-25" Type="New">Added option to use PAT (Personal Access Token) for Authentication rather than userid / password.</Change>
        <Change Date="2024-04-19" Type="New">Added option to choose custom domain in service URL.</Change>
        <Change Date="2023-07-13" Type="New">Custom fields not listed correctly after you select them.</Change>
        <Change Date="2023-05-23" Type="New">Added support for OAuth.</Change>
        <Change Date="2023-05-23" Type="New">Added Lookup Support for Issues so now you can search by many Keys.</Change>
        <Change Date="2023-05-23" Type="New">Improved speed for Issues table by changing maxResults to 100 and use PagingMaxRowsExpr to detect total rows (one less request in pagination).</Change>
        <Change Date="2022-05-02" Type="New">Added new endpoints get_custom_fields, get_custom_field_contexts and get_custom_field_option_for_context.</Change>
        <Change Date="2022-02-28" Type="New">Added new endpoints get_changelogs, get_changelog_details and get_changelogs_by_ids.</Change>
        <Change Date="2022-02-28" Type="New">Updated the Issue table [WorkRatio] column data type to String as it contains long number value (e.g.9117xxxxxxxxxxx2983).</Change>
        <Change Date="2022-02-21" Type="New">Added customfield value support for single / multi value fields. For multi select you can see comma separated values now.</Change>
        <Change Date="2021-03-29">Initial version</Change>
    </VersionHistory>

    <ServiceUrls>
        <ServiceUrl Name="V3" Url="https://[$Subdomain$].atlassian.net/rest/api/3" />
        <ServiceUrl Name="V3 (custom domain)" Url="https://something.mycompany.com/rest/api/3"
                    Desc="If you added custom domain then enter domain and API URL here (V3 recommended)" />
        <ServiceUrl Name="V2 Legacy - Some Operations wont work" Url="https://[$Subdomain$].atlassian.net/rest/api/2" />
        <ServiceUrl Name="V2 Legacy - Some Operations wont work" Url="https://something.mycompany.com/rest/api/2"
                    Desc="If you added custom domain then enter domain and API URL here (V3 recommended)" />
        <ServiceUrl Name="V3 OAuth" Url="https://api.atlassian.com/ex/jira/[$OrganizationId$]/rest/api/3"
                    Desc="Example: https://api.atlassian.com/ex/jira/c6613685-699f-46dc-8013-f487134bc9fd/rest/api/3" />
    </ServiceUrls>
    <Auths>
        <Auth Name="Http" Label="API Key based Authentication" Type="Http" ConnStr="CredentialType=Basic;" TestEndPoint="get_fields">
            <Params>
                <Param Name="Subdomain" Required="True" Label="Subdomain"
                       Desc="Your company's Atlassian subdomain. Subdomain parameter is ignored this if you choose custom domain in service URL" />
                <Param Name="UserName" Required="True" Label="Atlassian User Name (email)" HelpLink="" />
                <Param Name="Password" Required="True" Label="API Key" HelpLink="https://id.atlassian.com/manage-profile/security/api-tokens" Secret="True"
                       Desc="Get your API key by going to https://id.atlassian.com/manage-profile/security/api-tokens" />
                <Param Name="CustomColumnsRegex" Template="CustomColumnsRegexParam" />
            </Params>
            <Notes>
                <![CDATA[Firstly, login into your Atlassian account and then go to your Jira profile:
<p />
<ol>
  <li>Go to <a target="_blank" href="https://id.atlassian.com/manage-profile/security">Profile > Security</a>.</li>
  <li>Click <a target="_blank" href="https://id.atlassian.com/manage-profile/security/api-tokens">Create and manage API tokens</a>.</li>
  <li>Then click <strong>Create API token</strong> button and give your token a label.</li>
  <li>When window appears with new API token, copy and use it in this connection manager.</li>  
  <li>That's it!</li>  
</ol>
]]>
            </Notes>
        </Auth>
        <Auth Name="PAT" Label="Personal Access Token (PAT) Authentication" Type="Http" ConnStr="CredentialType=Token;" TestEndPoint="get_fields"
              HelpLink="https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html">
            <Params>
                <Param Name="Subdomain" Required="True" Label="Subdomain"
                       Desc="Your company's Atlassian subdomain. Subdomain parameter is ignored this if you choose custom domain in service URL" />
                <Param Name="Password" Required="True" Label="Token (PAT Bearer Token)"
                       HelpLink="https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html" Secret="True"
                       Desc="Get your Personal Access Token by following steps listed here https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html" />
                <Param Name="CustomColumnsRegex" Template="CustomColumnsRegexParam" />
            </Params>
            <Notes>
                <![CDATA[Follow official Atlassian <a target="_blank" href="https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html">instructions</a> on how to create a PAT (Personal Access Token) for JIRA]]>
            </Notes>
        </Auth>

        <Auth Type="OAuth" Name="oauth" Label="OAuth (**Must change API Base URL to V3 OAuth**)"
              Desc="OAuth App must be created in Atlassian Developer Console. It is found at https://developer.atlassian.com/console/myapps/"
              HelpLink="https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/"
              ConnStr="Provider=Custom;OAuthVersion=OAuth2;AuthUrl=https://auth.atlassian.com/authorize;TokenUrl=https://auth.atlassian.com/oauth/token;Scope=[$Scope$];ScopeSeparator={space};ContentType=application/json;ExtraAttributesForAuthRequest=audience=api.atlassian.com&amp;prompt=consent"
              TestEndPoint="get_fields" DefaultServiceUrl="https://api.atlassian.com/ex/jira/[$OrganizationId$]/rest/api/3">
            <Notes>
                <![CDATA[Firstly, login into your Atlassian account and then create Jira application:
<p />
<ol>
    <li>
        Go to <a target="_blank" href="https://developer.atlassian.com/console/myapps/">Atlassian Developer area.</a>
    </li>    
    <li>
        Click <strong>Create</strong> and select <strong>OAuth 2.0 integration</strong> item to create an OAuth app:
    
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/create-oauth-integration-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Create OAuth integration app in Atlassian"
             title="Creating OAuth integration app in Atlassian"
             width="1000"
             height="730" />
    </li>    
    <li>
        Give your app a name, accept the terms and hit <strong>Create</strong>:

        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/name-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Name OAuth app in Atlassian"
             title="Naming OAuth app in Atlassian"
             width="1000"
             height="459" />
    </li>
    <li>
        To enable permissions/scopes for your application, 
        click <strong>Permissions</strong> tab, 
        then hit <strong>Add</strong> button, 
        and click <strong>Configure</strong> button, once it appears:

        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/enable-scopes-in-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Enable scopes in OAuth app in Atlassian"
             title="Enabling scopes in OAuth app in Atlassian"
             width="1000"
             height="750" />                    
    </li>    
    <li>
        Continue by hitting <strong>Edit Scopes</strong> button to assign scopes for the application:
        
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/edit-scopes-in-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Edit scopes in OAuth app in Atlassian"
             title="Editing scopes in OAuth app in Atlassian"
             width="1000"
             height="600" />
    </li>
    <li>
        Select these scopes or all of them:
        
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/add-jira-scopes-in-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Add Jira scopes in OAuth app in Atlassian"
             title="Adding Jira scopes in OAuth app in Atlassian"
             width="1000"
             height="880" />
    </li>
    <li>
        Then click <strong>Authorization</strong> option on the left and click <strong>Add</strong> button:
        
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/add-authorization-in-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Add authorization in OAuth app in Atlassian"
             title="Adding authorization in OAuth app in Atlassian"
             width="1000"
             height="550" />
    </li>
    <li>
        Enter your own <strong>Callback URL</strong> (Redirect URL) or simply enter <code>https://zappysys.com/oauth</code>, if you don't have one:</li>
    
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/set-callback-url-for-oauth-app-in-atlassian.png"
             loading="lazy"
             decoding="async"
             class="img-thumbnail block"
             alt="Set callback URL for OAuth app in Atlassian"
             title="Setting callback URL for OAuth app in Atlassian"
             width="1000"
             height="550" />
    </li>    
    <li>    
        Then hit <strong>Settings</strong> option and copy <strong>Client ID</strong> and <strong>Secret</strong> into your favorite text editor (we will need them in the next step):
        
        <img src="https://cdn.zappysys.com/api/Images/authentication/atlassian/OAuth/get-jira-data-via-rest-api-and-oauth.png"
                 loading="lazy"
                 decoding="async"
                 class="img-thumbnail block"
                 alt="Get Jira data via REST API and OAuth"
                 title="Getting Jira data via REST API and OAuth"
                 width="1000"
                 height="550" />
    </li>
    <li>
        Now go to SSIS package or ODBC data source and in <strong>OAuth</strong> authentication set these parameters:</ol>
        
        <ul>
            <li>For <strong>ClientId</strong> parameter use <strong>Client ID</strong> value from the previous steps.</li>
            <li>For <strong>ClientSecret</strong> parameter use <strong>Secret</strong> value from the previous steps.</li>
            <li>For <strong>Scope</strong> parameter use the <strong>Scopes</strong> you set previously (specify them all here):
                <ul>
                    <li>offline_access <strong>(a must)</strong></li>
                    <li>read:jira-user</li>
                    <li>read:jira-work</li>
                    <li>write:jira-work</li>
                    <li>manage:jira-project</li>
                    <li>manage:jira-configuration</li>
                </ul>
                
                <div class="alert alert-info">
                   <strong>NOTE: </strong>
                   A full list of available scopes is available in                
                   <a target="_blank" href="https://developer.atlassian.com/cloud/jira/platform/scopes-for-connect-and-oauth-2-3LO-apps/#oauth-2-0-authorization-code-only-scopes">Atlassian documentation.</a>
                </div>
            </li>                        
            <li>
                For <strong>Subdomain</strong> parameter use your Atlassian subdomain value 
                (e.g. <code>mycompany</code>, if full host name is <code>mycompany.atlassian.net</code>).
            </li>                                                
        </ul>               
    </li>        
    <li>Click <strong>Generate Token</strong> to generate tokens.</li>   
    <li>Finally, select <strong>Organization Id</strong> from the drop down.</li>       
    <li>That's it! You can now use Jira Connector!</li>     
</ol>
]]>
            </Notes>
            <Params>
                <Param Name="ClientId" Required="True" />
                <Param Name="ClientSecret" Secret="True" Required="True" />
                <Param Name="Scope" Required="True"
                       Options="offline_access;read:jira-user;read:jira-work;write:jira-work;manage:jira-project;manage:jira-configuration;manage:jira-webhook"
                       MultiSelectSeparator=" " MultiSelect="True"
                       Value="offline_access~read:jira-user~read:jira-work~write:jira-work~manage:jira-project~manage:jira-configuration"
                       Desc="Permissions you want to use."
                       Example="offline_access read:jira-user read:jira-work write:jira-work manage:jira-project manage:jira-configuration manage:jira-webhook"
                       HelpLink="https://developer.atlassian.com/cloud/jira/platform/scopes-for-connect-and-oauth-2-3LO-apps/#oauth-2-0-authorization-code-only-scopes" />
                <Param Name="ReturnUrl" Value="https://zappysys.com/oauth" Required="True" />

                <Param Name="OrganizationId" OptionsEndPoint="get_resources" OptionsEndPointValueColumn="Id" OptionsEndPointLabelColumn="Name" Required="True"
                       Label="Organization Id (Select after clicking [Generate Token])"
                       Desc="Your company's Alphanumeric ID (e.g. c66xxx-xxx-xxx). This is obtained by calling GET " />
                <Param Name="CustomColumnsRegex" Template="CustomColumnsRegexParam" Label="Custom Columns for output (Select after clicking [Generate Token])" />
            </Params>
        </Auth>
    </Auths>

    <Template>
        <Param Name="CustomColumnsRegexParam" 
		       LabelXX="Custom columns for output" 
               OptionsEndPoint="get_custom_fields"
               OptionsEndPointLabelColumn="ScopeProjectId,Name" 
			   OptionsEndPointValueColumn="Key" 
			   OptionsExtra="All Custom Columns=(.*);No Custom Columns=$^;Example-Multiple Custom Columns=customfield_10004|customfield_10005;"
               OptionsEndPointParameters="CustomColumnsRegex=(.*)" 
			   OptionsEndPointSortBy="ScopeProjectId desc,Name" 
			   MultiSelect="True" 
			   MultiSelectSeparator="|"
			   ValueTemplate="&lt;&lt;{$value$}|~|~|~||,FUN_REPLACE&gt;&gt;"
               Desc="Enter regular expression for custom columns which you like to output. Use Pipe to type multiple column names (must use key - internal names for columns e.g. customfield_10004). You can use Regex too (e.g. field_100\d+  ). This filter is only applied for those fields which has flag custom=true." 
			   />
        <EndPoint Name="WorklogTemplate" ResponseFormat="Json" JsonRowFormat="Multicontent" ContentType="application/json" Body="{$rows$}">
            <Params>
                <Param Type="Placeholder" Name="IssueIdOrKey" Desc="Enter Issue ID or Key" Example="100002 or MYISSUE-1" />
            </Params>
            <InputColumns>
                <Column Name="visibility.type" Label="VisibilityType" Desc="Enter 'group' or 'role'" Example="group" />
                <Column Name="visibility.value" Label="VisibilityValue" Desc="The name of the group or role to which visibility of this item is restricted."
                        Example="jira-developers" />
                <Column Name="comment" Label="Comment" Raw="True"
                        ValueTemplate="{ &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="comment" Label="CommentFormatted" DataType="DT_NTEXT" Raw="True" />
                <Column Name="started" Label="StartedAt" DataType="DT_WSTR" Length="100" Desc="Datetime with timezone" Example="2020-02-23T16:20:30.123+0300" />
                <Column Name="timeSpent" Label="TimeSpent" DataType="DT_WSTR" Length="50" Desc="Defines a time spent in hours and minutes" Example="3h 20m" />
                <Column Name="timeSpentSeconds" Label="TimeSpentInSeconds" DataType="DT_I8" Desc="Defines a time spent in seconds" Example="12000" />
            </InputColumns>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="50" />
                <Column Name="issueId" Label="IssueId" DataType="DT_WSTR" Length="50" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="author.self" Label="AuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="author.active" Label="AuthorIsActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="50" />
                <Column Name="author.accountType" Label="AuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="comment.content" Label="CommentFormatted" DataType="DT_NTEXT" />
                <Column Name="comment.content" Label="Comment" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="updateAuthor.self" Label="UpdateAuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="updateAuthor.accountId" Label="UpdateAuthorAccountId" DataType="DT_WSTR" Length="150" />
                <Column Name="updateAuthor.emailAddress" Label="UpdateAuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.displayName" Label="UpdateAuthorDisplayName" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.active" Label="UpdateAuthorActive" DataType="DT_BOOL" />
                <Column Name="updateAuthor.timeZone" Label="UpdateAuthorTimeZone" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.accountType" Label="UpdateAuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="started" Label="Started" DataType="DT_DBTIMESTAMP" />
                <Column Name="timeSpent" Label="TimeSpent" DataType="DT_WSTR" Length="50" />
                <Column Name="timeSpentSeconds" Label="TimeSpentInSeconds" DataType="DT_I8" />
                <Column Name="author.avatarUrls.48x48" Label="AuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.24x24" Label="AuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.16x16" Label="AuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.32x32" Label="AuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.48x48" Label="UpdateAuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.24x24" Label="UpdateAuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.16x16" Label="UpdateAuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.32x32" Label="UpdateAuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
        </EndPoint>

        <EndPoint Name="Pagination50">
            <Params>
                <Param Name="PagingMode" Type="Property" Value="1" />
                <Param Name="PagingByUrlAttributeName" Type="Property" Value="startAt" />
                <Param Name="PagingIncrementBy" Type="Property" Value="50" Desc="This must be same as maxResults in URL." />
                <Param Name="PagingByUrlCurrentPage" Type="Property" Value="0" />
            </Params>
        </EndPoint>

        <EndPoint Name="Pagination100">
            <Params>
                <Param Name="PagingMode" Type="Property" Value="1" />
                <Param Name="PagingByUrlAttributeName" Type="Property" Value="startAt" />
                <Param Name="PagingIncrementBy" Type="Property" Value="100" Desc="This must be same as maxResults in URL." />
                <Param Name="PagingByUrlCurrentPage" Type="Property" Value="0" />
            </Params>
        </EndPoint>

        <EndPoint Name="IssuesTemplate" Url="/search?startAt=0&amp;maxResults=100" Template="Pagination100" Method="GET" BatchSize="50" RequestFormat="Csv"
                  Filter="$.issues[*]">
            <Params>

                <Param Name="SearchBy" Label="Search by" Options="None=;Project Key(s)=Project;JQL Expression=JQL;Issue Id(s) or Key(s)=Key" />
                <Param Name="Project" Key="jql" Required="False" OptionsEndPoint="get_projects" OptionsEndPointValueColumn="key"
                       OptionsEndPointLabelColumn="name" ValueTemplate="project=&quot;{$value$}&quot;" Type="Query" VisibleIf="SearchBy==Project" 
                       Desc="Specify a project to search issues for" />
                <Param Name="JQL" Key="jql" Required="False"
                       Options="Search Ids (IN)=key IN(10001, 10002, 10003);
               Search Keys (IN)=key IN(CS-1, CS-2, CS-3);
               Search Projects (IN)=project IN(PROJ1, PROJ2, PROJ3);
               Search Status (EQUAL)=status='Done';
               Search Date (Expression 1)=created &gt;=-5d;
               Search Date (Expression 2)=created &gt;=startOfMonth() AND created &lt;=now();
               Search Date (Expression 3)=created &gt;=startOfYear() AND created &lt;=startOfDay();
			   Search Date (Static)=created >= &quot;2008-12-31&quot;;
			   Search Date (Static)=created >= '2008/12/31';
               Search Date (Static with time)=created >= '2008/12/31 23:59';
			   Search Date (Static with time)=created >= '2008-12-31 23:59';
               Search Date (Issue Update Date)=updated &gt;=-5d;		
               Search Date (Issue Update Date)=updated >= &quot;2008-12-31&quot;;			   
               Search Project and Status (AND + IN)=project=CS AND status NOT IN ('Done', 'Open', 'Closed');
               Search Assignee and Created Date=assignee is NOT EMPTY and created &lt; -1d;
               Search Text (Contains - Fuzzy)=Summary ~ 'some words' OR description ~ 'some words';
               Search Text (Contains - Fuzzy Wildcard)=Summary ~ 'some*' OR description ~ 'some*';
               Search Text (Contains - Exact)=Summary ~ '\&quot;exact words\&quot;' OR description ~ '\&quot;exact words\&quot;';
               Search Text (Does Not Contain - Fuzzy)=Summary !~ 'some words' OR description !~ 'some words';
               Search Empty OR Null=fixVersion is empty OR fixVersion is null;
               Search Is Not Empty OR Is Not Null=fixVersion is not empty OR fixVersion is not null;
               Search WAS Operator (previous value)=status WAS &quot;Resolved&quot; BY (jsmith,srogen) BEFORE &quot;2019/02/02&quot;;
               Search WAS IN Operator=status WAS IN (&quot;Resolved&quot;, &quot;In Progress&quot;);
               Search WAS NOT IN Operator=status WAS NOT IN (&quot;Resolved&quot;, &quot;In Progress&quot;);
               Search WAS + BY + DURING (date range)=status WAS &quot;Resolved&quot; BY (jsmith,srogen) DURING(&quot;2019/02/02&quot;, &quot;2020/02/02&quot;);
               Search CHANGED operator=assignee CHANGED;
               Search CHANGED operator (multiple)=status CHANGED FROM &quot;In Progress&quot; TO &quot;Open&quot;"
                       Type="Query" VisibleIf="SearchBy==JQL"
                       Desc="Use JQL to use an advanced mode of searching. Few links are https://www.atlassian.com/blog/jira/jql-the-most-flexible-way-to-search-jira-14 and als check https://wac-cdn.atlassian.com/dam/jcr:241d9c9b-475f-411f-90a2-97ca344442b3/atlassian-jql-cheat-sheet-2.pdf?cdnVersion=2169"
                       Example="project=MyProjectKey" HelpLink="https://www.atlassian.com/software/jira/guides/expand-jira/jql#advanced-search" />
					   
                <Param Name="Key" Label="Issue Key(s) or Ids - Comma Separated (PRJA-10,PRJA-13)" IsKey="True" ReadAs="Id" Key="jql" Required="False"
                       Type="Query" VisibleIf="SearchBy==Key" Functions="{$rows$}" ValueTemplate="Key in ({$value$})"
                       Desc="Use comma separated IDs or Keys for Issues. 1000 ids max or JIRA internal limit for Payload." />

                <Param Name="CustomColumnsRegex" Template="CustomColumnsRegexParam"  />
                <Param Name="PagingMaxRowsExpr" Type="Property" Value="$.total" />
                <Param Name="PagingMaxRowsDataPathExpr" Type="Property" Value="$.issues[*]"
                       Desc="This saves last request if we maintain counter based on data node, some endpoint may not use this but still works well." />
					   
				<Param Name="ContineOnErrorForMessage" Label="Continue on Error String" Value="False" Options=";False;True" Type="Property"/>
                <Param Name="ErrorSubstringToMatch" Label="Error String To Match" Value="does not exist" Type="Property"/>

            </Params>
            <LayoutMap>
                <![CDATA[<?xml version="1.0" encoding="utf-8"?>
            <settings>
              <dataset id="root" readfrominput="True" />
              <map name="Key" src="Key" />
            </settings>]]>
            </LayoutMap>
        </EndPoint>


        <EndPoint Name="FieldsTemplate" CachedTtl="30" UseRawCache="True" Url="/field" Method="GET">
            <Params>
                <Param Name="EnableRawOutputModeSingleRow" Type="Property" Value="True" Hidden="True" />
                <Param Name="RawOutputDataRowTemplate" Type="Property" Value="{data: [$1]}" Hidden="True" />
            </Params>

            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="120" />
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="120" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="250" />
                <Column Name="custom" Label="Custom" DataType="DT_BOOL" />
                <Column Name="orderable" Label="Orderable" DataType="DT_BOOL" />
                <Column Name="navigable" Label="Navigable" DataType="DT_BOOL" />
                <Column Name="searchable" Label="Searchable" DataType="DT_BOOL" />
                <Column Name="clauseNames" Label="ClauseNames" DataType="DT_WSTR" Length="900" />
                <Column Name="schema.type" Label="SchemaType" DataType="DT_WSTR" Length="200" />
                <Column Name="schema.system" Label="SchemaSystem" DataType="DT_WSTR" Length="200" />
                <Column Name="untranslatedName" Label="UntranslatedName" DataType="DT_WSTR" Length="200" />
                <Column Name="schema.items" Label="SchemaItems" DataType="DT_WSTR" Length="200" />
                <Column Name="schema.custom" Label="SchemaCustom" DataType="DT_WSTR" Length="100" />
                <Column Name="schema.customId" Label="SchemaCustomId" DataType="DT_I8" />
                <Column Name="scope.type" Label="ScopeType" DataType="DT_WSTR" Length="50" />
                <Column Name="scope.project.id" Label="ScopeProjectId" DataType="DT_WSTR" Length="50" />
            </OutputColumns>
        </EndPoint>

    </Template>

    <EndPoints>


        <!-- ==================
             ORGS
    =================== -->
        <EndPoint Name="get_resources" Label="Read Resources" Url="https://api.atlassian.com/oauth/token/accessible-resources">
            <OutputColumns>
                <Column Name="id" Label="Id" />
                <Column Name="name" Label="Name" />
                <Column Name="url" Label="Url" />
                <Column Name="scopes" Label="Scopes" DataType="DT_WSTR" Length="1000" />
            </OutputColumns>
        </EndPoint>

        <!-- ==================
             FIELDS
    =================== -->
        <EndPoint Name="get_fields" Label="Read Fields" Template="FieldsTemplate" Filter="$.data[*]">
            <Params>
                <Param Name="Filter" Type="Property" Value="$.data[*]"
                       Options="All fields=$.data[*];
Custom fields=$.data[?(@custom==true)];
System fields (non-custom)=$.data[?(@custom==false)]
Custom Column name contains=$.data[?(@custom==true  &amp;&amp; @name=~/ProjectACol1|ProjectACol2/)];
Custom Column key contains=$.data[?(@custom==true  &amp;&amp; @key=~/customfield_10001|customfield_10002/)];
Custom Column name starts with=$.data[?(@custom==true  &amp;&amp; @name=~/^order|^survey/)];
Custom Column name ends with=$.data[?(@custom==true  &amp;&amp; @name=~/order$|survey$/)];
Custom Column name exact match=$.data[?(@custom==true  &amp;&amp; @name=~/^ordernumber$|^surveyquestion$/)];
Custom Column without option and textarea type=$.data[?(@.custom==true &amp;&amp; @schema.type!='option' &amp;&amp;  @schema.custom=~/^((?!textarea).)*$/)]" />


            </Params>
        </EndPoint>
        <!-- ==================
             Custom FIELDS
    =================== -->
        <EndPoint Name="get_custom_fields" Label="Read Custom Fields" Template="FieldsTemplate"
                  Filter="$.data[?(@custom==true  &amp;&amp; @key=~/[$CustomColumnsRegex$]/)]">
            <Params>
                <Param Name="CustomColumnsRegex" Template="CustomColumnsRegexParam" />
            </Params>
        </EndPoint>

        <!-- =======================
             ISSUE TYPES
    ======================== -->
        <EndPoint Name="get_types" Label="Read Issue Types" Url="/issuetype" Method="GET" Cached="True" CachedTtl="60">
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="50" />
                <Column Name="description" Label="Description" DataType="DT_WSTR" Length="1000" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="200" />
                <Column Name="untranslatedName" Label="UntranslatedName" DataType="DT_WSTR" Length="200" />
                <Column Name="subtask" Label="Subtask" DataType="DT_BOOL" />
                <Column Name="avatarId" Label="AvatarId" DataType="DT_I8" />
                <Column Name="hierarchyLevel" Label="HierarchyLevel" DataType="DT_I8" />
                <Column Name="scope.type" Label="ScopeType" DataType="DT_WSTR" Length="50" />
                <Column Name="scope.project.id" Label="ScopeProjectId" DataType="DT_WSTR" Length="50" />
                <Column Name="iconUrl" Label="IconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               ApplicationRoles 
    ====================== -->
        <EndPoint Name="get_applicationroles" Label="Read Application Roles" Url="/applicationrole" Method="GET">
            <OutputColumns>
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="500" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="500" />
                <Column Name="groups" Label="Groups" DataType="DT_WSTR" Length="2000" />
                <Column Name="groupDetails" Label="GroupDetails" DataType="DT_NTEXT" />
                <Column Name="defaultGroups" Label="DefaultGroups" DataType="DT_WSTR" Length="500" />
                <Column Name="defaultGroupsDetails" Label="DefaultGroupsDetails" DataType="DT_NTEXT" />
                <Column Name="selectedByDefault" Label="SelectedByDefault" DataType="DT_BOOL" />
                <Column Name="defined" Label="Defined" DataType="DT_BOOL" />
                <Column Name="numberOfSeats" Label="NumberOfSeats" DataType="DT_I4" />
                <Column Name="remainingSeats" Label="RemainingSeats" DataType="DT_I4" />
                <Column Name="userCount" Label="UserCount" DataType="DT_I4" />
                <Column Name="userCountDescription" Label="UserCountDescription" DataType="DT_WSTR" Length="50" />
                <Column Name="hasUnlimitedSeats" Label="HasUnlimitedSeats" DataType="DT_BOOL" />
                <Column Name="platform" Label="Platform" DataType="DT_BOOL" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               Groups 
    ====================== -->
        <EndPoint Name="get_groups" Label="Read Groups" Filter="$.groups[*]" Url="/groups/picker?startAt=0&amp;maxResults=1000" Method="GET">
            <Params>
                <Param Name="Query" Key="query" Type="Query" />
                <Param Name="UserName" Key="userName" Type="Query" />
                <Param Name="Exclude" Key="exclude" Type="Query" />
            </Params>
            <OutputColumns>
                <Column Name="groupId" Label="GroupId" DataType="DT_WSTR" Length="50" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="200" />
                <Column Name="html" Label="Html" DataType="DT_WSTR" Length="4000" />
                <Column Name="labels" Label="Labels" DataType="DT_WSTR" Length="4000" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               USERS 
    ====================== -->
        <EndPoint Name="get_users" Label="Read Users" Url="/users/search?startAt=0&amp;maxResults=50" Method="GET" Template="Pagination50">
            <OutputColumns>
                <Column Name="displayName" Label="DisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="emailAddress" Label="EmailAddress" DataType="DT_WSTR" Length="200" />
                <Column Name="accountId" Label="AccountId" DataType="DT_WSTR" Length="150" />
                <Column Name="accountType" Label="AccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="active" Label="Active" DataType="DT_BOOL" />
                <Column Name="locale" Label="Locale" DataType="DT_WSTR" Length="50" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
        </EndPoint>

        <!-- INSERT USER -->
        <EndPoint Name="create_user" Label="Create User" Url="/user" Method="POST" JsonRowFormat="Multicontent" ContentType="application/json" Body="{$rows$}">
            <InputColumns>
                <Column Name="password" Label="Password" DataType="DT_WSTR" Length="50" Desc="If password is not supplied, random one is generated" />
                <Column Name="emailAddress" Label="EmailAddress" DataType="DT_WSTR" Length="200" />
                <Column Name="displayName" Label="DisplayName" DataType="DT_WSTR" Length="200" />
            </InputColumns>
            <OutputColumns>
                <Column Name="displayName" Label="DisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="emailAddress" Label="EmailAddress" DataType="DT_WSTR" Length="200" />
                <Column Name="accountId" Label="AccountId" DataType="DT_WSTR" Length="150" />
                <Column Name="accountType" Label="AccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="active" Label="Active" DataType="DT_BOOL" />
                <Column Name="locale" Label="Locale" DataType="DT_WSTR" Length="50" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
        </EndPoint>

        <!-- DELETE USER -->
        <EndPoint Name="delete_user" Label="Delete User" Url="/user" Method="DELETE">
            <Params>
                <Param Name="AccountId" Key="accountId" Type="Query" Example="5b10ac8d82e05b22cc7d4ef5" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <OutputColumns>
                <Column Name="Response" DataType="DT_NTEXT" />
            </OutputColumns>
            <InputColumns>
                <Column Name="AccountId" DataType="DT_WSTR" MapToParam="True" Key="True" />
            </InputColumns>
        </EndPoint>

        <!-- ====================
             PROJECTS 
    ===================== -->
        <EndPoint Name="get_projects" Label="Read Projects" Url="/project/search" Method="GET" Filter="$.values[*]">
            <Params>
                <Param Name="NextUrlAttributeOrExpr" Type="Property" Value="$.nextPage" />
                <Param Name="MaxResults" Type="Query" Key="maxResults" Options=";50;100;10;2" />
            </Params>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_I8" />
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="50" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="100" />
                <Column Name="projectCategory.id" Label="ProjectCategoryId" DataType="DT_WSTR" Length="50" />
                <Column Name="projectCategory.name" Label="ProjectCategoryName" DataType="DT_WSTR" Length="50" />
                <Column Name="projectCategory.description" Label="ProjectCategoryDescription" DataType="DT_WSTR" Length="150" />
                <Column Name="projectCategory.self" Label="ProjectCategorySelf" DataType="DT_WSTR" Length="150" />
                <Column Name="simplified" Label="Simplified" DataType="DT_BOOL" />
                <Column Name="style" Label="Style" DataType="DT_WSTR" Length="50" />
                <Column Name="insight.totalIssueCount" Label="InsightTotalIssueCount" DataType="DT_I8" />
                <Column Name="insight.lastIssueUpdateTime" Label="InsightLastIssueUpdateTime" DataType="DT_DBTIMESTAMP" />
                <Column Name="avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
        </EndPoint>

        <!-- CREATE PROJECT -->
        <EndPoint Name="create_project" Label="Create Project" Url="/project" Method="POST" ContentType="application/json" Body="{$rows$}"
                  JsonRowFormat="Multicontent">
            <InputColumns>
                <Column Name="key" Label="ProjectKey" DataType="DT_WSTR" Length="50" Desc="A key uniquely representing your project" Example="PRJ" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="500" />
                <Column Name="projectTypeKey" Label="ProjectTypeKey"
                        Desc="The project type, which dictates the application-specific feature set. Possible values: business, service_desk, software"
                        Example="business" DataType="DT_WSTR" Length="100" />
                <Column Name="description" Label="Description" DataType="DT_WSTR" Length="2000" />
                <Column Name="leadAccountId" Label="LeadAccountId" DataType="DT_WSTR" Length="100" Desc="The account ID of the project lead"
                        Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />
                <Column Name="url" Label="Url" DataType="DT_WSTR" Length="400" Desc="A link to information about this project, such as project documentation" />
                <Column Name="assigneeType" Label="AssigneeType"
                        Desc="The default assignee when creating issues for this project. Possible values: PROJECT_LEAD, UNASSIGNED" Example="PROJECT_LEAD"
                        DataType="DT_WSTR" Length="100" />
                <Column Name="avatarId" Label="AvatarId" DataType="DT_I8" Desc="An integer value for the project's avatar." />
                <Column Name="issueSecurityScheme" Label="IssueSecurityScheme" DataType="DT_I8"
                        Desc="The ID of the issue security scheme for the project, which enables you to control who can and cannot view issues." />
                <Column Name="permissionScheme" Label="PermissionScheme" DataType="DT_I8" Desc="The ID of the permission scheme for the project." />
                <Column Name="notificationScheme" Label="NotificationScheme" DataType="DT_I8" Desc="The ID of the notification scheme for the project." />
                <Column Name="categoryId" Label="CategoryId" DataType="DT_I8" Desc="The ID of the project's category." />
            </InputColumns>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_I8" />
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="50" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="200" />
            </OutputColumns>
        </EndPoint>

        <!-- UPSERT PROJECT -->
        <EndPoint Name="upsert_project" Label="Upsert Project" Url="/project/[$ProjectIdOrKey$]" Method="PUT" ContentType="application/json" Body="{$rows$}"
                  JsonRowFormat="Multicontent">
            <Params>
                <Param Name="ProjectIdOrKey" Type="Placeholder" />
            </Params>
            <InputColumns>
                <Column Name="key" Label="ProjectKey" DataType="DT_WSTR" Length="50" Desc="A key uniquely representing your project" Example="PRJ" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="100" />
                <Column Name="description" Label="Description" DataType="DT_WSTR" Length="300" />
                <Column Name="leadAccountId" Label="LeadAccountId" DataType="DT_WSTR" Length="100" Desc="The account ID of the project lead"
                        Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />
                <Column Name="url" Label="Url" DataType="DT_WSTR" Length="400" Desc="A link to information about this project, such as project documentation" />
                <Column Name="assigneeType" Label="AssigneeType"
                        Desc="The default assignee when creating issues for this project. Possible values: PROJECT_LEAD, UNASSIGNED" Example="PROJECT_LEAD"
                        DataType="DT_WSTR" Length="100" />
                <Column Name="avatarId" Label="AvatarId" DataType="DT_I8" Desc="An integer value for the project's avatar." />
                <Column Name="issueSecurityScheme" Label="IssueSecurityScheme" DataType="DT_I8"
                        Desc="The ID of the issue security scheme for the project, which enables you to control who can and cannot view issues." />
                <Column Name="permissionScheme" Label="PermissionScheme" DataType="DT_I8" Desc="The ID of the permission scheme for the project." />
                <Column Name="notificationScheme" Label="NotificationScheme" DataType="DT_I8" Desc="The ID of the notification scheme for the project." />
                <Column Name="categoryId" Label="CategoryId" DataType="DT_I8" Desc="The ID of the project's category." />
            </InputColumns>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="50" />
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="50" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="100" />
                <Column Name="description" Label="Description" DataType="DT_NTEXT" />
                <Column Name="issueTypes" Label="IssueTypes" DataType="DT_NTEXT" />
                <Column Name="expand" Label="Expand" DataType="DT_WSTR" Length="300" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="entityId" Label="EntityId" DataType="DT_WSTR" Length="100" />
                <Column Name="uuid" Label="Uuid" DataType="DT_WSTR" Length="100" />
                <Column Name="properties" Label="Properties" DataType="DT_NTEXT" />
                <Column Name="components" Label="Components" DataType="DT_NTEXT" />
                <Column Name="lead.self" Label="LeadSelf" DataType="DT_WSTR" Length="500" />
                <Column Name="lead.accountId" Label="LeadAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="lead.avatarUrls.48x48" Label="LeadAvatarUrls48x48" DataType="DT_WSTR" Length="700" />
                <Column Name="lead.avatarUrls.24x24" Label="LeadAvatarUrls24x24" DataType="DT_WSTR" Length="700" />
                <Column Name="lead.avatarUrls.16x16" Label="LeadAvatarUrls16x16" DataType="DT_WSTR" Length="700" />
                <Column Name="lead.avatarUrls.32x32" Label="LeadAvatarUrls32x32" DataType="DT_WSTR" Length="700" />
                <Column Name="lead.displayName" Label="LeadDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="lead.active" Label="LeadActive" DataType="DT_BOOL" />
                <Column Name="projectTypeKey" Label="ProjectTypeKey" DataType="DT_WSTR" Length="50" />
                <Column Name="assigneeType" Label="AssigneeType" DataType="DT_WSTR" Length="50" />
                <Column Name="versions" Label="Versions" DataType="DT_WSTR" Length="50" />
                <Column Name="simplified" Label="Simplified" DataType="DT_BOOL" />
                <Column Name="style" Label="Style" DataType="DT_WSTR" Length="50" />
                <Column Name="isPrivate" Label="IsPrivate" DataType="DT_BOOL" />
                <Column Name="roles.atlassian-addons-project-access" Label="RolesAtlassianAddonsProjectAccess" DataType="DT_WSTR" Length="500" />
                <Column Name="roles.Administrator" Label="RolesAdministrator" DataType="DT_WSTR" Length="500" />
                <Column Name="roles.Viewer" Label="RolesViewer" DataType="DT_WSTR" Length="500" />
                <Column Name="roles.Member" Label="RolesMember" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
        </EndPoint>

        <!-- DELETE PROJECT -->
        <EndPoint Name="delete_project" Label="Delete Project" Url="/project/[$ProjectIdOrKey$]" Method="DELETE" ResponseFormat="Json">
            <Params>
                <Param Name="ProjectIdOrKey" IsKey="True" ReadAs="Id" Type="Placeholder" Desc="Project ID or Key, uniquely representing a project"
                       Example="10002, MYPRJ" />
                <Param Name="EnableUndo" Key="enableUndo" Type="Query" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <OutputColumns>
                <Column Name="Response" DataType="DT_NTEXT" />
            </OutputColumns>
            <InputColumns>
                <Column Name="ProjectIdOrKey" Label="Id" DataType="DT_WSTR" MapToParam="True" Key="True" />
            </InputColumns>
        </EndPoint>

        <!-- =====================
            READ ISSUES
    ====================== -->
        <EndPoint Name="get_issues" Template="IssuesTemplate" Label="Read Issues">
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_I8" />
                <Column Name="key" Label="Key" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.project.key" Label="ProjectKey" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.project.name" Label="ProjectName" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.status.name" Label="StatusName" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.summary" Label="Summary" DataType="DT_WSTR" Length="2000" />
                <Column Name="fields.created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="fields.updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="fields.description.content" Label="Description" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="fields.description.content" Label="DescriptionFormatted" DataType="DT_NTEXT" />

                <Column Name="fields.creator.accountId" Label="CreatorAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.creator.emailAddress" Label="CreatorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.reporter.accountId" Label="ReporterAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.reporter.emailAddress" Label="ReporterEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.assignee.accountId" Label="AssigneeAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.assignee.emailAddress" Label="AssigneeEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.resolution.id" Label="ResolutionId" DataType="DT_I8" />
                <Column Name="fields.resolution.description" Label="ResolutionDescription" DataType="DT_WSTR" Length="4000" />
                <Column Name="fields.resolution.name" Label="ResolutionName" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.resolution" Label="Resolution" DataType="DT_NTEXT" />
                <Column Name="fields.timespent" Label="TimespentInSeconds" DataType="DT_I8" />
                <Column Name="fields.duedate" Label="DueDate" DataType="DT_DBDATE" />
                <Column Name="expand" Label="Expand" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.statuscategorychangedate" Label="StatusCategoryChangeDate" DataType="DT_DBTIMESTAMP" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.issuetype.self" Label="IssueTypeSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.issuetype.id" Label="IssueTypeId" DataType="DT_I8" />
                <Column Name="fields.issuetype.description" Label="IssueTypeDescription" DataType="DT_NTEXT" />
                <Column Name="fields.issuetype.iconUrl" Label="IssueTypeIconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.issuetype.name" Label="IssueTypeName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.issuetype.subtask" Label="IssueTypeSubtask" DataType="DT_BOOL" />
                <Column Name="fields.issuetype.avatarId" Label="IssueTypeAvatarId" DataType="DT_I4" />
                <Column Name="fields.issuetype.entityId" Label="IssueTypeEntityId" DataType="DT_GUID" />
                <Column Name="fields.issuetype.hierarchyLevel" Label="IssueTypeHierarchyLevel" DataType="DT_I4" />

                <Column Name="fields.project.self" Label="ProjectSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.project.id" Label="ProjectId" DataType="DT_I8" />


                <Column Name="fields.project.projectTypeKey" Label="ProjectTypeKey" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.project.simplified" Label="ProjectSimplified" DataType="DT_BOOL" />
                <Column Name="fields.project.avatarUrls.48x48" Label="ProjectAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.project.avatarUrls.24x24" Label="ProjectAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.project.avatarUrls.16x16" Label="ProjectAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.project.avatarUrls.32x32" Label="ProjectAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.fixVersions" Label="FixVersions" DataType="DT_NTEXT" />
                <Column Name="fields.aggregatetimespent" Label="AggregateTimespentInSeconds" DataType="DT_I8" />

                <Column Name="fields.resolutiondate" Label="ResolutionDate" DataType="DT_DBTIMESTAMP" />
                <Column Name="fields.workratio" Label="WorkRatio" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.watches.self" Label="WatchesSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.watches.watchCount" Label="WatchesWatchCount" DataType="DT_I4" />
                <Column Name="fields.watches.isWatching" Label="WatchesIsWatching" DataType="DT_BOOL" />
                <Column Name="fields.lastViewed" Label="LastViewed" DataType="DT_DBTIMESTAMP" />

                <Column Name="fields.priority.self" Label="PrioritySelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.priority.iconUrl" Label="PriorityIconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.priority.name" Label="PriorityName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.priority.id" Label="PriorityId" DataType="DT_I4" />
                <Column Name="fields.labels" Label="Labels" DataType="DT_NTEXT" />
                <Column Name="fields.aggregatetimeoriginalestimate" Label="AggregateTimeOriginalEstimate" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.timeestimate" Label="TimeEstimate" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.versions" Label="Versions" DataType="DT_NTEXT" />
                <Column Name="fields.issuelinks" Label="IssueLinks" DataType="DT_NTEXT" />
                <Column Name="fields.assignee.self" Label="AssigneeSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.assignee.avatarUrls.48x48" Label="AssigneeAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.assignee.avatarUrls.24x24" Label="AssigneeAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.assignee.avatarUrls.16x16" Label="AssigneeAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.assignee.avatarUrls.32x32" Label="AssigneeAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.assignee.displayName" Label="AssigneeDisplayName" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.assignee.active" Label="AssigneeActive" DataType="DT_BOOL" Length="32" />
                <Column Name="fields.assignee.timeZone" Label="AssigneeTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.assignee.accountType" Label="AssigneeAccountType" DataType="DT_WSTR" Length="100" />

                <Column Name="fields.status.self" Label="StatusSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.status.description" Label="StatusDescription" DataType="DT_NTEXT" />
                <Column Name="fields.status.iconUrl" Label="StatusIconUrl" DataType="DT_WSTR" Length="500" />

                <Column Name="fields.status.id" Label="StatusId" DataType="DT_I4" />
                <Column Name="fields.status.statusCategory.self" Label="StatusCategorySelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.status.statusCategory.id" Label="StatusCategoryId" DataType="DT_I4" />
                <Column Name="fields.status.statusCategory.key" Label="StatusCategoryKey" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.status.statusCategory.colorName" Label="StatusCategoryColorName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.status.statusCategory.name" Label="StatusCategoryName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.components" Label="Components" DataType="DT_NTEXT" />
                <Column Name="fields.timeoriginalestimate" Label="TimeOriginalEstimate" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.description.version" Label="DescriptionVersion" DataType="DT_I4" />
                <Column Name="fields.description.type" Label="DescriptionType" DataType="DT_WSTR" Length="50" />

                <Column Name="fields.security" Label="Security" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.aggregatetimeestimate" Label="AggregateTimeEstimate" DataType="DT_I8" />

                <Column Name="fields.creator.self" Label="CreatorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.creator.avatarUrls.48x48" Label="CreatorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.creator.avatarUrls.24x24" Label="CreatorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.creator.avatarUrls.16x16" Label="CreatorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.creator.avatarUrls.32x32" Label="CreatorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.creator.displayName" Label="CreatorDisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="fields.creator.active" Label="CreatorActive" DataType="DT_BOOL" />
                <Column Name="fields.creator.timeZone" Label="CreatorTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.creator.accountType" Label="CreatorAccountType" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.subtasks" Label="Subtasks" DataType="DT_NTEXT" />
                <Column Name="fields.reporter.self" Label="ReporterSelf" DataType="DT_WSTR" Length="150" />

                <Column Name="fields.reporter.avatarUrls.48x48" Label="ReporterAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.reporter.avatarUrls.24x24" Label="ReporterAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.reporter.avatarUrls.16x16" Label="ReporterAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.reporter.avatarUrls.32x32" Label="ReporterAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.reporter.displayName" Label="ReporterDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.reporter.active" Label="ReporterActive" DataType="DT_BOOL" />
                <Column Name="fields.reporter.timeZone" Label="ReporterTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.reporter.accountType" Label="ReporterAccountType" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.aggregateprogress.percent" Label="AggregateProgressPercent" DataType="DT_I4" />
                <Column Name="fields.aggregateprogress.progress" Label="AggregateProgressInSeconds" DataType="DT_I8" />
                <Column Name="fields.aggregateprogress.total" Label="AggregateProgressTotalInSeconds" DataType="DT_I8" />
                <Column Name="fields.environment.content" Label="Environment" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="fields.environment.content" Label="EnvironmentFormatted" DataType="DT_NTEXT" />

                <Column Name="fields.progress.progress" Label="ProgressInSeconds" DataType="DT_I8" />
                <Column Name="fields.progress.total" Label="ProgressTotalInSeconds" DataType="DT_I8" />
                <Column Name="fields.votes.self" Label="VotesSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.votes.votes" Label="Votes" DataType="DT_I4" />
                <Column Name="fields.votes.hasVoted" Label="HasVoted" DataType="DT_BOOL" />
                <Column Name="fields.parent.id" Label="ParentId" DataType="DT_I4" />
                <Column Name="fields.parent.key" Label="ParentKey" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.self" Label="ParentSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.parent.fields.summary" Label="ParentSummary" DataType="DT_WSTR" Length="2000" />
                <Column Name="fields.parent.fields.status.self" Label="ParentStatusSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.parent.fields.status.description" Label="ParentStatusDescription" DataType="DT_WSTR" Length="2000" />
                <Column Name="fields.parent.fields.status.iconUrl" Label="ParentStatusIconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.parent.fields.status.name" Label="ParentStatusName" DataType="DT_WSTR" Length="100" />
                <Column Name="fields.parent.fields.status.id" Label="ParentStatusId" DataType="DT_I8" />
                <Column Name="fields.parent.fields.status.statusCategory.self" Label="ParentStatusCategorySelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.parent.fields.status.statusCategory.id" Label="ParentStatusCategoryId" DataType="DT_I4" />
                <Column Name="fields.parent.fields.status.statusCategory.key" Label="ParentStatusCategoryKey" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.fields.status.statusCategory.colorName" Label="ParentStatusCategoryColorName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.fields.status.statusCategory.name" Label="ParentStatusCategoryName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.fields.priority.self" Label="ParentprioritySelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.parent.fields.priority.iconUrl" Label="ParentpriorityIconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.parent.fields.priority.name" Label="ParentpriorityName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.fields.priority.id" Label="ParentpriorityId" DataType="DT_I4" />
                <Column Name="fields.parent.fields.issuetype.self" Label="ParentIssueTypeSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.parent.fields.issuetype.id" Label="ParentIssueTypeId" DataType="DT_I8" />
                <Column Name="fields.parent.fields.issuetype.description" Label="ParentIssueTypeDescription" DataType="DT_WSTR" Length="2000" />
                <Column Name="fields.parent.fields.issuetype.iconUrl" Label="ParentIssueTypeIconUrl" DataType="DT_WSTR" Length="500" />
                <Column Name="fields.parent.fields.issuetype.name" Label="ParentIssueTypeName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.parent.fields.issuetype.subtask" Label="ParentIssueTypeSubtask" DataType="DT_BOOL" />
                <Column Name="fields.parent.fields.issuetype.avatarId" Label="ParentIssueTypeAvatarId" DataType="DT_I4" />
                <Column Name="fields.parent.fields.issuetype.entityId" Label="ParentIssueTypeEntityId" DataType="DT_GUID" />
                <Column Name="fields.parent.fields.issuetype.hierarchyLevel" Label="ParentIssueTypeHierarchyLevel" DataType="DT_I4" />
                <Column Name="fields.assignee" Label="Assignee" DataType="DT_WSTR" Length="150" />
                <Column Name="fields.resolution.self" Label="ResolutionSelf" DataType="DT_WSTR" Length="150" />

                <!-- DYNAMIC CUSTOM FIELDS  -->

                <!-- Textbox, Number, Date, Url... customfield_123: "xx" or customfield_123: ["tag1", "tag2"] -->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]" Desc="[$parent.name$]" DataType="DT_WSTR" Length="2000" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />

                <!-- Dropdown Single / Radio (value - i.e. label)... customfield_123: {value: xx} -->
                <Column Name="fields.[$parent.key$].value" Label="[$parent.key$]_value" Desc="[$parent.name$]_value" DataType="DT_WSTR" Length="2000" Expand="True" 
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option' &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />
                <!-- Dropdown Single / Radio (id) / Team Picker... customfield_123: {id: xx} for team : customfield_123: {id: xx, name: team-name, title:...} -->
                <Column Name="fields.[$parent.key$].id" Label="[$parent.key$]_id" Desc="[$parent.name$]_id" DataType="DT_WSTR" Length="20" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=~/option$|team$/ &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />

                <!-- Multi Select Checkbox / List ... customfield_123: [{value: xx}, {value: yy}, {value: zz}]. $.data[*].value is used becuase when Array format needs filter we wrap behind the scene unde { data: <content> } so filter can be invoked at root level-->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]_values" Desc="[$parent.name$]_values" DataType="DT_WSTR" Length="2000" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='array'  &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;"
                        Functions="[$1]|~|$.data[*].value|~|,,FUN_JSON_TO_TEXT" />

                <!-- Paragraph ... customfield_123: { content:[ {content: [{text: zzz},{text: zzz}...]} , {content: [{text: zzz}, {text: zzz},..]} , ...] } -->
                <Column Name="fields.[$parent.key$].content" Label="[$parent.key$]_text"
                        Desc="[$parent.name$]_text Join formatted text blocks using space separator (new lines will be lost)" DataType="DT_NTEXT" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.custom=~/textarea$/  &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;" Functions="[$1]|~|$..text|~| ,FUN_JSON_TO_TEXT" />

				<!-- User ... customfield_123: { accountId:zzz, email: zzz ...} -->
                <Column Name="fields.[$parent.key$].accountId" Label="[$parent.key$]_accountId" Desc="[$parent.name$]_accountId" DataType="DT_WSTR" Length="100" Expand="True" 
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='user' &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />
                <Column Name="fields.[$parent.key$].emailAddress" Label="[$parent.key$]_email" Desc="[$parent.name$]_email" DataType="DT_WSTR" Length="300" Expand="True" 
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='user' &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />						

				<!-- Team ... customfield_123: {id: xx, name: team-name, title:...} -->
                <Column Name="fields.[$parent.key$].name" Label="[$parent.key$]_name" Desc="[$parent.name$]_name" DataType="DT_WSTR" Length="300" Expand="True" 
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='team' &amp;&amp; @key=~/&lt;&lt;[$CustomColumnsRegex$]|~|~|~||,FUN_REPLACE&gt;&gt;/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=array;DT_BOOL=?;" />												
            </OutputColumns>
        </EndPoint>

        <!-- INSERT ISSUES -->
        <EndPoint Name="create_issues" Label="Create Issues" Url="/issue/bulk" Method="POST" BatchSize="50" ContentType="application/json" DotAsPath="True"
                  Filter="$.issues[*]">
            <Body>
                <![CDATA[{ "issueUpdates" : {$rows$} } ]]>
            </Body>
            <InputColumns>
                <Column Name="fields.project.id" Label="ProjectId" DataType="DT_WSTR" Length="50"
                        Desc="Project in which to create an issue. Must use this field or ProjectKey" />
                <Column Name="fields.project.key" Label="ProjectKey" DataType="DT_WSTR" Length="50"
                        Desc="Project in which to create an issue. Must use this field or ProjectId" />
                <Column Name="fields.summary" Label="Summary" DataType="DT_WSTR" Length="150" Desc="Issue title" />
                <Column Name="fields.description" Label="Description" Raw="True"
                        ValueTemplate="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="fields.description" Label="DescriptionFormatted" DataType="DT_NTEXT" Raw="True"
                        Example="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;Your description&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        HelpLink="https://community.developer.atlassian.com/t/how-to-show-description-text-in-visual-format-instead-of-text-while-creating-issue-using-rest-call/37667" />
                <Column Name="fields.environment" Label="Environment" Raw="True"
                        ValueTemplate="{ &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="fields.environment_formatted" Label="EnvironmentFormatted" Desc="" DataType="DT_NTEXT" Raw="True"
                        Example="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;Your description&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        HelpLink="https://community.developer.atlassian.com/t/how-to-show-description-text-in-visual-format-instead-of-text-while-creating-issue-using-rest-call/37667" />
                <Column Name="fields.issuetype.id" Label="IssueTypeId" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.issuetype.name" Label="IssueTypeName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.assignee.id" Label="AssigneeUserId" DataType="DT_WSTR" Length="50" Desc="User ID representing a user assigned to an issue"
                        Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />
                <Column Name="fields.reporter.id" Label="ReporterUserId" DataType="DT_WSTR" Length="50"
                        Desc="User ID representing a user who reported an issue" Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />

                <Column Name="fields.labels" Label="Labels" Raw="True" Desc="Labels, assigned to an issue in JSON string array format"
                        Example="[&quot;myBadge&quot;,&quot;anotherBadge&quot;]" DataType="DT_WSTR" Length="2000" />
                <Column Name="fields.duedate" Label="DueDate" DataType="DT_DBDATE" Desc="A date refering to due date of an issue" Example="2029-11-25" />

                <!-- custom fields (to treat type as raw add in RawInfoMap and DT_RAW both places for now TFS8293)-->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]" Desc="[$parent.name$]" DataType="DT_WSTR" Length="2000" Expand="True"
                        DataEndPoint="get_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.custom=~/^((?!textarea).)*$/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type;Raw=schema.type" RawInfoMap="option,array,user,team"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=option,array,user;DT_BOOL=?;" />

                <!-- option (dropdown) support easy write by _value or _id field -->
                <Column Name="fields.[$parent.key$].value" Label="[$parent.key$]_value" Desc="Set [$parent.name$] value by option text" DataType="DT_WSTR"
                        Length="2000" Expand="True" DataEndPoint="get_fields"
                        DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option')]"
                        ColumnInfoMap="Name=key;DataType=schema.type" DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_BOOL=?;" />
                <Column Name="fields.[$parent.key$].id" Label="[$parent.key$]_id" Desc="Set [$parent.name$] value by option id" DataType="DT_WSTR"
                        Length="20" Expand="True" DataEndPoint="get_fields"
                        DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option')]"
                        ColumnInfoMap="Name=key;DataType=schema.type" DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_BOOL=?;" />

                <!-- Paragraph ... customfield_123: { content:[ {content: [{text: zzz},{text: zzz}...]} , {content: [{text: zzz}, {text: zzz},..]} , ...] } -->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]_text" Desc="[$parent.name$]_text" DataType="DT_NTEXT" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.custom=~/textarea$/)]"
                        ColumnInfoMap="Name=key" Raw="True"
                        ValueTemplate="{
          &quot;type&quot;: &quot;doc&quot;,
          &quot;version&quot;: 1,
          &quot;content&quot;: [
            {
              &quot;type&quot;: &quot;paragraph&quot;,
              &quot;content&quot;: [
                {
                  &quot;type&quot;: &quot;text&quot;,
                  &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;
                }
              ]
            }
          ]
        }" />

            </InputColumns>
            <OutputColumns>
                <Column Name="id" DataType="DT_WSTR" Length="50" />
                <Column Name="key" DataType="DT_WSTR" Length="50" />
                <Column Name="self" DataType="DT_WSTR" Length="450" />
            </OutputColumns>
        </EndPoint>

        <!-- UPDATE ISSUES -->
        <EndPoint Name="update_issue" Label="Update Issue" Url="/issue/[$IssueIdOrKey$]" Method="PUT" ContentType="application/json" DotAsPath="True"
                  JsonRowFormat="Multicontent">
            <Params>
                <Param Name="IssueIdOrKey" Type="Placeholder" Desc="Enter Issue ID or Key" Example="100002 or MYISSUE-1" ReadAs="Id" IsKey="True" />
                <Param Name="NotifyUsers" Key="notifyUsers" Options=";true;false" Type="Query" Value="false"
                       Desc="Whether a notification email about the issue update is sent to all watchers. Possible values: true, false" Example="false" />
                <Param Name="OverrideScreenSecurity" Options=";true;false" Key="overrideScreenSecurity" Type="Query" Value="false"
                       Desc="Whether screen security should be overridden to enable hidden fields to be edited. Possible values: true, false" Example="true" />
                <Param Name="OverrideEditableFlag" Options=";true;false" Key="overrideEditableFlag" Type="Query" Value="false"
                       Desc="Whether screen security should be overridden to enable uneditable fields to be edited. Possible values: true, false"
                       Example="false" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <Body>
                <![CDATA[ {$rows$} ]]>
            </Body>
            <OutputColumns>
                <Column Name="body" DataType="DT_WSTR" />
            </OutputColumns>
            <InputColumns>
                <Column Name="IssueIdOrKey" Label="Id" MapToParam="True" Key="True" DataType="DT_STR" Length="50" ExcludeFromRowMap="True"
                        Desc="Issue Id or Key" />
                <Column Name="fields.project.id" Label="ProjectId" DataType="DT_WSTR" Length="50"
                        Desc="Project in which to create an issue. Must use this field or ProjectKey" />
                <Column Name="fields.project.key" Label="ProjectKey" DataType="DT_WSTR" Length="50"
                        Desc="Project in which to create an issue. Must use this field or ProjectId" />
                <Column Name="fields.summary" Label="Summary" DataType="DT_WSTR" Length="150" Desc="Issue title" />
                <Column Name="fields.description" Label="Description" Raw="True"
                        ValueTemplate="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="fields.description" Label="DescriptionFormatted" DataType="DT_NTEXT" Raw="True"
                        Example="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;Your description&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        HelpLink="https://community.developer.atlassian.com/t/how-to-show-description-text-in-visual-format-instead-of-text-while-creating-issue-using-rest-call/37667" />

                <Column Name="fields.environment" Label="Environment" Raw="True"
                        ValueTemplate="{ &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="fields.environment_formatted" Label="EnvironmentFormatted" Desc="" DataType="DT_NTEXT" Raw="True"
                        Example="{  &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;Your description&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        HelpLink="https://community.developer.atlassian.com/t/how-to-show-description-text-in-visual-format-instead-of-text-while-creating-issue-using-rest-call/37667" />
                <Column Name="fields.issuetype.id" Label="IssueTypeId" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.issuetype.name" Label="IssueTypeName" DataType="DT_WSTR" Length="50" />
                <Column Name="fields.assignee.id" Label="AssigneeUserId" DataType="DT_WSTR" Length="50" Desc="User ID representing a user assigned to an issue"
                        Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />
                <Column Name="fields.reporter.id" Label="ReporterUserId" DataType="DT_WSTR" Length="50"
                        Desc="User ID representing a user who reported an issue" Example="12551:12be2e5a-9ebf-1235-be58-c3ea8c98b9e2" />
						
                <Column Name="fields.labels" Label="Labels" Desc="Labels, assigned to an issue in JSON string array format" Raw="True"
                        Example="[&quot;myBadge&quot;,&quot;anotherBadge&quot;]" DataType="DT_WSTR" Length="2000" />

                <Column Name="fields.duedate" Label="DueDate" DataType="DT_DBDATE" Desc="A date refering to due date of an issue" Example="2029-11-25" />

                <!-- all custom fields (to treat type as raw add in RawInfoMap and DT_RAW both places for now TFS8293)-->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]" Desc="[$parent.name$]" DataType="DT_WSTR" Length="2000" Expand="True"
                        DataEndPoint="get_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.custom=~/^((?!textarea).)*$/)]"
                        ColumnInfoMap="Name=key;DataType=schema.type;Raw=schema.type" RawInfoMap="option,array,user,team"
                        DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_RAW=option,array,user;DT_BOOL=?;" />

                <!-- all custom fields with type=option (dropdown) support easy write by value or id -->
                <Column Name="fields.[$parent.key$].value" Label="[$parent.key$]_value" Desc="Set [$parent.name$] value by option text" DataType="DT_WSTR"
                        Length="2000" Expand="True" DataEndPoint="get_fields"
                        DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option')]"
                        ColumnInfoMap="Name=key;DataType=schema.type" DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_BOOL=?;" />

                <Column Name="fields.[$parent.key$].id" Label="[$parent.key$]_id" Desc="Set [$parent.name$] value by option item id" DataType="DT_WSTR"
                        Length="20" Expand="True" DataEndPoint="get_fields"
                        DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option')]"
                        ColumnInfoMap="Name=key;DataType=schema.type" DataTypeMap="DT_DBDATE=date;DT_DBTIMESTAMP=datetime;DT_NUMERIC=number;DT_BOOL=?;" />

                <!-- Paragraph ... customfield_123: { content:[ {content: [{text: zzz},{text: zzz}...]} , {content: [{text: zzz}, {text: zzz},..]} , ...] } -->
                <Column Name="fields.[$parent.key$]" Label="[$parent.key$]_text" Desc="[$parent.name$]_text" DataType="DT_NTEXT" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.custom=~/textarea$/)]"
                        ColumnInfoMap="Name=key" Raw="True"
                        ValueTemplate="{
          &quot;type&quot;: &quot;doc&quot;,
          &quot;version&quot;: 1,
          &quot;content&quot;: [
            {
              &quot;type&quot;: &quot;paragraph&quot;,
              &quot;content&quot;: [
                {
                  &quot;type&quot;: &quot;text&quot;,
                  &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;
                }
              ]
            }
          ]
        }" />

            </InputColumns>
        </EndPoint>

        <!-- DELETE ISSUE -->
        <EndPoint Name="delete_issue" Label="Delete Issue" Url="/issue/[$IssueIdOrKey$]" Method="DELETE" ResponseFormat="Json">
            <Params>
                <Param Name="IssueIdOrKey" IsKey="True" Type="Placeholder" Desc="Enter Issue ID or Key" Example="100002 or MYISSUE-1" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <OutputColumns>
                <Column Name="Response" DataType="DT_NTEXT" />
            </OutputColumns>
            <InputColumns>
                <Column Name="IssueIdOrKey" Label="Id" MapToParam="True" DataType="DT_WSTR" Key="True" />
            </InputColumns>
        </EndPoint>

        <!-- 
      ========
      WORKLOGS (Lookup by Id not possible due to 2 params required so use child endpoint technique)
      ========
-->
        <EndPoint Name="get_worklogs" Label="Read Worklogs" Template="IssuesTemplate" Method="GET" Filter="$.issues[*]">
            <Params>
                <Param Name="Key" Label="Issue Key(s) or Ids - Comma Separated (PRJA-10,PRJA-13)" IsKey="True" ReadAs="IssueId" Key="jql" Required="False"
                       Type="Query" VisibleIf="SearchBy==Key" Functions="{$rows$}" ValueTemplate="Key in ({$value$})"
                       Desc="Use comma separated IDs or Keys for Issues. 1000 ids max or JIRA internal limit for Payload." />
            </Params>
            <OutputColumns>
                <Column Name="issueId" Label="IssueId" DataType="DT_WSTR" Length="20" />
                <Column Name="p1_key" Label="IssueKey" DataType="DT_WSTR" Length="50" />
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="20" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="P_startAt" Label="StartAt" DataType="DT_I4" />
                <Column Name="P_maxResults" Label="MaxResults" DataType="DT_I4" />
                <Column Name="P_total" Label="Total" DataType="DT_I8" />
                <Column Name="author.self" Label="AuthorSelf" DataType="DT_WSTR" Length="200" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="150" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="200" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="author.active" Label="AuthorIsActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="author.accountType" Label="AuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="comment.content" Label="CommentFormatted" DataType="DT_NTEXT" />
                <Column Name="comment.content" Label="Comment" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="updateAuthor.self" Label="UpdateAuthorSelf" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.accountId" Label="UpdateAuthorAccountId" DataType="DT_WSTR" Length="200" />
                <Column Name="updateAuthor.emailAddress" Label="UpdateAuthorEmailAddress" DataType="DT_WSTR" Length="200" />
                <Column Name="updateAuthor.displayName" Label="UpdateAuthorDisplayName" DataType="DT_WSTR" Length="200" />
                <Column Name="updateAuthor.active" Label="UpdateAuthorActive" DataType="DT_BOOL" />
                <Column Name="updateAuthor.timeZone" Label="UpdateAuthorTimeZone" DataType="DT_WSTR" Length="80" />
                <Column Name="updateAuthor.accountType" Label="UpdateAuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="started" Label="Started" DataType="DT_DBTIMESTAMP" />
                <Column Name="timeSpent" Label="TimeSpent" DataType="DT_WSTR" Length="50" />
                <Column Name="timeSpentSeconds" Label="TimeSpentInSeconds" DataType="DT_I8" />
                <Column Name="author.avatarUrls.48x48" Label="AuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.24x24" Label="AuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.16x16" Label="AuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.32x32" Label="AuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.48x48" Label="UpdateAuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.24x24" Label="UpdateAuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.16x16" Label="UpdateAuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.32x32" Label="UpdateAuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
            </OutputColumns>
            <EndPoint Name="child_get_issue_worklogs" Label="Read Worklogs" Url="/issue/[$parent.id$]/worklog" Method="GET" Filter="$.worklogs[*]"
                      IncludeParentColumns="True" Desc="Pagination not supported, max 5000 worklogs per issue">
            </EndPoint>
        </EndPoint>

        <!-- CREATE WORKLOGS  -->
        <EndPoint Template="WorklogTemplate" Name="create_worklog" Label="Create Worklog" Url="/issue/[$IssueIdOrKey$]/worklog" Method="POST"
                  ResponseFormat="Json" JsonRowFormat="Multicontent" ContentType="application/json" Body="{$rows$}">
        </EndPoint>

        <!-- UPDATE WORKLOGS  -->
        <EndPoint Template="WorklogTemplate" Name="update_worklog" Label="Update Worklog" Url="/issue/[$IssueIdOrKey$]/worklog/[$WorklogId$]" Method="PUT"
                  ResponseFormat="Json" JsonRowFormat="Multicontent" ContentType="application/json" Body="{$rows$}">
            <Params>
                <Param Name="IssueIdOrKey" Type="Placeholder" />
                <Param Name="WorklogId" Type="Placeholder" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <InputColumns>
                <Column Name="WorklogId" Label="Id" MapToParam="True" Key="True" DataType="DT_STR" Length="50" ExcludeFromRowMap="True" />
            </InputColumns>
        </EndPoint>

        <!-- DELETE WORKLOGS  -->
        <EndPoint Name="delete_worklogs" Label="Delete Worklog" Url="/issue/[$IssueIdOrKey$]/worklog/[$WorklogId$]" Method="DELETE" ResponseFormat="Json">
            <Params>
                <Param Name="IssueIdOrKey" Type="Placeholder" />
                <Param Name="WorklogId" Type="Placeholder" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <OutputColumns>
                <Column Name="Response" DataType="DT_NTEXT" />
            </OutputColumns>
            <InputColumns>
                <Column Name="WorklogId" Label="Id" DataType="DT_WSTR" MapToParam="True" Key="True" />
            </InputColumns>
        </EndPoint>


        <!-- 
      ========
      COMMENTS (Lookup by Id not possible due to 2 params required so use child endpoint technique)
      ========
-->
        <EndPoint Name="get_comments" Label="Read Comments" Template="IssuesTemplate" Url="/search?startAt=0&amp;maxResults=100" Method="GET"
                  Filter="$.issues[*]">
            <Params>
                <Param Name="Key" Label="Issue Key(s) or Ids - Comma Separated (PRJA-10,PRJA-13)" IsKey="True" ReadAs="IssueId" Key="jql" Required="False"
                       Type="Query" VisibleIf="SearchBy==Key" Functions="{$rows$}" ValueTemplate="Key in ({$value$})"
                       Desc="Use comma separated IDs or Keys for Issues. 1000 ids max or JIRA internal limit for Payload." />
            </Params>
            <OutputColumns>
                <Column Name="p1_id" Label="IssueId" DataType="DT_WSTR" Length="20" />
                <Column Name="p1_key" Label="IssueKey" DataType="DT_WSTR" Length="50" />
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="20" />
                <Column Name="created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="body.type" Label="BodyType" DataType="DT_WSTR" Length="50" />
                <Column Name="body.content" Label="BodyContent" DataType="DT_NTEXT" />
                <Column Name="body.content" Label="BodyContentText" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="body.version" Label="BodyVersion" DataType="DT_NUMERIC" />
                <Column Name="author.self" Label="AuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="author.avatarUrls.48x48" Label="AuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.24x24" Label="AuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.16x16" Label="AuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.32x32" Label="AuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="author.active" Label="AuthorActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="author.accountType" Label="AuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.self" Label="UpdateAuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="updateAuthor.accountId" Label="UpdateAuthorAccountId" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.emailAddress" Label="UpdateAuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.avatarUrls.48x48" Label="UpdateAuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.24x24" Label="UpdateAuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.16x16" Label="UpdateAuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.32x32" Label="UpdateAuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.displayName" Label="UpdateAuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.active" Label="UpdateAuthorActive" DataType="DT_BOOL" />
                <Column Name="updateAuthor.timeZone" Label="UpdateAuthorTimeZone" DataType="DT_WSTR" Length="44" />
                <Column Name="updateAuthor.accountType" Label="UpdateAuthorAccountType" DataType="DT_WSTR" Length="36" />
                <Column Name="jsdPublic" DataType="DT_BOOL" />
            </OutputColumns>
            <EndPoint Name="child_issue_comments" Url="/issue/[$parent.key$]/comment?startAt=0&amp;maxResults=100" Method="GET" Filter="$.comments[*]">
                <Params>
                    <Param Name="PagingMode" Type="Property" Value="1" />
                    <Param Name="PagingByUrlAttributeName" Type="Property" Value="startAt" />
                    <Param Name="PagingIncrementBy" Type="Property" Value="100" Hidden="True" Desc="Must be same as maxResults in the URL" />
                    <Param Name="PagingByUrlCurrentPage" Type="Property" Value="0" />
                    <Param Name="PagingMaxRowsExpr" Type="Property" Value="$.total" />
                    <Param Name="PagingMaxRowsDataPathExpr" Type="Property" Value="$.comments[*]" Desc="This saves last request if we maintain counter based on data node, some endpoint may not use this but still works well." />					
                </Params>
            </EndPoint>
        </EndPoint>
        <EndPoint Name="create_comment" Label="Create Issue Comment" Url="/issue/[$IssueIdOrKey$]/comment" Method="POST" JsonRowFormat="Multicontent"
                  ContentType="application/json" Body="{$rows$}">
            <Params>
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
            </Params>
            <InputColumns>
                <Column Name="IssueIdOrKey" Label="IssueId" MapToParam="True" />
                <Column Name="body" Label="Body" Raw="True"
                        ValueTemplate="{ &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="body" Label="BodyFormatted" DataType="DT_NTEXT" Raw="True" />
            </InputColumns>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="20" />
                <Column Name="created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="body.type" Label="BodyType" DataType="DT_WSTR" Length="50" />
                <Column Name="body.content" Label="BodyContent" DataType="DT_NTEXT" />
                <Column Name="body.content" Label="BodyContentText" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="body.version" Label="BodyVersion" DataType="DT_NUMERIC" />
                <Column Name="author.self" Label="AuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="author.avatarUrls.48x48" Label="AuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.24x24" Label="AuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.16x16" Label="AuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.32x32" Label="AuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="author.active" Label="AuthorActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="author.accountType" Label="AuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.self" Label="UpdateAuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="updateAuthor.accountId" Label="UpdateAuthorAccountId" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.emailAddress" Label="UpdateAuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.avatarUrls.48x48" Label="UpdateAuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.24x24" Label="UpdateAuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.16x16" Label="UpdateAuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.32x32" Label="UpdateAuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.displayName" Label="UpdateAuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.active" Label="UpdateAuthorActive" DataType="DT_BOOL" />
                <Column Name="updateAuthor.timeZone" Label="UpdateAuthorTimeZone" DataType="DT_WSTR" Length="44" />
                <Column Name="updateAuthor.accountType" Label="UpdateAuthorAccountType" DataType="DT_WSTR" Length="36" />
                <Column Name="jsdPublic" DataType="DT_BOOL" />
            </OutputColumns>
        </EndPoint>

        <EndPoint Name="update_comment" Label="Update Issue Comment" Url="/issue/[$IssueIdOrKey$]/comment/[$CommentId$]" Method="PUT"
                  JsonRowFormat="Multicontent" ContentType="application/json" Body="{$rows$}">
            <Params>
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
                <Param Name="CommentId" ReadAs="Id" Label="Comment Id" Type="Placeholder" Required="True" />
            </Params>
            <InputColumns>
                <Column Name="CommentId" Label="Id" MapToParam="True" Key="True" />
                <Column Name="IssueIdOrKey" Label="IssueId" MapToParam="True" />

                <Column Name="body" Label="Body" Raw="True"
                        ValueTemplate="{ &quot;type&quot;: &quot;doc&quot;, &quot;version&quot;: 1, &quot;content&quot;: [ { &quot;type&quot;: &quot;paragraph&quot;, &quot;content&quot;: [ { &quot;text&quot;: &quot;&lt;&lt;{$value$},FUN_JSONENC&gt;&gt;&quot;, &quot;type&quot;: &quot;text&quot; } ] } ] }"
                        DataType="DT_NTEXT" />
                <Column Name="body" Label="BodyFormatted" DataType="DT_NTEXT" Raw="True" />
            </InputColumns>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="20" />
                <Column Name="created" Label="Created" DataType="DT_DBTIMESTAMP" />
                <Column Name="updated" Label="Updated" DataType="DT_DBTIMESTAMP" />
                <Column Name="self" Label="Self" DataType="DT_WSTR" Length="150" />
                <Column Name="body.type" Label="BodyType" DataType="DT_WSTR" Length="50" />
                <Column Name="body.content" Label="BodyContent" DataType="DT_NTEXT" />
                <Column Name="body.content" Label="BodyContentText" DataType="DT_NTEXT" Functions="[$1]|~|$..content[*].text|~| ,FUN_JSON_TO_TEXT"
                        Desc="Join formatted text blocks using space separator (new lines will be lost)" />
                <Column Name="body.version" Label="BodyVersion" DataType="DT_NUMERIC" />
                <Column Name="author.self" Label="AuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="100" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="author.avatarUrls.48x48" Label="AuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.24x24" Label="AuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.16x16" Label="AuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.32x32" Label="AuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="author.active" Label="AuthorActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="100" />
                <Column Name="author.accountType" Label="AuthorAccountType" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.self" Label="UpdateAuthorSelf" DataType="DT_WSTR" Length="150" />
                <Column Name="updateAuthor.accountId" Label="UpdateAuthorAccountId" DataType="DT_WSTR" Length="50" />
                <Column Name="updateAuthor.emailAddress" Label="UpdateAuthorEmailAddress" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.avatarUrls.48x48" Label="UpdateAuthorAvatarUrls48x48" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.24x24" Label="UpdateAuthorAvatarUrls24x24" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.16x16" Label="UpdateAuthorAvatarUrls16x16" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.avatarUrls.32x32" Label="UpdateAuthorAvatarUrls32x32" DataType="DT_WSTR" Length="500" />
                <Column Name="updateAuthor.displayName" Label="UpdateAuthorDisplayName" DataType="DT_WSTR" Length="100" />
                <Column Name="updateAuthor.active" Label="UpdateAuthorActive" DataType="DT_BOOL" />
                <Column Name="updateAuthor.timeZone" Label="UpdateAuthorTimeZone" DataType="DT_WSTR" Length="44" />
                <Column Name="updateAuthor.accountType" Label="UpdateAuthorAccountType" DataType="DT_WSTR" Length="36" />
                <Column Name="jsdPublic" DataType="DT_BOOL" />
            </OutputColumns>
        </EndPoint>

        <EndPoint Name="delete_comment" Label="Delete Issue Comment" Url="/issue/[$IssueIdOrKey$]/comment/[$CommentId$]" Method="DELETE">
            <Params>
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
                <Param Name="CommentId" ReadAs="Id" Label="Comment Id" Type="Placeholder" Required="True" />
                <Param Name="ContinueOn404Error" Key="ContineOn404Error" Label="Continue On 404 Error (When record not found)" Type="Property" Value="False" />
            </Params>
            <OutputColumns>
                <Column Name="Response" DataType="DT_NTEXT" />
            </OutputColumns>
            <InputColumns>
                <Column Name="CommentId" Label="Id" MapToParam="True" Key="True" />
                <Column Name="IssueIdOrKey" Label="IssueId" MapToParam="True" />
            </InputColumns>
        </EndPoint>
        <!-- =====================
               Get changelogs 
      ====================== -->
        <EndPoint Name="get_changelogs" Label="Read Changelogs" Template="Pagination50"
                  Desc="Returns a paginated list of all changelogs for an issue sorted by date, starting from the oldest. OAuth scopes required: read:issue-meta:jira, read:avatar:jira, read:issue.changelog:jira"
                  Url="/issue/[$IssueIdOrKey$]/changelog?startAt=0&amp;maxResults=50" Method="GET" Filter="$.values[*]">
            <Params>
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
            </Params>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="200" />
                <Column Name="author.self" Label="AuthorSelfURL" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="200" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.active" Label="Is AuthorActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="200" />
                <Column Name="created" Label="CreatedDateTime" DataType="DT_DBTIMESTAMP" />
                <Column Name="items" Label="Items" DataType="DT_WSTR" Length="4000" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               Get changelog details 
      ====================== -->
        <EndPoint Name="get_changelog_details" Label="Read Changelog Details"
                  Desc="Returns a paginated list of all changelogs and fields updated for an issue sorted by date, starting from the oldest. OAuth scopes required: read:issue-meta:jira, read:avatar:jira, read:issue.changelog:jira"
                  Url="/issue/[$IssueIdOrKey$]/changelog?startAt=0&amp;maxResults=50" Template="Pagination50" Method="GET" Filter="$.values[*].items[*]"
                  IncludeParentColumns="True">
            <Params>
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
            </Params>
            <OutputColumns>
                <Column Name="P_values_id" Label="Id" DataType="DT_WSTR" Length="200" />
                <Column Name="P_values_author_self" Label="AuthorSelfURL" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="200" />
                <Column Name="P_values_author_emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="500" />
                <Column Name="P_values_author_avatarUrls_48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_avatarUrls_24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_avatarUrls_16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_avatarUrls_32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="1000" />
                <Column Name="P_values_author_active" Label="IsAuthorActive" DataType="DT_BOOL" />
                <Column Name="P_values_author_timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="200" />
                <Column Name="P_values_created" Label="CreatedDateTime" DataType="DT_DBTIMESTAMP" />
                <Column Name="field" Label="Field" DataType="DT_WSTR" Length="255" />
                <Column Name="fieldId" Label="FieldId" DataType="DT_WSTR" Length="255" />
                <Column Name="fieldtype" Label="FieldType" DataType="DT_WSTR" Length="255" />
                <Column Name="from" Label="From" DataType="DT_WSTR" Length="4000" />
                <Column Name="fromString" Label="FromString" DataType="DT_WSTR" Length="4000" />
                <Column Name="to" Label="To" DataType="DT_WSTR" Length="4000" />
                <Column Name="toString" Label="ToString" DataType="DT_WSTR" Length="4000" />

            </OutputColumns>
        </EndPoint>

        <!-- =====================
              Get changelogs by IDs
      ====================== -->
        <EndPoint Name="get_changelogs_by_ids" Label="Read Changelogs by IDs"
                  Desc="Returns changelogs for an issue specified by a list of changelog IDs. OAuth scopes required: read:issue-meta:jira, read:avatar:jira, read:issue.changelog:jira"
                  Url="/issue/[$IssueIdOrKey$]/changelog/list" Method="POST" Body="{&quot;changelogIds&quot;:[[$ChangeLogIds$]]}" Filter="$.histories[*]"
                  ContentType="application/json">
            <Params>
                <!--<Param Name="PagingMode" Type="Property" Value="1" />
        <Param Name="PagingByUrlAttributeName" Type="Property" Value="startAt" />
        <Param Name="PagingIncrementBy" Type="Property" Value="50" />-->
                <Param Name="IssueIdOrKey" Label="IssueId Or Key" Type="Placeholder" Required="True" />
                <Param Name="ChangeLogIds" Label="Comma Separated ChangeLog Ids" Type="Placeholder" Required="True" />
            </Params>
            <OutputColumns>
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="200" />
                <Column Name="author.self" Label="AuthorSelfURL" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.accountId" Label="AuthorAccountId" DataType="DT_WSTR" Length="200" />
                <Column Name="author.emailAddress" Label="AuthorEmailAddress" DataType="DT_WSTR" Length="500" />
                <Column Name="author.avatarUrls.48x48" Label="AvatarUrls48x48" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.24x24" Label="AvatarUrls24x24" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.16x16" Label="AvatarUrls16x16" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.avatarUrls.32x32" Label="AvatarUrls32x32" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.displayName" Label="AuthorDisplayName" DataType="DT_WSTR" Length="1000" />
                <Column Name="author.active" Label="IsAuthorActive" DataType="DT_BOOL" />
                <Column Name="author.timeZone" Label="AuthorTimeZone" DataType="DT_WSTR" Length="200" />
                <Column Name="created" Label="CreatedDateTime" DataType="DT_DBTIMESTAMP" />
                <Column Name="items" Label="Items" DataType="DT_WSTR" Length="4000" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               Get custom field contexts
      ====================== -->
        <EndPoint Name="get_custom_field_contexts" Label="Get custom field contexts"
                  Desc="Returns a paginated list list of contexts for a custom field. OAuth scopes required: read:field:jira, read:custom-field-contextual-configuration:jira"
                  Url="/field/[$FieldId$]/context?startAt=0&amp;maxResults=50" Template="Pagination50" Method="GET" Filter="$.values[*]"
                  IncludeParentColumns="True">
            <Params>
                <Param Name="FieldId" Label="FieldId" DataType="DT_WSTR" Length="100" Required="True" />
            </Params>
            <OutputColumns>
                <Column Name="P_isLast" Label="IsLast" DataType="DT_BOOL" />
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="100" />
                <Column Name="name" Label="Name" DataType="DT_WSTR" Length="1000" />
                <Column Name="description" Label="Description" DataType="DT_WSTR" Length="4000" />
                <Column Name="isGlobalContext" Label="IsGlobalContext" DataType="DT_BOOL" />
                <Column Name="isAnyIssueType" Label="IsAnyIssueType" DataType="DT_BOOL" />
            </OutputColumns>
        </EndPoint>

        <!-- =====================
               Get custom field options (context)
      ====================== -->
        <EndPoint Name="get_custom_field_option_for_context" Label="Get custom field context options"
                  Desc="Returns a paginated list of all custom field option for a context. Options are returned first then cascading options, in the order they display in Jira. OAuth scopes required: read:field.option:jira"
                  Url="/field/[$FieldId$]/context/[$ContextId$]/option?startAt=0&amp;maxResults=50" Template="Pagination50" Method="GET" Filter="$.values[*]"
                  IncludeParentColumns="True">
            <Params>
                <Param Name="FieldId" Label="FieldId" DataType="DT_WSTR" Length="100" Required="True" />
                <Param Name="ContextId" Label="ContextId" DataType="DT_WSTR" Length="100" Required="True" />
            </Params>
            <OutputColumns>
                <Column Name="P_isLast" Label="IsLast" DataType="DT_BOOL" />
                <Column Name="id" Label="Id" DataType="DT_WSTR" Length="100" />
                <Column Name="value" Label="Value" DataType="DT_WSTR" Length="1000" />
                <Column Name="disabled" Label="Isdisabled" DataType="DT_BOOL" />
                <Column Name="optionId" Label="OptionId" DataType="DT_WSTR" Length="1000" />
            </OutputColumns>
        </EndPoint>

    </EndPoints>

    <Tables>
        <Table Name="Fields" SelectEndPoint="get_fields" />
        <Table Name="Projects" SelectEndPoint="get_projects" InsertEndPoint="create_project" UpdateEndPoint="upsert_project" UpsertEndPoint="upsert_project"
               DeleteEndPoint="delete_project" />
        <Table Name="ApplicationRoles" SelectEndPoint="get_applicationroles" />
        <Table Name="Groups" SelectEndPoint="get_groups" />
        <Table Name="Users" SelectEndPoint="get_users" InsertEndPoint="create_user" DeleteEndPoint="delete_user" />
        <Table Name="IssueTypes" SelectEndPoint="get_types" />
        <Table Name="Issues" SelectEndPoint="get_issues" LookupEndPoint="get_issues" InsertEndPoint="create_issues" UpdateEndPoint="update_issue"
               DeleteEndPoint="delete_issue" />
        <Table Name="Worklogs" SelectEndPoint="get_worklogs" InsertEndPoint="create_worklog" UpdateEndPoint="update_worklog" DeleteEndPoint="delete_worklogs"
               LookupEndPoint="get_worklogs" />
        <Table Name="Comments" SelectEndPoint="get_comments" LookupEndPoint="get_comments" InsertEndPoint="create_comment" UpdateEndPoint="update_comment"
               DeleteEndPoint="delete_comment" />
    </Tables>
    <!-- FIELDS -->
    <Examples>
        <Example Default="True" Group="ODBC" Label="List issues" Code="SELECT * FROM Issues" Desc="Lists all issues"></Example>

        <Example Group="ODBC" Label="List a single issue by Id"  Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='10001')" Desc="List a single issue by Key (e.g. CS-123) or Numeric Id (e.g. 10001)."></Example>
		<Example Group="ODBC" Label="List a single issue by Id - Continue on a specific error message"  Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='10001', ContineOnErrorForMessage=1, ErrorSubstringToMatch='Issue does not exist')" 
			Desc="By default if issue is not found or search condition is bad you may get an error but you can continue by setting ContineOnErrorForMessage=1 and message you like to ignore in ErrorSubstringToMatch."></Example>
		
        <Example Group="ODBC" Label="List a single issue by Key" Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='CS-1')" Desc="List a single issue by Key (e.g. CS-123) or Numeric Id (e.g. 10001)."></Example>
        
		<Example Group="ODBC" Label="List multiple issues by Id or Key" Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='CS-1, CS-2, 10003, 10004')"
                 Desc="List multiple issues by comma separated Key(s) or Numeric Id(s).">
        </Example>
        <Example Group="ODBC" Label="List all issues for a specific project" Code="SELECT * FROM Issues WITH(Project='CS')"
                 Desc="List all issues for a specified project code.">
        </Example>

        <Example Group="ODBC" Label="Search issues using Advanced JQL query expression" Desc="List issues using JQL query expression">
            <Code>
                <![CDATA[SELECT * FROM Issues WITH (Jql='status IN (Done, Closed) AND created > -5d' )
/*
Useful links:
  https://support.atlassian.com/jira-work-management/docs/jql-fields/
  https://www.atlassian.com/software/jira/guides/jql/tutorials#advanced-search
  https://www.atlassian.com/blog/jira/jql-the-most-flexible-way-to-search-jira-14
  
Other Possible JQL expressions:

Ids (IN):       key IN(10001, 10002, 10003);
Keys (IN):       key IN(CS-1, CS-2, CS-3);
Projects (IN):       project IN(PROJ1, PROJ2, PROJ3);
Status (EQUAL):       status='Done';
Date (Expression 1):       created >=-5d;
Date (Expression 2):       created >=startOfMonth() AND created <=now();
Date (Expression 3):       created >=startOfYear() AND created <=startOfDay();
Date (Static):       created >= '2008/12/31';
Date (Static with time):       created >= '2008/12/31 23:59';
Project and Status (AND + IN):       project=CS AND status NOT IN ('Done', 'Open', 'Closed');
Assignee and Created Date:    assignee is NOT EMPTY and created < -1d;
Text (Contains - Fuzzy):       Summary ~ 'some words' OR description ~ 'some words';
Text (Contains - Fuzzy Wildcard):       Summary ~ 'some*' OR description ~ 'some*';
Text (Contains - Exact):       Summary ~ '\"exact words\"' OR description ~ '\"exact words\"';
Text (Does Not Contain - Fuzzy):       Summary !~ 'some words' OR description !~ 'some words';
Empty OR Null:   fixVersion is empty OR fixVersion is null;
Is Not Empty OR Is Not Null:    fixVersion is not empty OR fixVersion is not null;
WAS Operator (previous value):       status WAS "Resolved" BY (jsmith,srogen) BEFORE "2019/02/02";
WAS IN Operator:   status WAS IN ("Resolved", "In Progress");
WAS NOT IN Operator:    status WAS NOT IN ("Resolved", "In Progress");
WAS + BY + DURING (date range):       status WAS "Resolved" BY (jsmith,srogen) DURING("2019/02/02", "2020/02/02");
CHANGED operator:    assignee CHANGED;
CHANGED operator (multiple):       status CHANGED FROM "In Progress" TO "Open"

*/        
        
        ]]>
            </Code>
        </Example>

        <Example Group="ODBC" Label="INSERT Issue" Desc="Inserts a single issue to a particular project">
            <Code>
                <![CDATA[INSERT INTO Issues(ProjectKey, IssueTypeName, Summary, Description)
VALUES('SMP', 'Task', 'My ticket inserted through the API', 'A description about an issue')
WITH (Output=1)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="INSERT Multiple Issues (BULK Load from External System like Microsoft SQL Server / ODBC)" Desc="Inserts multiple issues from an external source (e.g. Microsoft SQL Server or ODBC)">
            <Code>
                <![CDATA[INSERT INTO Issues(ProjectKey, IssueTypeName, Summary, Description)
SOURCE('MSSQL' --OR ODBC
, 'Data Source=localhost;Initial Catalog=Northwind;Integrated Security=true'
--For ODBC
--, 'Dsn=MyOdbcDsn' 
--, 'Driver={My ODBC Driver Type}...' 
--Alias must match Supported Input Columns - Use Query Builder to find Input Column Names
,'select top 10 C_ProjKey as ProjectKey, C_Type as IssueTypeName, C_Summary as Summary, C_Desc as Description FROM Orders'

--Static value example
--,'select top 10 ''CS'' as ProjectKey, ''New Feature'' as IssueTypeName, ''Task created - <<FUN_SEQUENCE>>'' Summary, ''A description <<FUN_NOW>>'' Description FROM Orders'
)				
				]]>
            </Code>
        </Example>		

WITH (Output=1)		
        <Example Group="ODBC" Label="UPDATE Issue" Desc="Updates an issue">
            <Code>
                <![CDATA[UPDATE Issues
SET Summary = 'This is my summary'
   ,Description = 'Lot''s of stuff to describe'
   ,Labels = '[ "bugfix" ]'
   ,DueDate = '2029-10-10'
--WHERE Id=1234   
--WHERE Id='ISSKEY'   
WITH (
	IssueIdOrKey='ISSKEY', --or use Id in where clause 
	Output=1,
	NotifyUsers=0,
	OverrideScreenSecurity=0,
	OverrideEditableFlag=0,
	ContinueOn404Error=0
)']]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="UPDATE / Insert Issue with Custom Fields"
                 Desc="Updates or Insert an issue with custom fields of various types (dropdown, radio, textarea .. so on)">
            <Code>
                <![CDATA[UPDATE Issues
SET customfield_10050='[{"value":"AAA"},{"value":"BBB"}]'	--CUSTOM Checkboxes field update (Must use Raw JSON)
,customfield_10051='2020-12-31'	--CUSTOM Date field update
,customfield_10052='2020-12-31T23:59:59'	--CUSTOM DateTime field update

--Custom Dropdown / Radio fields
,customfield_10048_value='BBB'	--CUSTOM Dropdown field update (Using value - i.e. item label)
--OR--
--,customfield_10048_id='10022'	--CUSTOM Dropdown field update (Using id - i.e. item id)
--OR--
--,customfield_10048='{"value":"BBB"}'	--CUSTOM Dropdown (Using Raw value)

,customfield_10053='["bugfix","test"]'	--CUSTOM Labels field update (Must use Raw JSON)
,customfield_10057='[{"value":"AAA"},{"value":"BBB"}]'	--CUSTOM Listbox Multiselect field update (Must use Raw JSON)
,customfield_10049=123455555.123	--CUSTOM Number field update
,customfield_10054_text='Long string...line-1 
	Long string... line-2 
	Long string... line-3'	--CUSTOM Paragraph field update

,customfield_10055_value='BBB'	--CUSTOM Radio field update by value
--OR--
--,customfield_10055_id='10023'	--CUSTOM Radio field update

,customfield_10058='https://zappysys.com'	--CUSTOM Url field update
,customfield_10059_accountId="5dd64082af96bc0efbe55103" --CUSTOM User field update (update by accountId)
--OR--
--,customfield_10059='{"accountId":"5dd64082af96bc0efbe55103","displayName":"System"}'	--CUSTOM User field update --accountId=5dd64082af96bc0efbe55103
,customfield_10060='Custom text single line'	--CUSTOM text single line field 
,customfield_10001='577069e1-1bcd-4b1e-9070-0b2475830d1c'	--CUSTOM Team field update (update by Team Id)
--WHERE Id=10000
WITH (
	IssueIdOrKey='ISSKEY', --or use Id in where clause 
	Output=1,
	NotifyUsers=0,
	OverrideScreenSecurity=0,
	OverrideEditableFlag=0,
	ContinueOn404Error=0
)

--For INSERT use same values with same fields like below. For Insert you do not have to specify Id or Key
--INSERT INTO Issues(ProjectKey, IssueTypeName, Summary, Description, customfield_10050,....., customfield_10060) 
--VALUES ('SMP', 'Task', 'My ticket inserted through the API', 'A description about an issue', '[{"value":"AAA"},{"value":"BBB"}]' ,... 'Custom text single line')

']]>
            </Code>
        </Example>


        <Example Group="ODBC" Label="UPDATE multiple Issues matching with JQL search query"
                 Desc="Updates multiple issues which match with certain condition (JQL). Adding Where 1=1 or some other WHERE condition invokes Lookup endpoint (refer to other example to learn about JQL - see Search issues using Advanced JQL query expression)">
            <Code>
                <![CDATA[UPDATE Issues
SET Summary = 'This is done on <<fun_now>>'
Where 1=1
WITH (jql='status=done' , ContinueOn404Error=0)
--WITH (jql='key in(10001, 10002, 10003)' , ContinueOn404Error=0)
--WITH (jql='key in(CS-1, CS-2, CS-3)', ContinueOn404Error=0)
]]>
            </Code>
        </Example>

        <Example Group="ODBC" Label="DELETE Issue" Desc="Deletes a single issue">
            <Code>
                <![CDATA[DELETE FROM Issues
WITH (IssueIdOrKey='10020', OUTPUT=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <Example Group="ODBC" Label="DELETE multiple Issues matching with JQL search query"
                 Desc="Delete multiple issues which match with certain condition (JQL). Adding Where 1=1 or some other WHERE condition invokes Lookup endpoint (refer to other example to learn about JQL - see Search issues using Advanced JQL query expression)">
            <Code>
                <![CDATA[DELETE FROM Issues
Where 1=1
WITH (jql='status=done' , ContinueOn404Error=0)
--WITH (jql='key in(10001, 10002, 10003)' , ContinueOn404Error=0)
--WITH (jql='key in(CS-1, CS-2, CS-3)', ContinueOn404Error=0)
]]>
            </Code>
        </Example>

        <Example Group="ODBC" Label="List comments for all issues" Code="SELECT * FROM Comments" Desc="List comments for all issues"></Example>
        <Example Group="ODBC" Label="List comments for a specific issue Issue Key or Id"
                 Code="SELECT * FROM Comments Where IssueId=10003 --OR WITH(Key='10003')" Desc="List comments for a specific issue">
        </Example>
        <Example Group="ODBC" Label="List comments for a specific issue by Key" Code="SELECT * FROM Comments WITH(Key='CS-1')"
                 Desc="List comments for a specific issue by key">
        </Example>

        <Example Group="ODBC" Label="List comments for issues (search by JQL)"
                 Code="SELECT * FROM Comments WITH (Jql='status IN (Done, Closed) AND created > -5d' )"
                 Desc="List all comments for issues returned from a JQL search expression (refer to previous example to learn about JQL - see Search issues using Advanced JQL query expression) ">
        </Example>

        <Example Group="ODBC" Label="Create a new Issue Comment (Plain Text Body)"
                 Code="INSERT INTO Comments(IssueId,Body) VALUES('CS-2', 'Commented at &lt;&lt;FUN_NOW&gt;&gt;')"
                 Desc="This example creates a new plain text comment for a given Issue Id. You can use Issue Key or Id as an input value.">
        </Example>

        <Example Group="ODBC" Label="Create a new Issue Comment (Formatted Body)"
                 Desc="This example creates a new formatted text comment for a given Issue Id. You can use Issue Key or Id as an input value.">
            <Code>
                <![CDATA[INSERT INTO Comments(IssueId,BodyFormatted) VALUES('CS-3', '{ "content": [
    { "content": [
        { "text": "This is a valid ADF formatted comment.",
          "type": "text" }
           ], 
           "type": "paragraph"
        }
       ], 
       "type": "doc", 
       "version": 1 
     } 
}')]]>
            </Code>
        </Example>


        <Example Group="ODBC" Label="Update an exising Comment (Plain Text Body)"
                 Desc="This example updates an exising comment for a given Issue Id and Comment Id. You can use Issue Key or Id as an input value.">
            <Code>
                <![CDATA[UPDATE Comments
 SET Body='Updated at <<FUN_NOW>>'
WHERE Id=10004
WITH(IssueIdOrKey='CS-2')]]>
            </Code>
        </Example>

        <Example Group="ODBC" Label="Delete an exising Comment" Code="DELETE FROM Comments WHERE Id=10004 WITH(IssueIdOrKey='CS-2')"
                 Desc="This example deletes an exising comment for a given Issue Id and Comment Id. You can use Issue Key or Id as an input value.">
        </Example>


        <Example Group="ODBC" Label="List fields" Code="SELECT * FROM Fields" Desc="Lists all fields that are used and available in issue entity"></Example>

        <!-- PROJECT -->
        <Example Group="ODBC" Label="List projects" Code="SELECT * FROM Projects" Desc="Lists all available projects"></Example>

        <Example Group="ODBC" Label="List worklog entries for a specific issue by Id or Key"
                 Code="SELECT * FROM Worklogs Where IssueId=10003 --WITH(Key='10003')" Desc="List all worklog entries for a specific issue">
        </Example>

        <Example Group="ODBC" Label="List worklogs for issues (search by JQL)"
                 Code="SELECT * FROM Worklogs WITH (Jql='status IN (Done, Closed) AND created > -5d' )"
                 Desc="List all worklogs (time entries) for issues returned from a JQL search expression (refer to previous example to learn about JQL - see Search issues using Advanced JQL query expression) ">
        </Example>


        <Example Group="ODBC" Label="INSERT Project" Desc="Inserts a single project">
            <Code>
                <![CDATA[INSERT INTO Projects(ProjectKey, Name, ProjectTypeKey, LeadAccountId, AssigneeType)
VALUES ('TEST', 'Test Project', 'software', '70122:XXXXXXXX-XXXX-XXXX-XXXX-c5da8c98b9e2', 'PROJECT_LEAD)
WITH (Output=1)')]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="UPDATE Project" Desc="Updates a single project">
            <Code>
                <![CDATA[UPDATE Projects
SET Name = 'My Test Kanban Project'
   ,ProjectCategoryId = 1
WITH (ProjectIdOrKey = 'MYPRJCT', Output=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="DELETE Project" Desc="Deletes a single project">
            <Code>
                <![CDATA[DELETE FROM Projects
WITH (ProjectIdOrKey = '10020', Output=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <!-- USERS -->
        <Example Group="ODBC" Label="List users" Code="SELECT * FROM Users" Desc="Lists all available users"></Example>
        <Example Group="ODBC" Label="INSERT User" Desc="Inserts a single user">
            <Code>
                <![CDATA[INSERT INTO Users(EmailAddress, DisplayName, Name, Password)
VALUES ('my@user.com', 'John Doe', 'John', 'xhedkspstdadaothoua')
WITH (OUTPUT=1)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="DELETE User" Desc="Deletes a single user">
            <Code>
                <![CDATA[DELETE FROM Users
WITH (OUTPUT=1, accountId = '547059:136095a0-XXXX-XXXX-XXXX-3e4c66f26551', ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <!-- ISSUES -->


        <!-- WORKLOGS -->
        <Example Group="ODBC" Label="List worklogs" Code="SELECT * FROM Worklogs" Desc="Lists all worklogs from all issues"></Example>
        <Example Group="ODBC" Label="INSERT Worklog" Desc="Inserts a single worklog to a particular issue">
            <Code>
                <![CDATA[INSERT INTO Worklogs(TimeSpentInSeconds, Comment, StartedAt)
      VALUES(7200,'My Comment!','2020-02-23T16:20:30.123+0000')
      WITH (IssueIdOrKey='ISSKEY-1', OUTPUT=1)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="UPDATE Worklog" Desc="Updates a worklog">
            <Code>
                <![CDATA[UPDATE Worklogs
SET TimeSpentInSeconds = 28800
   ,Comment='My Comment!'
   ,StartedAt='2020-01-23T16:20:30.123+0000'
WITH (IssueIdOrKey='MTK-1', WorklogId='123465', OUTPUT=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="DELETE Worklog" Desc="Deletes a single worklog of an issue">
            <Code>
                <![CDATA[DELETE FROM Worklogs
WITH (IssueIdOrKey='10020', WorklogId='123465', OUTPUT=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="Update Custom Option Field (Dropdown/Radio)"
                 Desc="This example shows how to update a custom field of an issue by Option Value or Id (Of option entry item)">
            <Code>
                <![CDATA[
--(By value)        
UPDATE Issues 
SET customfield_10048_value ='BBB' --supply value (label) of dropdown/radio
WITH (IssueIdOrKey='10020')

--OR-- (By item ID)

UPDATE Issues 
SET customfield_10048_id =10023 --supply id of dropdown/radio item
WITH (IssueIdOrKey='10020')

--OR-- (Raw id)

UPDATE Issues 
SET customfield_10048='{"id":"10023"}' --supply raw json
WITH (IssueIdOrKey='10020')

--OR--  (Raw value)
UPDATE Issues 
SET customfield_10048='{"value":"BBB"}' --supply raw json
WITH (IssueIdOrKey='10020')

--OR--  (set null)

UPDATE Issues 
SET customfield_10048 =null 
WITH (IssueIdOrKey='10020')
		]]>
            </Code>
        </Example>
        <Example Group="ODBC" Label="Update Custom Multi Select / User / Team fields (RAW Json Update)"
                 Desc="This example shows how to update a custom field of type array or other complex fiels like user">
            <Code>
                <![CDATA[
UPDATE Issues 
SET customfield_10048='[{"value":"AAA"}, {"value":"CCC"}]' --supply raw json
WITH (IssueIdOrKey='10020')

--OR-- 

UPDATE Issues 
SET customfield_10048 =null --set to null
WITH (IssueIdOrKey='10020')
		]]>
            </Code>

        </Example>
    </Examples>
</ApiConfig>