Форум » [x]Harbour » Облачные сервисы (WebDAV, CalDAV &Co) » Ответить

Облачные сервисы (WebDAV, CalDAV &Co)

Dr. Oldwarez: После некоторого разбирательства с прогой удалось организовать импорт из ICAL-файлов и экспорт в оные. Но тут шеф захотел, чтобы был прямой контакт с CalDav через интернет. Я знаю, что на питоне такое возможно. На дельфине и даже Xojo (RealBasic) тоже - через спецбиблиотеку. Но как реализовать подключение к облачному сервису в Harbour/Minigui? Возможно ли это вообще?

Ответов - 174, стр: 1 2 3 4 5 6 7 8 9 All

Dr. Oldwarez: Петр пишет: TimeStamp в harbour поддерживает ISO 8601 и совместим с большинством реализаций. Операции с TimeStamp быстрее строковых операций. Но вольному воля.. TimeStamp - это хорошо, но в формате DBF, созданном в мохнатом 1983 году нет поддержки таких полей. Тогда было только отдельное поле типа даты и строковое короткое поле для времени. Можно создать переменную типа DateTime, а в базу данных её как сохранить? Это тебе не Oracle (ещё одна "любимая" программа моего шефа), где можно пользовательские типы лепить.

Петр: SergKis пишет: строковые решения будут проще Возможно для кого-то и проще. Но и сложного там ничего нет [pre2] REQUEST HB_LANG_RU REQUEST HB_CODEPAGE_RU1251 REQUEST HB_CODEPAGE_RU866 REQUEST DBFCDX PROCEDURE Main() LOCAL tBottomDate, tTopDate USE events NEW INDEX ON hb_TSToStr(_FIELD->DUE) TO Due tTopDate := hb_DateTime(2021, 5, 1) tBottomDate := hb_DateTime(2021, 6, 15) SET SCOPETOP TO hb_TSToStr(tTopDate) SET SCOPEBOTTOM TO hb_TSToStr(tBottomDate) GO TOP DO WHILE .NOT. EOF() ? FIELD->UID, FIELD->DUE SKIP +1 ENDDO RETURN INIT PROCEDURE OnInit() LOCAL aStru LOCAL cFileDbf := hb_DirBase() + "events.dbf" LOCAL nI hb_cdpSelect( "RU1251" ) hb_langSelect("RU") hb_setTermCP( "RU866", "RU1251" ) rddSetDefault("DBFCDX") SET DATE FORMAT TO "DD.MM.YYYY" IF .NOT. DbExists(cFileDbf) aStru := {} AADD( aStru, {"UID", "C", 36, 0} ) AADD( aStru, {"DUE", "@", 8, 0} ) DbCreate(cFileDbf, aStru, "DBFCDX", .t., "EVENTS", , "RU1251" ) FOR nI := 1 TO 1000 dbAppend() FIELD->UID := "5981ddad-f421-47ea-bd2d-f442865b" + STRZERO(nI, 4) FIELD->DUE := hb_StrToTS(hb_strFormat("%04d-%02d-%02d", YEAR(DATE()), hb_RandomInt(1,12), hb_RandomInt(1,28))) NEXT nI dbCloseAll() ENDIF RETURN [/pre2]

SergKis: Петр пишет Но и сложного там ничего нет Что то не срослось ваш demo.prg чуть модифицированный под hmg сборку[pre2] /* * MINIGUI - Harbour Win32 GUI library Demo */ #define _HMG_OUTLOG #include "hmg.ch" REQUEST HB_LANG_RU REQUEST HB_CODEPAGE_RU1251 REQUEST HB_CODEPAGE_RU866 REQUEST DBFCDX PROCEDURE Main() LOCAL tBottomDate, tTopDate hb_cdpSelect( "RU1251" ) hb_langSelect("RU") hb_setTermCP( "RU866", "RU1251" ) Sets() USE events NEW INDEX ON hb_TSToStr(_FIELD->DUE) TO Due tTopDate := hb_DateTime(2021, 5, 1) tBottomDate := hb_DateTime(2021, 6, 15) SET SCOPETOP TO hb_TSToStr(tTopDate) SET SCOPEBOTTOM TO hb_TSToStr(tBottomDate) ? "Scope =",tTopDate, tBottomDate, OrdKeyCount() GO TOP DO WHILE .NOT. EOF() ? RecNo(), FIELD->UID, FIELD->DUE SKIP 1 ENDDO RETURN FUNC Sets() LOCAL aStru LOCAL cFileDbf := hb_DirBase() + "events.dbf" LOCAL nI rddSetDefault("DBFCDX") SET DATE FORMAT TO "DD.MM.YYYY" IF .NOT. DbExists(cFileDbf) aStru := {} AADD( aStru, {"UID", "C", 36, 0} ) AADD( aStru, {"DUE", "@", 8, 0} ) AADD( aStru, {"DTM", "=", 8, 0} ) DbCreate(cFileDbf, aStru, "DBFCDX", .t., "EVENTS", , "RU1251" ) FOR nI := 1 TO 100 dbAppend() FIELD->UID := "5981ddad-f421-47ea-bd2d-f442865b" + STRZERO(nI, 4) FIELD->DUE := hb_StrToTS(hb_strFormat("%04d-%02d-%02d", YEAR(DATE()), hb_RandomInt(1,12), hb_RandomInt(1,28))) NEXT nI GO TOP ? cFileDbf, "LastRec =", LastRec() DO WHILE !EOF() ? RecNo(), FIELD->UID, FIELD->DUE, FIELD->DTM SKIP ENDDO ? dbCloseAll() ENDIF RETURN Nil [/pre2] Результат работы в _MsgLog.txt [pre2] C:\MiniGuiBcc58\SAMPLES\_Test\_hb_datetime\events.dbf LastRec = 100 1 '' 00:00 2021-03-27 16:17:16.458 2 '' 00:00 2021-03-27 16:17:16.458 3 '' 00:00 2021-03-27 16:17:16.458 4 '' 00:00 2021-03-27 16:17:16.458 5 '' 00:00 2021-03-27 16:17:16.458 6 '' 00:00 2021-03-27 16:17:16.458 7 '' 00:00 2021-03-27 16:17:16.458 8 '' 00:00 2021-03-27 16:17:16.458 9 '' 00:00 2021-03-27 16:17:16.458 10 '' 00:00 2021-03-27 16:17:16.458 11 '' 00:00 2021-03-27 16:17:16.458 12 '' 00:00 2021-03-27 16:17:16.458 13 '' 00:00 2021-03-27 16:17:16.458 14 '' 00:00 2021-03-27 16:17:16.458 15 '' 00:00 2021-03-27 16:17:16.458 16 '' 00:00 2021-03-27 16:17:16.458 17 '' 00:00 2021-03-27 16:17:16.458 18 '' 00:00 2021-03-27 16:17:16.458 19 '' 00:00 2021-03-27 16:17:16.458 20 '' 00:00 2021-03-27 16:17:16.458 21 '' 00:00 2021-03-27 16:17:16.458 ... 90 '' 00:00 2021-03-27 16:17:16.458 91 '' 00:00 2021-03-27 16:17:16.458 92 '' 00:00 2021-03-27 16:17:16.458 93 '' 00:00 2021-03-27 16:17:16.458 94 '' 00:00 2021-03-27 16:17:16.458 95 '' 00:00 2021-03-27 16:17:16.458 96 '' 00:00 2021-03-27 16:17:16.458 97 '' 00:00 2021-03-27 16:17:16.458 98 '' 00:00 2021-03-27 16:17:16.458 99 '' 00:00 2021-03-27 16:17:16.458 100 '' 00:00 2021-03-27 16:17:16.459 Scope = 2021-05-01 2021-06-15 0 [/pre2]


SergKis: Dr. Oldwarez пишет Можно создать переменную типа DateTime, а в базу данных её как сохранить? Почитайте http://clipper.borda.ru/?1-4-20-00000851-000-0-0-1598558733

Петр: SergKis пишет: Что то не срослось ваш demo.prg Мне не удалось повторить в консольном приложении ваш удивительный результат. И не удалось откомпилировать "модифицированный под hmg сборку"

SergKis: Петр пишет И не удалось откомпилировать "модифицированный под hmg сборку" demo.hbp[pre2] # Keys compile #-prgflag=-w2 -es1 # Enable multi/single-thread Harbour VM -mt # Incremental-compilation mode -inc # folder where are all * .obj -workdir=OBJ # Name EXE-module -odemo # to list all * .prg demo.prg # project Resources #demo.rc # paths to the main and extension *.Lib -lminigui [/pre2] Compile.bat[pre2] ..\..\..\BATCH\hbmk2.bat demo.hbp [/pre2]

SergKis: PS C:\MiniGuiBcc58\BATCH\minigui.cfg[pre2] # Basic configuration for Compile.bat MG_CMP=harbour MG_BCC=c:\borland\bcc58 MG_ROOT=c:\miniguiBcc58 [/pre2]

Петр: Петр пишет: И не удалось откомпилировать "модифицированный под hmg сборку" call ..\..\..\batch\compile.bat demo /c %1 %2 %3 %4 %5 %6 %7 %8 %9 Забыл /c удалить. Удалось Прикольно.. Закомментировал //#include "hmg.ch" Добавил /c И результат ожидаемый. Я честно не знаю, что там в minigui сломалось. В топку?!

Петр: Замените FIELD по тексту на _FIELD Из топки или подождать?

SergKis: Петр пишет Я честно не знаю, что там в minigui сломалось. В топку?! К сожалению, в топке и уже давно консольные и wvt приложения Вот я и говорю, что со строковыми проще USE ... INDEX ON _FIELD->UID+_FILED->DATASTART TAG START INDEX ON _FIELD->UID+_FILED->DATAEND TAG END INDEX ON _FIELD->UIDNO TAG ID Запрос в GETBOX-ах cUID := ... dDT1 := ... dDT2 := ... SET SCOPE TO cUID+DtoS(dDT1), cUID+DtoS(dDt2) GO TOP

SergKis: Петр пишет Замените FIELD по тексту на _FIELD Хотел из совсем убрать, причем сразу, но не сделал ... и да, сработало, но осталось не заполнено время в DUE ...

SergKis: PS Показ в колонках решается через oCol:cPicture := "@R 9999-99-99 99:99:99"

Петр: Петр пишет: Замените FIELD по тексту на _FIELD Да, некрасиво получается FIELD->UID := "5981ddad-f421-47ea-bd2d-f442865b" + STRZERO(nI, 4) => _HMG_SYSDATA[404] := '->UID := "5981ddad-f421-47ea-bd2d-f442865b" + STRZERO(nI, 4)'

Петр: Что-то мы отвлеклись от темы. 6. Значит что у нас осталось: FOR vs. FOR EACH, никогда не используйте File() для проверки доступности файла - короче мелочи. 7. Давайте вернемся к hb_Run().. 8. Научиться работать с xml пошло бы на пользу общему делу. 9. Не скажу. 10. Переход на libcurl - нужен или нет.

Dr. Oldwarez: Петр пишет: Переход на libcurl - нужен или нет. Нужен, но потом. Сейчас вот вопрос какой: [pre2]curl -k --user USERNAME:PASSWORD -X PUT -H "Content-Type: text/calendar; charset=utf-8" -d "$a" "https://owncloud.jujens.eu/remote.php/caldav/calendars/jujens/omis/<mon-fichier.ics>"[/pre2] Обязательно надо, чтобы каждому событию создавали свой ics? Или можно все события в один ICS загнать?

Петр: Dr. Oldwarez пишет: Или можно все события в один ICS загнать Если все события принадлежат одному календарю - можно и даже нужно. P.S. Оказывается не все сервера поддерживают такую ситуацию.

SergKis: Dr. Oldwarez пишетИли можно все события в один ICS загнать? Вы можете все календари со всеми событиями загнать в одну базу и меть на поле календарь уникальный TAG, сделав SET ORDER на этот TAG, получите список календарей в тсб, выбрав, переключаете на др. TAG (<календарь>+<события>) и ставите scope на календарь, получите список событий календаря и т.д. Не ясно, что за календари с каким объемом данных на какой период отчетности, бесконечен во времени или сворачивается в архив. На эти вопросы себе ответьте в первую очередь

Dr. Oldwarez: SergKis пишет: Вы можете все календари со всеми событиями загнать в одну базу и меть на поле календарь уникальный TAG, сделав SET ORDER на этот TAG, получите список календарей в тсб, выбрав, переключаете на др. TAG (<календарь>+<события>) и ставите scope на календарь, получите список событий календаря и т.д. Не ясно, что за календари с каким объемом данных на какой период отчетности, бесконечен во времени или сворачивается в архив. На эти вопросы себе ответьте в первую очередь Очень простые календари вида BEGIN:VEVENT UID:20210401T073000Z-QWERTY-04357@abcdefg.com DTSTART:20210401T073000Z DTEND:20210401T161500Z SUMMARY:Visit to doctor DESCRIPTION:Vaccination against COVID-19, plague, cholera and Ebola LOCATION:Central hospital END:VEVENT

SergKis: Dr. Oldwarez пишет Очень простые календари вида Это событие календаря, 1 запись в базе (вроде, был еще параметр выполнение события дата-время, или ошибаюсь) календарей у вас 6 штук. Это личные календари событий или предприятия\организации. Объем календаря (в событиях-записях). И чего вы от них хотите ? Просто показ в табл. виде отчетов ? Цель ?

SergKis: PS Технические моменты вы прошли, попробовали, на вас вывалили инф. Как бы дальше сами, создайте dbf[ы] и пробуйте, щупайте.



полная версия страницы