/// <summary> /// Download MarketplaceAsset assettype = Projects /// </summary> /// <param name="assets"></param> /// <returns></returns> public void DownloadProjects(IWorkflowsQueryService client) { List<StoreActivitiesDC> request = this.projects.Select(item => { return new StoreActivitiesDC { Name = item.Name, Version = item.Version, Incaller = Environment.UserName, IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(), }; }).ToList<StoreActivitiesDC>(); foreach (StoreActivitiesDC item in request) { if (IsCancelDownload) { CancelDownload(); return; } var result = client.StoreActivitiesGet(item); if (result.Any()) { StoreActivitiesDC dc = result[0]; ActivityAssemblyItem assembly = new ActivityAssemblyItem { Name = dc.ActivityLibraryName, Version = System.Version.Parse(dc.Version) }; List<ActivityAssemblyItem> references = Caching.CacheAndDownloadAssembly(client, Caching.ComputeDependencies(client, assembly)); this.SaveProjectsToLocal(dc, references); currentDownloadingNumber++; SetDownloadProgress(); } } }
/// <summary> /// Gets the Workflow Template Activity Item based on the Selected Workflow Template, and its dependencies /// </summary> /// <returns>The Activity Item that will have the XAML required to create the workflow from the specified Workflow Template</returns> private WorkflowItem GetWorkflowTemplateActivityExecute(IWorkflowsQueryService client) { WorkflowItem workflowActivityTemplateItem = null; List<StoreActivitiesDC> storeActivitiesList = null; ActivityAssemblyItem workflowActivityTemplateItemAssembly = null; StoreActivitiesDC targetDC = null; ActivityLibraryDC targetLibrary = null; List<ActivityLibraryDC> activityLibraryList; // Throw if nothing selected. CanExecute should prevent this. if (null == SelectedWorkflowTemplateItem) throw new ArgumentNullException(); // Create the Activity request var requestActivity = new StoreActivitiesDC() { Incaller = Assembly.GetExecutingAssembly().GetName().Name, IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(), Id = SelectedWorkflowTemplateItem.WorkflowTemplateId }; // Get the List of Activities that qualify, should only be one storeActivitiesList = client.StoreActivitiesGet(requestActivity); storeActivitiesList[0].StatusReply.CheckErrors(); if (null != storeActivitiesList) { // Get the first or one and only StoreActivity targetDC = storeActivitiesList.First(); // We have to get the Activity Library associated with the Store Activity if (0 != targetDC.ActivityLibraryId) { List<ActivityAssemblyItem> references = new List<ActivityAssemblyItem>(); Utility.DoTaskWithBusyCaption("Loading...",() => { // Create the Library request var requestLibrary = new ActivityLibraryDC { Incaller = Assembly.GetExecutingAssembly().GetName().Name, IncallerVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(), Id = targetDC.ActivityLibraryId }; // Get the list try { activityLibraryList = client.ActivityLibraryGet(requestLibrary); } catch (FaultException<ServiceFault> ex) { throw new CommunicationException(ex.Detail.ErrorMessage); } catch (FaultException<ValidationFault> ex) { throw new BusinessValidationException(ex.Detail.ErrorMessage); } catch (Exception ex) { throw new CommunicationException(ex.Message); } // Get the First one or null, should only be one targetLibrary = activityLibraryList.FirstOrDefault(); workflowActivityTemplateItemAssembly = DataContractTranslator.ActivityLibraryDCToActivityAssemblyItem(targetLibrary); // download dependencies references = Caching.CacheAndDownloadAssembly(client, Caching.ComputeDependencies(client, workflowActivityTemplateItemAssembly)); }); workflowActivityTemplateItem = DataContractTranslator.StoreActivitiyDCToWorkflowItem(targetDC, workflowActivityTemplateItemAssembly, references); workflowActivityTemplateItem.WorkflowType = SelectedWorkflowTemplateItem.WorkflowTypeName; workflowActivityTemplateItem.IsOpenFromServer = false; } } return workflowActivityTemplateItem; // Return the ActivityItem }