Jump to content
capsprojectos

Call a script from an executable file (EXE)

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

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
Wim Decorte    446

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
Wim Decorte    446

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
Wim Decorte    446

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
Wim Decorte    446

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 pomilpetan
      Good morning everyone I created a database runtime solution with FileMaker Pro 15 advanced. The program must export the contents of a form in PDF format. In a solution that runs under FileMaker I could use the command "Save as PDF" but this command does not work in a runtime solution. Could someone tell me how I could make this function? thank you so much.
    • By MSPJ
      Hi - I'm considering upgrading from FMP 14 to FMP 16.  However, my solution depends on a distributed runtime for a commercial solution.  It appears that API improvements are not available in the runtime.  I'm wondering if the window control (cards) and overall windows interface are at least available in the runtime - otherwise, there doesn't seem to be much point in upgrading for me.
      Thanks,
      Michael 
    • By Keith McKay
      I have two tables, A & B, with similar fields.  I want to write a script that will search table B for records that match the fields that are entered in table A.  I am not sure how to do this.  Any suggestions?
    • By DreadDamsel
      Hi. I'm using FMPro 12 Advanced.
      Creating a database for our community centre and I need to add a membership number to contacts - but not all of them.
      I've created a separate table for Membership numbers (as not all contacts will have one, so serial numbers aren't appropriate).
      Each membership has a number of details fields.
      It's probably a REALLY logical and stupid problem I'm batting against - but I need to:
      Select a contact>go to their details>add a membership number (go to a floating window layout, enter the details to the serial-number-derived membership) and have the details including the number show up in a tab on the contact's details layout.
      I've created a relationship between my contacts file and my membership file via the Contact_ID>Contact_ID_fk and have played around with other relationships. 
      I've also created a simple script from a button on the Contacts membership tab to go to the Membership Layout window and create a new record. But it keeps creating a new record in the Contacts, not Membership - even though the relationship only has to create new records in the memberships side.
      I'm now running around in circles - please can anyone help me out here?????
    • By Julio
      Hello,
      I have a weird issue that just started happening when I use the 'Print to PDF' script step in a loop.
      I have a script that passes through and prints out a set of pages. When I use the script Debugger and when I reach the spot I am having issues with, I can see, during the preview, that it is in the correct record; showing the correct page, but once it is done and saved as a PDF, it is showing the first record that was browsed.
       
      I have attached a snapshot of the script I am using.
      If you notice, I have it go to the layout First, Performs a Find based on a Variable - It finds the proper records.
      Then it goes to the first record, (for this example, lets say record # 36)
      Starts a loop and saves the record being browsed to a PDF. Then it moves on to the next record in the found set.
      The Custom Dialog which SHOULD show the next records ID, does not. It still shows record #36.
       
      I have no clue as to why. Even though as I go through each script step and I can visually confirm it is moving to the proper record in the FileMaker client, it does NOT save the proper Record.
       
      If I switch the option on the 'Save Record as PDF' from Current Record, to records being browsed, it saves the proper records to PDFs, but it duplicates them 3 times and does not set the proper page numbers.
       
      Attached is also the end result
      The Observ ID: should be 36, 37, 38 but all three pages stay at 36 showing the exact same record.
       
      Thank you all for your help.
       
       
       
       
       
       
       




×

Important Information

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