public void Run(Document doc) { LogTrace($"Run called with {doc.DisplayName}"); try { using (new HeartBeat()) { Parameters parameters; switch (doc.DocumentType) { case DocumentTypeEnum.kPartDocumentObject: parameters = ((PartDocument)doc).ComponentDefinition.Parameters; break; case DocumentTypeEnum.kAssemblyDocumentObject: parameters = ((AssemblyDocument)doc).ComponentDefinition.Parameters; break; default: LogError($"Unsupported document type: {doc.DocumentType}"); return; } var paramsExtractor = new ParametersExtractor(); paramsExtractor.Extract(doc, parameters); } } catch (Exception e) { LogError("Processing failed. " + e.ToString()); } }
public void RunWithArguments(Document doc, NameValueMap map) { LogTrace($"RunWithArguments called with {doc.DisplayName} with {map.Count} arguments"); using (new HeartBeat()) { Parameters parameters; switch (doc.DocumentType) { case DocumentTypeEnum.kPartDocumentObject: parameters = ((PartDocument)doc).ComponentDefinition.Parameters; break; case DocumentTypeEnum.kAssemblyDocumentObject: parameters = ((AssemblyDocument)doc).ComponentDefinition.Parameters; break; default: LogError($"Unsupported document type: {doc.DocumentType}"); return; } LogTrace("Read parameters"); string paramFile = (string)map.Value["_1"]; string json = System.IO.File.ReadAllText(paramFile); LogTrace(json); var incomingParams = JsonConvert.DeserializeObject <InventorParameters>(json); bool changed = false; foreach (var pair in incomingParams) { string paramName = pair.Key; InventorParameter paramData = pair.Value; try { var userParameter = parameters[paramName]; string expression = userParameter.Expression; if (!paramData.Value.Equals(expression)) { LogTrace($"Applying '{paramData.Value}' to '{paramName}'"); SetExpression(userParameter, paramData, doc); changed = true; if (paramData.ErrorMessage != null) { // there was an invalid expression the UI will prompt the user to fix, so don't bother changing the rest of the parameters LogTrace("Skip update for the remaining parameters"); break; } } else { LogTrace($"Skipping '{paramName}'"); } } catch (Exception e) { // some parameters (maybe when parameter gets driven by iLogic rule) are throwing error on change. // so swallow the thrown error, log about it and continue LogError($"Failed to set '{paramName}' parameter. Error is {e}."); } } var paramsExtractor = new ParametersExtractor(); paramsExtractor.Extract(doc, parameters, incomingParams); } }