private SourceCode.SmartObjects.Authoring.SmartObjectDefinition CreateSmartBoxSmartObject(SourceCode.SmartObjects.Management.SmartObjectManagementServer SmartObjectManagementSvr, K2Field.Apps.Framework.Build.SmartObjectDefinition SmO, string DeploymentCategory) { ServiceInstance serviceInstance = ServiceInstance.Create(SmartObjectManagementSvr.GetServiceInstanceForExtend(SmO.ServiceInstanceId, string.Empty)); ExtendObject extendObject = serviceInstance.GetCreateExtender(); // do set ID here - set on SmartObjectDefinition - extender is specifically for SmartBox //extendObject.Guid = SmO.Id; extendObject.Name = SmO.SystemName; extendObject.Metadata.DisplayName = SmO.DisplayName; extendObject.Metadata.Description = SmO.Description; foreach(K2Field.Apps.Framework.Build.SmartObjectProperty prop in SmO.Properties) { ExtendObjectProperty SoProp = new ExtendObjectProperty(); SoProp.Guid = prop.Id; SoProp.Name = prop.SystemName.Replace(" ", "_").Replace(".", "_"); SoProp.Metadata.DisplayName = prop.DisplayName; SoProp.Type = (PropertyDefinitionType)prop.DataType; SoProp.ExtendType = (SourceCode.SmartObjects.Authoring.ExtendPropertyType)prop.ExtendType; if (prop.DataType == SmODataType.Text) { if (prop.MaxSize.HasValue && prop.MaxSize.Value > 0) { SoProp.Metadata.AddServiceElement("maxsize", prop.MaxSize.Value.ToString()); } else { SoProp.Metadata.AddServiceElement("maxsize", "200"); } } if (!extendObject.Properties.ContainsName(prop.SystemName)) { extendObject.Properties.Add(SoProp); } } SourceCode.SmartObjects.Authoring.SmartObjectDefinition smoDefinition = new SourceCode.SmartObjects.Authoring.SmartObjectDefinition(); try { // Create SmartObject Definition smoDefinition.Create(extendObject); // must set the SmartObject Id here smoDefinition.Guid = SmO.Id; smoDefinition.AddDeploymentCategory(DeploymentCategory); smoDefinition.Build(); } catch (SmartObjectDefinitionException defEx) { MessageBox.Show(defEx.Message); throw; } return smoDefinition; }