TDR Blob 内嵌 Protobuf 部分字段读写示例（C++ Service API）

本例演示 TDR 表 RoleSummaryTable 的 col1.bin 里保存 ProfileBaseData 的 PB 编码时，
如何用 FieldSet / FieldGet / BatchFieldGet 只读写其中的部分字段。

目录内容：
  table_test.xml           TDR 表定义，col1.bin 是 Blob，col1.len 是它的 refer 长度
  profile_base_data.proto  Blob 里的 PB 定义，不是 Tcaplus PB 表
  main.cpp                 三个命令的完整示例
  tlogconf.xml             日志配置
  conv.sh                  用 tdr 工具把 table_test.xml 生成 h/cpp
  envcfg.env               环境变量示例，使用前 source

使用步骤：
  1. source envcfg.env
  2. ./conv.sh                       生成 table_test.h / table_test.cpp
  3. protoc --cpp_out=. profile_base_data.proto
  4. 按实际环境修改 main.cpp 顶部的 DIR_URL / APP_ID / ZONE_ID / SIGNATURE
  5. make                            生成 mytest
  6. 在 tcaplus 中创建 RoleSummaryTable（用 table_test.xml），然后 ./mytest

与手写 tag 路径相比，唯一的差别是：
  ret = TcaplusService::SetAllTdrPbFieldNames(request, field_groups);
它把 "level" / "ban_info_map[1001]" 这类 PB 字段名换算成
col1.bin.5 / col1.bin.22[1001]，然后只调用一次 request->SetFieldNames()。

不 include tcaplus_tdr_pb_fields.h 的 TDR 用户不会被强制依赖 protobuf。
