Using SugarBeans outside of Sugar's framework

We need to be able to run PHP code that makes use of Sugar data in scripts that are outside of Sugar - not scheduler tasks or logic hooks or anything. Completely outside of the Sugar world. Based on what I found here I added the following to my script:

if(!defined('sugarEntry')) define('sugarEntry', true);

require_once('data/BeanFactory.php');

That led to a string of error messages and including various other files, and then I started by including the same files in the base index.php from my Sugar installation, but finally I came to an impasse. My error message is:

 

Notice: Undefined index: log in /var/www/html/include/SugarObjects/VardefManager.php on line 1054 Fatal error: Call to a member function debug() on null in /var/www/html/include/SugarObjects/VardefManager.php on line 1054

The code at line 1054 of VardefManager.php is:

$GLOBALS['log']->debug("VardefManager::loadVardef called for module: $module");

I can't find where "log" is being defined in the GLOBALS scope, and anyway, this is starting to look like a lot more than I should have to do to make this work - my current code draft has six require_once statements in it, not to mention several other very hacky details. Is there a better way to do this? Am I missing something?

Sugar 7.8 Professional.

Parents
  • I'm not sure what you mean. The solution in the thread, as far as I can tell, is to use SugarBeans - that's what I'm bending over backward to try to accomplish. If you mean why am I trying to do it outside of Sugar itself - we are a SAAS business, so basically we use Sugar to maintain our customers, and our customers use our portal to do a number of things which we would like to make record of in Sugar. I can of course do direct SQL inserts into the Sugar tables, but I would rather leverage the infrastructure that exists within Sugar to help us maintain data integrity. For example: when I want to insert a record in a table, I would rather let Sugar generate a GUID than generate one myself.

  • Hi Michael Jones

    Have you looked in to the CLI functionality?  If you create a CLI in "InstanceMode" then you should have access to BeanFactory and SugarBeans for that instance.

    The code would be within the Sugar file system but you could execute it from anywhere as long as you have access to the <sugar_instance>/bin/sugarcrm executable.

    Hope it helps.

  • Hi, you just need to include include/entryPoint.php file in your script and you can do whatever you want with sugar after that  Don't forget to set global $current_user - without it you would not be able to retrieve anything due to the team security (or you would have to turn it off on every retrieve...).

    this is how your script should start:

    <?php

    define('sugarEntry', true);
    require_once 'include/entryPoint.php';
    global $current_user;
    $current_user = BeanFactory::retrieveBean('Users',1);
    _ppl("sugar magic!!");
  • But, aren't Entry Points deprecated and scheduled to be removed in a future release? I'd hate to depend on something that's going to disappear later. This looks like a promising approach, though!

Reply Children