示例#1
0
        /// <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));
        }