Wiki Home

_ Exam 70-155 Study Group Log _1999/10/19

Namespace: WIN_COM_API
[Irrelevant material was trimmed]

Session Start: Tue Oct 19 17:50:06 1999

[17:50] *** Now talking in #VisualFoxPro

[17:53] *** nancy changes topic to 'Exam 70-155 Study Group'

[18:04] {JohnFabiani} After the game last night I read about COM. It maintains a state in a collection list.

[18:07] {JohnFabiani} Within the COM spec there are three items that are part of the FOUNDATION

[18:07] {JohnFabiani} one: Persistent Storage

[18:07] {JohnFabiani} two: Monikers

[18:08] {JohnFabiani} Three: Uniform Data transfer

[18:08] {BobArcher} ADO is not part of VFP and should not be on a VFP exam... in my opinion. :)

[18:09] {JohnFabiani} the Monikers are names and embody the ability to give a specific instantiation of an object a name

[18:10] {JohnFabiani} the name is used to allow the client to reconnect to that exact same object instance with the same "STATE"

[18:11] {BobArcher} Hence Apartment Threaded COM objects

[18:12] {JohnFabiani} The name (the instance) also allows the a name to be assigned to a operation (method) that can be executed repeatedly

[18:15] {JohnFabiani} THE TOP?? Last time we tried to find out about the state of a COM object.

[18:15] {RoiL} I think Erik, gave us the low-down on the state issue.

[18:16] {JohnFabiani} Reviewing Evanís code on COM'S made us question the state of COM objects.

[18:17] {JohnFabiani} What I found was that a COM as a FOUNDATION has three underlying architectures built in.

[18:17] {JohnFabiani} one Persistent Storage

[18:17] {JohnFabiani} two Monikers

[18:18] {JohnFabiani} Three Uniform Data Transfer

[18:18] {nancy} What are Monikers?

[18:18] {JohnFabiani} The Moniker addresses the state question directly.

[18:19] {JohnFabiani} Monikers are the tools (basically a collection) to allow a specific instantiation of object a name.

[18:20] {JohnFabiani} The name provides the way to enable a client to reconnect to the exact same object instance with the same STATE. The moniker is actually the connection reference between the COM server and the COM client, which has its own (stateful) connection identity. You can think of it as the identifier for the COM object reference between the server and the client; in VFP's case, it persists as long as the object is defined to both the client and the server thread.

[18:22] {RoiL} So if a BizObj on the server has to leave the record pointer in a specific location to allow a GetFldData method access to that record it's ok?

[18:22] {JohnFabiani} The monikers also allow naming of some sort of operation (method) such as a query, to be excuted repeatedly

[18:22] {CraigB} this all seems to fly against the idea of running your COM objects in MTS

[18:23] { JohnFabiani } As long as the connection maintains the state, yes. You can get hurt by assuming that a stateful connection exists under some environments such as MTS if MTS is managing the instantiation of the server.

[18:23] {nancy} And, we don't have control over the connection, either, right?

[18:23] {JohnFabiani} Right it persists as long as the object is open. Does anybody understand DCOM then.

[18:24] {nancy} Like an Oracle backend might close the connection we can't depend on the connection even being open, much less at the same row.

[18:24] {BobArcher} Actually, this is more an issue of how the component is written.

[18:24] {nancy} Bob- What do you mean?

[18:25] { JohnFabiani } The server is responsible for determination whether the COM instance is stateful or stateless, and it's a topic that we probably don't need to deal with in detail in respect to VFP. From VFP's perspective, if it's a client, then if the server is stateful, the moniker persists as long as the object reference exists.

[18:25] {nancy} Do you mean that we just need to design assuming that the connection may be indeed broken?

[18:26] {nancy} Okay, I think I understand that summary.

[18:26] {BobArcher} server = COM Server... not machine. A stateless COM server need not maintain state between method invocations, which leaves a greater range of COM server instantiation options.

[18:26] {BobArcher} If you write a component, and host it in MTS, you have to tell MTS to release it... just putting it into MTS doesn't make it stateless

[18:27] {nancy} Dumb, dumb question: WHAT is a COM _server_ (apart from the com object itself).

[18:27] { JohnFabiani } If the session requires that you maintain state, IOW, set some props, then make a series of method calls that rely on previous prpety values and method results, then the server is stateful and we need not worry. this is the case for most VFP servers.

[18:28] {nancy} That's interesting because last time we were thinking we needed to make our COM use MTS.

[18:28] {nancy} Bob-That makes sense. Just like we have to release our forms?

[18:28] {BobArcher} Nope.. I asked Randy Brown that question... you don't HAVE to create StateLess objects to use em in MTS

[18:28] {RoiL} So if 20 users hit a server and create an object from a COM server, do you get 20 separate instances?

[18:29] { JohnFabiani } If no reliance on what has occurred previously between method calls exists, then your server may be stateless, and your methods will require you either to set and immediately invoke a method, not guaranteeing the state of the connection, or it'll maintain the same connection - same server, same thread, same TLS, for all invocations.

[18:29] {BobArcher} Nancy... correct. See, what MTS does is give you a Proxy that makes your App think the Instance really exists...

[18:30] {CraigB} Bob: That is correct, but you SHOULD make them stateless for MTS

[18:30] { CraigB } RoiL - depends. With an MTDLL, no, you may only have one server instance running, with 20 threads of execution, each with its own ThreadLocalStorage (TLS.)

[18:30] {BobArcher} But, in MTS the actual object may have been released by MTS

[18:30] {BobArcher} Yes... if you don't make them stateless, they won't scale... since every app that does a CreateObj on it will need to be maintained by COM

[18:31] {RoiL} Ok, I'm cool with that.

[18:31] {BobArcher} Roil.. that is the whole aspect of MultiThreading...Although if your instance is stateful, you have a number of transaction options available - again, not something you'll see in VFP. You can assume that a single object instance in a VFP app will be serviced by the same server each time if the object is stateful.

[18:31] {BobArcher} But, MTS gives MORE to COM than it has by default.

[18:32] {nancy} Sorry, I'll ask again what is a COM _server_? Is it a computer? An application? Or the COM object?

[18:33] {BobArcher} A COM server is an executable piece of code that you communicate via the COM 'interface'. The ability to coordinate multiple COM objects across a single stateful act, and the ability to address any number of server instances for non-stateful connections transparently. A COM server is the DLL or EXE that provides a set of services to a COM/COM_+/DCOM (all the same with differences outside our issue) client.

[18:34] {BobArcher} Think of a stateless object as a black box function... you call it, send it some info.. it sends you results, and you are done with it.

[18:35] {RoiL} So for VFP. We can 'x = createobj(SomeComServer)' and x will stay the way it is each time our app goes back to it?

[18:35] {JohnFabiani} As a client of the COM I don't worry about the is happening in the background. I just ask for the data. What it the next record?

[18:36] {BobArcher} Also, Stateless or Stateful is the object, the way it is written and accessed, it could be an internal object too..Whether the server runs within the client process (in process DLL), out of process on the same machine (an out of process .EXE) as an instance of an app running on another machine (out of process remote .EXE) or within the confines of a session manager running on a target server (ie in-process servers managed by MTS), you talk to them the same way. In, out, remote or MTS managed, the servers behave the same way as far as the client is concerned. It's the responsibility of the server to determine if a connections session needs to maintain state.

[18:37] {Evan Delay} That makes things simple.

[18:38] {RoiL} Is every one clear on the COM issues? Are there more questions?

[18:38] {JohnFabiani} So when writing a COM we can follow Evan Delay Ďs example or write something without states

[18:38] {Evan Delay} Clear... there are a few more COM topics coming up on the exam outline (I think).

[18:39] {nancy} Yep - and then the concept of state is simple. Does a method know the history of what's happened before? yes - it's stateful - it knows what this connection has done, and the prior history can affect its behavior. No - it's stateless, so what has happened before doesn't matter.

[18:40] {BobArcher} You can think of stateless as three instances of a Form class that all are set to default data session...If you design your server to rely on some prior set of operations for what it does, it's stateful, if it doesn't matter what this session did before, it's stateless (this is a vast oversimplification.)

[18:40] {BobArcher} No form can rely on the pointers being where they left it.

[18:42] {Bonnie} But how do you know how to use the COM object? Don't you have to know if it's stateless or stateful in order to pass parameters if you need to?

[18:42] {nancy} If that's the case, then the server is stateless. if each session has a private datasession, then, at least in theory, you have a stateful environment, and you can't let the target server release your state or kill itself and allow another server instance to handle you unless some external means of managing the state is maintained. Which means that the person who gives you the server has to know the behavior of the server. Your connection to a single instance of an MTDLL will maintain your own Thread Local Storage - variables and running environment - for the life of your connection. Each connection tells the COM server when it's finished with its connection, so stateful servers won't release or service another client instance with your environment.

[18:46] {JCrescencioFlores} now does state matter if you host objects in MTS? It does not maintain any state between calls..

[18:46] {JCrescencioFlores} or does it?

[18:47] {BobArcher} it depends on you code

[18:47] {JCrescencioFlores} that doesn't mean you shouldn't be careful with the design of course.

[18:48] {JohnFabiani} As I understand using COM under MTS all you have to do is release.

[18:48] {BobArcher} If you are going to host in MTS, you better plan to build stateless objects. The COM server has to tell MTS if its stateful, so that your connection won't be released unexpectedly, and your server must ensure the integrity of everything referenced by things in TLS. If the detail isn't maintained in TLS, then you can't ensure that its condition remains the same. Or, you need to learn how to create MTS transactions to encapsulate your stateful operations! You program your COMponent to tell MTS when it is done doing what it was doing.

[18:49] {CindyWinegarden} What is TLS?

[18:49] {BobArcher} Actually, MTS handles transactions.

[18:50] {CraigB} MTS only handles transactions to certain data stores...SQL Server and Oracle for example. It does not support transactions to Fox tables

[18:50] {BobArcher} Each Thread has its own storage area.

[18:50] {Bonnie} Yes, it's still a very abstract concept for me, too.

[18:50] { BobArcher } Thread Local Storage - the private memory associated with an instance of a COM server. Not covered anywhere in the VFP docs - this is getting into the guts of COM in more detail than we need to, by a whole lot!

[18:51] {RickBorup} Let's bring DCOM into the picture for a moment. Is DCOM required when you want to access a remote COM server?

[18:51] {BobArcher} Actually, TLS is private to a Thread within an Instance of an object of a COM server.

[18:52] {CraigB} Rick: yes, DCOM is required there. MTS's concept of a transaction is beyond the database concept of a transaction - it can represent a coordinated set of actions by a number of COM servers or a series of operations from a stateful server that either must all complete successfully or will all fail.

[18:52] {Bonnie} OK ... what's the diff between DCOM and COM?

[18:52] {BobArcher} The only difference between COM and DCOM is that for DCOM that objects are on seperate machines.

[18:53] {CraigB} Bonnie: COM is on one machine. If the object is on another machine, it is DCOM. The D stands for Distributed

[18:53] {BobArcher} Also, you cant use an In-Proc-Server with DCOM.

[18:54] {CraigB} Bob: But you can if you run it in MTS

[18:54] {JohnFabiani} I thought in-process was a DLL

[18:54] {BobArcher} Although I assume a future feature of Win2000 and COM+ will be Processes shared between machines where the server is running. It's how the message gets from your client to your server. An in process server has low cost - it shares a memory space with the client. An out of process server may be either another process on your own machine, so that while it doesn't see your address space directly, the data moves within the same virtual memory.

[18:54] {CraigB} JohnF: That's right. Out of process servers, including MTS, which is an out of process server that manages a bunch of in-process servers, talks across a network protocol - more costly to move data back and forth.

[18:55] {JohnFabiani} If I'm right can a COM be a DLL or just an EXE?

[18:56] {BobArcher} .EXE is Out-of-Proc , .DLL is IN-Proc... both are COMponents. You can't use In-proc directly with DCOM, but MTS manages a bunch of in-proces servers and handles the transitions and connections, among other things.

[18:56] {Dan} But can you use in-process for pool sharing?

[18:57] {BobArcher} It depends on the pool manager. DLLs are in-process, as are most controls (OCX, just a special case of a DLL). .EXEs are out of process servers - they don't share a memory space with the client.

[18:57] {Bonnie} Can an .EXE be run as In-process?

[18:57] {nancy} No, Bonnie, by definition.

[18:58] {JohnFabiani} Then how can a in-process DLL share a pool?

[18:58] {RoiL} I had read that OUT-of-process can be better because if it hangs you can whack it with task manager, true?

[18:58] { nancy } Nope - .EXE is always out of process. If you launch a .EXE with the VFP RUN command, it has its own command processor, etc - in fact, you can even inherit new environment, working directories and the like using the underlying API calls.

[18:58] {BobArcher} MTS is a pool manager for in-proc DLLs

[18:58] {Evan Delay} Yup to move on.

[18:58] {Dan} The overhead of in-process is minimal, MTS manages a bunch of in-process servers, and makes them available, since it is in an of itself an out-of-process server...The overhead of out-of-process is significantly greater than in-process, because of how the messages are marshaled between client and server. With an in-proc server, the data is in the same physical and logical data space as the client, while with an out of proc server, there's at least a process boundary, and possibly a network boundary...

[19:01] {JohnFabiani} I'd like to understand how to register COM's and DCOM'S

[19:01] {BobArcher} Of course, with Out-Of-Process, if you have multiple processors, you might get better performance.

[19:03] {JohnFabiani} Does everyone just use install programs to handle the registration of COM's?

[19:04] {RoiL} John: MyCOM /regserv (or something like that) right?

[19:04] {nancy} For .EXEs, yes, it's /REGSERVER

[19:05] {JohnFabiani} I not to sure but Install/Shield uses regserver or something?

[19:05] {Bonnie} What about for .DLLs?

[19:05] {JCrescencioFlores} In MTS, you create a package, add components to it an then distribute the exe created by the export function, but DLLs don't work that way, because they aren't stand-alone executables...

[19:06] {CraigB} REGSVR32 MyComm.Dll to register

[19:06] {CraigB} REGSVR32 /u MyComm.Dll to unregister

[19:06] {Bonnie} Thanks Craig.

[19:06] {CraigB} and the same for EXEs

[19:06] {JohnFabiani} Craig does that only reg on the local computer?

[19:06] {CraigB} yes

[19:07] {CraigB} if it's remote, you need to get into messy DCOM stuff...or make it easy and run it on MTS

[19:07] {JohnFabiani} OK then how do you reg DCOM on a different computer

[19:08] {RoiL} Will DCOM be on the exam? If not should we move on?

[19:08] {CraigB} It mentions DCOM on the exam prep.

[19:08] {JohnFabiani} I think it has to be on the exam. I' told COMs are.

[19:09] {RoiL} I'll guess. You use DCOMCFG right (g)

[19:09] {CraigB} yes, but I use MTS for my remote components...don't have to do that messy stuff

[19:09] {nancy} Craig-what is DCOMCFG?

[19:09] {Evan Delay} Yup DCOM is on the study guide.

[19:10] {BobArcher} There are really two ways to do it...

[19:10] {BobArcher} Basically, all you do is register the COM object on the Server and the Client

[19:11] {JohnFabiani} Your right DCOM uses DCOMCONFIG. It also uses a security model. I have a chapter on the subject!

[19:11] {BobArcher} There is a program, something like clireg32 that lets you register remote objects on your client

[19:11] {CraigB} I've never used dcomcfg....I much prefer to do it the easy way in mts. But Bob, how do I tell my client that server is running down the hall on some big, nasty multiprocessor NT box?

[19:11] {BobArcher} OK.. there are two ways... with VFP...

[19:12] {BobArcher} In VFP you can instantiate your COM object with createobjex() which takes a second property of servername

[19:12] {JohnFabiani} The file is "dcomcnfg.exe"

[19:12] {BobArcher} Or... you have to use DCOMCNFG ... select the COM obj you are running, and tell it to run on a remote machine

[19:13] {BobArcher} Personally, I think CreateObjEx is easier.... you don't actually even have to have

[19:13] { JohnFabiani } But now you need to know in detail where the server resides, right? Does that allow MTS to manage a pool of server machines???

[19:13] {BobArcher} the com object registered if you use the GUID in createobjex

[19:14] {BobArcher} No... you only need to know the NetBios/DNS/or Tcp/Ip address... TCP/Ip takes care of most of that. Whatever the name is in your network neighboorhood will work

[19:15] {RoxanneSeibert} Bob: How to do you get a GUID for createobex()?

[19:15] {RoiL} Bob: Don't you run into maintenance problems with that. If the IT guys decide to rename the server or change it's ip your hosed?

[19:15] {BobArcher} Rox.. that is the problem... you have to look on a machine where it is registered...

[19:15] {JohnFabiani} I wish I hadn't asked the question on registering the DCOM. The chapter is NOT easy reading.

[19:15] {BobArcher} Or... if it is an object you made you can look in the .VBR file. What if I want to use a ProgID rather than the GUID/CLSID to identify what's to be run? or to make life really interesting, what if there are several versions of the server, the most recent holding its own progID as well as a VersionIndependent ProgID?

[19:16] {BobArcher} You can look in the Object Browser, The Registry, or DCOMCNFG

[19:16] {nancy} Well, then is that something that DCOMCFG overcomes?

[19:16] {JCrescencioFlores} How is that easier than MTS?

[19:16] {Dan} Can you explain what is necessary to install on a client machine. I've heard you only need to install the (.tbr) file. Is that true?

[19:17] {CraigB} JCF: MTS is easier, IMO

[19:18] {Bonnie} Dumb question ... what is .tbr and .vbr???

[19:18] {RoiL} Rox: You can use this one {6F2ED0B5-087E-11D2-AD72-00C04FA30529}

[19:18] {nancy} Begging the question of easier or not, what might be on the exam? I'm HEARTILY confused by even what we are talking about, and why it's imp. to VFP.

[19:18] {BobArcher} Roill.. that's true... but, you have to ID the server no matter what method you use to run remote objects.

[19:20] {Dan} Still if your using Rick's Pool manager, which pre-loads all his Servers, while MTS loads and unloads the servers when the Com object is used.

[19:20] {BobArcher} Dan... MTS only unloads the server if you have it set to do that. The registry needs to point to the right place. You could actually export a .REG file from the server and modify it, and as long as the server interface is defined through late binding, you could just make the needed registry entries. CLIREG32 makes life a whole lot simpler.

[19:21] {Evan Delay} Here is something from the exam guide "Configure DCOM on a client computer and on a server computer. "

[19:21] { BobArcher } Pre-loading the server can eat your virtual address spaces as an (unnecessary) between call stack!

[19:22] {BobArcher} I suggest you all read Rick Strahlís white paper Internet Enabling your VFP App.. it has a section on using DCOM... very good and detailed

[19:23] {RoiL} Bob: Rick's got some good stuff. I'm reading through the FOXISAPI stuff right now.

[19:24] {Bonnie} Rick's website is an excellent resource, IMHO

[19:24] {nancy} First registering a DCOM...component or are we saying you register the server?

[19:24] {BobArcher} You register a COM objects... you can configure COM to access it via DCOM (on another machine)

[19:33] {RoiL} Question: Does the _screen.Forms collection contain FormSet objects? Answer: try the following:

[19:38] { RoiL } ? _screen.formcount

[19:38] { RoiL } ox=createobj('formset')

[19:38] { RoiL } ? _screen.formcount

[19:39] { RoiL } ? oy=createobj('form')

[19:39] { RoiL } ? _screen.formcount

[19:39] { RoiL } If the FormSet contains a set of forms, the forms are members of the forms collection.

[19:40] {BobArcher} OK.. according to Hackers... Objects gives you access to all the forms in a form set... but for the VFP app variable,

[19:40] {BobArcher} But note... that form sets ge6t a single entry in Objects, not one for each form

[19:40] {JCrescencioFlores} formcount returns 0 after the formset,

[19:41] {JCrescencioFlores} 1 after the form.

[19:41] {RoiL} So no. It's not in there.

[19:42] {BobArcher} No.. only the formset is in there... once and 0 after an emty formset - if the formset has sum number n of Forms in it, then .formcount is increased by n.

[19:44] {RoiL} Anybody want to talk about Validating user input?

[19:45] {RoiL} What are our options? valid method, any others?

[19:45] {BobArcher} Field rules

[19:45] {BobArcher} Table Rules

[19:46] {BobArcher} Business Rules

[19:46] {RoiL} Anything else? What about keypress?

[19:46] {BobArcher} interactive change... programattic change

[19:47] {CraigB} Bob: What about those?

[19:47] {BobArcher} But, I would think that you would trigger a validation from KeyPress, ProgChange, InteractiveChange

[19:47] {RoiL} Check out ValidatingDataEntry

[19:47] {BobArcher} Craig.. can be used for relational type edits/validations

[19:48] {BobArcher} perhaps one field relys on the value of another

[19:48] {CraigB} Bob: Sure...any of them can be used there...depends on what you need to validate and when

[19:48] {BobArcher} Exactally, I am just brainstorming.

[19:48] {RoiL} What about InputMask?

[19:49] {CraigB} You could even use the Valid event

[19:49] {BobArcher} Actually, I like Jim Booth's approach in Effective Techniques

[19:49] {Evan Delay} Great topic Roi.

[19:49] {RoiL} Bob: refresh / valid ?

[19:49] {BobArcher} Yep.. valid event is a good one.. .but, if you want to stay n-Tier... valid would just call the validation rule in your bizobj...

[19:49] {BobArcher} This is the DISTRIBUTED exam right

[19:50] {CindyWinegarden} Got to put things in that context.

[19:50] {RoiL} Shouldn't we be doing some validation at the UI level. Don't want to tie up bandwidth with stupid data.

[19:50] {BobArcher} I think a question is... do you do validation field by field or wait for save.... I think you can do it both ways... or either

[19:50] {Evan Delay} Bob here is the exam topic that Roi has touched on "Validate user input. Considerations include Single-Tier?, Two-Tier?, and T-Tier applications."

[19:51] {BobArcher} Roil... well... things like DataType, InputMask,... could be done on the UI side

[19:51] {CraigB} does the exam prep actually say single-tier???

[19:51] {BobArcher} You can also have controls to ask the backend or metadata for range rules, or inlist rules... and then check those

[19:51] {Evan Delay} Craig yup.

[19:52] {RoiL} Bob: hey that's cool. Hadn't thought of that.

[19:52] {CraigB} how the ???? can you have a single-tier DISTRIBUTED application?

[19:52] {BobArcher} Should have said... have controls get rules when they instantiate

[19:52] {BobArcher} You can do this no matter what your front end is... Java, DHTML, Etc...

[19:53] {BobArcher} But, I would always validate at the business or datalayer at save time too.

[19:53] {Evan Delay} Read it and weep

[19:53] {RoiL} Craig: Beats me, but it's in the study guide.

[19:53] {Evan Delay} Bob, do you have an example of this?

[19:53] {CraigB} I think this is a question that I'll post on the MVP newsgroup

[19:54] {Evan Delay} An example of "controls getting the rules when they instantiate" Do you mean that the biz tier passes up validation rules to the UI?

[19:54] {BarryMerritt} It would seem that validating input into a numeric field on a SQL table would be 2 tier

[19:56] { CraigB } Evan, it's more that the UI passes the validation delegates responsibility to the bizobj, and is told yeah or nay - that way, the bizobj can delegate downward to another layer as appropriate...

[19:56] {BobArcher} Evan... yep... Basically I meant rules like InputMask, Upper Range, LowerRange... etc... I could do an example.

[19:57] {CraigB} Bob: wouldn't that slow down the instantiation?

[19:57] {CraigB} I mean, if you have lots of controls, all doing a query in the Init to get their biz rules, that would be slowwwwww

[19:58] {BobArcher} Yes... a bit... It is one of the techniques VFE uses actually, the rules being stored in DBCX.

[19:58] {BobArcher} Well, what you can do is have an BizObj that you instantiated at startup that serves up the rules thta the controls need

[19:59] {BobArcher} In the case of VFE it is DBCX.

[19:59] {CraigB} OK...That would be faster: then the overhead is only once

[19:59] {CraigB } DBCX is the container mechanism for the rules, not the rules themselves.

[19:59] {CraigB} my experience is that users open one form and leave it open all day, or open and close the same form many times

[20:00] {BobArcher} Right... DBCX is a place to store the rules and an interface to access them

[20:00] {BobArcher} Craig... that is why we write VFP fat client so it caches that stuff.

[20:03] {CraigB} Bob: so if you went two or n-tier, you'd just pull the rules from somewhere else?

[20:03] {BobArcher} Ok.. so, did the test want a single validation method , or one for each situation?

[20:03] {CraigB} It doesn't just says" Validate user input"

[20:04] {BobArcher} Craig... I am only talking about simple rules that the UI controls can handle like InputMask, Range, InList (Like one of 20 items)

[20:05] {RoiL} Bob: I covered valid / keypress / inputmask in the wiki topic.

[20:05] {BobArcher} So, yes... multi-tier, the controls would just talk to a remote com object instead of a local one

[20:05] {RoiL} I need to add to the valid though.

[20:06] {BobArcher} The advantage of valid over LostFocus? There seem to be two camps here.

[20:06] {CraigB} Bob: OK, but if going n-tier, those rules would be saved in, say, SQL Server?

[20:06] {BobArcher} Yep... SQL server table... sure.

[20:06] {BobArcher} Or, local tables that are updated from remote tables on ap startup

[20:07] {RoiL} I lean towards valid. You can allow the user to move past an invalid entry to specific controls (say to get help).

[20:07] {DougDodge} Bob, That's do-able. We used to do that at a retail POS system. Very cool to keep redundant copies.

[20:07] {RoxanneSeibert} So if we donít have DBCX in Bob's scenario, are we talking rules saved in a table then?

[20:08] {CraigB} Rox: sure, that will do it

[20:08] {BobArcher} Sure... rules saved in a table Rox... which is all DBCX actually is. It doesn't matter if the store is SQL Server or a table or whatever - if the rule is executed by VFP code directly, it's pulled from the store and runs. If it's a stored procedure on a backend (including a stored procedure in a .DBC) whatever is providing the backend (in the case of a DBC, it's VFP, or Oracle or SQL Server if they're the backend). Of course, the other kind of validation is a lookup type. You can have remote views that reside in a .DBC; there may be rules in the .DBC that get enforced, and then code that runs at the backend on top of that which are not readily visible to VFP.

[20:13] {RoiL} Anybody think the exam will be adaptive - or - is the beta used to build the adaptive version.

[20:14] {CraigB} if you miss a question, you get an easier question on the same subject

[20:15] {RoiL} But, If you guess (and it's correct) you get a harder one :(

[20:15] {CraigB} Bob: it will either be all multi-choice or something like, "place these things in the correct order"

[20:16] {CraigB} it's all scoreable via computer, so no essays, coding, etc

[20:16] {JimPhilippi} How is it given? Do you have to bring a laptop? All written response?

[20:16] {CraigB} Jim: You can't take anything into the test pencils, papers, laptops...nothing. It's all in a multiple-choice format, but you may be dealing with questions where the right answer is some subset of the available choice - if you have choice a-e, you might be told pick 3, or pick all that apply, and you only are right if you get all the correct answer set and non of the 'noise' items. There is no partial credit.


[20:25] {RoiL} Craig: If a question has includes Oracle should we assume it's wrong?

[20:25] {CraigB} RoiL: Nope

[20:25] {BarryMerritt} I think for this test, you might look at the VB distributed exam. MS usually will not try to reinvent the wheel.

[20:26] {DougDodge} Here's the thing folks.. We're the best. We get paid to do stuff most folks simply cannot handle. Nothing wrong with a good challenge and in the end we'll be better at our craft.

[20:26] {RoxanneSeibert} amen to that Doug

[20:45] {nancy} CU gang, Friday night at 8:00 pm UT time.

Session Close: Tue Oct 19 20:45:26 1999

Contributors: CindyWinegarden, NancyFolsom

See also: Exam70-155StudyGroupSummaries

( Topic last updated: 1999.11.13 11:59:05 PM )