public async Task<Job> StartJob(Job j)
 {
     var jobId = Guid.NewGuid();
     return await SendAsync<Job>(_tenantId, Parameters.AUTOMATION_API_VERSION, $"jobs/{jobId}", Method.PUT, j);
 }
        public AutomationClient.Models.Job CreateStartRunbookJob(Guid activityId)
        {
            var activityObj = GetActivityObject(activityId);
            EnterpriseManagementObject parentWorkItem = null;
            object relatedItems = null;
            object affectedItems = null;

            var parameters = ParameterMappings.CreateFromString(activityObj[ActivityClass, "ParameterMappings"].Value.ToString());

            var job = new AutomationClient.Models.Job();

            job.Properties.Runbook.Name = activityObj[ActivityClass, "RunbookName"].Value.ToString();
            var runOn = activityObj[ActivityClass, "RunOn"].Value.ToString();
            if (runOn.ToLower() == "azure")
                runOn = null;
            job.Properties.RunOn = runOn;

            foreach (var p in parameters)
            {
                bool mustSerialize = false;
                object value = null;
                if (string.IsNullOrEmpty(p.PropertyMapping)) continue;
                var arr = p.PropertyMapping.Split(':');

                var propType = (PropertyDefinitionType)Enum.Parse(typeof(PropertyDefinitionType), arr[0]);

                switch (propType)
                {
                    case PropertyDefinitionType.Property:
                    case PropertyDefinitionType.EnumDisplayName:
                    case PropertyDefinitionType.EnumName:
                        var propId = new Guid(arr[1]);

                        var prop = activityObj[propId];
                        if (prop.Value != null)
                        {
                            value = prop.Value;
                            if (propType == PropertyDefinitionType.EnumName)
                                value = ((ManagementPackEnumeration)prop.Value).Name;
                            else if (propType == PropertyDefinitionType.EnumDisplayName)
                                value = ((ManagementPackEnumeration)prop.Value).DisplayName;

                        }
                        break;
                    case PropertyDefinitionType.AffectedItems:
                    case PropertyDefinitionType.ReletedItems:
                    case PropertyDefinitionType.ParentWorkItemGuid:
                    case PropertyDefinitionType.ParentWorkItemId:
                        if (parentWorkItem == null)
                            parentWorkItem = GetActivityParentObject(activityObj.Id);

                        if (propType == PropertyDefinitionType.ParentWorkItemGuid)
                            value = parentWorkItem.Id;
                        else if (propType == PropertyDefinitionType.ParentWorkItemId)
                            value = parentWorkItem[WorkItemClass, "Id"].Value;
                        else if (propType == PropertyDefinitionType.AffectedItems)
                        {
                            if (affectedItems == null)
                                affectedItems = GetRelatedObjects(parentWorkItem.Id, AffectedItemRelationship);
                            value = affectedItems;
                        }
                        else if (propType == PropertyDefinitionType.ReletedItems)
                        {
                            if (relatedItems == null)
                                relatedItems = GetRelatedObjects(parentWorkItem.Id, RelatedItemRelationship);
                            value = relatedItems;
                            //get related
                            mustSerialize = true;
                        }
                        break;

                    case PropertyDefinitionType.ActivityGuid:
                        value = activityObj.Id;
                        break;
                    case PropertyDefinitionType.ActivityId:
                        value = activityObj[WorkItemClass, "Id"].Value;
                        break;
                }

                if (value is bool)
                    value = ((bool)value) ? "true" : "false";

                if (value is Guid)
                    mustSerialize = true;

                if (p.Type.EndsWith("[]")) //move this elsewere
                {
                    mustSerialize = true;
                    if (!(value is IEnumerable))
                        value = new object[] { value };
                }

                if (mustSerialize)
                    value = Serializer.ToJson(value); //mustSerialize to JSON

                job.Properties.Parameters.Add(p.Name, value);
            }

            return job;
        }