知识与知识连接PHP API,找到对象(帐户或答案)但仅包含空字段

时间:2015-07-01 16:09:53

标签: rightnow-crm

当我尝试在tutorials/documentations之后获取(Connect PHP API)/ searchContent(Knowledge Foundation API)时,我遇到了一些奇怪的问题。

行为和输出

  • 在文档之后,我们初始化API。函数 error_get_last()(在获取后调用)表明核心只读文件(我们不允许修改它)包含错误:
Array ( [type] => 8 [message] => Undefined index: REDIRECT_URL [file] => /cgi-bin/${interface_name}.cfg/scripts/cp/core/framework/3.2.4/init.php [line] => 246 )
  • 初始化后,我们调用fetch函数来检索帐户。如果我们提供了错误的ID,则会返回错误:
  

无效ID:没有ID为32的此类帐户

否则,提供正确的ID将返回一个Account对象,其中所有字段都填充为NULL:

object(RightNow\Connect\v1_2\Account)#22 (25) {
  ["ID"]=>
  NULL
  ["LookupName"]=>
  NULL
  ["CreatedTime"]=>
  NULL
  ["UpdatedTime"]=>
  NULL
  ["AccountHierarchy"]=>
  NULL
  ["Attributes"]=>
  NULL
  ["Country"]=>
  NULL
  ["CustomFields"]=>
  NULL
  ["DisplayName"]=>
  NULL
  ["DisplayOrder"]=>
  NULL
  ["EmailNotification"]=>
  NULL
  ["Emails"]=>
  NULL
  ["Login"]=>
  NULL
  /* [...] */
  ["StaffGroup"]=>
  NULL
}

尝试,解决方法和问题排查信息

  1. 配置:使用InitConnectAPI()使用的帐户具有权限
  2. 初始化:调用InitConnectAPI()不抛出任何异常(添加了try-catch块)
  3. 调用抓取功能:如上所述,对RNCPHP\Account::fetch($act_id)的调用会找到该帐户(invalid_id =>错误),但无法填充字段
  4. RNCPHP::fetch($correct_id)来电

  5. 不会引发任何异常
  6. 当我尝试从知识库API中的示例示例中检索答案时,行为是相同的:$token = \RNCK::StartInteraction(...) ; \RNCK::searchContent($token, 'lorem ipsum');

  7. 使用PHP的SoapClient,我设法检索填充的对象。但是,它不是标准的一部分,自我调用本地WebService不是一个好习惯。

  8. 重现问题的代码

    error_reporting(E_ALL);
    require_once(get_cfg_var('doc_root') . '/include/ConnectPHP/Connect_init.phph');
    InitConnectAPI();
    use RightNow\Connect\v1_2 as RNCPHP;
    /* [...] */
    try
    {
      $fetched_acct = RNCPHP\Account::fetch($correct_usr_id);
    } catch ( \Exception $e)
    {
      echo ($e->getMessage());
    }
    // Dump part 
    echo ("<pre>");
    var_dump($fetched_acct);
    echo ("</pre>");
    
    // The core's error on which I have no control
    print_r(error_get_last());
    

    问题:

    • 你们有没有遇到同样的问题?什么是可以帮助我解决它的解决方法/修复方法?
    • 根据RNCPHP\Account::fetch($correct_usr_id)函数行为,我们可以推测问题来自'字段填充'步骤,这可能是核心的一部分(我没有权力)。我该怎么处理这个问题(获取是静态的,帐户似乎不是抽象的)?
    • 我尝试使用debug_backtrace()函数,以便对可能出错的内容有一些了解,但它不会输出相关信息。有什么方法可以获得更多的调试信息吗?

    提前致谢,

1 个答案:

答案 0 :(得分:2)

Oracle Service Cloud使用延迟加载使用Connect for PHP API从查询的数据填充对象变量。当您输出对象的结果时,根据您的示例,它将显示为每个变量为空。但是,如果您访问该参数,则该参数可用。当您尝试打印对象时,这只是一个问题,如此示例。应立即访问数据。

要打印对象,就像在您的示例中一样,您需要遍历对象变量并首先访问每个对象变量。你可以构建一个帮助类来通过反射来做到这一点。但是,要使用单个字段进行说明,请执行以下操作:

$acct = RNCPHP\Account::fetch($correctId);
$acct->ID;
print_r($acct); // Will now "show" ID, but none of the other fields have been loaded.

在现实世界中,您可能只想操作数据。所以,即使你不能“看到”对象中的数据,它就在那里。在下面的示例中,我们访问帐户的更新时间,然后在符合条件的情况下对对象执行操作。

//Set to disabled if last updated < 90 days ago
$acct = RNCPHP\Account::fetch($correctId);
$chkDate = time() - 7776000;
if($acct->UpdatedTime < $chkDate){
    $acct->Attributes->PermanentlyDisabled = true;
    $acct->save(RNCPHP\RNObject::SuppressAll);
}

如果您在print_r条件之后进入if对象,那么您将看到UpdatedTime变量数据,因为它是在条件检查时加载的。