LogoLogo
  • ๐Ÿ“‘Introduction
  • ๐Ÿ› ๏ธCookbooks
    • โฑ๏ธExport Issue History
    • ๐Ÿ‘พCreate Jira Issue
    • ๐ŸงฉExtract customfields from issue(s)
    • ๐ŸŒ„Upload Content Attachment
    • ๐ŸšฎCreate Jira ITSM Request
    • ๐ŸšœEdit Jira Issue (Explicit)
    • ๐Ÿš›Edit Jira Issue (Implicit)
    • ๐ŸšŽCreate Jira Workflow
    • ๐Ÿ—ƒ๏ธAdd CustomField to Screen
    • ๐ŸšŸSearch Project Boards
    • ๐Ÿ“…Get User Last-Login Info
    • ๐Ÿค’Remove User Access
    • ๐ŸคฏSuspend User Access
    • ๐ŸฅณRestore User Access
    • ๐Ÿš‹Extract Project Administrators
    • ๐ŸงบSearch Jira User By Email
    • ๐ŸšžSearch Contents By CQL
    • ๐ŸŒŠCascade Permissions from Parent to Child
    • ๐ŸŽญPage Permission Helper
    • ๐Ÿค–Atlassian SCIM Onboarding
    • ๐Ÿ˜ƒCreate User via SCIM
    • ๐Ÿ›ฐ๏ธIssue Permission Helper
  • Jira Software Cloud
    • ๐Ÿ—ƒ๏ธIntroduction
    • ๐Ÿ“ฎAnnouncement Banner
    • ๐Ÿ”Application Roles
    • ๐Ÿ›ก๏ธ Audit records
    • ๐Ÿ“ˆDashboards
    • ๐Ÿ—„๏ธFilters
      • ๐ŸคSharing
    • ๐Ÿ‘ซGroups
    • ๐ŸžIssues
      • ๐Ÿ“ŽAttachments
      • ๐Ÿ“ฌComments
      • ๐ŸƒFields
        • ๐Ÿ–ผ๏ธConfiguration
          • ๐ŸคItems
          • ๐Ÿ”ƒSchemes
        • ๐ŸณContext
          • ๐Ÿ•งOption
        • ๐Ÿ—‘๏ธTrash
      • ๐Ÿท๏ธ Labels
      • ๐Ÿ”—Link
        • ๐Ÿ”ƒRemote
        • ๐Ÿ–‡๏ธTypes
      • ๐Ÿš›Metadata
      • ๐ŸฃPriorities
      • ๐Ÿ€Resolutions
      • ๐Ÿ“ŒSearch
      • ๐Ÿ“ฆType
        • ๐ŸŽดScheme
        • ๐Ÿ›…Screen Scheme
      • ๐Ÿ“ Vote
      • ๐ŸŽฏWatcher
      • ๐Ÿ•ฐ๏ธWorklogs
      • ๐Ÿ“คProperties
      • ๐Ÿ“ญArchiving
    • ๐Ÿ”“Permissions
      • ๐Ÿ“œScheme
        • ๐Ÿ”‘Grant
    • ๐Ÿ“šProjects
      • ๐ŸงฉCategories
      • ๐Ÿ”ฎComponents
      • ๐ŸšงPermission Schemes
      • ๐Ÿ“ฌNotification Schemes
      • ๐Ÿ’ผRoles
        • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘งActors
      • ๐ŸงตTypes
      • ๐ŸงฑVersions
      • ๐Ÿช”Validation
      • ๐Ÿ™ŒFeatures
      • ๐Ÿ“คProperties
    • ๐Ÿ““Screens
      • ๐Ÿ“‚Tabs
        • ๐ŸงฐFields
      • ๐Ÿ“ Schemes
    • โš™๏ธServer
    • ๐Ÿ”ฉJQL
    • โš—๏ธTasks
    • ๐Ÿค“Users
      • ๐Ÿ“ Search
    • ๐Ÿ–จ๏ธWorkflow
      • ๐Ÿš›Scheme
        • ๐Ÿ“ฏIssue Type
      • ๐Ÿ—บ๏ธStatus
    • โš–๏ธMyself
    • ๐Ÿ“Teams
  • Jira Agile
    • ๐Ÿœ๏ธIntroduction
    • ๐Ÿ“‰Boards
      • ๐Ÿ“ƒBacklog
    • ๐Ÿ—“๏ธSprints
    • ๐Ÿ“ˆEpics
  • Jira Service Management
    • ๐Ÿ—บ๏ธIntroduction
    • ๐Ÿ‘จโ€โš–๏ธCustomer
    • โ„น๏ธInfo
    • ๐Ÿ“šKnowledgebase
    • ๐Ÿ›‚Organization
    • ๐Ÿ“™Request
      • ๐ŸšซApproval
      • ๐Ÿ“‚Attachments
      • ๐Ÿ“ฌComments
      • ๐Ÿ“ฎFeedback
      • ๐Ÿ‘ฅParticipants
      • โฐSLA
      • ๐Ÿ’พTypes
      • โš™๏ธService Desk
        • ๐Ÿ›Ž๏ธQueue
    • ๐Ÿ“™Workspaces
  • Jira Assets
    • ๐Ÿ“ Introduction
    • ๐Ÿ‘พIcons
    • ๐Ÿ”ŽAql
    • ๐Ÿ›๏ธObject
      • ๐Ÿ“ Schema
      • ๐ŸงฐType
        • ๐Ÿ›Ž๏ธAttribute
  • Confluence Cloud
    • ๐ŸŽ‘Introduction
    • ๐Ÿ“‰Analytics
    • ๐Ÿ“ขContent
      • ๐ŸŽฎProperties
      • ๐Ÿ“‚Attachments
      • ๐Ÿ“ฌComments
      • ๐ŸšฉLabels
      • ๐ŸŽŽChildren/Descendants
      • ๐Ÿ›ก๏ธPermissions
      • ๐Ÿ”žRestrictions
        • ๐ŸŽ‘Operations
          • ๐Ÿซ‚Group
          • ๐Ÿ‘คUser
      • ๐Ÿ”ƒVersions
    • ๐Ÿ’พSpace
      • ๐Ÿ›ก๏ธPermissions
    • ๐Ÿ”ฐLabel
    • ๐Ÿ”ŽSearch
    • ๐Ÿ–ผ๏ธLong Task
    • ๐Ÿ—ƒ๏ธTemplate
    • ๐ŸŒŠV2
      • ๐Ÿ”๏ธIntroduction
      • ๐ŸงบAttachments
        • ๐Ÿ’ปVersions
      • ๐Ÿ“ƒPage
      • ๐ŸชŸSpace
      • ๐Ÿ—ƒ๏ธCustom Content
  • Atlassian Admin Cloud
    • ๐ŸŒŒIntroduction
    • โ„น๏ธOrganization
      • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆDirectory
      • ๐Ÿ‘”Policy
    • ๐Ÿ‘ฅUser
      • ๐Ÿ”“Token
    • ๐ŸงฐSCIM
      • ๐Ÿง™โ€โ™‚๏ธUsers
      • โ›น๏ธโ€โ™‚๏ธGroups
      • ๐Ÿ”ฉSchemas
  • Bitbucket Cloud
    • ๐Ÿ‘จโ€๐Ÿ’ปIntroduction
    • ๐Ÿ“ฐWorkspace
      • ๐Ÿ›ก๏ธPermissions
      • ๐Ÿ’พWebhooks
Powered by GitBook
On this page
  • Get Issue Worklogs
  • Add Worklog
  • Get Worklog
  • Update Worklog
  • Delete Worklog
  • Get ID's of deleted worklogs
  • Get Worklogs
  • Get ID's of updated worklogs

Was this helpful?

Export as PDF
  1. Jira Software Cloud
  2. Issues

Worklogs

Get Issue Worklogs

GET /rest/api/{2-3}/issue/{issueIdOrKey}/worklog

Returns worklogs for an issue, starting from the oldest worklog or from the worklog started on or after a date and time.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	var (
		ctx = context.Background()
		key = "KP-1"
		maxResult = 50
		after = 0
		expand = []string{""}
	)

	worklogs, response, err := atlassian.Issue.Worklog.Issue(ctx, key, 0, maxResult, after, expand)
	if err != nil {
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)

	for _, worklog := range worklogs.Worklogs {
		log.Println(worklog.ID)
	}
}

Add Worklog

POST /rest/api/{2-3}/issue/{issueIdOrKey}/worklog

Adds a worklog to an issue.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
	"log"
	"os"
)

func main() {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	// V3 payload
	/*

		// Comment worklog
		commentBody := models.CommentNodeScheme{}
		commentBody.Version = 1
		commentBody.Type = "doc"

		//Create the Tables Headers
		tableHeaders := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 1",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 2",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 3",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

			},

		}

		row1 := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{
				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 00"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 01"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 02"},
							},
						},
					},
				},

			},

		}

		row2 := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{
				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 10"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 11"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 12"},
							},
						},
					},
				},

			},

		}

		commentBody.AppendNode(&v3.CommentNodeScheme{
			Type: "table",
			Attrs: map[string]interface{}{"isNumberColumnEnabled": false, "layout": "default"},
			Content: []*v3.CommentNodeScheme{tableHeaders, row1, row2},
		})

		var options = &v3.WorklogOptionsScheme{
			Notify:               true,
			AdjustEstimate:       "auto",
			ReduceBy:             "3h",
			//OverrideEditableFlag: true,
			Expand:               []string{"expand", "properties"},
			Payload:              &v3.WorklogPayloadScheme{
				Comment:          &commentBody,

				Visibility:       &jira.IssueWorklogVisibilityScheme{
					Type:  "group",
					Value: "jira-users",
				},
				Started:          "2021-07-16T07:01:10.774+0000",
				TimeSpentSeconds: 12000,
			},
		}
	*/

	options := &models.WorklogOptionsScheme{
		Notify:               false,
		AdjustEstimate:       "",
		NewEstimate:          "",
		ReduceBy:             "",
		OverrideEditableFlag: false,
		Expand:               nil,
	}

	payload := &models.WorklogPayloadSchemeV2{
		Comment: &models.CommentPayloadSchemeV2{
			Visibility: nil,
			Body:       "test",
		},
		Visibility:       nil,
		Started:          "2021-07-16T07:01:10.774+0000",
		TimeSpentSeconds: 12000,
	}

	worklog, response, err := atlassian.Issue.Worklog.Add(context.Background(), "KP-1", payload, options)
	if err != nil {
		log.Println(response.Endpoint, response.Code)
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
	log.Println(worklog.ID, worklog.IssueID)
}

Get Worklog

GET /rest/api/{2-3}/issue/{issueIdOrKey}/worklog/{id}

Returns a worklog.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	var (
		ctx = context.Background()
		key = "KP-1"
		worklogID = "10000"
		expand = []string{"all"}
	)

	worklog, response, err := atlassian.Issue.Worklog.Get(ctx, key, worklogID, expand)
	if err != nil {
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
	log.Println(worklog.ID, worklog.Self)
}

Update Worklog

PUT /rest/api/{2-3}/issue/{issueIdOrKey}/worklog/{id}

Updates a worklog.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
	"log"
	"os"
)

func main() {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	/*
		// Comment worklog
		commentBody := v3.CommentNodeScheme{}
		commentBody.Version = 1
		commentBody.Type = "doc"

		//Create the Tables Headers
		tableHeaders := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 1",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 2",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

				{
					Type: "tableHeader",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{
									Type: "text",
									Text: "Header 3",
									Marks: []*v3.MarkScheme{
										{
											Type: "strong",
										},
									},
								},
							},
						},

					},
				},

			},

		}

		row1 := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{
				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 00"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 01"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 02"},
							},
						},
					},
				},

			},

		}

		row2 := &v3.CommentNodeScheme{
			Type: "tableRow",
			Content: []*v3.CommentNodeScheme{
				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 10"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 11"},
							},
						},
					},
				},

				{
					Type: "tableCell",
					Content: []*v3.CommentNodeScheme{
						{
							Type: "paragraph",
							Content: []*v3.CommentNodeScheme{
								{Type: "text", Text: "Row 12"},
							},
						},
					},
				},

			},

		}

		commentBody.AppendNode(&v3.CommentNodeScheme{
			Type: "table",
			Attrs: map[string]interface{}{"isNumberColumnEnabled": false, "layout": "default"},
			Content: []*v3.CommentNodeScheme{tableHeaders, row1, row2},
		})

		var options = &v3.WorklogOptionsScheme{
			Notify:               true,
			AdjustEstimate:       "auto",
			ReduceBy:             "3h",
			//OverrideEditableFlag: true,
			Expand:               []string{"expand", "properties"},
			Payload:              &v3.WorklogPayloadScheme{
				Comment:          &commentBody,
					Visibility:       &jira.IssueWorklogVisibilityScheme{
						Type:  "group",
						Value: "jira-users",
					},
				Started:          "2021-07-16T07:01:10.774+0000",
				TimeSpentSeconds: 12000,
			},
		}
	*/

	options := &models.WorklogOptionsScheme{
		Notify:               true,
		AdjustEstimate:       "auto",
		ReduceBy:             "3h",
		OverrideEditableFlag: false,
		Expand:               nil,
	}

	payload := &models.WorklogPayloadSchemeV2{
		Comment: &models.CommentPayloadSchemeV2{
			Visibility: nil,
			Body:       "test",
		},
		Visibility:       nil,
		Started:          "2021-07-16T07:01:10.774+0000",
		TimeSpentSeconds: 12000,
	}

	worklog, response, err := atlassian.Issue.Worklog.Update(context.Background(), "KP-1", "10000", payload, options)
	if err != nil {
		log.Println(response.Endpoint, response.Code)
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
	log.Println(worklog.ID, worklog.IssueID)

}

Delete Worklog

DELETE /rest/api/{2-3}/issue/{issueIdOrKey}/worklog/{id}

Deletes a worklog from an issue.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	response, err := atlassian.Issue.Worklog.Delete(context.Background(), "KP-1", "10000", nil)
	if err != nil {
		log.Println(response.Endpoint, response.Code)
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
}

Get ID's of deleted worklogs

GET /rest/api/{2-3}/worklog/deleted

Returns a list of IDs and delete timestamps for worklogs deleted after a date and time.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	result, response, err := atlassian.Issue.Worklog.Deleted(context.Background(), 0)
	if err != nil {
		log.Println(response.Endpoint, response.Code)
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
	log.Println(result)
}

Get Worklogs

POST /rest/api/{2-3}/worklog/list

Returns worklog details for a list of worklog IDs.

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	var (
		worklogsIDs = []int{10000}
		expand = []string{"all"}
	)

	worklogs, response, err := atlassian.Issue.Worklog.Gets(context.Background(), worklogsIDs, expand)
	if err != nil {
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)

	for _, worklog := range worklogs {
		log.Println(worklog)
	}
}

Get ID's of updated worklogs

GET /rest/api/{2-3}/worklog/updated

Returns a list of IDs and update timestamps for worklogs updated after a date and time.

This resource is paginated, with a limit of 1000 worklogs per page. Each page lists worklogs from oldest to youngest. If the number of items in the date range exceeds 1000, until indicates the timestamp of the youngest item on the page. Also, nextPage provides the URL for the next page of worklogs. The lastPage parameter is set to true on the last page of worklogs.c

package main

import (
	"context"
	"github.com/ctreminiom/go-atlassian/v2/jira/v2"
	"log"
	"os"
)

func main()  {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := v2.New(nil, host)
	if err != nil {
		log.Fatal(err)
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	result, response, err := atlassian.Issue.Worklog.Updated(context.Background(), 0, nil)
	if err != nil {
		log.Println(response.Endpoint, response.Code)
		log.Fatal(err)
	}

	log.Println(response.Endpoint, response.Code)
	log.Println(result)
}
PreviousWatcherNextProperties

Last updated 2 months ago

Was this helpful?

๐Ÿž
๐Ÿ•ฐ๏ธ
Page cover image