VLF-ONE Switch to Filter

This Q&A forum allows users to post and respond to "How Do I Do ....." questions. Please do not use to report (suspected) errors - you must use your regional help desk for this. The information contained in this forum has not been validated by LANSA and, as such, LANSA cannot guarantee the accuracy of the information.
Post Reply
jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

VLF-ONE Switch to Filter

Post by jyoung » Thu May 04, 2017 6:41 am

Is there any way to "switch" to a Filter in VLF-ONE?

I can switch to a command but a filter gives an error when using the avSwitch method.

I have command that displays a list of "Invoices" for the current business object. When I user double clicks on a record, I would like to "switch" to another business object hidden filter (passing an identifier) and let that filter handle presenting an instance list of "time cards" from that invoice.

I have a filter "By Invoice" in the "Time Cards" object already working, I just need to get the user to it and pass the invoice id.

I am currently doing it by saving the invoice id to the virtual clipboard and reusing the "By Invoice" filter get the invoice id from the clipboard.
This works because I only have the one filter, but I am wondering if there is a better way to do this.
I think it will be problematic if/when I have multiple filters and this one is not the default.

Invoices Command

Code: Select all

evtroutine handling(#InvoiceList.ItemDoubleClick)
#avFrameworkManager.avSaveValue withid1(CMG) withid2(INVOICE_NUMBER) fromnvalue(#IHIVCN) persistent(False)
#avFrameworkManager.avSwitch caller(#COM_OWNER) toobjectnamed(CMG_TIME_CARDS)
endroutine
Filter

Code: Select all


mthroutine name(uInitialize) options(*REDEFINE)
*  Do any initialization defined in the ancestor
#COM_ANCESTOR.uInitialize
#COM_OWNER.avFilterLocation := LEFT
#COM_OWNER.avAllowLocationChange := True
#wk_CountryCode := 1

#avFrameworkManager.avRestoreValue withid1(CMG) withid2(INVOICE_NUMBER) tonvalue(#TIIVCN)
#avFrameworkManager.avRecordTraceAValue component(#COM_OWNER) event("Restore Value from Clipboard") avalue(#TIIVCN.AsString)

if (#TIIVCN <> 0)
#COM_OWNER.Search
endif

EDIT
So apparently my solution does not work when the other object is already open.
Also I can't seem to get the #avFrameworkManager.avClipBoardChanged event to fire, or at least it is not getting picked up in the Time Cards object.

davidbalansa
Posts: 51
Joined: Mon Feb 01, 2016 10:08 am
Location: Australia

Re: VLF-ONE Switch to Filter

Post by davidbalansa » Thu May 04, 2017 8:26 am

Have you tried populating the destination business object instance list before you perform the switch? I think you can use the List Manager AddToList method in the source of the switch by specifying the business object you want the entry to be added to.
Capture.JPG
Capture.JPG (50.41 KiB) Viewed 6157 times

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Thu May 04, 2017 9:06 am

Re - "I think it will be problematic if/when I have multiple filters and this one is not the default."

I agree. You can’t programmatically cause any filter to start other than the first one, which is started (activated) by default when a business object is opened.

You could maybe have one VLF filter that uses VL tabs, or some other selection control, to present multiple filtering faces/options to the user?

In terms of communicating between disparate components, maybe have a look at creating a custom framework manager? For example, that would be a place that your current “identifier” for time cards could be make accessible to every component in your application without having to use the virtual clipboard. It also allows you to share common code and directly access and signal between methods in other filters and command handlers. The shipped employee demo uses that technique and the specific customer manager example shows two command handlers in “close” communications.
Capture1.JPG
Capture1.JPG (37.28 KiB) Viewed 6155 times

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Thu May 04, 2017 9:24 am

One example of how you could use a custom framework manager in this situation might be like this ….

It could contain a property #TCardFilter (say) which is a reference to your time card filter.
In your time card filter you set it in uInitalize to #COM_SELF and you nullify it in uTerminate.
Now every other component in your application can tell whether the time card filter is alive (#TCardFiler *isNot *Null) and can, if alive, directly invoke methods in it.

In more detail, something along these lines might work in your custom manager ………

• Define exposed properties #tCardFilterReference and #CurrentTCardFilterSearchKey (say) in your custom manager.

• In the time card filter set #CustomManager.tCardFilterReference to #Com_Self at initialization and nullify at terminate (Note: it’s very important to nullify).

• Also, in the filter, create a publicly exposed method SearchonCurrentFilterSearchKey (say). It looks at #CustomManager.CurrentTCardFilterSearchKey, and if it is not ‘empty’, it clears the instance list and does the request search. It then empties #CustomManager .CurrentTCardFilterSearchKey as the search requested has now been serviced.

• In the tCard filter, invoke SearchonCurrentFilterSearchKey at the end of initialization (ie: If someone else has set up the search key already and fired you up, act on it now. This method can probably also be (re)used to handle manual search request made by the user clicking buttons in the filter.

• Create a method SwitchtoTCardFilter in the custom manager with a UseFilterSeachKey parameter. Inside it map the parameter into property #CurrentTCardFilterSearchKey. Next switch to the time card business object to fire it up or bring it to the front. Then, if #tCardFilterReference *isnot *null, invoke #tCardFilterReference.SearchonCurrentFilterSearchKey. So, you either fire up the filter, which will later do the search as part of its initialization, or because it is already active, you directly invoked its search method.


This now means that any other component, anywhere in your application, should be able to Invoke #CustomerManager.SwitchtoTCardFilter UseFilterSearchKey(XXXXXX).

I’m sure there will be an initial hiccup in this, but I think it can be made to work.

Technical Note:
The main coding trap when communicating directly between filters and command handlers via a custom manager is for a component to keep a local copy of the #TCardFilter reference (say). This is usually done to listen to events being signalled by it. This type of keeping a local reference copy would leak resources if #TCardFilter is terminated.
This means that instead of listening to #MyLocalTCardReference.SomeEvent, which means you have to define and keep a local #TCard reference, you are better to listen to the custom manager for a more generic event it signals, like TCardSignalledSomeEvent, which can include the #TCardFilter reference as a parameter if required.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Thu May 04, 2017 11:42 pm

Hi Mark,

I think I understand what you are saying with regards to the Custom Framework Manager. I will give it a go and see what happens.

Thanks,
Joe

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Fri May 05, 2017 12:54 am

I am getting an error while trying to cast the avCustomManagerBaseReference to my Custom Framework Manager.
capture.PNG
capture.PNG (33.43 KiB) Viewed 6146 times
The interesting thing is that my component does not extend DF_OCUSTM (which is the demo version), it extends #VF_AC036O

Here is my Custom Framework Manager

Code: Select all

function options(*DIRECT)
begin_com role(*EXTENDS #VF_AC036O)

define_com class(#CMGTCDInvoiceFilter) name(#InvoiceFilter) reference(*DYNAMIC)

define_com class(#IHIVCN) name(#InvoiceNumber)
define_com class(#wk_CountryCode) name(#CountryCode)

define_pty name(InvoiceFilter) get(*REFERENCE #InvoiceFilter) set(*REFERENCE #InvoiceFilter)
define_pty name(InvoiceNumber) get(*AUTO #InvoiceNumber) set(*AUTO #InvoiceNumber)
define_pty name(CountryCode) get(*AUTO #CountryCode) set(*AUTO #CountryCode)

mthroutine name(uInitialize) options(*REDEFINE)
* Do the ancestor default behaviour
#COM_ANCESTOR.uInitialize
endroutine

mthroutine name(uTerminate) options(*REDEFINE)
* Do the ancestor default behaviour
#COM_ANCESTOR.uTerminate
endroutine

mthroutine name(SwitchToTimeCardsFilter)
define_map for(*INPUT) class(#VF_AC010O) name(#command) pass(*BY_REFERENCE)
define_map for(*INPUT) class(#IHIVCN) name(#number)
define_map for(*INPUT) class(#wk_CountryCode) name(#country)

#InvoiceNumber := #number
#CountryCode := #country

* fire up the time cards filter, this will either load it up, in which case the InvoiceFitler will be set, or bring it to the front where it should already be set
#avFrameworkManager.avSwitch caller(#command) toobjectnamed(CMG_TIME_CARDS)

if (#COM_OWNER.InvoiceFilter *IsNot *NULL)
#COM_OWNER.InvoiceFilter.SearchOnInvoiceNumber
endif

endroutine

end_com
Then in my command and filters

Code: Select all

define_com class(#CMGFrameworkManager) name(#FrameworkManager) reference(*DYNAMIC)

mthroutine name(uInitialize) options(*REDEFINE)
define_com class(#PRIM_EVP) name(#tempField) reference(*DYNAMIC)
*  Do any initialization defined in the ancestor
#COM_ANCESTOR.uInitialize

#FrameworkManager <= (#avFrameworkManager.avCustomManagerBaseReference *As #CMGFrameworkManager)

* Build collection of Editable fields
#COM_OWNER.CollectEditableControls( #COM_OWNER.ComponentControls )
endroutine
Last edited by jyoung on Fri May 05, 2017 1:20 am, edited 1 time in total.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Fri May 05, 2017 1:19 am

I stumbled into having to create a new Framework IIP component from DF_OSYSTM.
Once I did so, registered it with the framework and set the avCustomManagerId the error resolved itself.

I was under the impression (for some reason, don't know where I got the idea) that you could have multiple managers, say one for each "application". This seems not to be the case.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Fri May 05, 2017 1:45 am

Made a few changes to the code posted above (making it Framework specific and not application specific) and it is working out really well.

Thanks for the help!
Joe

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Fri May 05, 2017 7:51 am

I think you can have as many managers as you want - but I have not tested this.

Create a VL reusable parts #Manager1 and #Manager2 (say).

Declare them scope(*Application) in your IIP, your version of DF_OSYSTM, you'd probably also put code in there to initialize and terminate them as your framework starts and ends.

Then any other program that wants to use one just declares Define_com #MyManager1 scope(*Application) and they are accessible.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Mon May 08, 2017 11:18 pm

Hi Mark,

The demo IIP set the avCustomManagerId to DF_OCUSTM

Code: Select all

begin_com role(*EXTENDS #VF_AC011O)

* -----------------------------------------------------------------------------
* Initialzie and setp up values
mthroutine name(uInitialize) options(*REDEFINE)

* Do the ancestor default behaviour
#COM_ANCESTOR.uInitialize

* Do custom  behaviour
#avCustomManagerId := DF_OCUSTM /* Set the id of the avCustomManager used in the shipped demo */

* Use a single shared message set in tablet mode
#SharedMessageSetinTabletMode := true


endroutine

* other code omitted
end_com
Before I changed avCustomManagerId to my Manager Id, I was getting the cast error noted above.
If I use multiple managers what do I set that value to?

Also, from the demo, I thought we had to cast the avCustomManagerBaseReference to our custom manager.
Are you saying we don't have to do that we can just "scope" them in by declaring them SCOPE(*APPLICATION)?

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Tue May 09, 2017 8:49 am

If you use multiple managers then you would not use avCustomManagerId at all.

Just declare them anywhere you want to use them as scope(*Application) and you should be good to go.

If the declare them in your IIP, then you know that they get created and initialized at start up and terminated at shutdown.

Otherwise, they would not get created until some code that declares them executes, which makes initialization and termination harder to code.

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Tue May 09, 2017 8:56 am

Using a singleton system manager for your server side code can be quite useful as well.
eg: Invoke methods in it at the start and end of every SrvRoutine to replace library lists, change job user, etc.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Wed May 10, 2017 12:16 am

I am not able to get the multiple managers to work. I can get a single manager to work so I will go with that but you have some examples of using multiple managers that would be great.

This is what I have got.

I've defined 2 framework managers, that each have a "DoSomething" method, in each a simple trace statement is issued.

Code: Select all

begin_com role(*EXTENDS #VF_AC036O)

mthroutine name(DoSomething)
#avFrameworkManager.avRecordTrace component(#COM_OWNER) event("CMG Framework Manager1 - Do Something")
endroutine

end_com

Code: Select all

begin_com role(*EXTENDS #VF_AC036O)

mthroutine name(DoSomething)
#avFrameworkManager.avRecordTrace component(#COM_OWNER) event("CMG Framework Manager2 - Do Something")
endroutine

end_com
Both get declared in the System IIP with application scope. (nothing is getting called, they just get declared so that can get created).

Code: Select all

begin_com role(*EXTENDS #VF_AC011O)

define_com class(#CMGFrameworkManager1) scope(*APPLICATION)
define_com class(#CMGFrameworkManager2) scope(*APPLICATION)

* -----------------------------------------------------------------------------
* Initialzie and setp up values
mthroutine name(uInitialize) options(*REDEFINE)

* Do the ancestor default behaviour
#COM_ANCESTOR.uInitialize

* Do custom  behaviour
* #avCustomManagerId := VLFFWKMGR /* Set the id of the avCustomManager used in the framework */

* Use a single shared message set in tablet mode
#SharedMessageSetinTabletMode := true


endroutine
end_com
In a command, they get "scoped in" and the DoSomething method is invoked.

Code: Select all

define_com class(#CMGFrameworkManager1) name(#CMGFrameworkManager1) scope(*APPLICATION)
define_com class(#CMGFrameworkManager2) name(#CMGFrameworkManager2) scope(*APPLICATION)

mthroutine name(uInitialize) options(*REDEFINE)
define_com class(#PRIM_EVP) name(#tempField) reference(*DYNAMIC)
*  Do any initialization defined in the ancestor
#COM_ANCESTOR.uInitialize

#CMGFrameworkManager1.DoSomething
#CMGFrameworkManager2.DoSomething

* Build collection of Editable fields
#COM_OWNER.CollectEditableControls( #COM_OWNER.ComponentControls )
endroutine
At this point, an error occurs.
error1.png
error1.png (35.33 KiB) Viewed 6517 times
This seems like something has not been initialized properly as the avFrameworkManager is null. The only way I have found to prevent the error and to get the custom framework manager's ancestors populated, is to cast the avCustomMangerBaseReference to the custom framework manager.

Code: Select all

#CMGFrameworkManager1 <= (#avFrameworkManager.avCustomManagerBaseReference *As #CMGFrameworkManager1)
However, this means that I can't "scope it in" and the reference must be dynamic.

Code: Select all

define_com class(#CMGFrameworkManager1) name(#CMGFrameworkManager1) reference(*DYNAMIC)
However that still won't work as the cast will fail.
error2.png
error2.png (33.51 KiB) Viewed 6517 times
Which brings back the avCustomManagerId in the System IIP.

Code: Select all

* Initialzie and setp up values
mthroutine name(uInitialize) options(*REDEFINE)

* Do the ancestor default behaviour
#COM_ANCESTOR.uInitialize

* Do custom  behaviour
#avCustomManagerId := CMGFWKM01 /* Set the id of the avCustomManager used in the framework */

* Use a single shared message set in tablet mode
#SharedMessageSetinTabletMode := true


endroutine
So I guess I am just not getting how you make multiple managers work. Like I mentioned, I get one to work and it solves the problem, so I will just use the one. Would be nice to understand this however.

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Wed May 10, 2017 8:12 am

Sorry - I failed to mention that when you create multiple managers it is 'pure' VL programming.

You need to program your system managers exactly like you would if you were not using the framework.
ie: When you use avCustomManagerID the VLF is aware it exists, so it loads it and initializes all the framework references, etc that you inherit from VFR_AC036O. If you use multiple pure VL managers the VLF is unaware that they exist, so you need define and manage the initialization process yourself.

So, if you are using multiple pure VL managers you cannot use VF_AC036O as an ancestor.
You should use a simple #PRIM_OBJT instead, or maybe create you own ancestor component.

To get visibility to references to the VLF framework manager, etc, you would need to declare them in your #PRIM_OBJT, and initialize them from your IIP at start up.

Alternatively, you could pass references to them in from the various filters and command handlers as they use your manager's services.

I'll post the VF_AC036O code so that you can see they things it declares and initializes ......... so that they are visible and can be used in code that inherits from it. That might give you some ideas about what you might want to put into a pure VL manager.

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Wed May 10, 2017 8:19 am

VF_AC036O is very simple .....

Code: Select all

Begin_Com Role(*EXTENDS #Prim_Objt)

Define_Com Class(#VF_SY001O) Name(#uSystem) Scope(*APPLICATION)
Define_Com Class(#VF_SY001X) Name(#uSystemCommon) Scope(*APPLICATION)
Define_Com Class(#VF_FP001O) Name(#uFramework) Scope(*APPLICATION)

* ---------------------------------------------------------------------------
Define_Com Class(#VF_SY100O) Name(#avFrameworkManager) Reference(*DYNAMIC)
Define_Pty Name(avFrameworkManager) Get(*REFERENCE #avFrameworkManager) Set(*REFERENCE #avFrameworkManager)

* ---------------------------------------------------------------------------
Mthroutine Name(uInitialize)
Endroutine

* ---------------------------------------------------------------------------
Mthroutine Name(uTerminate)
Endroutine


End_Com
You need some sort of definition like this in each of your 'pure VL' system managers, either directly in them, or in an ancestor they share.

Then at start up in your IIP you need to declare your managers, and initialize #Manager.avFrameworkManager in each of them.

Then code in them should be okay to use #avFrameworkManager.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Wed May 10, 2017 11:52 pm

Ahh, that was the missing piece. I get it now.

Thanks a ton for the help.
Joe

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Thu May 18, 2017 5:56 am

Hi Mark,

Hate to bring this back up but I am still not getting the framework manager initialized. Its still null when I try to use it. The odd thing is is that my reference to the avFrameworkManager is null, but the uSystem.uFrameworkManager is not.

Here is my Custom Framework Manager. When the SwitchToInvoiceFilter method gets invoked, avFrameworkManager is null.

Code: Select all

begin_com role(*EXTENDS #PRIM_OBJT)

define_com class(#VF_SY001O) name(#uSystem) scope(*APPLICATION)
define_com class(#VF_SY001X) name(#uSystemCommon) scope(*APPLICATION)
define_com class(#VF_FP001O) name(#uFramework) scope(*APPLICATION)

* ---------------------------------------------------------------------------
define_com class(#VF_SY100O) name(#avFrameworkManager) reference(*DYNAMIC)
define_pty name(avFrameworkManager) get(*REFERENCE #avFrameworkManager) set(*REFERENCE #avFrameworkManager)

define_com class(#CMGTCDInvoiceFilter) name(#InvoiceFilter) reference(*DYNAMIC)

define_com class(#IHIVCN) name(#InvoiceNumber)
define_com class(#wk_CountryCode) name(#CountryCode)

define_pty name(InvoiceFilter) get(*REFERENCE #InvoiceFilter) set(*REFERENCE #InvoiceFilter)

define_pty name(InvoiceNumber) get(*AUTO #InvoiceNumber) set(*AUTO #InvoiceNumber)
define_pty name(CountryCode) get(*AUTO #CountryCode) set(*AUTO #CountryCode)

define_evt name(CMGTCDCloseCommandWindows)

mthroutine name(SwitchToInvoiceFilter) access(*PUBLIC)
define_map for(*INPUT) class(#VF_AC010O) name(#command) pass(*BY_REFERENCE)
define_map for(*INPUT) class(#IHIVCN) name(#number)
define_map for(*INPUT) class(#wk_CountryCode) name(#country)

#InvoiceNumber := #number
#CountryCode := #country

#avFrameworkManager.avRecordTrace component(#COM_OWNER) event("Switching to CMGTCDInvoicesFilter")

* fire up the time cards filter, this will either load it up, in which case the InvoiceFitler will be set, or bring it to the front where it 'should' already be set
#avFrameworkManager.avSwitch caller(#command) toobjectnamed(CMG_TIME_CARDS)

* close CMGTCDDetails window if its open
signal event(CMGTCDCloseCommandWindows)

if (#COM_OWNER.InvoiceFilter *IsNot *NULL)
#COM_OWNER.InvoiceFilter.SearchOnInvoiceNumber
endif

endroutine
end_com
Here is how I am initializing it in the IIP. Here the avFrameworkManager is NOT null, and the CMGFrameworkManager.avFrameworkManager is set to it.

Code: Select all

begin_com role(*EXTENDS #VF_AC011O)

* define ALL custom framework managers
define_com class(#CMGFrameworkManager) scope(*APPLICATION)

* -----------------------------------------------------------------------------
* Initialzie and setp up values
mthroutine name(uInitialize) options(*REDEFINE)

* Do the ancestor default behaviour
#COM_ANCESTOR.uInitialize

* Do custom  behaviour
#avCustomManagerId := VLFFWKMGR /* Set the id of the avCustomManager used in the framework */

* set the frameworkmanager for the custom managers
#CMGFrameworkManager.avFrameworkManager <= #avFrameworkManager

if (#CMGFrameworkManager.avFrameworkManager *Is *NULL)
#avFrameworkManager.avRecordTrace component(#COM_OWNER) event("FrameworkManager Is Null")
endif

* Use a single shared message set in tablet mode
#SharedMessageSetinTabletMode := true

endroutine
end_com
I am declaring the framework manager in my components (filters and commands) like

Code: Select all

define_com class(#CMGFrameworkManager) name(#FrameworkManager) scope(*APPLICATION)
It seems like the reference is not staying around like it should. As noted earlier I can use uSystem.uFrameworkManager, but I don't understand why the reference goes missing if the manager itself is declared in the application scope.

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Thu May 18, 2017 8:21 am

Sorry, this thread has become a bit confused by there being 2 separate and largely unrelated options being discussed.

Option 1 was to create a single VLF based custom manager as per shipped examples. You create a VL reusable part that has ancestor #VF_AC036O. Then you identify that manager to the VLF framework in your IIP by setting #avCustomManagerId := “MYMANAGER” in its uInitialize routine. The framework will then load and initialize your custom manager and you should be good to use it.

Option 2 was a to create your own non-VLF custom managers. This is how you would create a custom manager in a non-VLF application, or in the VLF when your wanted to have multiple managers, say one per application.

MarkD
Posts: 630
Joined: Wed Dec 02, 2015 9:56 am

Re: VLF-ONE Switch to Filter

Post by MarkD » Thu May 18, 2017 8:38 am

Use the declaration:

Code: Select all

 define_com class(#CMGFrameworkManager) name(#FrameworkManager) scope(*APPLICATION)
in your IIP, or use:

Code: Select all

define_com class(#CMGFrameworkManager) scope(*APPLICATION)
in your filters and command handlers.

At the moment it looks like you are getting two instances created, one named #CMGFrameworkManager and one named #FrameworkManager.

Only the #CMGFrameworkManager instance has been initialized.

jyoung
Posts: 657
Joined: Thu Jan 21, 2016 6:43 am
Location: Oklahoma City, OK USA

Re: VLF-ONE Switch to Filter

Post by jyoung » Thu May 18, 2017 11:11 pm

Ahh, good grief. I missed that.

Thanks. Will try to to post in this thread again. :D

Post Reply