php-general Digest 14 Jul 2013 19:18:53 -0000 Issue 8295
php-general Digest 14 Jul 2013 19:18:53 - Issue 8295 Topics (messages 321611 through 321611): Re: COM - Assigning to method. 321611 by: Adam Nicholls Administrivia: To subscribe to the digest, e-mail: php-general-digest-subscr...@lists.php.net To unsubscribe from the digest, e-mail: php-general-digest-unsubscr...@lists.php.net To post to the list, e-mail: php-gene...@lists.php.net -- ---BeginMessage--- Richard - I've tried that I get an error about it not being defined as property of the object. Andrew - do you mean try using the method Richard has shown? Cheers Adam. On 13 July 2013 17:11, Richard Quadling rquadl...@gmail.com wrote: On 13 July 2013 01:24, Andrew Ballard aball...@gmail.com wrote: On Jul 12, 2013 4:53 AM, Adam Nicholls inkysp...@gmail.com wrote: Hi Guys/Gals, I'm doing some integration work with a COM API and according to their documentation to save data in the API, you have to assign to the method. This is their example in Visual Basic: - Set oBank = New CBank oBank.Init Application.SessionContext With oBank .Fields(BANK_fld_ACCOUNT_NAME) = Test account .Fields(BANK_fld_ACCOUNT_NO) = 12345 .Fields(BANK_fld_BANK) = Bank of the Nation .Fields(BANK_fld_BRANCH_NAME) = State Street Branch End With oBank.Save - Obviously in PHP is isn't possible to assign to a method in this way (thats what parameters are for!) So I'm at a bit of a loose end. I'm wondering if anyone else has come across this? Or am I missing something obvious in PHP's implementation of the COM that allows me to work around this? My PHP Code is looks like this: - $API = new COM('API7.API'); $API-Init($SerialNo, $Login, '', 1, '', 1); $API-SignOutOnTerminate = True; $Record = new COM(Data.Record); $Record-Init($API-SessionContext); $Record-Fields('BANK_fld_ACCOUNT_NAME') = 'Test Account';//doesn't work - I've also tried (below) but the API says wrong number of parameters $Record-Fields('BANK_fld_ACCOUNT_NAME', 'Test Account'); I've also tried something crazy like this (below) but that overwrites the $Record object. $_R = $Record-Fields('BANK_fld_ACCOUNT_NAME'); $_R = 'Test Account'; Any ideas? Is it possible? Many Thanks Adam Nicholls That example isn't assigning values to method return value. Fields is a collection of ADO Field objects. The default property of a Field object is its Value property, so the shorthand is simply assigning the values of the variables to the value of each field in a record within a Recordset. Andrew So .. $oBank-BANK_fld_ACCOUNT_NAME = Test account; sort of thing. -- Richard Quadling Twitter : @RQuadling -- Adam Nicholls ---End Message---
Re: [PHP] COM - Assigning to method.
Richard - I've tried that I get an error about it not being defined as property of the object. Andrew - do you mean try using the method Richard has shown? Cheers Adam. On 13 July 2013 17:11, Richard Quadling rquadl...@gmail.com wrote: On 13 July 2013 01:24, Andrew Ballard aball...@gmail.com wrote: On Jul 12, 2013 4:53 AM, Adam Nicholls inkysp...@gmail.com wrote: Hi Guys/Gals, I'm doing some integration work with a COM API and according to their documentation to save data in the API, you have to assign to the method. This is their example in Visual Basic: - Set oBank = New CBank oBank.Init Application.SessionContext With oBank .Fields(BANK_fld_ACCOUNT_NAME) = Test account .Fields(BANK_fld_ACCOUNT_NO) = 12345 .Fields(BANK_fld_BANK) = Bank of the Nation .Fields(BANK_fld_BRANCH_NAME) = State Street Branch End With oBank.Save - Obviously in PHP is isn't possible to assign to a method in this way (thats what parameters are for!) So I'm at a bit of a loose end. I'm wondering if anyone else has come across this? Or am I missing something obvious in PHP's implementation of the COM that allows me to work around this? My PHP Code is looks like this: - $API = new COM('API7.API'); $API-Init($SerialNo, $Login, '', 1, '', 1); $API-SignOutOnTerminate = True; $Record = new COM(Data.Record); $Record-Init($API-SessionContext); $Record-Fields('BANK_fld_ACCOUNT_NAME') = 'Test Account';//doesn't work - I've also tried (below) but the API says wrong number of parameters $Record-Fields('BANK_fld_ACCOUNT_NAME', 'Test Account'); I've also tried something crazy like this (below) but that overwrites the $Record object. $_R = $Record-Fields('BANK_fld_ACCOUNT_NAME'); $_R = 'Test Account'; Any ideas? Is it possible? Many Thanks Adam Nicholls That example isn't assigning values to method return value. Fields is a collection of ADO Field objects. The default property of a Field object is its Value property, so the shorthand is simply assigning the values of the variables to the value of each field in a record within a Recordset. Andrew So .. $oBank-BANK_fld_ACCOUNT_NAME = Test account; sort of thing. -- Richard Quadling Twitter : @RQuadling -- Adam Nicholls -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] COM - Assigning to method.
On Sun, Jul 14, 2013 at 3:18 PM, Adam Nicholls inkysp...@gmail.com wrote: Richard - I've tried that I get an error about it not being defined as property of the object. Andrew - do you mean try using the method Richard has shown? Cheers Adam. On 13 July 2013 17:11, Richard Quadling rquadl...@gmail.com wrote: On 13 July 2013 01:24, Andrew Ballard aball...@gmail.com wrote: On Jul 12, 2013 4:53 AM, Adam Nicholls inkysp...@gmail.com wrote: Hi Guys/Gals, I'm doing some integration work with a COM API and according to their documentation to save data in the API, you have to assign to the method. This is their example in Visual Basic: - Set oBank = New CBank oBank.Init Application.SessionContext With oBank .Fields(BANK_fld_ACCOUNT_NAME) = Test account .Fields(BANK_fld_ACCOUNT_NO) = 12345 .Fields(BANK_fld_BANK) = Bank of the Nation .Fields(BANK_fld_BRANCH_NAME) = State Street Branch End With oBank.Save - Obviously in PHP is isn't possible to assign to a method in this way (thats what parameters are for!) So I'm at a bit of a loose end. I'm wondering if anyone else has come across this? Or am I missing something obvious in PHP's implementation of the COM that allows me to work around this? My PHP Code is looks like this: - $API = new COM('API7.API'); $API-Init($SerialNo, $Login, '', 1, '', 1); $API-SignOutOnTerminate = True; $Record = new COM(Data.Record); $Record-Init($API-SessionContext); $Record-Fields('BANK_fld_ACCOUNT_NAME') = 'Test Account';//doesn't work - I've also tried (below) but the API says wrong number of parameters $Record-Fields('BANK_fld_ACCOUNT_NAME', 'Test Account'); I've also tried something crazy like this (below) but that overwrites the $Record object. $_R = $Record-Fields('BANK_fld_ACCOUNT_NAME'); $_R = 'Test Account'; Any ideas? Is it possible? Many Thanks Adam Nicholls That example isn't assigning values to method return value. Fields is a collection of ADO Field objects. The default property of a Field object is its Value property, so the shorthand is simply assigning the values of the variables to the value of each field in a record within a Recordset. Andrew So .. $oBank-BANK_fld_ACCOUNT_NAME = Test account; sort of thing. -- Richard Quadling Twitter : @RQuadling -- Adam Nicholls Richard has the general idea correct, but as I recall it is a little more involved because it's COM. I've never done that much with COM in PHP because it was always such a pain. The example you posted probably used to require com_set() in PHP 4, although it looks like that has been deprecated in favor of a more typical OO syntax in PHP 5. Is there any chance there is a PHP version of the library that you can work with to avoid COM? If not, hopefully what follows will help start you on the right direction. A more explicit version of your original VBScript example looks like this: Set oBank = New CBank oBank.Init Application.SessionContext Set oField = oBank.Fields(BANK_fld_ACCOUNT_NAME) oField.Value = Test account Set oField = oBank.Fields(BANK_fld_ACCOUNT_NO) oField.Value = 12345 Set oField = oBank.Fields(BANK_fld_BANK) oField.Value = Bank of the Nation Set oField = oBank.Fields(BANK_fld_BRANCH_NAME) oField.Value = State Street Branch oBank.Save I'm not familiar with your CBank COM class, but the rest of it looks like it is similar to the COM('ADODB.Recordset'). If so, a rough translation of your original example should resemble this: ?php // I'm not familiar with this object, so I'm guessing on the call to instantiate it here. $oBank = new COM('CBank'); /** Application.SessionContext in the original refers to an object that is global to every request in an application. PHP does not have such a global registry, so I'm not sure where you're $config needs to come from. */ $oBank-Init($config); /** I am assuming that BANK_fld_ACCOUNT_NAME and such are constant names that were already defined with the names of the actual column names in a recordset returned by $oBank. */ $oBank-Fields(BANK_fld_ACCOUNT_NAME)-Value = Test account; $oBank-Fields(BANK_fld_ACCOUNT_NO)-Value = 12345; $oBank-Fields(BANK_fld_BANK)-Value = Bank of the Nation; $oBank-Fields(BANK_fld_BRANCH_NAME)-Value = State Street Branch; $oBank-Save(); ? I don't know if you could leave out the -Value part of the syntax in PHP like you can in the VBScript example you posted. If so, then Richard's syntax would have been pretty