- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/classes/general/sharepoint.php
- Класс: CAllIntranetSharepoint
- Вызов: CAllIntranetSharepoint::_Sync
static function _Sync($arService, $row, &$arQueue)
{
$IBLOCK_ID = $arService['IBLOCK_ID'];
if (!is_array($arQueue)) $arQueue = array();
$arFields = array(
'IBLOCK_ID' => $IBLOCK_ID,
'XML_ID' => $row['UniqueId'],
);
$arProperties = array();
foreach ($arService['FIELDS'] as $fld)
{
$arValue = self::_SyncGetValueByType(array(
'FIELD' => $fld,
'VALUE' => $row[$fld['SP_FIELD']],
'ROW' => $row,
'SP_LIST_ID' => $arService['SP_LIST_ID'],
), $arQueue);
if (null !== $arValue['VALUE'])
{
if ($arValue['PROPERTY'])
$arProperties[$arValue['PROPERTY']] = $arValue['VALUE'];
else
$arFields[$arValue['FIELD']] = $arValue['VALUE'];
}
}
$ib = new CIBlockElement();
$dbRes = CIBlockElement::GetList(array('id' => 'asc'), array('IBLOCK_ID' => $IBLOCK_ID, 'XML_ID' => $arFields['XML_ID'], "CHECK_PERMISSIONS" => "N"), false, false, array('ID'));
CIntranetSharepoint::$bUpdateInProgress = true;
$bVersionConflict = false;
if ($arRes = $dbRes->Fetch())
{
$bNew = false;
if (false && $arService['PRIORITY'] == 'B')
{
if ($version = CIntranetSharepointLog::ItemUpdated($IBLOCK_ID, $arRes['ID']))
{
if ($row['owshiddenversion'] > $version) // ?????? rly?
{
$bVersionConflict = true; // we won't allow changes from SP until pushing our changes onto it.
$ID = false;
}
}
}
$arProperties['OWSHIDDENVERSION'] = intval($row['owshiddenversion']);
if (!$bVersionConflict)
{
$ib->Update(($ID = $arRes['ID']), $arFields);
CIntranetSharepointLog::ItemUpdatedClear($IBLOCK_ID, $ID);
}
}
else
{
$bNew = true;
$ID = $ib->Add($arFields);
}
CIntranetSharepoint::$bUpdateInProgress = false;
if (!$ID)
{
if (!$bVersionConflict)
{
$GLOBALS['APPLICATION']->ThrowException($ib->LAST_ERROR);
}
}
else
{
if (count($arProperties) > 0)
CIBlockElement::SetPropertyValuesEx($ID, $IBLOCK_ID, $arProperties, $bNew ? array('NewElement' => true) : array());
}
return $ID;
}