Import module builder export programmatically?

Posted by Community Admin on 04-Aug-2018 18:00

Import module builder export programmatically?

All Replies

Posted by Community Admin on 03-Mar-2013 00:00

I am trying to import a module builder export programmatically, but the API in Sitefinity is marked as internal: Telerik.Sitefinity.DynamicModules.Builder.ExportImport.ModuleImporter. I can read the zip file from a location in the file system, but can't import it programmatically. Any idea on how to get around this?

Posted by Community Admin on 29-Apr-2013 00:00

Hello,

I'm in the same situation, did you find a solution?

kind regards,

bob

Posted by Community Admin on 29-Apr-2013 00:00

Unfortunately I have not and ticket support had none either.

The problem is the class/method needed to do this is marked as private in the SF source code (the same method used to "import a module" from the admin.

Posted by Community Admin on 17-May-2013 00:00

Hello,

I found a solution, it's not 100% because we have to indeed call internal stuff, but maybe it can help someone.

private static void ImportDynamicModule()
    Stream zipFileAsStream = ResourceHelper.ReadResourceFile(typeof(InstallCmCareModule), "CmCare.zip");
 
    using (var moduleZipFile = ZipFile.Read(zipFileAsStream))
    
        ReflectionUtilities.CallNonPublicStatic(typeof(App), "Telerik.Sitefinity.DynamicModules.Builder.ExportImport.ModuleImporter", "ImportModule", moduleZipFile);
    
 
private static void ActivateModule()
    PageManager.GetManager().Provider.SuppressSecurityChecks = true;
    ConfigManager.GetManager().Provider.SuppressSecurityChecks = true;
 
    string providerName = DynamicModuleManager.GetDefaultProviderName();
    ReflectionUtilities.CallMethodOnInternalClass("Telerik.Sitefinity.DynamicModules.Builder.Web.Services.ContentTypeService", "ActivateModule", Constants.Guids.CmCareModuleId.ToString(), providerName);
 
    ConfigManager.GetManager().Provider.SuppressSecurityChecks = false;
    PageManager.GetManager().Provider.SuppressSecurityChecks = false;

And the helpers
public static object CallNonPublicStatic(Type typeFromAssembly, string typeToResolve, string methodName, params object[] paramaters)
    if (string.IsNullOrWhiteSpace(typeToResolve))
    
        throw new ArgumentNullException("typeToResolve");
    
 
    if (string.IsNullOrWhiteSpace(methodName))
    
        throw new ArgumentNullException("methodName");
    
 
    var type = typeFromAssembly.Assembly.GetType(typeToResolve);
 
    if (type == null)
    
        throw new ArgumentException(string.Format("Type '0' not found.", typeToResolve));
    
 
    MethodInfo methodInfo = type.GetMethod(methodName);
 
    if (methodInfo == null)
    
        throw new ArgumentException(string.Format("Method '0' not found on type '1'.", methodName, typeToResolve));
    
 
    return methodInfo.Invoke(null, paramaters);
 
public static object CallMethodOnInternalClass(string fullQualifiedName, string methodName, params object[] parameters)
    if (string.IsNullOrWhiteSpace(fullQualifiedName))
    
        throw new ArgumentNullException("fullQualifiedName");
    
 
    if (string.IsNullOrWhiteSpace(methodName))
    
        throw new ArgumentNullException("methodName");
    
 
    Assembly assembly = typeof(App).Assembly;
    Type internalClass = assembly.GetType(fullQualifiedName, true, true);
 
    if (internalClass == null)
    
        throw new ArgumentException(string.Format("Type '0' not found.", fullQualifiedName));
    
 
    var instance = Activator.CreateInstance(internalClass);
    MethodInfo methodInfo = instance.GetType().GetMethod(methodName);
     
    if (methodInfo == null)
    
        throw new ArgumentException(string.Format("Method '0' not found on type '1'.", methodName, fullQualifiedName));
    
 
    return methodInfo.Invoke(instance, parameters);

Bye,

bob

This thread is closed