On 15 July 2013 16:27, Andrew Ballard <aball...@gmail.com> wrote:

> On Mon, Jul 15, 2013 at 4:21 AM, Adam Nicholls <inkysp...@gmail.com>
> wrote:
> > Hi Andrew
> >
> > Thanks for this.
> >
> > But I'm still getting errors. I think I need to explain a bit more.
> >
> > Unfortunately there isn't a PHP API for this application I'm trying to
> > interact with, my goal really is to be able to expose the COM
> > functionality over a web-service such as SOAP so I can use it in a
> > CMS. The application I'm trying to integrate with is Blackbuad's
> > Raiser's Edge - API documentation here:
> > https://www.blackbaud.com/files/support/guides/re7ent/api.pdf
> >
> > I think part of the problem is that the field names are also
> > represented by an integer. So to get data out I would do:
> >
> > $oBank->Fields(22);   // which maps to BANK_fld_BRANCH_NAME.
> >
> > When I do:
> >
> > $oBank->22 = 'blah blah';
> >
> > I get an error because a property can't be numeric, it has to start as
> > alpha character. If I use:
> >
> > $oBank->BANK_fld_BRANCH_NAME = 'blah blah blah';
> >
> > I get the following error:
> >
> > Fatal error: Uncaught exception 'com_exception' with message 'Unable
> > to lookup `BANK_fld_BRANCH_NAME': Unknown name.
> >
> > I've also tried using your Value property returned by Fields():
> >
> > $oBank->Fields(22)->Value = 'Blah Blah blah blah';
> >
> > Which I then get:
> > PHP Warning:  Creating default object from empty value in [C:\Users....]
> > Fatal error: Call to undefined method variant::Save()
> >
> > Soo seems nearly impossible to implement a safe way to write to the COM
> API.
> >
> >
> > At the moment, I'm still in the scoping/prototype stage of my project,
> > so I'm beginning to think that using this COM API for this project is
> > a no-go, which is unfortunate. I'm also guessing even if we did
> > implement this API, exposing it as a Web Service is going to be tricky
> > for performance sake (given that I've read that COM doesn't
> > multithread very well??)
> >
> > Many Thanks
> > Adam.
>
> It's definitely possible to do, once you figure out the syntax you
> need for this object.
>
> I'm guessing you must have gotten past the $oBank->Init() method call
> without issues.
>
> What happens if you just use this for the value assignment?
>
> $oBank->Fields(BANK_fld_ACCOUNT_NAME) = "Test account";
> $oBank->Fields(BANK_fld_ACCOUNT_NO) = "12345";
> $oBank->Fields(BANK_fld_BANK) = "Bank of the Nation";
> $oBank->Fields(BANK_fld_BRANCH_NAME) = "State Street Branch";
>
> It also looks like you're getting errors from the call to
> $oBank->Save() saying that the method is not defined.
>
> Andrew
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

I used to use PHP+Windows+COM+Crystal Reports.

I'm in the middle of something else, but a few things. Does the library you
are using have a valid COM interface? Some of the .NET libraries simply
don't. The last version of CR that was COM enabled was CR XI R 2. After
that it was .NET and Java only. No COM. Having said that, I never got
around to using http://uk1.php.net/manual/en/class.dotnet.php, so I don't
know how this all worked. From memory the DOTNET layer of PHP was just a
wrapper around COM and still required COM exposure in the lib. I think.

Use a TypeLib Explorer to see exactly what interface is available - from
memory, the right tool is all you need. I was able to code anything I
needed with Crystal Reports.

There is also a PHP function
http://uk1.php.net/manual/en/function.com-load-typelib.php which I used to
allow the various constants within the typelib to be exposed and usable
within PHP.

And also look at
http://uk1.php.net/manual/en/function.com-print-typeinfo.php and the user
notes. Not used it but "bucket loads of info" is a good thing to see
normally.


-- 
Richard Quadling
Twitter : @RQuadling

Reply via email to