2

チュートリアル/ドキュメントに従って fetch(Connect PHP API)/searchContent(Knowledge Foundation API) を実行しようとすると、いくつかの奇妙な問題に直面しています。

動作と出力

  • ドキュメントに従って、API を初期化します。関数 error_get_last() (フェッチ後に呼び出される) は、コアの読み取り専用ファイル (変更は許可されていません) にエラーが含まれていることを示しています。
配列 ( [タイプ] => 8 [メッセージ] => 未定義のインデックス: REDIRECT_URL [ファイル] => /cgi-bin/${インターフェイス名}.cfg/scripts/cp/core/framework/3.2.4/init.php [行] => 246 )
  • 初期化後、fetch 関数を呼び出してアカウントを取得します。間違った ID を指定すると、エラーが返されます。

無効な ID: ID = 32 のアカウントはありません

それ以外の場合、正しい ID を指定すると、すべてのフィールドに NULL が設定された Account オブジェクトが返されます。

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. fetch 関数の呼び出し: 上記のように、 への呼び出しRNCPHP\Account::fetch($act_id)はアカウントを見つけます (invalid_id => エラー) が、フィールドにデータを入力することはできません
  4. RNCPHP::fetch($correct_id)呼び出しで例外はスローされません

  5. Knowledge Foundation API のサンプル例に従って回答を取得しようとしても、動作は同じです。$token = \RNCK::StartInteraction(...) ; \RNCK::searchContent($token, 'lorem ipsum');

  6. PHP の SoapClient を使用して、入力されたオブジェクトを取得することができます。ただし、これは標準の一部ではなく、self-call-local-WebService は適切な方法ではありません。

問題を再現するコード

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()何がうまくいかないかをある程度把握するために関数を使用しようとしましたが、関連する情報は出力されません。より多くのデバッグ情報を取得する方法はありますか?

前もって感謝します、

4

1 に答える 1

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 変数データが​​表示されます。

于 2015-07-02T11:57:08.373 に答える