This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Help request for GitHub sample UsingManagedAssemblies

Hello everyone,

I would like to create an UI extension add-on for M-Files, but I am new to developing for M-Files,
so I decided to start with adjusting the sample code and see where it gets me.

1. I downloaded UsingManagedAssemblies sample from github:
https://github.com/M-Files/MFilesSamplesAndLibraries/tree/master/Samples/UIX%20Applications/UsingManagedAssemblies
2. I zipped the contents of uix folder and installed it to [color=blue]MyVault[/color] using the M-Files Admin tool.
3. Upon entering [color=blue]MyVault[/color] using the M-Files Online explorer, I got a popup window stating: "MyVault says Hello!".
4. I was happy to have successfully installed and ran the sample add-on!

Next, I wanted to add an extra method to the:

Class1.cs file:

public class Class1 {
public void ShowMessage(Int32 parentHWND, string message, dynamic vault) {
// Get a reference to the window from the provided handle.
IWin32Window parentWindow = Control.FromHandle((IntPtr)parentHWND);

// Show the message.
MessageBox.Show(parentWindow, $"{vault.Name} says {message}");
}

public string GetString() {
return "GetString()";
}
}


main.js file:

function getShellFrameStartedHandler(shellFrame) {
return function() {
var clrObject = MFiles.CreateObjectCLR( "MyClassLibrary.dll", "MyClassLibrary.Class1" );
        var myString = clrObject.GetString();
clrObject.ShowMessage( shellFrame.OuterWindow.Handle, "Hello!", shellFrame.ShellUI.Vault );
};
}


So that I can use myString value instead of the hardcoded: "Hello!" string in the line:
[size=12pt]clrObject.ShowMessage( shellFrame.OuterWindow.Handle, "Hello!", shellFrame.ShellUI.Vault );[/size]
(I did not change the "Hello!" string for myString variable yet. I only added the var myString = clrObject.GetString(); into the main.js file)

I zipped the new .dll and main.js together with appdef.xml into a .zip file and installed it onto [color=blue]MyVault[/color] again.

Upon opening [color=blue]MyVault[/color] using the M-Files Online explorer I get the following error message:
https://imgur.com/a/2iIT4zg
(The green text is my translation for you)
With the following details:
CoScriptDelegate_Events.cpp, 396, Objekt nepodporuje t?to vlastnosť alebo met?du (0x80040008)
IDispatchInvocation.cpp, 96, Objekt nepodporuje t?to vlastnosť alebo met?du (0x80040008)
Managed Assemblies: main.js, 49, Objekt nepodporuje t?to vlastnosť alebo met?du (0x80040008)
MErrorHelper.cpp, 2457, Objekt nepodporuje t?to vlastnosť alebo met?du (0x80040008)
(M-Files 20.1.8669.3)


Does anyone know what is the problem?
What am I doing wrong?


The uix.zip can be found in the attachments.
uix.zip
Parents
  • If you could use a popup window instead of a tab, then you may be able to use IDashboard.Window.Handle (www.m-files.com/.../ I've never tried to do something like this, though, so I am unsure how M-Files would cope with you potentially altering the window contents in this way.

    If you're looking to get as much done as possible then part of me does wonder whether you'd be better off doing this via an external application instead; you could use the standard COM API to push and pull data back and forth to M-Files, and maybe use the UIX to add a button to the M-Files desktop which launches your application (github.com/.../OpenExternalApplicationOnCommand).

    You could then look at creating a custom tab/dashboard using something like threejs.org after you've gotten the functionality working in a more forgiving environment.

    Regards,

    Craig.
Reply
  • If you could use a popup window instead of a tab, then you may be able to use IDashboard.Window.Handle (www.m-files.com/.../ I've never tried to do something like this, though, so I am unsure how M-Files would cope with you potentially altering the window contents in this way.

    If you're looking to get as much done as possible then part of me does wonder whether you'd be better off doing this via an external application instead; you could use the standard COM API to push and pull data back and forth to M-Files, and maybe use the UIX to add a button to the M-Files desktop which launches your application (github.com/.../OpenExternalApplicationOnCommand).

    You could then look at creating a custom tab/dashboard using something like threejs.org after you've gotten the functionality working in a more forgiving environment.

    Regards,

    Craig.
Children
No Data