in azure-devops/azext_devops/dev/boards/work_item.py [0:0]
def create_work_item(work_item_type, title, description=None, assigned_to=None, area=None,
iteration=None, reason=None, discussion=None, fields=None, open=False, # pylint: disable=redefined-builtin
organization=None, project=None, detect=None):
r"""Create a work item.
:param work_item_type: Name of the work item type (e.g. Bug).
:type work_item_type: str
:param title: Title of the work item.
:type title: str
:param description: Description of the work item.
:type description: str
:param assigned_to: Name of the person the work item is assigned-to (e.g. fabrikam).
:type assigned_to: str
:param area: Area the work item is assigned to (e.g. Demos)
:type area: str
:param iteration: Iteration path of the work item (e.g. Demos\Iteration 1).
:type iteration: str
:param reason: Reason for the state of the work item.
:type reason: str
:param discussion: Comment to add to a discussion in a work item.
:type discussion: str
:param fields: Space separated "field=value" pairs for custom fields you would like to set.
In case of multiple fields : "field1=value1" "field2=value2".
Refer https://aka.ms/azure-devops-cli-field-api for more details on fields.
:type fields: [str]
:param open: Open the work item in the default web browser.
:type open: bool
:rtype: :class:`<WorkItem> <v5_0.work-item-tracking.models.WorkItem>`
"""
try:
organization, project = resolve_instance_and_project(
detect=detect, organization=organization, project=project, project_required=True)
patch_document = []
if title is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.Title', title))
else:
raise ValueError('--title is a required argument.')
if description is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.Description', description))
if assigned_to is not None:
# 'assigned to' does not take an identity id. Display name works.
assigned_to = assigned_to.strip()
if assigned_to == '':
resolved_assigned_to = ''
else:
resolved_assigned_to = _resolve_identity_as_unique_user_id(assigned_to, organization)
if resolved_assigned_to is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.AssignedTo',
resolved_assigned_to))
if area is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.AreaPath', area))
if iteration is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.IterationPath', iteration))
if reason is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.Reason', reason))
if discussion is not None:
patch_document.append(_create_work_item_field_patch_operation('add', 'System.History', discussion))
if fields is not None and fields:
for field in fields:
kvp = field.split('=', 1)
if len(kvp) == 2:
patch_document.append(_create_work_item_field_patch_operation('add', kvp[0], kvp[1]))
else:
raise ValueError('The --fields argument should consist of space separated "field=value" pairs.')
client = get_work_item_tracking_client(organization)
work_item = client.create_work_item(document=patch_document, project=project, type=work_item_type)
if open:
_open_work_item(work_item, organization)
return work_item
except AzureDevOpsServiceError as ex:
_handle_vsts_service_error(ex)