/// <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); }
/// <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()); }