QuickBase foreach вставка

У меня проблема с использованием Quickbase API для выполнения следующих действий:

SELECT 1, 2, 3 FROM table AA that has column BB = 1

foreach record {

Insert 1, 2, 3 into table ZZ.

}
function add_children($opportunity_id) {
    global $config;

$qbc = new QuickBase($_SESSION['qb_username'] , 
                     $_SESSION['qb_password'], 
                     true, 
                     $config['AA'], 
                     $config['debug'], 
                     $config['app_token']);
$xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', '');


$records = array();
foreach($xml->record as $record) {
    $r = array();
    $r['record_id'] = $record->record_id_;
    $r['account_number'] = $record->account_number;
    $records[] = $r;

$xml = $qbc->add_record($records[]);
    }
}

1 ответ

Решение

Во-первых, я предполагаю, что вы используете этот PHP SDK от QuickbaseAdmirer https://github.com/QuickbaseAdmirer/QuickBase-PHP-SDK. Есть несколько потенциальных проблем с вашим кодом.

  1. Дважды проверьте, что ваш конструктор правильный. Если вы не изменили его, конструктор Quickbase в SDK (опять же, который я предполагаю, что вы используете) принимает имя пользователя, пароль, xml, идентификатор базы данных, а затем токен в указанном порядке. Какая бы ни была ценность в $config['debug'] может быть взята в качестве токена и значение $config['app_token'] может быть принято как ваше царство. Также, $config['AA'] в конструкторе должна использоваться строка случайных видимых символов, таких как "bbqn1y5qv". Вот конструктор в SDK для справки:

    public function __construct($un, $pw, $usexml = true, $db = '', $token = '', $realm = '', $hours = '')

  2. Ваш запрос $xml = $qbc->do_query("{'" . $config['AA'] . "'.EX.''}", 0, 0, 'a', 0, '', ''); не возвращает никаких записей, потому что $config['AA'] используется как ваш DBID (в конструкторе), так и как идентификатор вашего поля в запросе. DBID должен быть строкой, а ID поля должен быть целым числом, которое соответствует полю, к которому вы делаете запрос. Например, если вы хотите вернуть созданные сегодня записи, ваш запрос будет '{1.IR.today}' потому что 1 всегда ID поля для даты создания. Он также не возвращает никаких записей, поскольку SDK требует, чтобы запросы передавались в виде массива массивов. Итак, мой запрос, созданный сегодня, должен быть переписан как:

    $query= array( array( 'fid' => '1', 'ev' => 'IR'), 'cri' => 'today'), );

    Вам также нужно будет передать строку значений, разделенных точками, параметру clist метода или оставить его пустым для значений по умолчанию в таблице. Например, если бы я хотел получить дату создания и идентификатор записи для всех записей в этой таблице, отсортированных по возрастанию по дате, я бы использовал это:

    $query= array( array( 'fid' => '3', 'ev' => 'GT'), 'cri' => '0'), ); $xml = $qbc->do_query($query, '', '', '1.3', '1', '', 'sortorder-A');

    Вы можете прочитать больше об API Quickbase и, в частности, о do_query, здесь http://www.quickbase.com/api-guide/index.html

  3. Вызов API add record принимает пары идентификаторов полей и значений. SDK обрабатывает это, беря массив массивов с парами 'fid' и 'value'. Предполагая, что вы хотите поставить значение $record->record_id_ в поле № 37 и $record->account_number в поле #30 ваш код должен выглядеть так:

    foreach($xml->record as $record) { $records= array( array( 'fid' => '37', //Whatever field you want to store the value to 'value' => $record->record_id_), array( 'fid' => '30', 'value' => $record->account_number), ); $xml = $qbc->add_record($records); }

    Бросить в print_r($xml); в конце, и вы можете увидеть любой ответ от QuickBase для отладки. Вы должны получить что-то вроде этого для успеха:

    SimpleXMLElement Object ( [action] => API_AddRecord [errcode] => 0 [errtext] => No error [rid] => 81 [update_id] => 1436476140453 )

  4. То, как представлен ваш код, может не дать ожидаемых результатов. Ваш запрос do и добавление вызовов метода записи выполняются для одной и той же таблицы, и это обычно не то, что кто-то хотел бы. Обычно цель состоит в том, чтобы выполнить запрос do для одной таблицы, а затем использовать эти данные для добавления записей в другую таблицу. Если это так, вам нужно изменить идентификатор базы данных в вашем $qbc объект, прежде чем вы преформуете запись добавления вызова. Это достаточно легко сделать с $qbc->set_database_table('DBID'); где DBID - это идентификатор целевой таблицы (которая должна быть строкой случайных видимых символов, таких как "bbqn1y5qv").

Удачи!

Другие вопросы по тегам