Click here to Skip to main content
16,022,069 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
In my code: "
namespace inAnorak.Win.ExtForms.Classes {

[poExtension("Hercules.*", "Hercules", "CompositionEntries", poExtensionKind.PresenterMethod, "{4E9E8C7B-7AC5-49FF-834A-8092AE92567F}")]

public class inAnorakCompositionEntriesP : poExtensionPresenter, IpoAppContextInit {

    private IpoAppContext _AppContext;

    public inAnorakCompositionEntriesP(IpoAppContext appContext) {
        if (appContext == null) {
            MessageBox.Show("The app context is null. Please ensure it is properly initialized.",
                            "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            throw new InvalidOperationException("IpoAppContext is not initialized.");
        }

        _AppContext = appContext;
        MessageBox.Show("inAnorakCompositionEntriesP initialized successfully.",
                        "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

public bool GenerateFileFromCustomReport(ref poActionLogger log, heDocEntriesDataObject entry, string reportid, string exportfolder, string filetype) {
    bool bRes = false;

    try {
        IpoCustomReport repService = _AppContext.GetService<IpoCustomReport>();
        poCustomReportInfo report = repService.Get(reportid);
        poDataCollector dataCollector = poCustomDataCollector.CreateFromCustomReport(_AppContext, report);
        poDataCollectorStorage storage = poDataCollectorStorage.CreateFromDataCollector(dataCollector);
        dataCollector.SetFilterValue(storage, "@$Parameter$", "@$Parameter01$", poFilterItemWhereKindEnum.Equal, entry.ID);
        dataCollector.ApplyStorage(storage);
        poDataCollectorResult result = dataCollector.GetData();

        /* #02 = xlsx
           #05 = html
           #06 = pdf
           #07 = xps */

        switch (filetype) {
            case "xlsx": filetype = "#02"; break;
            case "html": filetype = "#05"; break;
            case "pdf": filetype = "#06"; break;
            case "xps": filetype = "#07"; break;
        }

        poFormArgs args = new poFormArgs();
        args.InArgs["Data"] = result.Data;
        args.InArgs["Report"] = report;
        args.InArgs["ViewName"] = "(Default)";
        args.InArgs["PrintDocType"] = new poPrintDocTypes() { PrintType = filetype };
        args.InArgs["FileName"] = exportfolder + entry.DocCode;
        args.InArgs["Execute"] = true;

        poAsyncResult res1 = _AppContext.CallObjectProxyMethod<poAsyncResult>("Poseidon", "DataCollectorReport", "CustomReport.ReportInvoke", report.ID, storage, null, poReportEngines.ReportEnginesEnum.FastReports);
        args.InArgs["Report.frx"] = res1.NamedArgs["Report.frx"];
        object res2 = _AppContext.GetService<IpoActionsFactory>().Invoke("Poseidon", "PrintDoc.ExecuteSilent", args, null);
        Tuple<List<string>, poPrintFiscalData, poActionLogger> res3 = res2 as Tuple<List<string>, poPrintFiscalData, poActionLogger>;
        if ((res3.Item1.Count == 0) && (res3.Item3.Count > 0)) {
            foreach (poActionLoggerItem err in res3.Item3)
                log.Add(err);
        } else
            bRes = true;
    } catch (Exception exp) {
        log.AddFromException(exp, "Error generating report " + entry.GetSignature());
        bRes = false;
    }

    return bRes;
}

}" i get the error '
Value cannot be null. Parameter name: con
' and more specific '
at System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, ConstructorInfo con)
   at Poseidon.Libs.Base.poSys.Create(Type t, IpoAppContext appContext, Func1 create)
   at Poseidon.Libs.Base.poSys.Create[T](String assemblyName, String className, IpoAppContext appContext)
   at Poseidon.Libs.Base.Extensibility.poExtensionsManager.CreateItem[T](IpoAppContext appContext, poExtensionItem item)
   at Poseidon.Libs.Base.Extensibility.poExtensionsManager.GetList[T](String domainKey, String domain, String name, String kind, IpoAppContext appContext)
   at Poseidon.Libs.UI.Presenters.poPresenter.<Init>b__5_0()
   at Poseidon.Libs.Base.poSys.ExtensionCall(Action method)
   at Poseidon.Libs.UI.Presenters.poPresenter.Init()
   at Poseidon.Libs.UI.Presenters.poPresenterMaster1.Init()
   at Hercules.Win.INF.Entries.heDocEntriesPresenter.Init()
   at Poseidon.Libs.Base.poObject.Poseidon.Libs.Base.Interfaces.IpoAppContextInit.Init(IpoAppContext appContext)
   at Poseidon.Libs.Base.poSys.Create(Type t, IpoAppContext appContext, Func1 create)
   at Poseidon.Libs.UI.Helpers.poFormsFactory.CreateProperty(IpoForm form, PropertyInfo prop)
   at Poseidon.Libs.UI.Helpers.poFormsFactory.CreateForm(Type t, poFormArgs args)
   at Poseidon.Libs.UI.Helpers.poFormsFactory.Create(Type t, poFormArgs args)
   at Poseidon.Libs.UI.Schema.poActionForm.FormCreate(poFormArgs args)
   at Poseidon.Libs.UI.Schema.poActionForm.InvokeCore(Object[] args)
   at Poseidon.Libs.Base.Schema.poAction.Invoke(Object[] args)
   at Poseidon.Libs.Base.Schema.poActionsFactory.Invoke(String domain, String name, Object[] args)
   at Poseidon.Win.Explorer.poMainF.<>c__DisplayClass152_0.<RunAction>b__1(Object state)
' any help?

What I have tried:

I think the problem is somewhere here: "
private IpoAppContext _AppContext;

public inAnorakCompositionEntriesP(IpoAppContext appContext) {
    if (appContext == null) {
        MessageBox.Show("The app context is null. Please ensure it is properly initialized.",
                        "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        throw new InvalidOperationException("IpoAppContext is not initialized.");
    }

    _AppContext = appContext;
    MessageBox.Show("inAnorakCompositionEntriesP initialized successfully.",
                    "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
"
Posted

1 solution

So, the error is indicating that the dynamic IL generation is failing to generate something because the constructor information is null. The way for you to diagnose what is causing the problem is for you to add breakpoints into your code and step through it line by line, waiting to see which line raises the error. We can't do this for you because there is so much context and code that you have, that we can't see. All we really know is that, by the time you get into this Poseidon.Libs.Base.poSys.Create(Type t, IpoAppContext appContext, Func1 create) your code fails.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900