Reference

Source code


<?xml version="1.0" encoding="utf-8"?>
<ApiConfig Name="Jira" Slug="jira-connector" 
		   Version="14" 
		   EngineVersion="20" Id="288c083b-6edb-4705-851b-80ecd6357347"
           Desc="Read and write Jira data effortlessly. Track, manage, and automate issues, projects, worklogs, and comments — almost no coding required."
           Logo="data:image/png;base64,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">

    <VersionHistory>
        <Change Ver="14" Date="2026-01-13" Type="New">Updated JQL Examples to include Filter Issues by Last Worklog Updated Date, Explain Time Part is Size Timezone</Change>
        <Change Ver="14" Date="2026-01-13" Type="Fix">UpdatedAfter parameter not working for get_worklogs_after endpoint.</Change>
		<Change Ver="14" Date="2026-01-13" Type="New">Added support for multiple project keys (e.g. SELECT * FROM Issues WITH(SearchBy='Project', Project='PRJ1,PRJ2,PRJ3')</Change>
	    <Change Ver="14" Date="2026-01-13" Type="Fix">Fixed error (400 Bad request) when you lookup Issues table by Id in WHERE clause (e.g. select * from Issues Where Id=100234).</Change>
		<Change Ver="14" Date="2026-01-13" Type="New">Added retry on error code 429 (Too many api requests)</Change>
		
		<Change Ver="13" Date="2025-09-02" Type="Fix">Updated various endpoints to use cursor based pagination rather than old page number increment (e.g. get_issues, get_comments, get_worklogs)</Change>	
		<Change Ver="13" Date="2025-09-02" Type="New">Added a new endpoint get_worklogs_after to fetch worklogs entries modified after a specified date/time</Change>	
	    <Change Ver="13" Date="2025-09-02" Type="Fix">Changed deprecated endpoint /search with /search/jql to avoid - Error: Remote server returned 401 Gone. This is due to CHANGE-2046 (/search endpoint deprecated, now use /search/jql) </Change>	
		
        <Change Ver="12" Date="2025-06-21" Type="New">Added AuthorizeInFullBrowser=True to avoid login error in OAuth Popup</Change>	
        <Change Ver="12" Date="2025-05-19" Type="New">Added support for Cascade Option (Parent-Child Option Selection).</Change>
        <Change Ver="12" Date="2025-03-10" Type="Fix">Fix OAuth malformed HTML instructions inside "Notes" element.</Change>
        
        <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" />
                <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch"
                       Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
                <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
                <Param Name="RetryCountMax" Value="5" Hidden="True" />
                <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />	
            </Params>
            <Notes>
                <![CDATA[Firstly, login into your Atlassian account and then go to your Jira profile:
<p></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" />
                <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch"
                       Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
                <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
                <Param Name="RetryCountMax" Value="5" Hidden="True" />
                <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />	
            </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;AuthorizeInFullBrowser=True;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></p>
<ol>
    <li>
        Go to <a target="_blank" href="https://developer.atlassian.com/console/myapps/">Atlassian Developer area.</a>
    </li>    
    <li>
        <p>
            Click <strong>Create</strong> and select <strong>OAuth 2.0 integration</strong> item to create an OAuth app:
        </p>
    
        <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>
        <p>
            Give your app a name, accept the terms and hit <strong>Create</strong>:
        </p>

        <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>
        <p>
            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:
        </p>

        <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>
        <p>
            Continue by hitting <strong>Edit Scopes</strong> button to assign scopes for the application:
        </p>
        
        <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>
        <p>
            Select these scopes or all of them:
        </p>
        
        <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>
        <p>
            Then click <strong>Authorization</strong> option on the left 
            and click <strong>Add</strong> button:
        </p>
        
        <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>
        <p>
            Enter your own <strong>Callback URL</strong> (Redirect URL) or 
            simply enter <code>https://zappysys.com/oauth</code>, if you don't have one:
        </p>
    
        <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>    
        <p>
            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):
        </p>
        
        <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>
        <p>
            Now go to SSIS package or ODBC data source and in <strong>OAuth</strong> authentication set these parameters:
        </p>
        
        <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])" />
                <Param Name="RetryMode" Value="RetryWhenStatusCodeMatch"
                       Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
                <Param Name="RetryStatusCodeList" Value="429" Hidden="True" />
                <Param Name="RetryCountMax" Value="5" Hidden="True" />
                <Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />	
            </Params>
        </Auth>
    </Auths>

    <Template>
        <Param Name="CustomColumnsRegexParam" 
               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="PaginationCursor">
            <Params>
                <Param Name="PagingMode" Type="Property" Value="ByResponseAttribute" />
                <Param Name="NextUrlAttributeOrExpr" Type="Property" Value="$.nextPageToken" />
                <Param Name="NextUrlSuffix" Type="Property" Value="nextPageToken=&lt;%nextlink%&gt;" />
            </Params>
        </EndPoint>

		<EndPoint Name="IssueSingleTemplate" Url="/search/jql?jql=issueKey IN ([$Key$])" Method="GET" Filter="$.issues[*]">
            <Params>
				<Param Name="Fields" Label="Fields" Value="*all" Key="fields" Type="Query" Options="Default=;Only Keys=id,key;All fields=*all" 
					MultiSelect="True" 
					MultiSelectSeparator=","
					OptionsEndPoint="get_fields"  
					OptionsEndPointLabelColumn="Name"  
					OptionsEndPointValueColumn="Id" 
					OptionsEndPointSortBy="Name"
					/>
                <Param Name="Key" Label="Issue Key(s) or Id(s) (e.g. 10004 -OR- PRJA-1)" IsKey="True" ReadAs="Id" Required="True"
                       Desc="Use ID or Key for Issues. For multiple Keys/Ids use comma to separate them" />					
            </Params>
        </EndPoint>
       <EndPoint Name="WorklogSearchTemplate" Url="/search/jql?startAt=0&amp;maxResults=100" 
				  Template="PaginationCursor" Method="GET" BatchSize="50" RequestFormat="Csv"
                  Filter="$.issues[*]">
            <Params>
                <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>
            <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>

        <Param Name="ProjectParam" Label="Project Key(s) - Comma Separated (CBS,BRK)" Key="jql" Required="False" OptionsEndPoint="get_projects" OptionsEndPointValueColumn="key"
                OptionsEndPointLabelColumn="name" 
                ValueTemplate="project IN ({$value$})" 
                Type="Query" 
                MultiSelect="True" 
                MultiSelectSeparator=","					   
                VisibleIf="SearchBy==Project" 
                Desc="Specify a project to search issues for" />
                
        <Param Name="KeyParam" Label="Issue Key(s) or Ids - Comma Separated (CBS-10,PRA-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="JqlParam" Label="JQL Expression (For Issue Search)" 
					   Value="created >= 1970-01-01"
					   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 (Expression 4 - Site Timezone)=created >= '2008-12-31 23:59';
			   Search Date (Issue Created After Date - Quote1)=created >= '2008-12-31';
               Search Date (Issue Created After Date - Quote2)=created >= &quot;2008-12-31&quot;;
			   Search Date (Issue Created After Date+Time - Site Timezone)=created >= '2008-12-31 23:59';
               Search Date (Issue Updated After Date+Time - Site Timezone)=updated >= &quot;2008-12-31 23:59&quot;;		               
               Search Date (Issue Updated In Last 5 Days)=updated &gt;=-5d;		
               Search Date (Issue Updated In Last 24 Hours)=updated &gt;=-24h;	
               Search Date (Worklog Created or Updated After Date)=worklogDate >= '2008-12-31';
               Search Date (Worklog Created or Updated In Last 2 Days)=worklogDate >= -2d;
               Search Date (Worklog Created or Updated After for Specified Projects)=project IN (PROJ1, PROJ2) AND worklogDate >= '2008-12-31';
               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" />

        <EndPoint Name="IssuesTemplate" Url="/search/jql?startAt=0&amp;maxResults=100" 
				  Template="PaginationCursor" Method="GET" BatchSize="50" RequestFormat="Csv"
                  Filter="$.issues[*]">
            <Params>
				<Param Name="Fields" Label="Fields" Value="*all" Key="fields" Type="Query" Options="Default=;Only Keys=id,key;All fields=*all" 
					MultiSelect="True" 
					MultiSelectSeparator=","
					OptionsEndPoint="get_fields"  
                    OptionsExtra="All fields=*all"  
					OptionsEndPointLabelColumn="Name"  
					OptionsEndPointValueColumn="Id" 
					OptionsEndPointSortBy="Name"
					/>
                <Param Name="SearchBy" Value="JQL" Label="Search by" Options="None=;Project Key(s)=Project;JQL Expression=JQL;Issue Id(s) or Key(s)=Key" />
				
                <Param Name="Project" Template="ProjectParam" />
                <Param Name="JQL" Template="JqlParam" />
                <Param Name="Key" Template="KeyParam" />


                <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="IssueOutputColumns">
            <Params>
                <Param Name="MetaDetectionOrder" Hidden="False" Label="Metadata Mode (Change if columns missing) **SLOW**" Desc="Only change if expected columns are missing (e.g. SLA or nested custom fields). Default uses predefined columns (fast). MergeStaticDynamic scans sample data to infer types and merge with static metadata—slower but exposes nested/document columns; use META='@OverrideMode:1' in SQL to add specific dynamic fields." Options="Default;Static;MergeStaticDynamic"/>
            </Params>
            <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" />

				<!-- Example: Extracting Simple Value (Simple)
				<Column Name="fields.customfield_123.name" Label="SLAName" DataType="DT_WSTR" Length="150"/>				
				-->				
				<!-- Example: Extracting Array Value (first element of array - Check help file for more information about FUN_JSON_TO_TEXT)
				<Column Name="fields.customfield_123" Label="SprintName" ValueTemplate="&lt;&lt;{$value$}|~|$.data[0].name,FUN_JSON_TO_TEXT&gt;&gt;" 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) / Cascade select (parent-child option)... customfield_123: {value: xx}  , for cascade customfield_123: {id: xx, value: xxx, child: { id: xxx, value: xxx}} -->
                <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$|option-with-child$/ &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  / Cascade select (parent-child option)... customfield_123: {id: xx} for team : customfield_123: {id: xx, name: team-name, title:...} , for cascade customfield_123: {id: xx, value: xxx, child: { id: xxx, value: xxx}}  -->
                <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$|option-with-child$|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=?;" />

                <!-- Cascade select (parent-child option)... customfield_123: {id: xx, value: xxx, child: { id: xxx, value: xxx}}  -->
                <Column Name="fields.[$parent.key$].child.value" Label="[$parent.key$]_child_value" Desc="[$parent.name$]_child_value" DataType="DT_WSTR" Length="2000" Expand="True" 
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option-with-child' &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$].child.id" Label="[$parent.key$]_child_id" Desc="[$parent.name$]_child_id" DataType="DT_WSTR" Length="20" Expand="True"
                        DataEndPoint="get_custom_fields" DataEndPointParameters="Filter=$.data[?(@.custom==true &amp;&amp; @schema.type=='option-with-child' &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>

        <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,IssueOutputColumns" Label="Read Issues">
            
        </EndPoint>
        <EndPoint Name="get_issue" Template="IssueSingleTemplate,IssueOutputColumns" Label="Read Issue (By Id)">
            
        </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,WorklogSearchTemplate">
            <Params>
				<Param Name="Fields" Key="fields" Type="Query" Hidden="True" Value="id,key" />
                <Param Name="Key" Template="KeyParam"/>
            </Params>
            <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>

        <EndPoint Name="get_worklogs_after" Label="Read Worklogs modified after a specified date" 
            Template="WorklogSearchTemplate" Url="/search/jql?fields=id,key&amp;startAt=0&amp;maxResults=100&amp;jql=worklogDate >='&lt;&lt;[$UpdatedAfter$]|~|yyyy-MM-dd,FUN_TO_DATE&gt;&gt;'[$Key$][$Project$][$JQL$]" Method="GET" ResponseFormat="Json">
            <Params>
				<Param Name="UpdatedAfter" Label="Worklog Modified After Date/Time" 
                    Required="True"
                    Value="1970-01-01"
                    PushToChildEndPoint="True"
					Desc="You can supply UpdatedAfter or CreatedAfter parameter but not both. If you supply both, CreatedAfter will be ignored. Client side filter to fetch worklogs modified after a specified date and time. Supply this date as server timezone. You can supply date as static value or function. For static value, you can supply date as yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss.fff. For function, you can supply today, today-2d, today-24h, today-1month, today-1year, yesterday, monthstart, monthend, yearstart, yearend, weekstart, weekend, now, now-2h, now-2m."
                    Options="Date Example=2026-02-04;Date and Time Example=2026-02-04T12:59:00;Function=today;Function=today-2d;Function=today-24h;Function=today-1month;Function=today-1year;Function=yesterday;Function=monthstart;Function=monthend;Function=yearstart;Function=yearend;Function=weekstart;Function=weekend;Function=now;Function=now-2h;Function=now-2m"
                    />
                
                <Param Name="JQL"     Type="Placeholder" Template="JqlParam"     ValueTemplate="&lt;&lt;{$value$}|~||~| AND {$value$},FUN_IF_EMPTY&gt;&gt;"  Required="False"/>
                <Param Name="Project" Type="Placeholder" Template="ProjectParam" ValueTemplate="&lt;&lt;{$value$}|~||~| AND project IN ({$value$}),FUN_IF_EMPTY&gt;&gt;" Required="False"/>
                <Param Name="Key"     Type="Placeholder" Template="KeyParam"     ValueTemplate="&lt;&lt;{$value$}|~||~| AND Key in ({$value$}),FUN_IF_EMPTY&gt;&gt;" Required="False"/>
            </Params>
            <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">
				<Params>
					<Param Name="RowFilter"  Value="1=1" Type="Property" ValueTemplate="updated &gt;= &quot;&lt;&lt;[$UpdatedAfter$]|~|yyyy-MM-ddTHH:mm:ss.fff,FUN_TO_DATETIME&gt;&gt;&quot;"/>			
				</Params>
            </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" >
            <Params>
				<Param Name="Fields" Key="fields" Type="Query" Hidden="True" Value="id,key" />
                <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_issue" 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" Slug="read-issues" Label="Read issues">
			<Desc><![CDATA[<p>Gets all issues. By default the query returns every issue; you can narrow results by adding a <code>WITH</code> clause to search by Key, Project, or JQL expression (see the commented options in the code).</p><p>Use <code>SearchBy='Key'</code> with a single key or ID for one issue, or comma-separated keys/IDs for multiple. Use <code>SearchBy='Project'</code> to limit to one or more project codes. Use <code>SearchBy='Jql'</code> with a JQL expression for advanced filtering.</p>]]></Desc>
			<Code>
<![CDATA[
SELECT * FROM Issues

--//Query single issue by numeric Issue Id
--SELECT * FROM Issues Where Id=101234

--//Query issue by numeric Issue Ids (multiple)
--SELECT * FROM Issues WITH(SearchBy='Key', Key='101234,101235,101236')

--//Query issue by Issue Key(s) (alpha-numeric)
--SELECT * FROM Issues WITH(SearchBy='Key', Key='PROJ-11')
--SELECT * FROM Issues WITH(SearchBy='Key', Key='PROJ-11,PROJ-12,PROJ-13')

--//Query issue by project(s)
--SELECT * FROM Issues WITH(SearchBy='Project', Project='PROJ')
--SELECT * FROM Issues WITH(SearchBy='Project', Project='PROJ,KAN,CS')

--//Query issue by JQL expression
--SELECT * FROM Issues WITH(SearchBy='Jql', Jql='status IN (Done, Closed) AND created > -5d' )
]]>			
			</Code>
		</Example>

<Example Group="ODBC" Slug="read-issue-by-id" Label="Read an issue by ID"  Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='10001')">
			<Desc><![CDATA[<p>Gets a single issue by its key (e.g. CS-123) or numeric ID (e.g. 10001). Supply the key or ID in the <code>Key</code> parameter; the connector returns that issue’s fields.</p>]]></Desc>
		</Example>
		<Example Group="ODBC" Slug="read-issue-continue-on-error" Label="Read an issue by ID — continue on specific error"  Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='10001', ContineOnErrorForMessage=1, ErrorSubstringToMatch='Issue does not exist')">
			<Desc><![CDATA[<p>By default, if the issue is not found or the search condition is invalid, the query returns an error. You can tell the connector to continue instead by setting <code>ContineOnErrorForMessage=1</code> and supplying the error message (or a substring) to ignore in <code>ErrorSubstringToMatch</code>.</p>]]></Desc>
		</Example>
		
        <Example Group="ODBC" Slug="read-issue-by-key" Label="Read an issue by Key" Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='CS-1')">
			<Desc><![CDATA[<p>Gets a single issue by its project key and number (e.g. CS-1). Same as reading by ID; use whichever identifier you have.</p>]]></Desc>
		</Example>
        
		<Example Group="ODBC" Slug="read-multiple-issues-by-id-or-key" Label="Read multiple issues by ID or Key" Code="SELECT * FROM Issues WITH(SearchBy='Key', Key='CS-1,CS-2,10003,10004')">
			<Desc><![CDATA[<p>Gets multiple issues in one request. Supply comma-separated keys and/or numeric IDs in the <code>Key</code> parameter; the connector returns all matching issues.</p>]]></Desc>
        </Example>
        <Example Group="ODBC" Slug="read-issues-for-project" Label="Read issues for a project" Code="SELECT * FROM Issues WITH(SearchBy='Project', Project='CS')">
			<Desc><![CDATA[<p>Gets all issues belonging to a given project (or projects). Supply one or more project codes in <code>Project</code>; use a comma-separated list for multiple projects.</p>]]></Desc>
        </Example>
		<Example Group="ODBC" Slug="read-issues-specific-fields" Label="Read issues (specific fields only)" Code="SELECT * FROM Issues WITH(Fields='id,key,summary,status')">
			<Desc><![CDATA[<p>Gets all issues but returns only the columns you specify in <code>Fields</code>, which can speed up the query when you need just a few fields. Use a comma-separated list of field names; <code>*all</code> returns every field.</p>]]></Desc>
		</Example>
		
        <Example Group="ODBC" Slug="read-issues-jql" Label="Read issues using JQL query">
            <Desc><![CDATA[<p>Gets issues that match a JQL (Jira Query Language) expression. Supply the JQL string in the <code>Jql</code> parameter; you can filter by status, project, date, assignee, text, and more.</p><p>See the commented examples in the code for common patterns (IDs, keys, dates, text search, etc.). JQL reference links are included in the snippet.</p>]]></Desc>
            <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" Slug="create-issue" Label="Create an issue">
            <Desc><![CDATA[<p>Creates a single issue in a project. Supply at least <code>ProjectKey</code>, <code>IssueTypeName</code>, <code>Summary</code>, and optionally <code>Description</code> and other columns. Use <code>WITH (Output=1)</code> to return the created issue.</p>]]></Desc>
            <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" Slug="create-multiple-issues-bulk" Label="Create multiple issues (bulk from external source)">
            <Desc><![CDATA[<p>Creates multiple issues by loading rows from an external source such as Microsoft SQL Server or another ODBC database. Use <code>SOURCE('MSSQL', connectionString, query)</code> (or <code>ODBC</code> / driver connection) so that column aliases in the query match the issue input columns (e.g. <code>ProjectKey</code>, <code>IssueTypeName</code>, <code>Summary</code>, <code>Description</code>).</p>]]></Desc>
            <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>		

        <Example Group="ODBC" Slug="update-issue" Label="Update an issue">
            <Desc><![CDATA[<p>Updates an existing issue. Set the columns you want to change (<code>Summary</code>, <code>Description</code>, <code>Labels</code>, <code>DueDate</code>, etc.) and identify the issue with <code>IssueIdOrKey</code> in <code>WITH</code> or in a <code>WHERE</code> clause. Optional <code>WITH</code> parameters control notifications and security overrides.</p>]]></Desc>
            <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" Slug="update-create-issue-custom-fields" Label="Update or create an issue with custom fields">
            <Desc><![CDATA[<p>Updates or creates an issue including custom fields of various types: dropdown, radio, checkboxes, date, labels, number, paragraph, URL, user, team, and single-line text. Use the custom field ID (e.g. <code>customfield_10050</code>) and the appropriate suffix or raw JSON format as shown in the example. For insert, use the same column list in <code>INSERT INTO Issues(...)</code>.</p>]]></Desc>
            <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" Slug="update-multiple-issues-jql" Label="Update multiple issues by JQL">
            <Desc><![CDATA[<p>Updates every issue that matches a JQL expression. Add a <code>WHERE</code> condition (e.g. <code>Where 1=1</code>) so the connector uses the lookup path, then supply the JQL in <code>WITH (jql='...')</code>. All matching issues receive the same column updates.</p>]]></Desc>
            <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" Slug="delete-issue" Label="Delete an issue">
            <Desc><![CDATA[<p>Deletes a single issue. Identify the issue with <code>IssueIdOrKey</code> in the <code>WITH</code> clause. Set <code>ContinueOn404Error=0</code> to treat a missing issue as an error, or <code>1</code> to ignore it.</p>]]></Desc>
            <Code>
                <![CDATA[DELETE FROM Issues
WITH (IssueIdOrKey='10020', OUTPUT=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <Example Group="ODBC" Slug="delete-multiple-issues-jql" Label="Delete multiple issues by JQL">
            <Desc><![CDATA[<p>Deletes every issue that matches a JQL expression. Add a <code>WHERE</code> condition (e.g. <code>Where 1=1</code>) so the connector uses the lookup path, then supply the JQL in <code>WITH (jql='...')</code>. Use with care; all matching issues are removed.</p>]]></Desc>
            <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" Slug="read-comments-all-issues" Label="Read comments for all issues" Code="SELECT * FROM Comments">
			<Desc><![CDATA[<p>Gets every comment across all issues. Use this when you need a flat list of all comments. To limit by issue, use the following examples that filter by issue ID or Key, or by JQL.</p>]]></Desc>
		</Example>
        <Example Group="ODBC" Slug="read-comments-for-issue-by-id" Label="Read comments for an issue by ID or Key"
                 Code="SELECT * FROM Comments Where IssueId=10003 --OR WITH(Key='10003')">
			<Desc><![CDATA[<p>Gets all comments for one issue. Identify the issue by <code>IssueId</code> in the <code>WHERE</code> clause or by <code>Key</code> in <code>WITH</code>.</p>]]></Desc>
        </Example>
        <Example Group="ODBC" Slug="read-comments-for-issue-by-key" Label="Read comments for an issue by Key" Code="SELECT * FROM Comments WITH(Key='CS-1')">
			<Desc><![CDATA[<p>Gets all comments for a single issue identified by its key (e.g. CS-1).</p>]]></Desc>
        </Example>

        <Example Group="ODBC" Slug="read-comments-by-jql" Label="Read comments for issues by JQL"
                 Code="SELECT * FROM Comments WITH (Jql='status IN (Done, Closed) AND created > -5d' )">
			<Desc><![CDATA[<p>Gets all comments for issues that match a JQL expression. The connector first finds issues with the given JQL, then returns comments for those issues. Use the same JQL syntax as in the “Read issues using JQL query” example.</p>]]></Desc>
        </Example>

        <Example Group="ODBC" Slug="create-comment-plain-text" Label="Create a comment (plain text body)"
                 Code="INSERT INTO Comments(IssueId,Body) VALUES('CS-2', 'Commented at &lt;&lt;FUN_NOW&gt;&gt;')">
			<Desc><![CDATA[<p>Creates a new plain-text comment on an issue. Supply the issue key or ID in <code>IssueId</code> and the comment text in <code>Body</code>. You can use functions such as <code>&lt;&lt;FUN_NOW&gt;&gt;</code> in the body.</p>]]></Desc>
        </Example>

        <Example Group="ODBC" Slug="create-comment-formatted-body" Label="Create a comment (formatted body)">
			<Desc><![CDATA[<p>Creates a new comment with formatted (ADF) content. Supply the issue key or ID and a JSON body that follows the Atlassian Document Format; the example shows a simple paragraph with text. Use <code>BodyFormatted</code> for the JSON string.</p>]]></Desc>
            <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" Slug="update-comment-plain-text" Label="Update an existing comment (plain text body)">
			<Desc><![CDATA[<p>Updates an existing comment’s body. Identify the comment by <code>Id</code> in the <code>WHERE</code> clause and the issue by <code>IssueIdOrKey</code> in <code>WITH</code>. Set <code>Body</code> to the new plain text.</p>]]></Desc>
            <Code>
                <![CDATA[UPDATE Comments
 SET Body='Updated at <<FUN_NOW>>'
WHERE Id=10004
WITH(IssueIdOrKey='CS-2')]]>
            </Code>
        </Example>

        <Example Group="ODBC" Slug="delete-comment" Label="Delete an existing comment" Code="DELETE FROM Comments WHERE Id=10004 WITH(IssueIdOrKey='CS-2')">
			<Desc><![CDATA[<p>Deletes one comment. Identify the comment by <code>Id</code> in the <code>WHERE</code> clause and the issue by <code>IssueIdOrKey</code> in <code>WITH</code>.</p>]]></Desc>
        </Example>


        <Example Group="ODBC" Slug="read-fields" Label="Read fields" Code="SELECT * FROM Fields">
			<Desc><![CDATA[<p>Gets all fields that are available and used in the issue entity, including built-in and custom fields. Use this to discover field names and IDs for filtering or for updating custom fields in other examples.</p>]]></Desc>
		</Example>

        <!-- PROJECT -->
        <Example Group="ODBC" Slug="read-projects" Label="Read projects" Code="SELECT * FROM Projects">
			<Desc><![CDATA[<p>Gets all projects. Use this to list project keys and metadata before querying issues or creating new issues in a project.</p>]]></Desc>
		</Example>

        <Example Group="ODBC" Slug="read-worklogs-for-issue" Label="Read worklog entries for an issue by ID or Key"
                 Code="SELECT * FROM Worklogs Where IssueId=10003 --WITH(Key='10003')">
			<Desc><![CDATA[<p>Gets all worklog (time) entries for one issue. Identify the issue by <code>IssueId</code> in the <code>WHERE</code> clause or by <code>Key</code> in <code>WITH</code>.</p>]]></Desc>
        </Example>

        <Example Group="ODBC" Slug="read-worklogs-by-jql" Label="Read worklogs for issues by JQL"
                 Code="SELECT * FROM Worklogs WITH (Jql='status IN (Done, Closed) AND created > -5d' )">
			<Desc><![CDATA[<p>Gets all worklogs for issues that match a JQL expression. The connector finds issues with the given JQL, then returns time entries for those issues. Use the same JQL syntax as in the “Read issues using JQL query” example.</p>]]></Desc>
        </Example>


        <Example Group="ODBC" Slug="read-worklogs-modified-after-date" Label="Read worklogs modified after a date">
			<Desc><![CDATA[<p>Gets worklog entries that were modified after a given date/time. Use the <code>get_worklogs_after</code> table and set <code>UpdatedAfter</code> in <code>WITH</code>; the date is interpreted in the site timezone. You can use a static date or a function (e.g. <code>today-1d</code>, <code>now-24h</code>). Optionally narrow by issue using <code>JQL</code>, <code>Project</code>, or <code>Key</code>.</p>]]></Desc>
            <Code>
                <![CDATA[SELECT * FROM get_worklogs_after
WITH(
	--#### Worklog Filter #####
	  UpdatedAfter='2024-08-23' --only fetch work logs modified after this date/time is Site Timezone
	--OR--
	--UpdatedAfter='2024-08-23T17:03:26.079' --with time part
	--OR--
	--UpdatedAfter='today-1d' --with function. For more information about functions, see https://zappysys.com/links/?id=10014 (Look for FUN_TO_DATETIME)
    --UpdatedAfter='monthstart+7d' 
	--UpdatedAfter='now-24h' 
    
	--#### Issue Filter (Optional) #####
    --Search issues by Project / JQL expression / Issue Keys. If not specified all issues returned
	--,JQL='key IN(CS-1, CS-2, CS-3)' 
	--,Project='PRJ1,PRJ2' 
	--,Key='CS-1,CS-2,CS-3' 
)]]>
            </Code>
        </Example>
		

        <Example Group="ODBC" Slug="create-project" Label="Create a project">
			<Desc><![CDATA[<p>Creates a single project. Supply <code>ProjectKey</code>, <code>Name</code>, <code>ProjectTypeKey</code>, <code>LeadAccountId</code>, and <code>AssigneeType</code>. Use <code>WITH (Output=1)</code> to return the created project.</p>]]></Desc>
            <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" Slug="update-project" Label="Update a project">
			<Desc><![CDATA[<p>Updates an existing project. Set the columns to change (e.g. <code>Name</code>, <code>ProjectCategoryId</code>) and identify the project with <code>ProjectIdOrKey</code> in <code>WITH</code>.</p>]]></Desc>
            <Code>
                <![CDATA[UPDATE Projects
SET Name = 'My Test Kanban Project'
   ,ProjectCategoryId = 1
WITH (ProjectIdOrKey = 'MYPRJCT', Output=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Slug="delete-project" Label="Delete a project">
			<Desc><![CDATA[<p>Deletes a single project. Identify the project with <code>ProjectIdOrKey</code> in the <code>WITH</code> clause. Use with care; deletion may be restricted by Jira configuration.</p>]]></Desc>
            <Code>
                <![CDATA[DELETE FROM Projects
WITH (ProjectIdOrKey = '10020', Output=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <!-- USERS -->
        <Example Group="ODBC" Slug="read-users" Label="Read users" Code="SELECT * FROM Users">
			<Desc><![CDATA[<p>Gets all users. Use this to list account IDs and user metadata before assigning issues or setting project leads.</p>]]></Desc>
		</Example>
        <Example Group="ODBC" Slug="create-user" Label="Create a user">
			<Desc><![CDATA[<p>Creates a single user. Supply <code>EmailAddress</code>, <code>DisplayName</code>, <code>Name</code>, and <code>Password</code>. Use <code>WITH (OUTPUT=1)</code> to return the created user. Availability depends on Jira/Atlassian configuration.</p>]]></Desc>
            <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" Slug="delete-user" Label="Delete a user">
			<Desc><![CDATA[<p>Deletes a single user. Identify the user with <code>accountId</code> in the <code>WITH</code> clause. Availability and behavior depend on Jira/Atlassian configuration.</p>]]></Desc>
            <Code>
                <![CDATA[DELETE FROM Users
WITH (OUTPUT=1, accountId = '547059:136095a0-XXXX-XXXX-XXXX-3e4c66f26551', ContinueOn404Error=0)]]>
            </Code>
        </Example>

        <!-- ISSUES -->


        <!-- WORKLOGS -->
        <Example Group="ODBC" Slug="read-worklogs" Label="Read worklogs" Code="SELECT * FROM Worklogs">
			<Desc><![CDATA[<p>Gets all worklog (time) entries from every issue. Use this when you need a single list of all time entries. To limit by issue or date, use the examples that filter by issue ID/Key, by JQL, or by modified-after date.</p>]]></Desc>
		</Example>
        <Example Group="ODBC" Slug="create-worklog" Label="Create a worklog">
			<Desc><![CDATA[<p>Creates a single worklog on an issue. Supply <code>TimeSpentInSeconds</code>, <code>Comment</code>, and <code>StartedAt</code>, and identify the issue with <code>IssueIdOrKey</code> in <code>WITH</code>. Use <code>OUTPUT=1</code> to return the created worklog.</p>]]></Desc>
            <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" Slug="update-worklog" Label="Update a worklog">
			<Desc><![CDATA[<p>Updates an existing worklog. Set <code>TimeSpentInSeconds</code>, <code>Comment</code>, and/or <code>StartedAt</code>, and identify the issue and worklog with <code>IssueIdOrKey</code> and <code>WorklogId</code> in <code>WITH</code>.</p>]]></Desc>
            <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" Slug="delete-worklog" Label="Delete a worklog">
			<Desc><![CDATA[<p>Deletes a single worklog. Identify the issue and worklog with <code>IssueIdOrKey</code> and <code>WorklogId</code> in the <code>WITH</code> clause.</p>]]></Desc>
            <Code>
                <![CDATA[DELETE FROM Worklogs
WITH (IssueIdOrKey='10020', WorklogId='123465', OUTPUT=1, ContinueOn404Error=0)]]>
            </Code>
        </Example>
        <Example Group="ODBC" Slug="update-custom-option-field" Label="Update custom option field (dropdown or radio)">
			<Desc><![CDATA[<p>Shows how to update a custom field that uses a single option (dropdown or radio). You can set the value by option label (<code>customfield_xxxx_value</code>), by option ID (<code>customfield_xxxx_id</code>), or with raw JSON. To clear the field, set it to <code>null</code>. Replace the custom field ID with your own from <code>Fields</code>.</p>]]></Desc>
            <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" Slug="update-custom-multiselect-raw-json" Label="Update custom multi-select, user, or team fields (raw JSON)">
			<Desc><![CDATA[<p>Shows how to update custom fields that hold multiple values or complex types (e.g. multi-select, user, team) using raw JSON. Supply a JSON array or object as required by the field type; to clear, set the column to <code>null</code>. Use <code>SELECT * FROM Fields</code> to find your custom field IDs.</p>]]></Desc>
            <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>
        
        <Example Group="ODBC" Slug="query-issues-all-columns-no-meta" Label="Read issues with all columns (including SLA / nested custom fields)">
			<Desc><![CDATA[<p>Gets issues with all columns exposed, including SLA and nested custom fields, without defining a <code>META</code> parameter. Set the connector’s Metadata Mode to <code>MergeStaticDynamic</code> so the driver scans sample data and merges static and dynamic columns. This approach is simpler but slower because of the extra requests used to infer column types from data.</p>]]></Desc>
            <Code>
                <![CDATA[
-- No META needed. Set MetaDetectionOrder to MergeStaticDynamic so nested/SLA columns are discovered automatically.
-- Slower: driver makes extra requests to scan data and merge with static metadata.

SELECT *
FROM Issues
WITH(
	  JQL='project IN(SUP)'
	  ,MetaDetectionOrder='MergeStaticDynamic'
)
		]]>
            </Code>
        </Example>
        
        <Example Group="ODBC" Slug="query-custom-fields-nested-sla" Label="Read custom fields with nested structures (SLA fields)">
			<Desc><![CDATA[<p>Shows how to query custom fields that contain nested document structures (not arrays), such as SLA fields. Use <code>META='@OverrideMode:1'</code> to merge static and dynamic metadata so you can select both standard columns and nested custom field properties. Replace the example custom field IDs (e.g. <code>customfield_10084</code>) with your own; run <code>SELECT * FROM Fields</code> or check Jira project settings to find field IDs.</p>]]></Desc>
            <Code>
                <![CDATA[
-- NOTE: Replace customfield_10084, customfield_10085, customfield_10086 with your own custom field IDs.
-- You can run [SELECT * FROM Fields] in preview tab to get the field IDs. 
-- OR you can find field IDs in Jira: Project Settings > Issue types > Edit field > field ID in URL or API.

SELECT 
-- static fields

  id
, key
, summary
, statusname

-- dynamic fields

-- SLA: Time to Resolution (replace customfield_10084 with your SLA field ID) 

,[fields.customfield_10084.id] as c10084_id
,[fields.customfield_10084.name] as c10084_name
,[fields.customfield_10084.ongoingCycle.startTime.friendly] as c10084_startTime_friendly
,[fields.customfield_10084.ongoingCycle.startTime.jira] as c10084_startTime_jira
,[fields.customfield_10084.ongoingCycle.breachTime.friendly] as c10084_breachTime_friendly
,[fields.customfield_10084.ongoingCycle.breachTime.jira] as c10084_breachTime_jira
,[fields.customfield_10084.ongoingCycle.elapsedTime.friendly] as c10084_elapsedTime_friendly
,[fields.customfield_10084.ongoingCycle.remainingTime.friendly] as c10084_remainingTime_friendly
,[fields.customfield_10084.ongoingCycle.goalDuration.friendly] as c10084_goalDuration_friendly
,[fields.customfield_10084.ongoingCycle.breached] as c10084_breached
,[fields.customfield_10084.ongoingCycle.paused] as c10084_paused

-- SLA: Time to First Response (replace customfield_10085 with your SLA field ID)

,[fields.customfield_10085.id] as c10085_id
,[fields.customfield_10085.name] as c10085_name
,[fields.customfield_10085.ongoingCycle.startTime.friendly] as c10085_startTime_friendly
,[fields.customfield_10085.ongoingCycle.startTime.jira] as c10085_startTime_jira
,[fields.customfield_10085.ongoingCycle.breachTime.friendly] as c10085_breachTime_friendly
,[fields.customfield_10085.ongoingCycle.breachTime.jira] as c10085_breachTime_jira
,[fields.customfield_10085.ongoingCycle.elapsedTime.friendly] as c10085_elapsedTime_friendly
,[fields.customfield_10085.ongoingCycle.remainingTime.friendly] as c10085_remainingTime_friendly
,[fields.customfield_10085.ongoingCycle.goalDuration.friendly] as c10085_goalDuration_friendly
,[fields.customfield_10085.ongoingCycle.breached] as c10085_breached
,[fields.customfield_10085.ongoingCycle.paused] as c10085_paused

-- SLA: Time to Close After Resolution (replace customfield_10086 with your SLA field ID)

,[fields.customfield_10086.id] as c10086_id
,[fields.customfield_10086.name] as c10086_name

-- Other nested custom fields (replace IDs as needed) 
,[fields.customfield_10024.id] as c10024_id
,[fields.customfield_10024.name] as c10024_name
,[fields.customfield_10075.languageCode] as c10075_languageCode
,[fields.customfield_10075.displayName] as c10075_displayName

FROM Issues
WITH(
	  JQL='project IN(SUP)'
	  -- @OverrideMode:1 merges metadata so you can use static + dynamic fields together
	  ,META='@OverrideMode:1
	  ;fields.customfield_10084.id : string(10)
	  ;fields.customfield_10084.name : string(180)
	  ;fields.customfield_10084.ongoingCycle.startTime.friendly : string(130)
	  ;fields.customfield_10084.ongoingCycle.startTime.jira : DateTime
	  ;fields.customfield_10084.ongoingCycle.breachTime.friendly : string(130)
	  ;fields.customfield_10084.ongoingCycle.breachTime.jira : DateTime
	  ;fields.customfield_10084.ongoingCycle.elapsedTime.friendly : string(30)
	  ;fields.customfield_10084.ongoingCycle.remainingTime.friendly : string(70)
	  ;fields.customfield_10084.ongoingCycle.goalDuration.friendly : string(30)
	  ;fields.customfield_10084.ongoingCycle.breached : Boolean
	  ;fields.customfield_10084.ongoingCycle.paused : Boolean
	  ;fields.customfield_10085.id : string(10)
	  ;fields.customfield_10085.name : string(220)
	  ;fields.customfield_10085.ongoingCycle.startTime.friendly : string(130)
	  ;fields.customfield_10085.ongoingCycle.startTime.jira : DateTime
	  ;fields.customfield_10085.ongoingCycle.breachTime.friendly : string(130)
	  ;fields.customfield_10085.ongoingCycle.breachTime.jira : DateTime
	  ;fields.customfield_10085.ongoingCycle.elapsedTime.friendly : string(30)
	  ;fields.customfield_10085.ongoingCycle.remainingTime.friendly : string(70)
	  ;fields.customfield_10085.ongoingCycle.goalDuration.friendly : string(30)
	  ;fields.customfield_10085.ongoingCycle.breached : Boolean
	  ;fields.customfield_10085.ongoingCycle.paused : Boolean
	  ;fields.customfield_10086.id : string(10)
	  ;fields.customfield_10086.name : string(300)
	  ;fields.customfield_10024.id : string(40)
	  ;fields.customfield_10024.name : string(80)
	  ;fields.customfield_10075.languageCode : string(20)
	  ;fields.customfield_10075.displayName : string(70)
	  ;--add more nested custom field properties here as needed--
	  '
)
		]]>
            </Code>
        </Example>
    </Examples>
</ApiConfig>