/// <summary> /// Creates metadata for a SCO, or updates existing metadata describing a SCO. /// Call sco-update to create metadata only for SCOs that represent Content, including /// meetings. You also need to upload Content files with either sco-upload or Connect Enterprise Manager. /// You must provide a folder-id or a sco-id, but not both. If you pass a folder-id, scoupdate /// creates a new SCO and returns a sco-id. If the SCO already exists and you pass a /// sco-id, sco-update updates the metadata describing the SCO. /// After you create a new SCO with sco-update, call permissions-update to specify which /// users and groups can access it. /// </summary> /// <returns> /// <see cref="ApiStatus" /> /// </returns> internal async Task <ApiStatusWithMeetingDetail> ScoUpdate(MeetingUpdateItem meetingUpdateItem) { if (meetingUpdateItem == null) { return(null); } string cmdParams = Helpers.StructToQueryString(meetingUpdateItem, true); ApiStatusWithMeetingDetail s = ApiStatusWithMeetingDetail.FromApiStatus(await this.ProcessApiRequest("sco-update", cmdParams)); if (s.Code != StatusCodes.OK || s.ResultDocument == null) { return(s); } //notice: no '/sco' will be returned during update XElement meetingDetailNode = s.ResultDocument.XPathSelectElement("//sco"); if (meetingDetailNode == null) { return(s); } try { s.MeetingDetail = XmlSerializerHelpersGeneric.FromXML <MeetingDetail>(meetingDetailNode.CreateReader()); s.MeetingDetail.FullUrl = this.ResolveFullUrl(s.MeetingDetail.UrlPath); } catch (Exception ex) { s.Code = StatusCodes.Invalid; s.SubCode = StatusSubCodes.Format; s.InnerException = ex; //rollback: delete the meeting //AG: scary stuff if (!string.IsNullOrEmpty(s.MeetingDetail.ScoId)) { await this.ScoDelete(new[] { s.MeetingDetail.ScoId }); } throw ex.InnerException; } return(s); }
/// <summary> /// Creates a new Meeting. /// </summary> /// <param name="adobeConnectXmlApi">The adobe connect XML API.</param> /// <param name="meetingUpdateItem"><see cref="MeetingUpdateItem" /></param> /// <param name="meetingDetail"><see cref="MeetingDetail" /></param> /// <returns> /// <see cref="ApiStatus" /> /// </returns> public static async Task <ApiStatusWithMeetingDetail> MeetingCreate(this AdobeConnectXmlAPI adobeConnectXmlApi, MeetingUpdateItem meetingUpdateItem) { if (meetingUpdateItem == null) { return(null); } if (String.IsNullOrEmpty(meetingUpdateItem.FolderId)) { return(ApiStatusWithMeetingDetail.FromApiStatus(Helpers.WrapStatusException(StatusCodes.Invalid, StatusSubCodes.Format, new ArgumentNullException("MeetingItem", "FolderID must be set to create new item")))); } if (meetingUpdateItem.MeetingItemType == SCOtype.NotSet) { return(ApiStatusWithMeetingDetail.FromApiStatus(Helpers.WrapStatusException(StatusCodes.Invalid, StatusSubCodes.Format, new ArgumentNullException("MeetingItem", "SCOtype must be set")))); } meetingUpdateItem.ScoId = null; return(await adobeConnectXmlApi.ScoUpdate(meetingUpdateItem)); }