Как встроить приложение в календарь CALENDAR_GRIDVIEW

В календарь можно встроить приложение. В верхней части календаря в списке видов отображения есть место для встройки CALENDAR_GRIDVIEW, куда можно добавить свой пункт.

Подробнее о виджете — в статье Виджет в календаре.

Как привязать приложение к календарю

Исспользуйте метод placement.bind, чтобы связать приложение с календарем. Параметры PLACEMENT, HANDLER и TITLE определяют, где и как будет отображаться ваше приложение.

try
        {
        	const response = await $b24.callMethod(
        		'placement.bind',
        		{
        			PLACEMENT: 'CALENDAR_GRIDVIEW',
        			HANDLER: 'http://your_site/handler.php',
        			TITLE: 'Custom tab'
        		}
        	);
        	
        	const result = response.getData().result;
        	console.log(result);
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->core
                ->call(
                    'placement.bind',
                    [
                        'PLACEMENT' => 'CALENDAR_GRIDVIEW',
                        'HANDLER'   => 'http://your_site/handler.php',
                        'TITLE'     => 'Custom tab',
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error binding placement: ' . $e->getMessage();
        }
        
BX24.callMethod(
            'placement.bind',
            {
                PLACEMENT:'CALENDAR_GRIDVIEW',
                HANDLER: 'http://your_site/handler.php',
                TITLE: 'Custom tab'
            },
            (result) => {console.log(result)}
        );
        

Если в приложении вывести все параметры, которые передаются в запросе к приложению:

echo "<pre>";
        print_r($_REQUEST);
        echo "</pre>";
        

Можно увидеть, что передаются определенные параметры, например диапазон дат, который отображается в календаре:

[PLACEMENT_OPTIONS] => {
            "viewRangeFrom":"2018-09-30",
            "viewRangeTo":"2018-11-04"
        }
        

Эти параметры можно использовать для настройки отображения вашего приложения.

JS методы

Получить события

Метод getEvents получает события календаря.

try
        {
        	const dateFrom = new Date();
        	const dateTo = new Date(dateFrom.getTime() + 86400 * 30 * 1000); // Умножаем на 1000, чтобы преобразовать секунды в миллисекунды
        	dateFrom.setHours(0, 0, 0, 0);
        	dateTo.setHours(0, 0, 0, 0);
        
        	const response = await $b24.callMethod(
        		'placement.getEvents',
        		{
        			dateFrom: dateFrom,
        			dateTo: dateTo
        		}
        	);
        
        	const events = response.getData().result;
        	console.log('getEvents response:');
        	console.dir(events);
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $dateFrom = new DateTime();
            $dateTo = new DateTime($dateFrom->getTimestamp() + 86400 * 30 * 1000);
            $dateFrom->setTime(0, 0, 0, 0);
            $dateTo->setTime(0, 0, 0, 0);
        
            $response = $b24Service
                ->placement
                ->call(
                    'getEvents',
                    [
                        'dateFrom' => $dateFrom,
                        'dateTo' => $dateTo
                    ]
                );
        
            $events = $response
                ->getResponseData()
                ->getResult();
        
            echo 'getEvents response:';
            print_r($events);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error getting events: ' . $e->getMessage();
        }
        
var dateFrom = new Date();
        var dateTo = new Date(dateFrom.getTime() + 86400 * 30 * 1000); // Умножаем на 1000, чтобы преобразовать секунды в миллисекунды
        dateFrom.setHours(0, 0, 0, 0);
        dateTo.setHours(0, 0, 0, 0);
        
        BX24.placement.call(
            'getEvents',
            {
                dateFrom: dateFrom,
                dateTo: dateTo
            },
            function(events) {
                console.log('getEvents response:');
                console.dir(events);
            }
        );
        

Открыть карточку и просмотреть событие

Метод viewEvent открывает карточку для просмотра события.

try
        {
        	const response = await $b24.callMethod(
        		'placement.call',
        		{
        			id: "1431170", // идентификатор события
        			dateFrom: "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
        		}
        	);
        	
        	const result = response.getData().result;
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->placement
                ->call(
                    'viewEvent',
                    [
                        'id'      => "1431170", // идентификатор события
                        'dateFrom' => "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            // Не требуется никакой логики обработки данных
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error calling viewEvent placement: ' . $e->getMessage();
        }
        
BX24.placement.call(
            'viewEvent',
            {
                id: "1431170", // идентификатор события
                dateFrom: "11.07.2018" // дата события. Не обязательна, но важна для регулярных событий
            },
            function(){}
        );
        

Добавить новое событие

Метод addEvent открывает карточку для добавления нового события.

try
        {
        	const response = await $b24.callMethod(
        		'placement.addEvent',
        		{}
        	);
        	
        	const result = response.getData().result;
        	// Нужная вам логика обработки данных
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->placement
                ->call('addEvent', []);
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error calling addEvent: ' . $e->getMessage();
        }
        
BX24.placement.call(
            'addEvent',
            function(){}
        );
        

Обновить событие

Метод editEvent открывает карточку для редактирования события.

try
        {
        	const response = await $b24.callMethod(
        		'placement.call',
        		{
        			placement: 'editEvent',
        			params: {
        				uid: "1431171|19.07.2018"
        			}
        		}
        	);
        	
        	const result = response.getData().result;
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->placement
                ->call(
                    'editEvent',
                    [
                        'uid' => "1431171|19.07.2018"
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error calling editEvent placement: ' . $e->getMessage();
        }
        
BX24.placement.call(
            'editEvent',
            {
                uid: "1431171|19.07.2018"
            },
            function(){}
        );
        

Удалить событие

Метод deleteEvent удаляет событие.

try
        {
        	const response = await $b24.callMethod(
        		'placement.deleteEvent',
        		{
        			id: "1431169"
        		}
        	);
        	
        	const result = response.getData().result;
        }
        catch( error )
        {
        	console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->placement
                ->call(
                    'deleteEvent',
                    [
                        'id' => "1431169"
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error calling deleteEvent: ' . $e->getMessage();
        }
        
BX24.placement.call(
            'deleteEvent',
            {
                id: "1431169"
            },
            function(){}
        );
        

События

События, которые можно отслеживать в месте встройки:

Событие

Описание

Calendar.customView:refreshEntries

Обновление событий

Calendar.customView:decreaseViewRangeDate

Нажатие на стрелочку назад, то есть открытие календаря за предыдущие даты

Calendar.customView:increaseViewRangeDate

Нажатие на стрелочку вперед, то есть открытие календаря на следующие даты

Calendar.customView:adjustToDate

Переход к конкретной дате

Продолжите изучение