カレンダのエントリの検索
例 10–7 カレンダのエントリを検索する/属性値を読み取る
#include <csa/csa.h>
CSA_return_code stat;
CSA_session_handle cal;
CSA_attribute attrs[4];
CSA_attribute_value attr_val[4];
CSA_enum ops[4];
CSA_uint32 i;
CSA_uint32 num_entries;
CSA_entry_handle *entries;
CSA_uint32 num_attributes;
CSA_attribute *entry_attrs;
/* 次の判断基準ですべてのエントリを検索します。
* UTC 時間 1996 年 8 月のすべてのアポイント
* 開始日は、UTC 時間 1996 年 8 月 1 日 00:00:00 以降
* 開始日は、UTC 時間 1996 年 9 月 1 日 00:00:00 より前
* タイプは CSA_TYPE_EVENT
* サブタイプは CSA_SUBTYPE_APPOINTMENT
*/
i = 0;
/* 開始日は、UTC 時間 1996 年 8 月 1 日 00:00:00 以降 */
attrs[i].name = CSA_ENTRY_ATTR_START_DATE;
attrs[i].value = &attr_val[i];
attrs[i].attribute_extensions = NULL;
attr_val[i].type = CSA_VALUE_DATE_TIME;
attr_val[i].item.date_time_value = “19960801T000000Z”;
ops[i] = CSA_MATCH_GREATER_THAN_OR_EQUAL_TO;
i++;
/* 開始日は、UTC 時間 1996 年 9 月 1 日 00:00:00 より前 */
attrs[i].name = CSA_ENTRY_ATTR_START_DATE;
attrs[i].value = &attr_val[i];
attrs[i].attribute_extensions = NULL;
attr_val[i].type = CSA_VALUE_DATE_TIME;
attr_val[i].item.date_time_value = “19960901T000000Z”
ops[i] = CSA_MATCH_LESS_THAN;
i++;
/* タイプは CSA_TYPE_EVENT */
attrs[i].name = CSA_ENTRY_ATTR_TYPE;
attrs[i].value = &attr_val[i];
attrs[i].attribute_extensions = NULL;
attr_val[i].type = CSA_VALUE_UINT32;
attr_val[i].item.sint32_value = CSA_TYPE_EVENT;
ops[i] = CSA_MATCH_EQUAL_TO;
i++;
/* サブタイプは CSA_SUBTYPE_APPOINTMENT */
attrs[i].name = CSA_ENTRY_ATTR_SUBTYPE;
attrs[i].value = &attr_val[i];
attrs[i].attribute_extensions = NULL;
attr_val[i].type = CSA_VALUE_STRING;
attr_val[i].item.string_value = CSA_SUBTYPE_APPOINTMENT;
ops[i] = CSA_MATCH_EQUAL_TO;
i++;
/* 検索の実行 */
stat = csa_list_entries(csa, i, attrs, ops, &num_entries, &entries, NULL);
if (stat == CSA_SUCCESS) {
for (i = 0; i < num_entries; i++) {
/* エントリのすべての属性値を取得します。
* number_names に 0 を指定し、attribute_names に NULL を指定すると、
* すべての属性値が返されます。
*/
stat = csa_read_entry_attributes(cal, entries[i], 0, NULL,
&num_attributes, &entry_attrs,
NULL); if (stat == CSA_SUCCESS) {
/* 返された属性値を使用し、終了時にメモリを解放します
*/
csa_free(entry_attrs);
} else {
/* ハンドル・エラー */
}
}
} else {
/* ハンドル・エラー */
}
Example: Change the end time of the returned appointments to be
one hour later.
CSA_attribute_reference name = CSA_ENTRY_ATTR_END_DATE;
char buffer[80];
time_t endtime;
CSA_entry_handle new_entry;
for (i = 0; i < num_entries; i++) {
/* アポイントの終了時間を取得します */
stat = csa_read_entry_attributes(cal, entries[i], 0, &name,
&num_attributes, &entry_attrs, NULL);
if (stat == CSA_SUCCESS) {
/* 終了時間を 1 時間後に変更します */
from_iso8601_time(entry_attrs[0].value->item.date_time_value, &endtime);
endtime += 60*60 /* 1 時間の秒数 */
to_iso8601_time(endtime, buffer);
attrs[0].name = CSA_ENTRY_ATTR_END_DATE;
attrs[0].value = &attr_val[i];
attrs[0].attribute_extensions = NULL;
attr_val[0].type = CSA_VALUE_DATE_TIME;
attr_val[0].item.date_time_value = buffer;
stat = csa_update_entry_attributes(cal, entries[0], CSA_SCOPE_ALL,
CSA_FALSE, 1, attrs, &new_entry,
NULL);
if (stat == CSA_SUCCESS) {
csa_free(new_entry);
} else {
/* ハンドル・エラー */
}
csa_free(entry_attrs);
} else {
/* ハンドル・エラー */
}
}