php-general Digest 14 Jul 2013 19:18:53 -0000 Issue 8295

2013-07-14 Thread php-general-digest-help

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.

2013-07-14 Thread Adam Nicholls
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.

2013-07-14 Thread Andrew Ballard
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