public async Task <IActionResult> CreateActivity([FromBody] JObject activitySpecs) { // basic input validation string zipFileName = activitySpecs["zipFileName"].Value <string>(); string engineName = activitySpecs["engine"].Value <string>(); // standard name for this sample string appBundleName = zipFileName + "AppBundle"; string activityName = zipFileName + "Activity"; // Page <string> activities = await _designAutomation.GetActivitiesAsync(); string qualifiedActivityId = string.Format("{0}.{1}+{2}", NickName, activityName, Alias); if (!activities.Data.Contains(qualifiedActivityId)) { // define the activity // ToDo: parametrize for different engines... dynamic engineAttributes = EngineAttributes(engineName); string commandLine = string.Format(engineAttributes.commandLine, appBundleName); Activity activitySpec = new Activity() { Id = activityName, Appbundles = new List <string>() { string.Format("{0}.{1}+{2}", NickName, appBundleName, Alias) }, CommandLine = new List <string>() { commandLine }, Engine = engineName, Parameters = new Dictionary <string, Parameter>() { { "inputFile", new Parameter() { Description = "input file", LocalName = "$(inputFile)", Ondemand = false, Required = true, Verb = Verb.Get, Zip = false } }, { "outputFile", new Parameter() { Description = "output file", LocalName = "outputFile." + engineAttributes.extension, Ondemand = false, Required = true, Verb = Verb.Put, Zip = true } } }, Settings = new Dictionary <string, ISetting>() { { "script", new StringSetting() { Value = engineAttributes.script } } } }; Activity newActivity = await _designAutomation.CreateActivityAsync(activitySpec); // specify the alias for this Activity Alias aliasSpec = new Alias() { Id = Alias, Version = 1 }; Alias newAlias = await _designAutomation.CreateActivityAliasAsync(activityName, aliasSpec); return(Ok(new { Activity = qualifiedActivityId })); } // as this activity points to a AppBundle "dev" alias (which points to the last version of the bundle), // there is no need to update it (for this sample), but this may be extended for different contexts return(Ok(new { Activity = "Activity already defined" })); }
public async Task <IActionResult> CreateActivity([FromBody] JObject activitySpecs) { if (OAuthController.GetAppSetting("DISABLE_SETUP") == "true") { return(Unauthorized()); } System.Diagnostics.Debug.WriteLine("CreateActivity"); Page <string> activities = await _designAutomation.GetActivitiesAsync(); if (!activities.Data.Contains(QualifiedBundleActivityName)) { string commandLine = CommandLine(); Activity activitySpec = new Activity() { Id = kBundleActivityName, Appbundles = new List <string>() { QualifiedBundleActivityName }, CommandLine = new List <string>() { commandLine }, Engine = kEngineName, Parameters = new Dictionary <string, Parameter>() { { "inputZip", new Parameter() { Description = "input zip", LocalName = "files", Ondemand = false, Required = true, Verb = Verb.Get, Zip = true } }, { "inputJson", new Parameter() { Description = "input json", LocalName = "input.json", Ondemand = false, Required = true, Verb = Verb.Get, Zip = false } }, { "outputZip", new Parameter() { Description = "output zip file", LocalName = "files", Ondemand = false, Required = false, Verb = Verb.Put, Zip = true } }, { "outputRfa", new Parameter() { Description = "output zip file", LocalName = "output.rfa", Ondemand = false, Required = false, Verb = Verb.Put, Zip = false } } } }; Activity newActivity = await _designAutomation.CreateActivityAsync(activitySpec); // specify the alias for this Activity Alias aliasSpec = new Alias() { Id = Alias, Version = 1 }; Alias newAlias = await _designAutomation.CreateActivityAliasAsync(kBundleActivityName, aliasSpec); return(Ok(new { Activity = QualifiedBundleActivityName })); } // as this activity points to a AppBundle "dev" alias (which points to the last version of the bundle), // there is no need to update it (for this sample), but this may be extended for different contexts return(Ok(new { Activity = "Activity already defined" })); }
/// <summary> /// The SetupActivityAsync. /// </summary> /// <param name="myApp">The myApp<see cref="string"/>.</param> /// <returns>The <see cref="Task{string}"/>.</returns> private async Task <string> SetupActivityAsync(string myApp) { Console.WriteLine("Setting up activity..."); var myActivity = $"{Owner}.{ActivityName}+{Label}"; var actResponse = await this.api.ActivitiesApi.GetActivityAsync(myActivity, throwOnError : false); var activity = new Activity() { Appbundles = new List <string>() { myApp }, CommandLine = new List <string>() { $"$(engine.path)\\accoreconsole.exe /i " + $"\"$(args[inputFile].path)\" " + $"/al \"$(appbundles[{PackageName}].path)\" " + $"/s \"$(settings[script].path)\" " }, Engine = TargetEngine, Settings = new Dictionary <string, ISetting>() { { "script", new StringSetting() { Value = "BatchPublishCmd\n" } } }, Parameters = new Dictionary <string, Parameter>() { { "inputFile", new Parameter() { Verb = Verb.Get, LocalName = "$(HostDwg)", Required = true } }, { "inputZip", new Parameter() { Verb = Verb.Get, Zip = true, LocalName = "export", Required = true } }, { "Result", new Parameter() { Verb = Verb.Put, LocalName = "result.pdf", Required = true } } }, Id = ActivityName }; if (actResponse.HttpResponse.StatusCode == HttpStatusCode.NotFound) { Console.WriteLine($"Creating activity {myActivity}..."); await api.CreateActivityAsync(activity, Label); return(myActivity); } await actResponse.HttpResponse.EnsureSuccessStatusCodeAsync(); Console.WriteLine("\tFound existing activity..."); if (!Equals(activity, actResponse.Content)) { Console.WriteLine($"\tUpdating activity {myActivity}..."); await api.UpdateActivityAsync(activity, Label); } return(myActivity); bool Equals(Autodesk.Forge.DesignAutomation.Model.Activity a, Autodesk.Forge.DesignAutomation.Model.Activity b) { Console.Write("\tComparing activities..."); //ignore id and version b.Id = a.Id; b.Version = a.Version; var res = a.ToString() == b.ToString(); Console.WriteLine(res ? "Same." : "Different"); return(res); } }
private async Task EnsureActivity() { Page <string> activities = await _designAutomation.GetActivitiesAsync(); bool existActivity = false; foreach (string activity in activities.Data) { if (activity.Contains(ActivityFullName)) { existActivity = true; continue; } } if (!existActivity) { // create activity string commandLine = string.Format(@"$(engine.path)\\revitcoreconsole.exe /i {0}$(args[rvtFile].path){0} /al {0}$(appbundles[{1}].path){0}", "\"", APPNAME); Activity activitySpec = new Activity() { Id = ACTIVITY_NAME, Appbundles = new List <string>() { AppBundleFullName }, CommandLine = new List <string>() { commandLine }, Engine = ENGINE_NAME, Parameters = new Dictionary <string, Parameter>() { { "rvtFile", new Parameter() { Description = "Input Revit Model", LocalName = "$(rvtFile)", Ondemand = false, Required = true, Verb = Verb.Get, Zip = false } }, { "inputGeometry", new Parameter() { Description = "Input SAT File", LocalName = "InputGeometry.sat", Ondemand = false, Required = true, Verb = Verb.Get, Zip = false } }, { "familyTemplate", new Parameter() { Description = "Input RFT File", LocalName = "FamilyTemplate.rft", Ondemand = false, Required = true, Verb = Verb.Get, Zip = false } }, { "result", new Parameter() { Description = "Modifed Revit Model", LocalName = "ResultModel.rvt", Ondemand = false, Required = true, Verb = Verb.Put, Zip = false } } } }; Activity newActivity = await _designAutomation.CreateActivityAsync(activitySpec); // specify the alias for this Activity Alias aliasSpec = new Alias() { Id = Alias, Version = 1 }; Alias newAlias = await _designAutomation.CreateActivityAliasAsync(ACTIVITY_NAME, aliasSpec); } }
/// <summary> /// Creates Activity /// </summary> private async Task <dynamic> CreateActivity() { Page <string> appBundles = await _designAutomation.GetAppBundlesAsync(); string appBundleID = string.Format("{0}.{1}+{2}", nickName, APPNAME, ALIAS); if (!appBundles.Data.Contains(appBundleID)) { if (!System.IO.File.Exists(LocalAppPackageZip)) { throw new Exception("Appbundle not found at " + LocalAppPackageZip); } AppBundle appBundleSpec = new AppBundle() { Package = APPNAME, Engine = EngineName, Id = APPNAME, Description = string.Format("Description for {0}", APPNAME), }; AppBundle newApp = await _designAutomation.CreateAppBundleAsync(appBundleSpec); if (newApp == null) { throw new Exception("Cannot create new app"); } // create alias pointing to v1 Alias aliasSpec = new Alias() { Id = ALIAS, Version = 1 }; Alias newAlias = await _designAutomation.CreateAppBundleAliasAsync(APPNAME, aliasSpec); // upload the zip with .bundle RestClient uploadClient = new RestClient(newApp.UploadParameters.EndpointURL); RestRequest request = new RestRequest(string.Empty, Method.POST); request.AlwaysMultipartFormData = true; foreach (KeyValuePair <string, string> x in newApp.UploadParameters.FormData) { request.AddParameter(x.Key, x.Value); } request.AddFile("file", LocalAppPackageZip); request.AddHeader("Cache-Control", "no-cache"); await uploadClient.ExecuteTaskAsync(request); } Page <string> activities = await _designAutomation.GetActivitiesAsync(); string qualifiedActivityId = string.Format("{0}.{1}+{2}", nickName, ACTIVITY_NAME, ALIAS); if (!activities.Data.Contains(qualifiedActivityId)) { // define the activity string commandLine = string.Format("$(engine.path)\\inventorcoreconsole.exe /al \"$(appbundles[{0}].path)\" \"$(args[inputJson].path)\"", APPNAME); Activity activitySpec = new Activity() { Id = ACTIVITY_NAME, Appbundles = new List <string>() { string.Format("{0}.{1}+{2}", nickName, APPNAME, ALIAS) }, CommandLine = new List <string>() { commandLine }, Engine = EngineName, Parameters = new Dictionary <string, Parameter>() { { "inputJson", new Parameter() { Description = "input json", LocalName = "params.json", Ondemand = false, Required = false, Verb = Verb.Get, Zip = false } }, { "ResultIPT", new Parameter() { Description = "output IPT file", LocalName = outputIPTFile, Ondemand = false, Required = true, Verb = Verb.Put, Zip = false } }, { "ResultIDW", new Parameter() { Description = "output IDW file", LocalName = outputIDWFile, Ondemand = false, Required = true, Verb = Verb.Put, Zip = false } }, { "ResultPDF", new Parameter() { Description = "output PDF file", LocalName = outputPDFile, Ondemand = false, Required = true, Verb = Verb.Put, Zip = false } } } }; Activity newActivity = await _designAutomation.CreateActivityAsync(activitySpec); // specify the alias for this Activity Alias aliasSpec = new Alias() { Id = ALIAS, Version = 1 }; Alias newAlias = await _designAutomation.CreateActivityAliasAsync(ACTIVITY_NAME, aliasSpec); return(Ok(new { Activity = qualifiedActivityId })); } return(Ok(new { Activity = "Activity already defined" })); }
public async Task <IActionResult> CreateActivity([FromBody] JObject activitySpecs) { Page <string> activities = await _designAutomation.GetActivitiesAsync(); string qualifiedActivityId = string.Format("{0}.{1}+{2}", NickName, ActivityName, Alias); if (!activities.Data.Contains(qualifiedActivityId)) { // define the activity // ToDo: parametrize for different engines... dynamic engineAttributes = EngineAttributes(EngineName); string commandLine = string.Format(engineAttributes.commandLine, AppBundleName); Activity activitySpec = new Activity() { Id = ActivityName, Appbundles = new List <string>() { string.Format("{0}.{1}+{2}", NickName, AppBundleName, Alias) }, CommandLine = new List <string>() { commandLine }, Engine = EngineName, Parameters = new Dictionary <string, Parameter>() { { "inputFile", new Parameter() { Description = "IAM file to process", LocalName = "CleanSlate.iam", Verb = Verb.Get, Zip = true } }, { "inputJson", new Parameter() { Description = "JSON file with User Params", LocalName = "params.json", Verb = Verb.Get, Zip = false } }, { "outputFile", new Parameter() { Description = "Resulting assembly", LocalName = @"Kitchen\Result", Verb = Verb.Put, Zip = true } } } }; Activity newActivity = await _designAutomation.CreateActivityAsync(activitySpec); // specify the alias for this Activity Alias aliasSpec = new Alias() { Id = Alias, Version = 1 }; Alias newAlias = await _designAutomation.CreateActivityAliasAsync(ActivityName, aliasSpec); return(Ok(new { Activity = qualifiedActivityId })); } // as this activity points to a AppBundle "dev" alias (which points to the last version of the bundle), // there is no need to update it (for this sample), but this may be extended for different contexts return(Ok(new { Activity = "Activity already defined" })); }