capsprojectos

Call a script from an executable file (EXE)

14 posts in this topic

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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
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 

 

 

Share this post


Link to post
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.

 

Share this post


Link to post
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

Share this post


Link to post
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", "");

Share this post


Link to post
Share on other sites

Hello Wim,

Sorry, but doesn't work!

The script doesn't load.

 

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

  • Similar Content

    • By sal88
      Hi all
      We have a web based tickets portal which creates new messages in our filemaker database - this is for customers' use. It does this using the PHP API (the website was developed by a third party). We would like the owners of tickets to be notified when the customer has added a message to one of the tickets that they are in charge of.
      Is there a way for filemaker/filemaker server to trigger a 'send email' script when a new record is created via the web portal? Or would it be simpler for this action to occur on the web side?
      Many thanks
    • By Bailey Kessing
      I am running a server script periodically (every hour lets say) which does some database maintenance, uploads some files, etc. I do this on a number of Filemaker Servers (latest server version running on Windows machines) without problems…except for one server. On this server I use scriptmaster to up load some large files into containers as they are generated from scientific instruments. The problem is that the server runs seems to run out of RAM memory after a "few" days. I think this is the only thing that this server does differently than the other 4 servers and feel that this is the problem. My question is…is there a way to "flush" memory used by the plugin or by the FM server. Has anyone else experienced something similar or am I barking up the wrong tree? Thanks. 
    • By Oyseka
      Hi all, I know this should be easy but I am not getting it right.

      The mail gets sent but no attachment
    • By docasar
      Hello,
      It always go to "Default segment button bar", set on the button bar setting, when reenter to layout.  I need to go to same segment when user was working on before he left the layout.
      I know how to get back to last tab panel used, and I wonder if there would be similar for this.
      Thanks a lot!
      Luis.
    • By docasar
      Hello,
      I have a tab control panel with four tabs, and I would like to achieve that when I change tabs a script is triggered and would set the value of a global field called "zzz_g_collection_type" according to the tab name which is active.
      I need this field to dynamically filter the products that are shown on 1_row portals that I have put into each tab panel space.
      I have followed Elishree Dey tip on http://burnignorance.com/filemaker-pro-tips/trigger-a-script-when-user-changes-the-tabs-in-filemaker/ but I cant make it work, it only changes the value of "collection_type" field once and only to show that the first condition is not met.
      I have attached the picture of my script.
      My initial idea was to place on each tab space a picture-field of a product as a 1 row portal and then duplicate as much as products I have so when I click on the picture a script is triggered and the product is added to the invoice.
      Morever, I have set an Object name to each tab Control so it would work, and also the desired value for zzz_g_collection_type comes from another related table with only one record that I use as preferences, this is on Preferences Table I have three fields called "Product_Type_Short_#" and those match on Elishree Day script tutorial.
      Any ideas what I could be doing wrong?