/// <summary>
            /// Executes the workflow associated with retrieving online channel by channel identifier.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override GetOnlineChannelResponse Process(GetOnlineChannelRequest request)
            {
                ThrowIf.Null(request, "request");

                var           getOnlineChannelByIdDataRequest = new GetOnlineChannelByIdDataRequest(request.ChannelId, new ColumnSet());
                OnlineChannel channel = this.Context.Runtime.Execute <SingleEntityDataServiceResponse <OnlineChannel> >(getOnlineChannelByIdDataRequest, this.Context).Entity;

                if (channel == null)
                {
                    string message = string.Format(CultureInfo.InvariantCulture, "Cannot load channel for ID '{0}'.", request.ChannelId);
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ValueOutOfRange, message);
                }

                var settings = QueryResultSettings.AllRecords;

                var getChannelProfileByChannelIdDataRequest = new GetChannelProfileByChannelIdDataRequest(request.ChannelId, QueryResultSettings.SingleRecord);

                channel.ChannelProfile = this.Context.Runtime.Execute <SingleEntityDataServiceResponse <ChannelProfile> >(getChannelProfileByChannelIdDataRequest, this.Context).Entity;

                var getChannelPropertiesByChannelIdDataRequest = new GetChannelPropertiesByChannelIdDataRequest(request.ChannelId, settings);

                channel.ChannelProperties = this.Context.Runtime.Execute <EntityDataServiceResponse <ChannelProperty> >(getChannelPropertiesByChannelIdDataRequest, this.Context).PagedEntityCollection.Results;

                var getChannelLanguagesByChannelIdDataRequest = new GetChannelLanguagesByChannelIdDataRequest(request.ChannelId, settings);

                channel.ChannelLanguages = this.Context.Runtime.Execute <EntityDataServiceResponse <ChannelLanguage> >(getChannelLanguagesByChannelIdDataRequest, this.Context).PagedEntityCollection.Results;

                var getOrgunitContactsDataRequest = new GetOrgUnitContactsDataRequest(new long[] { request.ChannelId }, settings);

                channel.Contacts = this.Context.Runtime.Execute <EntityDataServiceResponse <OrgUnitContact> >(getOrgunitContactsDataRequest, this.Context).PagedEntityCollection.Results;

                var response = new GetOnlineChannelResponse(channel);

                return(response);
            }
Example #2
0
            /// <summary>
            /// Updates the channel publish status.
            /// </summary>
            /// <param name="request">The service request.</param>
            /// <returns>The service response.</returns>
            private static NullResponse UpdateChannelPublishStatus(UpdateChannelPublishStatusServiceRequest request)
            {
                var           getOnlineChannelByIdDataRequest = new GetOnlineChannelByIdDataRequest(request.ChannelId, new ColumnSet());
                OnlineChannel channel = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <OnlineChannel> >(getOnlineChannelByIdDataRequest, request.RequestContext).Entity;

                var updateOnlineChannelPublishStatusDataRequest = new UpdateOnlineChannelPublishStatusDataRequest(request.ChannelId, request.PublishStatus, request.PublishStatusMessage);

                request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <bool> >(updateOnlineChannelPublishStatusDataRequest, request.RequestContext);

                try
                {
                    var updateChannelPublishingStatusRequest = new UpdateChannelPublishingStatusRealtimeRequest(request.ChannelId, request.PublishStatus, request.PublishStatusMessage);
                    request.RequestContext.Execute <NullResponse>(updateChannelPublishingStatusRequest);
                }
                catch (CommerceException)
                {
                    // Revert the link status if it fails to update AX via transaction service.
                    updateOnlineChannelPublishStatusDataRequest = new UpdateOnlineChannelPublishStatusDataRequest(request.ChannelId, channel.PublishStatus, channel.PublishStatusMessage);
                    request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <bool> >(updateOnlineChannelPublishStatusDataRequest, request.RequestContext);
                    throw;
                }

                return(new NullResponse());
            }