Jump to content

Call a script from an executable file (EXE)


This topic is 2580 days old. Please don't post here. Open a new topic instead.

Recommended Posts

Hello,

I have more than 10k executable files, each EXE export data to a single table, inside of an unique MySQL.

I created a FM database to manage all data (ODBC), but I didn’t solve how to trigger a script from an external EXE, without looping for new data each minute.

 

Questions:

#01: There is way to trigger a script in an open database, without looping ?

#02: Runtime solutions can be used with parameters?

My best idea, at this time, is to create a runtime solution and a relationship, and call it from the EXE.  I do think is a "stupid idea" and there must be clever solutions out there.

 

Thanks for all

 

INFO: I am using windows 10 | FM Pro 15

Link to comment
Share on other sites

The MBS Plugin can receive notifications from OS.

And with MBS Plugin comes an example in C++ to send them with a little exe for windows.
So you could use the .exe there to send notification to your FileMaker solution and trigger a script via our plugin.

see

http://www.mbsplugins.eu/component_Notification.shtml

Link to comment
Share on other sites

Hello,

First thanks for your comment, and suggestion.

Is an excellent tool! I do have some questions about it:

1. Is possible to use a script parameter - MBS( "Notification.Listen"; NotificationName; FileName; ScriptName ) ?

2. What is the limit of "Notification.Listen", how many notification per run? In my tests the maximum was ~ 5750, and have some errors ("Failed to get ID for this notification name", example: #5984; FM crash after = Net framework exception )

3. There is a function to release all "Notification", or we need to do it "one by one"?

4. The Notification.List return a text without array (not a list), correct ?

5. How Notification Send work? There is any example (EXE)

 

Thanks for all,

 

 

 

 

Notifications.fmp12

Link to comment
Share on other sites

FM on Windows has an ActiveX interface that you can use to run a script.  AppleEvents on Mac does the same.  Do search in the FM help for ActiveX and you'll get a list of methods and properties you can use.  The help has some VBA examples that you can easily adapt to whatever code your EXE is written in.  That does assume that you can modify the code for the EXE to add the relevant parts to talk to FM.

Link to comment
Share on other sites

A script Parameter would be a nice idea. Like passing a number or so around.

What would you want to listen for 5700 different notifications? Normally people just use one or two.

The list function should return a list of all registered names.
The example exe is there, it sends notifications on Windows using SendMessageTimeout and HWND_BROADCAST.

Link to comment
Share on other sites

Hello Wim, thanks for your response and help.

I read this, from a previous post from you: “Oh, keep in mind that there is a bug in FM (has been ever since FM8) that if you call a script through the ActiveX interface a few times in relative quick succession (as you will do I'm sure in testing), the ActiveX interface will go deaf. At some point the script will not fire. When you see that, you have restart FM.” - http://fmforums.com/topic/85877-activex-and-c-sharp/#comment-394772

 

#1. This still occur in the current FM version (15)?

2. I have this code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FMPRO70Lib;


namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            FMPRO70Lib.Application FMProApp;
            FMPRO70Lib.Documents FMProDocs;
            FMPRO70Lib.Document FMProDoc;

            try

            {

                FMProApp = new FMPRO70Lib.Application();
                FMProDocs = new FMPRO70Lib.Documents();
                FMProDoc = new FMPRO70Lib.Document();
                FMProApp.Visible = 1;
                FMProDocs.Open("C:\\Users\\oscar\\Desktop\\helloworld.fmp12", "Admin", "");
                Console.WriteLine(FMProDoc.Parent);
                FMProDoc.Activate();
                FMProDoc.DoFMScript("myscript");
                FMProDoc = null;
                FMProApp = null;
                FMProDocs = null;
                
            }

            catch (Exception ex)

            {

                Console.WriteLine(ex);

            }

        }

    }

}

Source and credits to:

JHaughey - http://fmforums.com/topic/85877-activex-and-c-sharp/#comment-394772

#2.1 - I am facing the same problem as he, myscript doesn't run. I tried you suggestion replacing "FMProDoc = new FMPRO70Lib.Document();" to "FMProDoc = FMProDocs.Open("C:FilemakerJob2.fp7", "Admin", "");"

But the problem remains, and doesn't open FM at all;

How to solve this? Thanks

#2.2 - I read this, if the file (helloworld.fmp12) is already open i need to use GetObject instead of CreateObject; My Visual Studio and C# knowledge is -1, i need to change anything in the previous script (a if clause) ?

Source: http://www.filemaker.com/help/13/fmp/en/html/create_script.13.11.html

 

#3.1 - After running the c# script, and close FM manually (by window or exit) i still have two process in windows 10 task manager (Filemaker Pro 5.1~8.2 MB and Filemaker Listener 101.3 MB), why? Seems like the file and FM are in memory, because if i run the script again is faster and if i end the task, the next run takes more time.

How to end up these two process (dump all).

 

Thanks for all

 

 

 

Hello MBS,

"What would you want to listen for 5700 different notifications? Normally people just use one or two." Yes, you are right! I just need less than 20.

But i was trying to understand how MBS plugin works in this case.

 

I need to do more test on it (i didn't get Notification Send command...), but so far is an amazing plugin. Very helpful 

 

 

Link to comment
Share on other sites

Something in your code is calling on FMP 5 which is why you have it in your task manager.  Probably a reference to the old activeX library or to an .fp7 file.

Does your code fall through to the catch block?  And if so: what is the exception?

As to the bug: not sure; I do most of my integrations directly against FMS these days or write a small ASP.NET web service to act as the intermediary.

 

Link to comment
Share on other sites

Hello Wim, thanks for your comments again.

In the previous post, I pasted the entire code. I don’t have any lines calling FMP 5 or .fp7. And I am using the last FMPRO70Lib from FMP 15.

After your comment, I tested with and without plugins, and the problem remain. I don’t understand why Exit doesn’t work, Filemaker maintains in memory.

 

I read this “FileMaker may not exit until all reference counts are released. In Visual Basic, you can release the reference count by setting the object variable to "Nothing", for example:” – source: http://www.filemaker.com/help/12/fmp/html/create_script.13.11.html#1028245

Then I replace the null to FMProDoc = Nothing; - But didn’t work.

 

But my biggest concern is why I can’t call a script?

 

Does your code fall through to the catch block?  And if so: what is the exception? NO.

helloworld.fmp12

Link to comment
Share on other sites

the DoFMScript is called on object FMProDoc, but it was never set to anything.

Try this instead of the line where you just open the file: 

FMProDoc = FMProDocs.Open("C:\\Users\\oscar\\Desktop\\helloworld.fmp12", "Admin", "");

Link to comment
Share on other sites

You have to work with what the 'catch' block gives back, my guess is that the 'FMProDoc' variable remains 'null'.  Try another approach: after opening the file (does it open at all and just the script does not run?)  then do a foreach loop through the documents, check the FullName against the file you want to target and when you find it then do the DoScript.

Link to comment
Share on other sites

Hello Wim and thanks again...

I spent the last days, testing and without success. FM open the file but doesn't run the script, the scriptname is correct and i don't have any error in Visual Studio.

The problem must be related with DoScript, does work on Windows 10?

 

Thanks

Link to comment
Share on other sites

5 minutes ago, MonkeybreadSoftware said:

For MBS Plugin 7.2 I already added passing parameters.

So you can include two numbers in the notification.

e.g. a command code and a number as parameter.

 

Thanks,


From a new MBS client

Link to comment
Share on other sites

This topic is 2580 days old. Please don't post here. Open a new topic instead.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.